Commit 362a45fd authored by pekka@mysql.com's avatar pekka@mysql.com

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

into mysql.com:/export/space/pekka/ndb/version/my41
parents b5eddef1 14da13ea
...@@ -80,6 +80,7 @@ hf@deer.mysql.r18.ru ...@@ -80,6 +80,7 @@ hf@deer.mysql.r18.ru
hf@genie.(none) hf@genie.(none)
holyfoot@mysql.com holyfoot@mysql.com
igor@hundin.mysql.fi igor@hundin.mysql.fi
igor@igor-inspiron.creware.com
igor@linux.local igor@linux.local
igor@rurik.mysql.com igor@rurik.mysql.com
ingo@mysql.com ingo@mysql.com
...@@ -176,6 +177,7 @@ mysqldev@melody.local ...@@ -176,6 +177,7 @@ mysqldev@melody.local
mysqldev@mysql.com mysqldev@mysql.com
mysqldev@o2k.irixworld.net mysqldev@o2k.irixworld.net
ndbdev@dl145b.mysql.com ndbdev@dl145b.mysql.com
ndbdev@dl145c.mysql.com
ndbdev@eel.hemma.oreland.se ndbdev@eel.hemma.oreland.se
ndbdev@ndbmaster.mysql.com ndbdev@ndbmaster.mysql.com
nick@mysql.com nick@mysql.com
......
...@@ -905,3 +905,37 @@ select * from t1 where city = 'Durban '; ...@@ -905,3 +905,37 @@ select * from t1 where city = 'Durban ';
id city id city
2 Durban 2 Durban
drop table t1; drop table t1;
SET NAMES UTF8;
CREATE TABLE t1 (
`id` int(20) NOT NULL auto_increment,
`country` varchar(100) NOT NULL default '',
`shortcode` varchar(100) NOT NULL default '',
`operator` varchar(100) NOT NULL default '',
`momid` varchar(30) NOT NULL default '',
`keyword` varchar(160) NOT NULL default '',
`content` varchar(160) NOT NULL default '',
`second_token` varchar(160) default NULL,
`gateway_id` int(11) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`msisdn` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `MSCCSPK_20030521130957121` (`momid`),
KEY `IX_mobile_originated_message_keyword` (`keyword`),
KEY `IX_mobile_originated_message_created` (`created`),
KEY `IX_mobile_originated_message_support` (`msisdn`,`momid`,`keyword`,`gateway_id`,`created`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO t1 VALUES
(1,'blah','464','aaa','fkc1c9ilc20x0hgae7lx6j09','ERR','ERR Имри.Афимим.Аеимимримдмримрмрирор имримримримр имридм ирбднримрфмририримрфмфмим.Ад.Д имдимримрад.Адимримримрмдиримримримр м.Дадимфшьмримд им.Адимимрн имадми','ИМРИ.АФИМИМ.АЕИМИМРИМДМРИМРМРИРОР',3,'2005-06-01 17:30:43','1234567890'),
(2,'blah','464','aaa','haxpl2ilc20x00bj4tt2m5ti','11','11 g','G',3,'2005-06-02 22:43:10','1234567890');
CREATE TABLE t2 (
`msisdn` varchar(15) NOT NULL default '',
`operator_id` int(11) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
UNIQUE KEY `PK_user` (`msisdn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t2 VALUES ('1234567890',2,'2005-05-24 13:53:25');
SELECT content, t2.msisdn FROM t1, t2 WHERE t1.msisdn = '1234567890';
content msisdn
ERR Имри.Афимим.Аеимимримдмримрмрирор имримримримр имридм ирбднримрфмририримрфмфмим.Ад.Д имдимримрад.Адимримримрмдиримримримр м.Дадимфшьмримд им.Адимимрн имадми 1234567890
11 g 1234567890
DROP TABLE t1,t2;
...@@ -86,3 +86,16 @@ drop table t1; ...@@ -86,3 +86,16 @@ drop table t1;
SELECT NULLIF(5,5) IS NULL, NULLIF(5,5) IS NOT NULL; SELECT NULLIF(5,5) IS NULL, NULLIF(5,5) IS NOT NULL;
NULLIF(5,5) IS NULL NULLIF(5,5) IS NOT NULL NULLIF(5,5) IS NULL NULLIF(5,5) IS NOT NULL
1 0 1 0
CREATE TABLE t1 (a CHAR(10));
INSERT INTO t1 VALUES ('aaa'), (NULL), (''), ('bbb');
SELECT a, NULLIF(a,'') FROM t1;
a NULLIF(a,'')
aaa aaa
NULL NULL
NULL
bbb bbb
SELECT a, NULLIF(a,'') FROM t1 WHERE NULLIF(a,'') IS NULL;
a NULLIF(a,'')
NULL NULL
NULL
DROP TABLE t1;
...@@ -746,3 +746,45 @@ insert into t1 values (2,'Durban'); ...@@ -746,3 +746,45 @@ insert into t1 values (2,'Durban');
select * from t1 where city = 'Durban'; select * from t1 where city = 'Durban';
select * from t1 where city = 'Durban '; select * from t1 where city = 'Durban ';
drop table t1; drop table t1;
#
# Test for bug #11167: join for utf8 varchar value longer than 255 bytes
#
SET NAMES UTF8;
CREATE TABLE t1 (
`id` int(20) NOT NULL auto_increment,
`country` varchar(100) NOT NULL default '',
`shortcode` varchar(100) NOT NULL default '',
`operator` varchar(100) NOT NULL default '',
`momid` varchar(30) NOT NULL default '',
`keyword` varchar(160) NOT NULL default '',
`content` varchar(160) NOT NULL default '',
`second_token` varchar(160) default NULL,
`gateway_id` int(11) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`msisdn` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `MSCCSPK_20030521130957121` (`momid`),
KEY `IX_mobile_originated_message_keyword` (`keyword`),
KEY `IX_mobile_originated_message_created` (`created`),
KEY `IX_mobile_originated_message_support` (`msisdn`,`momid`,`keyword`,`gateway_id`,`created`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO t1 VALUES
(1,'blah','464','aaa','fkc1c9ilc20x0hgae7lx6j09','ERR','ERR Имри.Афимим.Аеимимримдмримрмрирор имримримримр имридм ирбднримрфмририримрфмфмим.Ад.Д имдимримрад.Адимримримрмдиримримримр м.Дадимфшьмримд им.Адимимрн имадми','ИМРИ.АФИМИМ.АЕИМИМРИМДМРИМРМРИРОР',3,'2005-06-01 17:30:43','1234567890'),
(2,'blah','464','aaa','haxpl2ilc20x00bj4tt2m5ti','11','11 g','G',3,'2005-06-02 22:43:10','1234567890');
CREATE TABLE t2 (
`msisdn` varchar(15) NOT NULL default '',
`operator_id` int(11) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
UNIQUE KEY `PK_user` (`msisdn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t2 VALUES ('1234567890',2,'2005-05-24 13:53:25');
SELECT content, t2.msisdn FROM t1, t2 WHERE t1.msisdn = '1234567890';
DROP TABLE t1,t2;
...@@ -60,3 +60,15 @@ drop table t1; ...@@ -60,3 +60,15 @@ drop table t1;
# Bug #5595 NULLIF() IS NULL returns false if NULLIF() returns NULL # Bug #5595 NULLIF() IS NULL returns false if NULLIF() returns NULL
# #
SELECT NULLIF(5,5) IS NULL, NULLIF(5,5) IS NOT NULL; SELECT NULLIF(5,5) IS NULL, NULLIF(5,5) IS NOT NULL;
#
# Test for bug #11142: evaluation of NULLIF when the first argument is NULL
#
CREATE TABLE t1 (a CHAR(10));
INSERT INTO t1 VALUES ('aaa'), (NULL), (''), ('bbb');
SELECT a, NULLIF(a,'') FROM t1;
SELECT a, NULLIF(a,'') FROM t1 WHERE NULLIF(a,'') IS NULL;
DROP TABLE t1;
...@@ -722,11 +722,14 @@ Dbtc::set_timeout_value(Uint32 timeOut) ...@@ -722,11 +722,14 @@ Dbtc::set_timeout_value(Uint32 timeOut)
void void
Dbtc::set_appl_timeout_value(Uint32 timeOut) Dbtc::set_appl_timeout_value(Uint32 timeOut)
{ {
if (timeOut)
{
timeOut /= 10; timeOut /= 10;
if (timeOut < ctimeOutValue) { if (timeOut < ctimeOutValue) {
jam(); jam();
c_appl_timeout_value = ctimeOutValue; c_appl_timeout_value = ctimeOutValue;
}//if }//if
}
c_appl_timeout_value = timeOut; c_appl_timeout_value = timeOut;
} }
...@@ -6133,7 +6136,8 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr) ...@@ -6133,7 +6136,8 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr)
particular state we will use the application timeout parameter rather particular state we will use the application timeout parameter rather
than the shorter Deadlock detection timeout. than the shorter Deadlock detection timeout.
*/ */
if ((ctcTimer - getApiConTimer(apiConnectptr.i)) <= c_appl_timeout_value) { if (c_appl_timeout_value == 0 ||
(ctcTimer - getApiConTimer(apiConnectptr.i)) <= c_appl_timeout_value) {
jam(); jam();
return; return;
}//if }//if
......
...@@ -22,13 +22,13 @@ ...@@ -22,13 +22,13 @@
#include <NdbConfig.hpp> #include <NdbConfig.hpp>
#include <signaldata/DumpStateOrd.hpp> #include <signaldata/DumpStateOrd.hpp>
#define TIMEOUT 3000 #define TIMEOUT (Uint32)3000
Uint32 g_org_timeout = 3000; Uint32 g_org_timeout = 3000;
int int
setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){ setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
NdbRestarter restarter; NdbRestarter restarter;
int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
NdbConfig conf(GETNDB(step)->getNodeId()+1); NdbConfig conf(GETNDB(step)->getNodeId()+1);
unsigned int nodeId = conf.getMasterNodeId(); unsigned int nodeId = conf.getMasterNodeId();
...@@ -39,7 +39,7 @@ setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -39,7 +39,7 @@ setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
return NDBT_FAILED; return NDBT_FAILED;
} }
int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, TIMEOUT }; int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, timeout };
if(restarter.dumpStateAllNodes(val, 2) != 0){ if(restarter.dumpStateAllNodes(val, 2) != 0){
return NDBT_FAILED; return NDBT_FAILED;
} }
...@@ -94,9 +94,11 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -94,9 +94,11 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
unsigned int nodeId = conf.getMasterNodeId(); unsigned int nodeId = conf.getMasterNodeId();
int stepNo = step->getStepNo(); int stepNo = step->getStepNo();
int minSleep = (int)(TIMEOUT * 1.5); int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
int maxSleep = TIMEOUT * 2;
ndbout << "TransactionInactiveTimeout="<< TIMEOUT int minSleep = (int)(timeout * 1.5);
int maxSleep = timeout * 2;
ndbout << "TransactionInactiveTimeout="<< timeout
<< ", minSleep="<<minSleep << ", minSleep="<<minSleep
<< ", maxSleep="<<maxSleep<<endl; << ", maxSleep="<<maxSleep<<endl;
...@@ -134,8 +136,10 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -134,8 +136,10 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
int mul2 = ctx->getProperty("Op2", (Uint32)0); int mul2 = ctx->getProperty("Op2", (Uint32)0);
int records = ctx->getNumRecords(); int records = ctx->getNumRecords();
int minSleep = (int)(TIMEOUT * 1.5); int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
int maxSleep = TIMEOUT * 2;
int minSleep = (int)(timeout * 1.5);
int maxSleep = timeout * 2;
HugoOperations hugoOps(*ctx->getTab()); HugoOperations hugoOps(*ctx->getTab());
Ndb* pNdb = GETNDB(step); Ndb* pNdb = GETNDB(step);
...@@ -148,7 +152,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -148,7 +152,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
op1 = (op1 % 5); op1 = (op1 % 5);
op2 = (op2 % 5); op2 = (op2 % 5);
ndbout << stepNo << ": TransactionInactiveTimeout="<< TIMEOUT ndbout << stepNo << ": TransactionInactiveTimeout="<< timeout
<< ", minSleep="<<minSleep << ", minSleep="<<minSleep
<< ", maxSleep="<<maxSleep << ", maxSleep="<<maxSleep
<< ", op1=" << op1 << ", op1=" << op1
...@@ -250,8 +254,10 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -250,8 +254,10 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
int loops = ctx->getNumLoops(); int loops = ctx->getNumLoops();
int stepNo = step->getStepNo(); int stepNo = step->getStepNo();
int maxSleep = (int)(TIMEOUT * 0.5); int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
ndbout << "TransactionInactiveTimeout="<< TIMEOUT
int maxSleep = (int)(timeout * 0.5);
ndbout << "TransactionInactiveTimeout="<< timeout
<< ", maxSleep="<<maxSleep<<endl; << ", maxSleep="<<maxSleep<<endl;
...@@ -281,6 +287,51 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -281,6 +287,51 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
return result; return result;
} }
int runDeadlockTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
int result = NDBT_OK;
int loops = ctx->getNumLoops();
int stepNo = step->getStepNo();
Uint32 deadlock_timeout;
NdbConfig conf(GETNDB(step)->getNodeId()+1);
unsigned int nodeId = conf.getMasterNodeId();
if (!conf.getProperty(nodeId,
NODE_TYPE_DB,
CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT,
&deadlock_timeout)){
return NDBT_FAILED;
}
int do_sleep = (int)(deadlock_timeout * 0.5);
HugoOperations hugoOps(*ctx->getTab());
Ndb* pNdb = GETNDB(step);
for (int l = 0; l < loops && result == NDBT_OK; l++){
do{
// Commit transaction
CHECK(hugoOps.startTransaction(pNdb) == 0);
CHECK(hugoOps.pkReadRecord(pNdb, stepNo) == 0);
CHECK(hugoOps.execute_NoCommit(pNdb) == 0);
int sleep = deadlock_timeout * 1.5 + myRandom48(do_sleep);
ndbout << "Sleeping for " << sleep << " milliseconds" << endl;
NdbSleep_MilliSleep(sleep);
// Expect that transaction has NOT timed-out
CHECK(hugoOps.execute_Commit(pNdb) == 0);
} while(false);
hugoOps.closeTransaction(pNdb);
}
return result;
}
int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){ int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){
int result = NDBT_OK; int result = NDBT_OK;
int loops = ctx->getNumLoops(); int loops = ctx->getNumLoops();
...@@ -334,6 +385,17 @@ TESTCASE("DontTimeoutTransaction", ...@@ -334,6 +385,17 @@ TESTCASE("DontTimeoutTransaction",
FINALIZER(resetTransactionTimeout); FINALIZER(resetTransactionTimeout);
FINALIZER(runClearTable); FINALIZER(runClearTable);
} }
TESTCASE("Bug11290",
"Setting TransactionInactiveTimeout to 0(zero) "\
"should result in infinite timeout, and not as "\
"was the bug, a timeout that is equal to the deadlock timeout"){
TC_PROPERTY("TransactionInactiveTimeout",(Uint32)0);
INITIALIZER(runLoadTable);
INITIALIZER(setTransactionTimeout);
STEPS(runDeadlockTimeoutTrans, 1);
FINALIZER(resetTransactionTimeout);
FINALIZER(runClearTable);
}
TESTCASE("DontTimeoutTransaction5", TESTCASE("DontTimeoutTransaction5",
"Test that the transaction does not timeout "\ "Test that the transaction does not timeout "\
"if we sleep during the transaction. Use a sleep "\ "if we sleep during the transaction. Use a sleep "\
......
...@@ -1161,9 +1161,7 @@ Item_func_nullif::val_str(String *str) ...@@ -1161,9 +1161,7 @@ Item_func_nullif::val_str(String *str)
bool bool
Item_func_nullif::is_null() Item_func_nullif::is_null()
{ {
if (!cmp.compare()) return (null_value= (!cmp.compare() ? 1 : args[0]->null_value));
return (null_value=1);
return 0;
} }
/* /*
......
...@@ -8112,9 +8112,9 @@ store_record_in_cache(JOIN_CACHE *cache) ...@@ -8112,9 +8112,9 @@ store_record_in_cache(JOIN_CACHE *cache)
end > str && end[-1] == ' ' ; end > str && end[-1] == ' ' ;
end--) ; end--) ;
length=(uint) (end-str); length=(uint) (end-str);
memcpy(pos+1,str,length); memcpy(pos+sizeof(uint), str, length);
*pos=(uchar) length; *((uint *) pos)= length;
pos+=length+1; pos+= length+sizeof(uint);
} }
else else
{ {
...@@ -8177,9 +8177,9 @@ read_cached_record(JOIN_TAB *tab) ...@@ -8177,9 +8177,9 @@ read_cached_record(JOIN_TAB *tab)
{ {
if (copy->strip) if (copy->strip)
{ {
memcpy(copy->str,pos+1,length=(uint) *pos); memcpy(copy->str, pos+sizeof(uint), length= *((uint *) pos));
memset(copy->str+length,' ',copy->length-length); memset(copy->str+length, ' ', copy->length-length);
pos+=1+length; pos+= sizeof(uint)+length;
} }
else else
{ {
......
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