diff options
author | unknown <pekka@clam.ndb.mysql.com/clam.(none)> | 2007-03-21 09:13:05 +0100 |
---|---|---|
committer | unknown <pekka@clam.ndb.mysql.com/clam.(none)> | 2007-03-21 09:13:05 +0100 |
commit | f275b8e9f5e231dbacc2a152923864471b4de1c0 (patch) | |
tree | 1a76711e72527d59ff12f13bccd6b484b4b7adbf /ndb | |
parent | 4384879603faa6fafaf1ca5ce952c666968c0f6e (diff) | |
download | mariadb-git-f275b8e9f5e231dbacc2a152923864471b4de1c0.tar.gz |
ndb - bug#24028 in 5.0
proper fix exists only in version >= 5.1
mysql-test/r/ndb_blob.result:
bug#24028 in 5.0 only
mysql-test/t/ndb_blob.test:
bug#24028 in 5.0 only
ndb/src/ndbapi/NdbBlob.cpp:
bug#24028 in 5.0 only
ndb/test/ndbapi/testBlobs.cpp:
bug#24028 in 5.0 only
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/ndbapi/NdbBlob.cpp | 6 | ||||
-rw-r--r-- | ndb/test/ndbapi/testBlobs.cpp | 50 |
2 files changed, 39 insertions, 17 deletions
diff --git a/ndb/src/ndbapi/NdbBlob.cpp b/ndb/src/ndbapi/NdbBlob.cpp index f0e6bf2e720..2d8a4cf6bf8 100644 --- a/ndb/src/ndbapi/NdbBlob.cpp +++ b/ndb/src/ndbapi/NdbBlob.cpp @@ -407,6 +407,12 @@ NdbBlob::getHeadInlineValue(NdbOperation* anOp) setErrorCode(anOp); DBUG_RETURN(-1); } + /* + * If we get no data from this op then the operation is aborted + * one way or other. Following hack in 5.0 makes sure we don't read + * garbage. The proper fix exists only in version >= 5.1. + */ + theHead->length = 0; DBUG_RETURN(0); } diff --git a/ndb/test/ndbapi/testBlobs.cpp b/ndb/test/ndbapi/testBlobs.cpp index bc703d64f21..88b679eeeec 100644 --- a/ndb/test/ndbapi/testBlobs.cpp +++ b/ndb/test/ndbapi/testBlobs.cpp @@ -123,24 +123,24 @@ printusage() << "metadata" << endl << " -pk2len N length of PK2 [" << d.m_pk2len << "/" << g_max_pk2len <<"]" << endl << " -oneblob only 1 blob attribute [default 2]" << endl - << "testcases for test/skip" << endl + << "test cases for test/skip" << endl << " k primary key ops" << endl << " i hash index ops" << endl << " s table scans" << endl << " r ordered index scans" << endl << " p performance test" << endl - << "additional flags for test/skip" << endl + << "operations for test/skip" << endl << " u update existing blob value" << endl << " n normal insert and update" << endl << " w insert and update using writeTuple" << endl + << "blob operation styles for test/skip" << endl << " 0 getValue / setValue" << endl << " 1 setActiveHook" << endl << " 2 readData / writeData" << endl - << "bug tests (no blob test)" << endl + << "example: -test kn0 (need all 3 parts)" << endl + << "bug tests" << endl << " -bug 4088 ndb api hang with mixed ops on index table" << endl << " -bug 27018 middle partial part write clobbers rest of part" << endl - << " -bug nnnn delete + write gives 626" << endl - << " -bug nnnn acc crash on delete and long key" << endl ; } @@ -1028,6 +1028,32 @@ deletePk() return 0; } +static int +deleteNoPk() +{ + DBG("--- deleteNoPk ---"); + Tup no_tup; // bug#24028 + no_tup.m_pk1 = 0xb1ffb1ff; + sprintf(no_tup.m_pk2, "%-*.*s", g_opt.m_pk2len, g_opt.m_pk2len, "b1ffb1ff"); + CHK((g_con = g_ndb->startTransaction()) != 0); + Tup& tup = no_tup; + DBG("deletePk pk1=" << hex << tup.m_pk1); + CHK((g_opr = g_con->getNdbOperation(g_opt.m_tname)) != 0); + CHK(g_opr->deleteTuple() == 0); + CHK(g_opr->equal("PK1", tup.m_pk1) == 0); + if (g_opt.m_pk2len != 0) + CHK(g_opr->equal("PK2", tup.m_pk2) == 0); + CHK(g_con->execute(Commit) == -1); // fail + // BUG: error should be on op but is on con now + DBG("con: " << g_con->getNdbError()); + DBG("opr: " << g_opr->getNdbError()); + CHK(g_con->getNdbError().code == 626 || g_opr->getNdbError().code == 626); + g_ndb->closeTransaction(g_con); + g_opr = 0; + g_con = 0; + return 0; +} + // hash index ops static int @@ -1383,6 +1409,7 @@ testmain() CHK(readPk(style) == 0); } CHK(deletePk() == 0); + CHK(deleteNoPk() == 0); CHK(verifyBlob() == 0); } if (testcase('w')) { @@ -1397,6 +1424,7 @@ testmain() CHK(readPk(style) == 0); } CHK(deletePk() == 0); + CHK(deleteNoPk() == 0); CHK(verifyBlob() == 0); } } @@ -1857,18 +1885,6 @@ bugtest_27018() return 0; } -static int -bugtest_2222() -{ - return 0; -} - -static int -bugtest_3333() -{ - return 0; -} - static struct { int m_bug; int (*m_test)(); |