mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge perch.ndb.mysql.com:/home/jonas/src/51-telco-gca
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
This commit is contained in:
@@ -1201,9 +1201,19 @@ int Dbtup::handleInsertReq(Signal* signal,
|
|||||||
if(!prevOp->is_first_operation())
|
if(!prevOp->is_first_operation())
|
||||||
org= (Tuple_header*)c_undo_buffer.get_ptr(&prevOp->m_copy_tuple_location);
|
org= (Tuple_header*)c_undo_buffer.get_ptr(&prevOp->m_copy_tuple_location);
|
||||||
if (regTabPtr->need_expand())
|
if (regTabPtr->need_expand())
|
||||||
|
{
|
||||||
expand_tuple(req_struct, sizes, org, regTabPtr, !disk_insert);
|
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
|
else
|
||||||
|
{
|
||||||
memcpy(dst, org, 4*regTabPtr->m_offsets[MM].m_fix_header_size);
|
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)
|
if (disk_insert)
|
||||||
|
@@ -1458,6 +1458,91 @@ runBug28073(NDBT_Context *ctx, NDBT_Step* step)
|
|||||||
|
|
||||||
template class Vector<Uint64>;
|
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);
|
NDBT_TESTSUITE(testBasic);
|
||||||
TESTCASE("PkInsert",
|
TESTCASE("PkInsert",
|
||||||
"Verify that we can insert and delete from this table using PK"
|
"Verify that we can insert and delete from this table using PK"
|
||||||
@@ -1742,6 +1827,10 @@ TESTCASE("Bug28073",
|
|||||||
"Infinite loop in lock queue" ){
|
"Infinite loop in lock queue" ){
|
||||||
STEP(runBug28073);
|
STEP(runBug28073);
|
||||||
}
|
}
|
||||||
|
TESTCASE("Bug20535",
|
||||||
|
"Verify what happens when we fill the db" ){
|
||||||
|
STEP(runBug20535);
|
||||||
|
}
|
||||||
NDBT_TESTSUITE_END(testBasic);
|
NDBT_TESTSUITE_END(testBasic);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@@ -247,6 +247,10 @@ max-time: 500
|
|||||||
cmd: testBasic
|
cmd: testBasic
|
||||||
args: -n Bug28073
|
args: -n Bug28073
|
||||||
|
|
||||||
|
max-time: 500
|
||||||
|
cmd: testBasic
|
||||||
|
args: -n Bug20535
|
||||||
|
|
||||||
max-time: 500
|
max-time: 500
|
||||||
cmd: testIndex
|
cmd: testIndex
|
||||||
args: -n Bug25059 -r 3000 T1
|
args: -n Bug25059 -r 3000 T1
|
||||||
|
Reference in New Issue
Block a user