ndb - bug#24028 in 5.0

proper fix exists only in version >= 5.1
parent 9ce7ad94
...@@ -76,6 +76,8 @@ commit; ...@@ -76,6 +76,8 @@ commit;
select a from t1 where d is null; select a from t1 where d is null;
a a
1 1
delete from t1 where a=45567;
commit;
delete from t1 where a=1; delete from t1 where a=1;
delete from t1 where a=2; delete from t1 where a=2;
commit; commit;
......
...@@ -96,6 +96,11 @@ update t1 set d=null where a=1; ...@@ -96,6 +96,11 @@ update t1 set d=null where a=1;
commit; commit;
select a from t1 where d is null; select a from t1 where d is null;
# bug#24028 - does not occur on MySQL level
# bug#17986 - not seen by us anymore but could show as warning here
delete from t1 where a=45567;
commit;
# pk delete # pk delete
delete from t1 where a=1; delete from t1 where a=1;
delete from t1 where a=2; delete from t1 where a=2;
......
...@@ -407,6 +407,12 @@ NdbBlob::getHeadInlineValue(NdbOperation* anOp) ...@@ -407,6 +407,12 @@ NdbBlob::getHeadInlineValue(NdbOperation* anOp)
setErrorCode(anOp); setErrorCode(anOp);
DBUG_RETURN(-1); 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); DBUG_RETURN(0);
} }
......
...@@ -123,24 +123,24 @@ printusage() ...@@ -123,24 +123,24 @@ printusage()
<< "metadata" << endl << "metadata" << endl
<< " -pk2len N length of PK2 [" << d.m_pk2len << "/" << g_max_pk2len <<"]" << endl << " -pk2len N length of PK2 [" << d.m_pk2len << "/" << g_max_pk2len <<"]" << endl
<< " -oneblob only 1 blob attribute [default 2]" << 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 << " k primary key ops" << endl
<< " i hash index ops" << endl << " i hash index ops" << endl
<< " s table scans" << endl << " s table scans" << endl
<< " r ordered index scans" << endl << " r ordered index scans" << endl
<< " p performance test" << endl << " p performance test" << endl
<< "additional flags for test/skip" << endl << "operations for test/skip" << endl
<< " u update existing blob value" << endl << " u update existing blob value" << endl
<< " n normal insert and update" << endl << " n normal insert and update" << endl
<< " w insert and update using writeTuple" << endl << " w insert and update using writeTuple" << endl
<< "blob operation styles for test/skip" << endl
<< " 0 getValue / setValue" << endl << " 0 getValue / setValue" << endl
<< " 1 setActiveHook" << endl << " 1 setActiveHook" << endl
<< " 2 readData / writeData" << 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 4088 ndb api hang with mixed ops on index table" << endl
<< " -bug 27018 middle partial part write clobbers rest of part" << 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() ...@@ -1028,6 +1028,32 @@ deletePk()
return 0; 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 // hash index ops
static int static int
...@@ -1383,6 +1409,7 @@ testmain() ...@@ -1383,6 +1409,7 @@ testmain()
CHK(readPk(style) == 0); CHK(readPk(style) == 0);
} }
CHK(deletePk() == 0); CHK(deletePk() == 0);
CHK(deleteNoPk() == 0);
CHK(verifyBlob() == 0); CHK(verifyBlob() == 0);
} }
if (testcase('w')) { if (testcase('w')) {
...@@ -1397,6 +1424,7 @@ testmain() ...@@ -1397,6 +1424,7 @@ testmain()
CHK(readPk(style) == 0); CHK(readPk(style) == 0);
} }
CHK(deletePk() == 0); CHK(deletePk() == 0);
CHK(deleteNoPk() == 0);
CHK(verifyBlob() == 0); CHK(verifyBlob() == 0);
} }
} }
...@@ -1857,18 +1885,6 @@ bugtest_27018() ...@@ -1857,18 +1885,6 @@ bugtest_27018()
return 0; return 0;
} }
static int
bugtest_2222()
{
return 0;
}
static int
bugtest_3333()
{
return 0;
}
static struct { static struct {
int m_bug; int m_bug;
int (*m_test)(); int (*m_test)();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment