summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <pekka@mysql.com>2005-06-14 04:00:37 +0200
committerunknown <pekka@mysql.com>2005-06-14 04:00:37 +0200
commitc7a681ff94d3f39360a53d940398931dd55aad66 (patch)
tree44cc42db8aa18943dcada50c6aabebe0c83f367b
parenta2c00c6b42c08def536d0867a5cc63f3b065b468 (diff)
parent91a7d4e737455b4eed9185ebf622626e982bd8ad (diff)
downloadmariadb-git-c7a681ff94d3f39360a53d940398931dd55aad66.tar.gz
Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/export/space/pekka/ndb/version/my41
-rw-r--r--BitKeeper/etc/logging_ok2
-rw-r--r--mysql-test/r/ctype_utf8.result34
-rw-r--r--mysql-test/r/func_if.result13
-rw-r--r--mysql-test/t/ctype_utf8.test42
-rw-r--r--mysql-test/t/func_if.test12
-rw-r--r--ndb/src/kernel/blocks/dbtc/DbtcMain.cpp16
-rw-r--r--ndb/test/ndbapi/testTimeout.cpp86
-rw-r--r--sql/item_cmpfunc.cc4
-rw-r--r--sql/sql_select.cc12
9 files changed, 194 insertions, 27 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index 343fb26c83a..71cdc892376 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -80,6 +80,7 @@ hf@deer.mysql.r18.ru
hf@genie.(none)
holyfoot@mysql.com
igor@hundin.mysql.fi
+igor@igor-inspiron.creware.com
igor@linux.local
igor@rurik.mysql.com
ingo@mysql.com
@@ -176,6 +177,7 @@ mysqldev@melody.local
mysqldev@mysql.com
mysqldev@o2k.irixworld.net
ndbdev@dl145b.mysql.com
+ndbdev@dl145c.mysql.com
ndbdev@eel.hemma.oreland.se
ndbdev@ndbmaster.mysql.com
nick@mysql.com
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 29b18f0431c..12ef8dfb8e8 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -905,3 +905,37 @@ select * from t1 where city = 'Durban ';
id city
2 Durban
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;
diff --git a/mysql-test/r/func_if.result b/mysql-test/r/func_if.result
index 508a50caf02..2c8f19f1754 100644
--- a/mysql-test/r/func_if.result
+++ b/mysql-test/r/func_if.result
@@ -86,3 +86,16 @@ drop table t1;
SELECT NULLIF(5,5) IS NULL, NULLIF(5,5) IS NOT NULL;
NULLIF(5,5) IS NULL NULLIF(5,5) IS NOT NULL
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;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index 3c49b2a47f7..343b7c867e7 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -746,3 +746,45 @@ insert into t1 values (2,'Durban');
select * from t1 where city = 'Durban';
select * from t1 where city = 'Durban ';
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;
diff --git a/mysql-test/t/func_if.test b/mysql-test/t/func_if.test
index 693773b18c8..4333defa412 100644
--- a/mysql-test/t/func_if.test
+++ b/mysql-test/t/func_if.test
@@ -60,3 +60,15 @@ drop table t1;
# Bug #5595 NULLIF() IS NULL returns false if NULLIF() returns 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;
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index ca97a5bce6d..736a660f396 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -722,11 +722,14 @@ Dbtc::set_timeout_value(Uint32 timeOut)
void
Dbtc::set_appl_timeout_value(Uint32 timeOut)
{
- timeOut /= 10;
- if (timeOut < ctimeOutValue) {
- jam();
- c_appl_timeout_value = ctimeOutValue;
- }//if
+ if (timeOut)
+ {
+ timeOut /= 10;
+ if (timeOut < ctimeOutValue) {
+ jam();
+ c_appl_timeout_value = ctimeOutValue;
+ }//if
+ }
c_appl_timeout_value = timeOut;
}
@@ -6133,7 +6136,8 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr)
particular state we will use the application timeout parameter rather
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();
return;
}//if
diff --git a/ndb/test/ndbapi/testTimeout.cpp b/ndb/test/ndbapi/testTimeout.cpp
index e310e12df81..71c11b25859 100644
--- a/ndb/test/ndbapi/testTimeout.cpp
+++ b/ndb/test/ndbapi/testTimeout.cpp
@@ -22,14 +22,14 @@
#include <NdbConfig.hpp>
#include <signaldata/DumpStateOrd.hpp>
-#define TIMEOUT 3000
-
+#define TIMEOUT (Uint32)3000
Uint32 g_org_timeout = 3000;
int
setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
NdbRestarter restarter;
-
+ int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
+
NdbConfig conf(GETNDB(step)->getNodeId()+1);
unsigned int nodeId = conf.getMasterNodeId();
if (!conf.getProperty(nodeId,
@@ -39,7 +39,7 @@ setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
return NDBT_FAILED;
}
- int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, TIMEOUT };
+ int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, timeout };
if(restarter.dumpStateAllNodes(val, 2) != 0){
return NDBT_FAILED;
}
@@ -94,9 +94,11 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
unsigned int nodeId = conf.getMasterNodeId();
int stepNo = step->getStepNo();
- int minSleep = (int)(TIMEOUT * 1.5);
- int maxSleep = TIMEOUT * 2;
- ndbout << "TransactionInactiveTimeout="<< TIMEOUT
+ int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
+
+ int minSleep = (int)(timeout * 1.5);
+ int maxSleep = timeout * 2;
+ ndbout << "TransactionInactiveTimeout="<< timeout
<< ", minSleep="<<minSleep
<< ", maxSleep="<<maxSleep<<endl;
@@ -134,8 +136,10 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
int mul2 = ctx->getProperty("Op2", (Uint32)0);
int records = ctx->getNumRecords();
- int minSleep = (int)(TIMEOUT * 1.5);
- int maxSleep = TIMEOUT * 2;
+ int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
+
+ int minSleep = (int)(timeout * 1.5);
+ int maxSleep = timeout * 2;
HugoOperations hugoOps(*ctx->getTab());
Ndb* pNdb = GETNDB(step);
@@ -148,7 +152,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
op1 = (op1 % 5);
op2 = (op2 % 5);
- ndbout << stepNo << ": TransactionInactiveTimeout="<< TIMEOUT
+ ndbout << stepNo << ": TransactionInactiveTimeout="<< timeout
<< ", minSleep="<<minSleep
<< ", maxSleep="<<maxSleep
<< ", op1=" << op1
@@ -250,8 +254,10 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
int loops = ctx->getNumLoops();
int stepNo = step->getStepNo();
- int maxSleep = (int)(TIMEOUT * 0.5);
- ndbout << "TransactionInactiveTimeout="<< TIMEOUT
+ int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT);
+
+ int maxSleep = (int)(timeout * 0.5);
+ ndbout << "TransactionInactiveTimeout="<< timeout
<< ", maxSleep="<<maxSleep<<endl;
@@ -281,6 +287,51 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
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 result = NDBT_OK;
int loops = ctx->getNumLoops();
@@ -334,6 +385,17 @@ TESTCASE("DontTimeoutTransaction",
FINALIZER(resetTransactionTimeout);
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",
"Test that the transaction does not timeout "\
"if we sleep during the transaction. Use a sleep "\
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 337ac949d35..3098e5dc77e 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -1161,9 +1161,7 @@ Item_func_nullif::val_str(String *str)
bool
Item_func_nullif::is_null()
{
- if (!cmp.compare())
- return (null_value=1);
- return 0;
+ return (null_value= (!cmp.compare() ? 1 : args[0]->null_value));
}
/*
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 5b1603b44e2..2cb650cda2a 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -8112,9 +8112,9 @@ store_record_in_cache(JOIN_CACHE *cache)
end > str && end[-1] == ' ' ;
end--) ;
length=(uint) (end-str);
- memcpy(pos+1,str,length);
- *pos=(uchar) length;
- pos+=length+1;
+ memcpy(pos+sizeof(uint), str, length);
+ *((uint *) pos)= length;
+ pos+= length+sizeof(uint);
}
else
{
@@ -8177,9 +8177,9 @@ read_cached_record(JOIN_TAB *tab)
{
if (copy->strip)
{
- memcpy(copy->str,pos+1,length=(uint) *pos);
- memset(copy->str+length,' ',copy->length-length);
- pos+=1+length;
+ memcpy(copy->str, pos+sizeof(uint), length= *((uint *) pos));
+ memset(copy->str+length, ' ', copy->length-length);
+ pos+= sizeof(uint)+length;
}
else
{