mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 23:34:34 +01:00
ndb - TUP interpreter: use byte length in attr OP const
ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp: TUP interpreter: use byte length in attr OP const ndb/src/ndbapi/NdbOperationInt.cpp: TUP interpreter: use byte length in attr OP const
This commit is contained in:
parent
a4f190511d
commit
9ab62ea5ca
2 changed files with 32 additions and 29 deletions
|
@ -1837,12 +1837,8 @@ int Dbtup::interpreterNextLab(Signal* signal,
|
||||||
tmpHabitant = attrId;
|
tmpHabitant = attrId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get type
|
||||||
attrId >>= 16;
|
attrId >>= 16;
|
||||||
AttributeHeader ah(tmpArea[0]);
|
|
||||||
|
|
||||||
const char* s1 = (char*)&tmpArea[1];
|
|
||||||
const char* s2 = (char*)&TcurrentProgram[TprogramCounter+1];
|
|
||||||
Uint32 attrLen = (4 * ah.getDataSize());
|
|
||||||
Uint32 TattrDescrIndex = tabptr.p->tabDescriptor +
|
Uint32 TattrDescrIndex = tabptr.p->tabDescriptor +
|
||||||
(attrId << ZAD_LOG_SIZE);
|
(attrId << ZAD_LOG_SIZE);
|
||||||
Uint32 TattrDesc1 = tableDescriptor[TattrDescrIndex].tabDescr;
|
Uint32 TattrDesc1 = tableDescriptor[TattrDescrIndex].tabDescr;
|
||||||
|
@ -1855,27 +1851,32 @@ int Dbtup::interpreterNextLab(Signal* signal,
|
||||||
cs = tabptr.p->charsetArray[pos];
|
cs = tabptr.p->charsetArray[pos];
|
||||||
}
|
}
|
||||||
const NdbSqlUtil::Type& sqlType = NdbSqlUtil::getType(typeId);
|
const NdbSqlUtil::Type& sqlType = NdbSqlUtil::getType(typeId);
|
||||||
|
|
||||||
|
// get data
|
||||||
|
AttributeHeader ah(tmpArea[0]);
|
||||||
|
const char* s1 = (char*)&tmpArea[1];
|
||||||
|
const char* s2 = (char*)&TcurrentProgram[TprogramCounter+1];
|
||||||
|
// fixed length in 5.0
|
||||||
|
Uint32 attrLen = AttributeDescriptor::getSizeInBytes(TattrDesc1);
|
||||||
|
|
||||||
bool r1_null = ah.isNULL();
|
bool r1_null = ah.isNULL();
|
||||||
bool r2_null = argLen == 0;
|
bool r2_null = argLen == 0;
|
||||||
int res;
|
int res;
|
||||||
if(r1_null || r2_null)
|
if (cond != Interpreter::LIKE &&
|
||||||
{
|
cond != Interpreter::NOT_LIKE) {
|
||||||
res = r1_null && r2_null ? 0 : r1_null ? -1 : 1;
|
if (r1_null || r2_null) {
|
||||||
}
|
// NULL==NULL and NULL<not-NULL
|
||||||
else if (cond != Interpreter::LIKE &&
|
res = r1_null && r2_null ? 0 : r1_null ? -1 : 1;
|
||||||
cond != Interpreter::NOT_LIKE)
|
} else {
|
||||||
{
|
res = (*sqlType.m_cmp)(cs, s1, attrLen, s2, argLen, true);
|
||||||
/* --------------------------------------------------------- */
|
}
|
||||||
// If length of argument rounded to nearest word is
|
} else {
|
||||||
// the same as attribute size, use that as argument size
|
if (r1_null || r2_null) {
|
||||||
/* --------------------------------------------------------- */
|
// NULL like NULL is true (has no practical use)
|
||||||
if ((((argLen + 3) >> 2) << 2) == attrLen) argLen= attrLen;
|
res = r1_null && r2_null ? 0 : -1;
|
||||||
res = (*sqlType.m_cmp)(cs, s1, attrLen, s2, argLen, true);
|
} else {
|
||||||
}
|
res = (*sqlType.m_like)(cs, s1, attrLen, s2, argLen);
|
||||||
else
|
}
|
||||||
{
|
|
||||||
res = (*sqlType.m_like)(cs, s1, attrLen, s2, argLen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ((Interpreter::BinaryCondition)cond) {
|
switch ((Interpreter::BinaryCondition)cond) {
|
||||||
|
|
|
@ -1027,13 +1027,15 @@ NdbOperation::branch_col(Uint32 type,
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint32 sizeInBytes = col->m_attrSize * col->m_arraySize;
|
Uint32 sizeInBytes = col->m_attrSize * col->m_arraySize;
|
||||||
if(len != 0 && len != sizeInBytes)
|
if (! col->getCharType()) {
|
||||||
{
|
// prevent assert in NdbSqlUtil on length error
|
||||||
setErrorCodeAbort(4209);
|
if(len != 0 && len != sizeInBytes)
|
||||||
return -1;
|
{
|
||||||
|
setErrorCodeAbort(4209);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
len = sizeInBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = sizeInBytes;
|
|
||||||
|
|
||||||
if (insertATTRINFO(Interpreter::BranchCol(c, 0, 0, false)) == -1)
|
if (insertATTRINFO(Interpreter::BranchCol(c, 0, 0, false)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue