mirror of
https://github.com/MariaDB/server.git
synced 2025-07-08 17:02:21 +03:00
Merge perch.ndb.mysql.com:/home/jonas/src/mysql-5.0
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.0-push mysql-test/r/ndb_basic.result: Auto merged mysql-test/t/ndb_basic.test: Auto merged ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged sql/ha_ndbcluster.cc: Auto merged ndb/src/kernel/vm/SimulatedBlock.cpp: merge
This commit is contained in:
@ -677,3 +677,19 @@ select * from atablewithareallylongandirritatingname;
|
|||||||
a
|
a
|
||||||
2
|
2
|
||||||
drop table atablewithareallylongandirritatingname;
|
drop table atablewithareallylongandirritatingname;
|
||||||
|
create table t1 (f1 varchar(50), f2 text,f3 int, primary key(f1)) engine=NDB;
|
||||||
|
insert into t1 (f1,f2,f3)VALUES("111111","aaaaaa",1);
|
||||||
|
insert into t1 (f1,f2,f3)VALUES("222222","bbbbbb",2);
|
||||||
|
select * from t1 order by f1;
|
||||||
|
f1 f2 f3
|
||||||
|
111111 aaaaaa 1
|
||||||
|
222222 bbbbbb 2
|
||||||
|
select * from t1 order by f2;
|
||||||
|
f1 f2 f3
|
||||||
|
111111 aaaaaa 1
|
||||||
|
222222 bbbbbb 2
|
||||||
|
select * from t1 order by f3;
|
||||||
|
f1 f2 f3
|
||||||
|
111111 aaaaaa 1
|
||||||
|
222222 bbbbbb 2
|
||||||
|
drop table t1;
|
||||||
|
@ -623,3 +623,14 @@ create table atablewithareallylongandirritatingname (a int);
|
|||||||
insert into atablewithareallylongandirritatingname values (2);
|
insert into atablewithareallylongandirritatingname values (2);
|
||||||
select * from atablewithareallylongandirritatingname;
|
select * from atablewithareallylongandirritatingname;
|
||||||
drop table atablewithareallylongandirritatingname;
|
drop table atablewithareallylongandirritatingname;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#15682
|
||||||
|
#
|
||||||
|
create table t1 (f1 varchar(50), f2 text,f3 int, primary key(f1)) engine=NDB;
|
||||||
|
insert into t1 (f1,f2,f3)VALUES("111111","aaaaaa",1);
|
||||||
|
insert into t1 (f1,f2,f3)VALUES("222222","bbbbbb",2);
|
||||||
|
select * from t1 order by f1;
|
||||||
|
select * from t1 order by f2;
|
||||||
|
select * from t1 order by f3;
|
||||||
|
drop table t1;
|
||||||
|
@ -141,6 +141,8 @@
|
|||||||
#define ZALREADYEXIST 630
|
#define ZALREADYEXIST 630
|
||||||
#define ZINCONSISTENTHASHINDEX 892
|
#define ZINCONSISTENTHASHINDEX 892
|
||||||
#define ZNOTUNIQUE 893
|
#define ZNOTUNIQUE 893
|
||||||
|
|
||||||
|
#define ZINVALID_KEY 290
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Dbtc: public SimulatedBlock {
|
class Dbtc: public SimulatedBlock {
|
||||||
|
@ -2313,7 +2313,10 @@ Dbtc::handle_special_hash(Uint32 dstHash[4], Uint32* src, Uint32 srcLen,
|
|||||||
{
|
{
|
||||||
keyPartLenPtr = keyPartLen;
|
keyPartLenPtr = keyPartLen;
|
||||||
dstPos = xfrm_key(tabPtrI, src, dst, sizeof(Tmp) >> 2, keyPartLenPtr);
|
dstPos = xfrm_key(tabPtrI, src, dst, sizeof(Tmp) >> 2, keyPartLenPtr);
|
||||||
ndbrequire(dstPos);
|
if (unlikely(dstPos == 0))
|
||||||
|
{
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2334,6 +2337,10 @@ Dbtc::handle_special_hash(Uint32 dstHash[4], Uint32* src, Uint32 srcLen,
|
|||||||
dstHash[1] = tmp[1];
|
dstHash[1] = tmp[1];
|
||||||
}
|
}
|
||||||
return true; // success
|
return true; // success
|
||||||
|
|
||||||
|
error:
|
||||||
|
terrorCode = ZINVALID_KEY;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2941,8 +2948,16 @@ void Dbtc::tckeyreq050Lab(Signal* signal)
|
|||||||
UintR tnoOfStandby;
|
UintR tnoOfStandby;
|
||||||
UintR tnodeinfo;
|
UintR tnodeinfo;
|
||||||
|
|
||||||
|
terrorCode = 0;
|
||||||
|
|
||||||
hash(signal); /* NOW IT IS TIME TO CALCULATE THE HASH VALUE*/
|
hash(signal); /* NOW IT IS TIME TO CALCULATE THE HASH VALUE*/
|
||||||
|
|
||||||
|
if (unlikely(terrorCode))
|
||||||
|
{
|
||||||
|
releaseAtErrorLab(signal);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CacheRecord * const regCachePtr = cachePtr.p;
|
CacheRecord * const regCachePtr = cachePtr.p;
|
||||||
TcConnectRecord * const regTcPtr = tcConnectptr.p;
|
TcConnectRecord * const regTcPtr = tcConnectptr.p;
|
||||||
ApiConnectRecord * const regApiPtr = apiConnectptr.p;
|
ApiConnectRecord * const regApiPtr = apiConnectptr.p;
|
||||||
|
@ -1872,6 +1872,8 @@ SimulatedBlock::xfrm_key(Uint32 tab, const Uint32* src,
|
|||||||
xfrm_attr(keyAttr.attributeDescriptor, keyAttr.charsetInfo,
|
xfrm_attr(keyAttr.attributeDescriptor, keyAttr.charsetInfo,
|
||||||
src, srcPos, dst, dstPos, dstSize);
|
src, srcPos, dst, dstPos, dstSize);
|
||||||
keyPartLen[i++] = dstWords;
|
keyPartLen[i++] = dstWords;
|
||||||
|
if (unlikely(dstWords == 0))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dstPos;
|
return dstPos;
|
||||||
@ -1900,7 +1902,8 @@ SimulatedBlock::xfrm_attr(Uint32 attrDesc, CHARSET_INFO* cs,
|
|||||||
Uint32 typeId = AttributeDescriptor::getType(attrDesc);
|
Uint32 typeId = AttributeDescriptor::getType(attrDesc);
|
||||||
Uint32 lb, len;
|
Uint32 lb, len;
|
||||||
bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, srcBytes, lb, len);
|
bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, srcBytes, lb, len);
|
||||||
ndbrequire(ok);
|
if (unlikely(!ok))
|
||||||
|
return 0;
|
||||||
Uint32 xmul = cs->strxfrm_multiply;
|
Uint32 xmul = cs->strxfrm_multiply;
|
||||||
if (xmul == 0)
|
if (xmul == 0)
|
||||||
xmul = 1;
|
xmul = 1;
|
||||||
@ -1911,7 +1914,8 @@ SimulatedBlock::xfrm_attr(Uint32 attrDesc, CHARSET_INFO* cs,
|
|||||||
Uint32 dstLen = xmul * (srcBytes - lb);
|
Uint32 dstLen = xmul * (srcBytes - lb);
|
||||||
ndbrequire(dstLen <= ((dstSize - dstPos) << 2));
|
ndbrequire(dstLen <= ((dstSize - dstPos) << 2));
|
||||||
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
|
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
|
||||||
ndbrequire(n != -1);
|
if (unlikely(n == -1))
|
||||||
|
return 0;
|
||||||
while ((n & 3) != 0)
|
while ((n & 3) != 0)
|
||||||
{
|
{
|
||||||
dstPtr[n++] = 0;
|
dstPtr[n++] = 0;
|
||||||
|
@ -227,6 +227,7 @@ ErrorBundle ErrorCodes[] = {
|
|||||||
{ 277, IE, "277" },
|
{ 277, IE, "277" },
|
||||||
{ 278, IE, "278" },
|
{ 278, IE, "278" },
|
||||||
{ 287, IE, "Index corrupted" },
|
{ 287, IE, "Index corrupted" },
|
||||||
|
{ 290, IE, "Corrupt key in TC, unable to xfrm" },
|
||||||
{ 631, IE, "631" },
|
{ 631, IE, "631" },
|
||||||
{ 632, IE, "632" },
|
{ 632, IE, "632" },
|
||||||
{ 702, IE, "Request to non-master" },
|
{ 702, IE, "Request to non-master" },
|
||||||
@ -295,7 +296,6 @@ ErrorBundle ErrorCodes[] = {
|
|||||||
{ 4608, AE, "You can not takeOverScan unless you have used openScanExclusive"},
|
{ 4608, AE, "You can not takeOverScan unless you have used openScanExclusive"},
|
||||||
{ 4609, AE, "You must call nextScanResult before trying to takeOverScan"},
|
{ 4609, AE, "You must call nextScanResult before trying to takeOverScan"},
|
||||||
{ 4232, AE, "Parallelism can only be between 1 and 240" },
|
{ 4232, AE, "Parallelism can only be between 1 and 240" },
|
||||||
{ 290, AE, "Scan not started or has been closed by kernel due to timeout" },
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event schema errors
|
* Event schema errors
|
||||||
|
@ -2812,8 +2812,26 @@ void ha_ndbcluster::position(const byte *record)
|
|||||||
}
|
}
|
||||||
*buff++= 0;
|
*buff++= 0;
|
||||||
}
|
}
|
||||||
memcpy(buff, record + key_part->offset, key_part->length);
|
|
||||||
buff += key_part->length;
|
size_t len = key_part->length;
|
||||||
|
const byte * ptr = record + key_part->offset;
|
||||||
|
Field *field = key_part->field;
|
||||||
|
if ((field->type() == MYSQL_TYPE_VARCHAR) &&
|
||||||
|
((Field_varstring*)field)->length_bytes == 1)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Keys always use 2 bytes length
|
||||||
|
*/
|
||||||
|
buff[0] = ptr[0];
|
||||||
|
buff[1] = 0;
|
||||||
|
memcpy(buff+2, ptr + 1, len);
|
||||||
|
len += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(buff, ptr, len);
|
||||||
|
}
|
||||||
|
buff += len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user