mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
ndb - bug#20535
set null bits on delete+insert storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp: set null bits on delete+insert storage/ndb/test/ndbapi/testBasic.cpp: set null bits on delete+insert 20535 storage/ndb/test/run-test/daily-basic-tests.txt: testcase
This commit is contained in:
parent
a6b14a6267
commit
efa9faf2b7
3 changed files with 103 additions and 0 deletions
|
@ -1198,9 +1198,19 @@ int Dbtup::handleInsertReq(Signal* signal,
|
|||
if(!prevOp->is_first_operation())
|
||||
org= (Tuple_header*)c_undo_buffer.get_ptr(&prevOp->m_copy_tuple_location);
|
||||
if (regTabPtr->need_expand())
|
||||
{
|
||||
expand_tuple(req_struct, sizes, org, regTabPtr, !disk_insert);
|
||||
memset(req_struct->m_disk_ptr->m_null_bits+
|
||||
regTabPtr->m_offsets[DD].m_null_offset, 0xFF,
|
||||
4*regTabPtr->m_offsets[DD].m_null_words);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(dst, org, 4*regTabPtr->m_offsets[MM].m_fix_header_size);
|
||||
}
|
||||
memset(tuple_ptr->m_null_bits+
|
||||
regTabPtr->m_offsets[MM].m_null_offset, 0xFF,
|
||||
4*regTabPtr->m_offsets[MM].m_null_words);
|
||||
}
|
||||
|
||||
if (disk_insert)
|
||||
|
|
|
@ -1398,6 +1398,91 @@ runBug27756(NDBT_Context* ctx, NDBT_Step* step)
|
|||
|
||||
template class Vector<Uint64>;
|
||||
|
||||
int
|
||||
runBug20535(NDBT_Context* ctx, NDBT_Step* step)
|
||||
{
|
||||
Uint32 i;
|
||||
Ndb* pNdb = GETNDB(step);
|
||||
const NdbDictionary::Table * tab = ctx->getTab();
|
||||
NdbDictionary::Dictionary * dict = pNdb->getDictionary();
|
||||
|
||||
bool null = false;
|
||||
for (i = 0; i<tab->getNoOfColumns(); i++)
|
||||
{
|
||||
if (tab->getColumn(i)->getNullable())
|
||||
{
|
||||
null = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!null)
|
||||
return NDBT_OK;
|
||||
|
||||
HugoTransactions hugoTrans(* tab);
|
||||
hugoTrans.loadTable(pNdb, 1);
|
||||
|
||||
NdbTransaction* pTrans = pNdb->startTransaction();
|
||||
NdbOperation* pOp = pTrans->getNdbOperation(tab->getName());
|
||||
pOp->deleteTuple();
|
||||
hugoTrans.equalForRow(pOp, 0);
|
||||
if (pTrans->execute(NoCommit) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
pOp = pTrans->getNdbOperation(tab->getName());
|
||||
pOp->insertTuple();
|
||||
hugoTrans.equalForRow(pOp, 0);
|
||||
for (i = 0; i<tab->getNoOfColumns(); i++)
|
||||
{
|
||||
if (!tab->getColumn(i)->getPrimaryKey() &&
|
||||
!tab->getColumn(i)->getNullable())
|
||||
{
|
||||
hugoTrans.setValueForAttr(pOp, i, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (pTrans->execute(Commit) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
pTrans->close();
|
||||
|
||||
pTrans = pNdb->startTransaction();
|
||||
pOp = pTrans->getNdbOperation(tab->getName());
|
||||
pOp->readTuple();
|
||||
hugoTrans.equalForRow(pOp, 0);
|
||||
Vector<NdbRecAttr*> values;
|
||||
for (i = 0; i<tab->getNoOfColumns(); i++)
|
||||
{
|
||||
if (!tab->getColumn(i)->getPrimaryKey() &&
|
||||
tab->getColumn(i)->getNullable())
|
||||
{
|
||||
values.push_back(pOp->getValue(i));
|
||||
}
|
||||
}
|
||||
|
||||
if (pTrans->execute(Commit) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
null = true;
|
||||
for (i = 0; i<values.size(); i++)
|
||||
{
|
||||
if (!values[i]->isNULL())
|
||||
{
|
||||
null = false;
|
||||
ndbout_c("column %s is not NULL", values[i]->getColumn()->getName());
|
||||
}
|
||||
}
|
||||
|
||||
pTrans->close();
|
||||
|
||||
if (null)
|
||||
return NDBT_OK;
|
||||
else
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
template class Vector<NdbRecAttr*>;
|
||||
|
||||
NDBT_TESTSUITE(testBasic);
|
||||
TESTCASE("PkInsert",
|
||||
"Verify that we can insert and delete from this table using PK"
|
||||
|
@ -1676,6 +1761,10 @@ TESTCASE("Bug27756",
|
|||
"Verify what happens when we fill the db" ){
|
||||
STEP(runBug27756);
|
||||
}
|
||||
TESTCASE("Bug20535",
|
||||
"Verify what happens when we fill the db" ){
|
||||
STEP(runBug20535);
|
||||
}
|
||||
NDBT_TESTSUITE_END(testBasic);
|
||||
|
||||
#if 0
|
||||
|
|
|
@ -243,6 +243,10 @@ max-time: 500
|
|||
cmd: testBasic
|
||||
args: -n Bug28073
|
||||
|
||||
max-time: 500
|
||||
cmd: testBasic
|
||||
args: -n Bug20535
|
||||
|
||||
max-time: 500
|
||||
cmd: testIndex
|
||||
args: -n Bug25059 -r 3000 T1
|
||||
|
|
Loading…
Reference in a new issue