Commit 2200e35c authored by unknown's avatar unknown

Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb

into mysql.com:/space/pekka/ndb/version/my50-ndb

parents c7afc80b 9ab62ea5
...@@ -1837,12 +1837,8 @@ int Dbtup::interpreterNextLab(Signal* signal, ...@@ -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;
...@@ -1856,27 +1852,32 @@ int Dbtup::interpreterNextLab(Signal* signal, ...@@ -1856,27 +1852,32 @@ int Dbtup::interpreterNextLab(Signal* signal,
} }
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) {
if (r1_null || r2_null) {
// NULL==NULL and NULL<not-NULL
res = r1_null && r2_null ? 0 : r1_null ? -1 : 1; res = r1_null && r2_null ? 0 : r1_null ? -1 : 1;
} } else {
else if (cond != Interpreter::LIKE &&
cond != Interpreter::NOT_LIKE)
{
/* --------------------------------------------------------- */
// If length of argument rounded to nearest word is
// the same as attribute size, use that as argument size
/* --------------------------------------------------------- */
if ((((argLen + 3) >> 2) << 2) == attrLen) argLen= attrLen;
res = (*sqlType.m_cmp)(cs, s1, attrLen, s2, argLen, true); res = (*sqlType.m_cmp)(cs, s1, attrLen, s2, argLen, true);
} }
else } else {
{ if (r1_null || r2_null) {
// NULL like NULL is true (has no practical use)
res = r1_null && r2_null ? 0 : -1;
} else {
res = (*sqlType.m_like)(cs, s1, attrLen, s2, argLen); res = (*sqlType.m_like)(cs, s1, attrLen, s2, argLen);
} }
}
switch ((Interpreter::BinaryCondition)cond) { switch ((Interpreter::BinaryCondition)cond) {
case Interpreter::EQ: case Interpreter::EQ:
......
...@@ -1027,13 +1027,15 @@ NdbOperation::branch_col(Uint32 type, ...@@ -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 (! col->getCharType()) {
// prevent assert in NdbSqlUtil on length error
if(len != 0 && len != sizeInBytes) if(len != 0 && len != sizeInBytes)
{ {
setErrorCodeAbort(4209); setErrorCodeAbort(4209);
return -1; 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;
......
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