summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <pekka@clam.ndb.mysql.com/clam.(none)>2007-03-21 09:13:05 +0100
committerunknown <pekka@clam.ndb.mysql.com/clam.(none)>2007-03-21 09:13:05 +0100
commitf275b8e9f5e231dbacc2a152923864471b4de1c0 (patch)
tree1a76711e72527d59ff12f13bccd6b484b4b7adbf /ndb
parent4384879603faa6fafaf1ca5ce952c666968c0f6e (diff)
downloadmariadb-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.cpp6
-rw-r--r--ndb/test/ndbapi/testBlobs.cpp50
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)();