diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index c3ca14ab929b30f582523aedd1630d5f0a65d075..f72b47da6510d29fe80ec7eab47e73de241ea9cd 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -102,6 +102,7 @@ miguel@light.local miguel@sartre.local mikron@c-fb0ae253.1238-1-64736c10.cust.bredbandsbolaget.se mikron@mikael-ronstr-ms-dator.local +mleich@mysql.com mmatthew@markslaptop. monty@bitch.mysql.fi monty@butch. diff --git a/mysql-test/include/ps_modify.inc b/mysql-test/include/ps_modify.inc index 04c5cbaad6b22cf9a479590f0c34c13931f70eee..ba7ccefdd98abaa60c4f65cb082171f008cc5122 100644 --- a/mysql-test/include/ps_modify.inc +++ b/mysql-test/include/ps_modify.inc @@ -110,10 +110,10 @@ select a,b from t1 where a=@arg00; set @arg00=NULL; set @arg01=2; execute stmt1 using @arg00, @arg01; -select a,b from t1; +select a,b from t1 order by a; set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; ## update with subquery and several parameters set @arg00=23; @@ -134,7 +134,7 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; drop table t2 ; ## update with parameters in limit @@ -202,7 +202,7 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; set @arg00=81 ; set @arg01=1 ; --error 1062 @@ -221,17 +221,17 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; delete from t1 where a >= 1000 ; ## replace diff --git a/mysql-test/include/ps_modify1.inc b/mysql-test/include/ps_modify1.inc index 0b192a526254d2485b644ffdbfcf9ece871920e4..da3bea806693ef9383420b0b78f778af3b9db0f4 100644 --- a/mysql-test/include/ps_modify1.inc +++ b/mysql-test/include/ps_modify1.inc @@ -45,19 +45,19 @@ set @duplicate='duplicate ' ; set @1000=1000 ; set @5=5 ; -select a,b from t1 where a < 5 ; +select a,b from t1 where a < 5 order by a ; --enable_info insert into t1 select a + @1000, concat(@duplicate,b) from t1 where a < @5 ; --disable_info -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; delete from t1 where a >= 1000 ; prepare stmt1 from ' insert into t1 select a + ?, concat(?,b) from t1 where a < ? ' ; --enable_info execute stmt1 using @1000, @duplicate, @5; --disable_info -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; delete from t1 where a >= 1000 ; set @float=1.00; @@ -78,7 +78,7 @@ select b, a + @100 from t1 where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b from t1); --disable_info -select a,b from t2; +select a,b from t2 order by a ; delete from t2 ; prepare stmt1 from ' insert into t2 (b,a) select ?, sum(first.a) @@ -93,5 +93,5 @@ select b, a + ? from t1 --enable_info execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ; --disable_info -select a,b from t2; +select a,b from t2 order by a ; drop table t2; diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result index 7e183118e6199fd37dc7e527356ba124d92ec70d..13b54973b8d9c75e18c2299d2510afe71e3372c6 100644 --- a/mysql-test/r/ps_2myisam.result +++ b/mysql-test/r/ps_2myisam.result @@ -1016,15 +1016,15 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b -1 one 0 two +1 one 3 three 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b 1 one 2 two @@ -1048,7 +1048,7 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b 1 one 2 two @@ -1142,19 +1142,19 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b +0 NULL 1 one 2 two 3 three 4 four 5 five 7 sixmodified -0 NULL 8 eight +9 nine 81 8-1 82 8-2 -9 nine set @arg00=81 ; set @arg01=1 ; execute stmt1 using @arg00, @arg01; @@ -1170,7 +1170,7 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated @@ -1179,14 +1179,14 @@ insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; @@ -1195,37 +1195,37 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye set @duplicate='duplicate ' ; set @1000=1000 ; set @5=5 ; -select a,b from t1 where a < 5 ; +select a,b from t1 where a < 5 order by a ; a b +0 NULL 1 one 2 two 3 three 4 four -0 NULL insert into t1 select a + @1000, concat(@duplicate,b) from t1 where a < @5 ; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b +1000 NULL 1001 duplicate one 1002 duplicate two 1003 duplicate three 1004 duplicate four -1000 NULL delete from t1 where a >= 1000 ; prepare stmt1 from ' insert into t1 select a + ?, concat(?,b) from t1 where a < ? ' ; execute stmt1 using @1000, @duplicate, @5; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b -1004 duplicate four -1003 duplicate three -1002 duplicate two -1001 duplicate one 1000 NULL +1001 duplicate one +1002 duplicate two +1003 duplicate three +1004 duplicate four delete from t1 where a >= 1000 ; set @float=1.00; set @five='five' ; @@ -1243,15 +1243,15 @@ where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b from t1); affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b -81 duplicate -82 duplicate -8 duplicate +3 duplicate 4 duplicate -9 duplicate 7 duplicate -3 duplicate +8 duplicate +9 duplicate +81 duplicate +82 duplicate 103 three delete from t2 ; prepare stmt1 from ' insert into t2 (b,a) @@ -1267,15 +1267,15 @@ select b, a + ? from t1 execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ; affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b -81 duplicate -82 duplicate -8 duplicate +3 duplicate 4 duplicate -9 duplicate 7 duplicate -3 duplicate +8 duplicate +9 duplicate +81 duplicate +82 duplicate 103 three drop table t2; drop table t1, t_many_col_types; diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result index d33e3c610c02e2952fdb17620ae6463537dc4876..17e56b8e0010b9e6263c492587fa5d27072c0dea 100644 --- a/mysql-test/r/ps_3innodb.result +++ b/mysql-test/r/ps_3innodb.result @@ -1016,7 +1016,7 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b 0 two 1 one @@ -1024,7 +1024,7 @@ a b 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b 1 one 2 two @@ -1048,7 +1048,7 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b 1 one 2 two @@ -1142,7 +1142,7 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b 0 NULL 1 one @@ -1170,7 +1170,7 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated @@ -1179,14 +1179,14 @@ insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; @@ -1195,7 +1195,7 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye set @duplicate='duplicate ' ; set @1000=1000 ; set @5=5 ; -select a,b from t1 where a < 5 ; +select a,b from t1 where a < 5 order by a ; a b 0 NULL 1 one @@ -1206,7 +1206,7 @@ insert into t1 select a + @1000, concat(@duplicate,b) from t1 where a < @5 ; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 NULL 1001 duplicate one @@ -1219,7 +1219,7 @@ where a < ? ' ; execute stmt1 using @1000, @duplicate, @5; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 NULL 1001 duplicate one @@ -1243,7 +1243,7 @@ where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b from t1); affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b 3 duplicate 4 duplicate @@ -1267,7 +1267,7 @@ select b, a + ? from t1 execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ; affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b 3 duplicate 4 duplicate diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result index b5888795666be225c7930c7b25cf7b38c36c0d03..afca7c9f1437faf55c60d7f764bc56782cccba39 100644 --- a/mysql-test/r/ps_4heap.result +++ b/mysql-test/r/ps_4heap.result @@ -1017,15 +1017,15 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b -1 one 0 two +1 one 3 three 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b 1 one 2 two @@ -1049,7 +1049,7 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b 1 one 2 two @@ -1143,19 +1143,19 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b +0 NULL 1 one 2 two 3 three 4 four 5 five 7 sixmodified -0 NULL 8 eight +9 nine 81 8-1 82 8-2 -9 nine set @arg00=81 ; set @arg01=1 ; execute stmt1 using @arg00, @arg01; @@ -1171,23 +1171,23 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b -1100 x1000_1updated 1000 x1000_3 +1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; @@ -1196,37 +1196,37 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye set @duplicate='duplicate ' ; set @1000=1000 ; set @5=5 ; -select a,b from t1 where a < 5 ; +select a,b from t1 where a < 5 order by a ; a b +0 NULL 1 one 2 two 3 three 4 four -0 NULL insert into t1 select a + @1000, concat(@duplicate,b) from t1 where a < @5 ; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b -1002 duplicate two +1000 NULL 1001 duplicate one +1002 duplicate two 1003 duplicate three 1004 duplicate four -1000 NULL delete from t1 where a >= 1000 ; prepare stmt1 from ' insert into t1 select a + ?, concat(?,b) from t1 where a < ? ' ; execute stmt1 using @1000, @duplicate, @5; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 NULL -1004 duplicate four -1003 duplicate three -1002 duplicate two 1001 duplicate one +1002 duplicate two +1003 duplicate three +1004 duplicate four delete from t1 where a >= 1000 ; set @float=1.00; set @five='five' ; @@ -1244,15 +1244,15 @@ where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b from t1); affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b -81 duplicate -82 duplicate -8 duplicate +3 duplicate 4 duplicate -9 duplicate 7 duplicate -3 duplicate +8 duplicate +9 duplicate +81 duplicate +82 duplicate 103 three delete from t2 ; prepare stmt1 from ' insert into t2 (b,a) @@ -1268,15 +1268,15 @@ select b, a + ? from t1 execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ; affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b -81 duplicate -82 duplicate -8 duplicate +3 duplicate 4 duplicate -9 duplicate 7 duplicate -3 duplicate +8 duplicate +9 duplicate +81 duplicate +82 duplicate 103 three drop table t2; drop table t1, t_many_col_types; diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result index 7d78f4b9e1c9536787a173c7dc94791163b86ced..cb894df53d2bb6a1536163d72420e1a73482eba4 100644 --- a/mysql-test/r/ps_5merge.result +++ b/mysql-test/r/ps_5merge.result @@ -1059,19 +1059,19 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b -3 three 0 two 1 one +3 three 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b -3 three -2 two 1 one +2 two +3 three 4 four set @arg00=23; set @arg01='two'; @@ -1091,11 +1091,11 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b -3 three -2 two 1 one +2 two +3 three 4 four drop table t2 ; set @arg00=1; @@ -1185,19 +1185,19 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b -4 four -3 three -2 two +0 NULL 1 one +2 two +3 three +4 four 5 five 7 sixmodified -0 NULL 8 eight +9 nine 81 8-1 82 8-2 -9 nine set @arg00=81 ; set @arg01=1 ; execute stmt1 using @arg00, @arg01; @@ -1213,7 +1213,7 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated @@ -1222,14 +1222,14 @@ insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; @@ -2254,19 +2254,19 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b -3 three 0 two 1 one +3 three 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b -3 three -2 two 1 one +2 two +3 three 4 four set @arg00=23; set @arg01='two'; @@ -2286,11 +2286,11 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b -3 three -2 two 1 one +2 two +3 three 4 four drop table t2 ; set @arg00=1; @@ -2380,19 +2380,19 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b -4 four -3 three -2 two +0 NULL 1 one +2 two +3 three +4 four 5 five 7 sixmodified -0 NULL 8 eight +9 nine 81 8-1 82 8-2 -9 nine set @arg00=81 ; set @arg01=1 ; execute stmt1 using @arg00, @arg01; @@ -2408,7 +2408,7 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated @@ -2417,14 +2417,14 @@ insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; diff --git a/mysql-test/r/ps_6bdb.result b/mysql-test/r/ps_6bdb.result index c5cde1b755a0fe24a42b8b7432ca0080b6fe4ddb..0ff2025ee2a0f217ccb97d7903c1f3494f47ffcf 100644 --- a/mysql-test/r/ps_6bdb.result +++ b/mysql-test/r/ps_6bdb.result @@ -1016,7 +1016,7 @@ set @arg01=2; execute stmt1 using @arg00, @arg01; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 1 -select a,b from t1; +select a,b from t1 order by a; a b 0 two 1 one @@ -1024,7 +1024,7 @@ a b 4 four set @arg00=0; execute stmt1 using @arg01, @arg00; -select a,b from t1; +select a,b from t1 order by a; a b 1 one 2 two @@ -1048,7 +1048,7 @@ prepare stmt1 from 'update t1 set a=? where b=? and a not in (select ? from t2 where b = ? or a = ?)'; execute stmt1 using @arg04, @arg01, @arg02, @arg03, @arg00 ; -select a,b from t1 ; +select a,b from t1 order by a; a b 1 one 2 two @@ -1142,7 +1142,7 @@ set @arg01=1 ; prepare stmt1 from 'insert into t1 set a=?, b=''sechs'' on duplicate key update a=a + ?, b=concat(b,''modified'') '; execute stmt1 using @arg00, @arg01; -select * from t1; +select * from t1 order by a; a b 0 NULL 1 one @@ -1170,7 +1170,7 @@ set @updated="updated" ; insert into t1 values(1000,'x1000_1') ; insert into t1 values(@1000,@x1000_2),(@1000,@x1000_3) on duplicate key update a = a + @100, b = concat(b,@updated) ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated @@ -1179,14 +1179,14 @@ insert into t1 values(1000,'x1000_1') ; prepare stmt1 from ' insert into t1 values(?,?),(?,?) on duplicate key update a = a + ?, b = concat(b,?) '; execute stmt1 using @1000, @x1000_2, @1000, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 x1000_3 1100 x1000_1updated delete from t1 where a >= 1000 ; insert into t1 values(1000,'x1000_1') ; execute stmt1 using @1000, @x1000_2, @1100, @x1000_3, @100, @updated ; -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1200 x1000_1updatedupdated delete from t1 where a >= 1000 ; @@ -1195,7 +1195,7 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye set @duplicate='duplicate ' ; set @1000=1000 ; set @5=5 ; -select a,b from t1 where a < 5 ; +select a,b from t1 where a < 5 order by a ; a b 0 NULL 1 one @@ -1206,7 +1206,7 @@ insert into t1 select a + @1000, concat(@duplicate,b) from t1 where a < @5 ; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 NULL 1001 duplicate one @@ -1219,7 +1219,7 @@ where a < ? ' ; execute stmt1 using @1000, @duplicate, @5; affected rows: 5 info: Records: 5 Duplicates: 0 Warnings: 0 -select a,b from t1 where a >= 1000 ; +select a,b from t1 where a >= 1000 order by a ; a b 1000 NULL 1001 duplicate one @@ -1243,7 +1243,7 @@ where (a,b) in ( select sqrt(a+@1)+CAST(@float AS signed),b from t1); affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b 3 duplicate 4 duplicate @@ -1267,7 +1267,7 @@ select b, a + ? from t1 execute stmt1 using @duplicate, @5, @five, @2, @100, @1, @float ; affected rows: 8 info: Records: 8 Duplicates: 0 Warnings: 0 -select a,b from t2; +select a,b from t2 order by a ; a b 3 duplicate 4 duplicate diff --git a/ndb/src/kernel/vm/Configuration.cpp b/ndb/src/kernel/vm/Configuration.cpp index 8907cb9f640601520953787b70bd17613c0d2e42..3099c71b7923291714670bededad4c2739ec702d 100644 --- a/ndb/src/kernel/vm/Configuration.cpp +++ b/ndb/src/kernel/vm/Configuration.cpp @@ -159,6 +159,7 @@ Configuration::Configuration() _initialStart = false; _daemonMode = false; m_config_retriever= 0; + m_clusterConfig= 0; } Configuration::~Configuration(){ diff --git a/ndb/test/ndbapi/Makefile.am b/ndb/test/ndbapi/Makefile.am index 95fcf621e896f4ae048e1af6dad3403f049cf0b0..787589dd9b6b8ff2141a2f577e09b4e01633c8b0 100644 --- a/ndb/test/ndbapi/Makefile.am +++ b/ndb/test/ndbapi/Makefile.am @@ -30,7 +30,7 @@ testSystemRestart \ testTimeout \ testTransactions \ testDeadlock \ -test_event ndbapi_slow_select testReadPerf +test_event ndbapi_slow_select testReadPerf testLcp #flexTimedAsynch #testBlobs @@ -68,6 +68,7 @@ testDeadlock_SOURCES = testDeadlock.cpp test_event_SOURCES = test_event.cpp ndbapi_slow_select_SOURCES = slow_select.cpp testReadPerf_SOURCES = testReadPerf.cpp +testLcp_SOURCES = testLcp.cpp INCLUDES_LOC = -I$(top_srcdir)/ndb/include/kernel diff --git a/ndb/test/ndbapi/bank/Bank.cpp b/ndb/test/ndbapi/bank/Bank.cpp index 7a2c5b057a14427645ccdb150102064ba15a432a..4581d1a9842a5eb766f71be4d1ce6bcf487a9877 100644 --- a/ndb/test/ndbapi/bank/Bank.cpp +++ b/ndb/test/ndbapi/bank/Bank.cpp @@ -2097,47 +2097,50 @@ int Bank::increaseSystemValue(SystemValueId sysValId, Uint64 &value){ * */ + DBUG_ENTER("Bank::increaseSystemValue"); + int check; NdbConnection* pTrans = m_ndb.startTransaction(); if (pTrans == NULL){ ERR(m_ndb.getNdbError()); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES"); if (pOp == NULL) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp->readTupleExclusive(); + // check = pOp->readTuple(); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp->equal("SYSTEM_VALUES_ID", sysValId); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } NdbRecAttr* valueRec = pOp->getValue("VALUE"); if( valueRec ==NULL ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pTrans->execute(NoCommit); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } value = valueRec->u_64_value(); @@ -2147,49 +2150,56 @@ int Bank::increaseSystemValue(SystemValueId sysValId, Uint64 &value){ if (pOp2 == NULL) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp2->updateTuple(); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp2->equal("SYSTEM_VALUES_ID", sysValId); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp2->setValue("VALUE", value); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); + } + + check = pTrans->execute(NoCommit); + if( check == -1 ) { + ERR(pTrans->getNdbError()); + m_ndb.closeTransaction(pTrans); + DBUG_RETURN(NDBT_FAILED); } NdbOperation* pOp3 = pTrans->getNdbOperation("SYSTEM_VALUES"); if (pOp3 == NULL) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp3->readTuple(); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pOp3->equal("SYSTEM_VALUES_ID", sysValId); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } // Read new value @@ -2197,28 +2207,31 @@ int Bank::increaseSystemValue(SystemValueId sysValId, Uint64 &value){ if( valueNewRec ==NULL ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } check = pTrans->execute(Commit); if( check == -1 ) { ERR(pTrans->getNdbError()); m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } // Check that value updated equals the value we read after the update if (valueNewRec->u_64_value() != value){ + + printf("value actual=%lld\n", valueNewRec->u_64_value()); + printf("value expected=%lld actual=%lld\n", value, valueNewRec->u_64_value()); + + DBUG_PRINT("info", ("value expected=%ld actual=%ld", value, valueNewRec->u_64_value())); g_err << "getNextTransactionId: value was not updated" << endl; m_ndb.closeTransaction(pTrans); - return NDBT_FAILED; + DBUG_RETURN(NDBT_FAILED); } m_ndb.closeTransaction(pTrans); - - - return 0; + DBUG_RETURN(0); } int Bank::increaseSystemValue2(SystemValueId sysValId, Uint64 &value){ diff --git a/ndb/test/ndbapi/testLcp.cpp b/ndb/test/ndbapi/testLcp.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c92be091a97d68bb22bea0d37e98429d0b0ea1bb --- /dev/null +++ b/ndb/test/ndbapi/testLcp.cpp @@ -0,0 +1,320 @@ + +#include <NDBT.hpp> +#include <NdbApi.hpp> +#include <NdbRestarter.hpp> +#include <HugoOperations.hpp> +#include <UtilTransactions.hpp> +#include <signaldata/DumpStateOrd.hpp> + +struct CASE +{ + bool start_row; + bool end_row; + bool curr_row; + const char * op1; + const char * op2; + int val; +}; + +static CASE g_ops[] = +{ + { false, true, false, "INSERT", 0, 0 }, + { false, true, false, "INSERT", "UPDATE", 0 }, + { false, false, false, "INSERT", "DELETE", 0 }, + { true, true, false, "UPDATE", 0, 0 }, + { true, true, false, "UPDATE", "UPDATE", 0 }, + { true, false, false, "UPDATE", "DELETE", 0 }, + { true, false, false, "DELETE", 0, 0 }, + { true, true, false, "DELETE", "INSERT", 0 } +}; +const size_t OP_COUNT = (sizeof(g_ops)/sizeof(g_ops[0])); + +static Ndb* g_ndb = 0; +static CASE* g_cases; +static HugoOperations* g_hugo_ops; + +static int g_rows = 1000; +static int g_setup_tables = 1; +static const char * g_tablename = "T1"; +static const NdbDictionary::Table* g_table = 0; +static NdbRestarter g_restarter; + +static int init_ndb(int argc, char** argv); +static int parse_args(int argc, char** argv); +static int connect_ndb(); +static int drop_all_tables(); +static int load_table(); +static int pause_lcp(); +static int do_op(int row); +static int continue_lcp(int error); +static int commit(); +static int restart(); +static int validate(); + +#define require(x) { bool b = x; if(!b){g_err << __LINE__ << endl; abort();}} + +int +main(int argc, char ** argv){ + + require(!init_ndb(argc, argv)); + require(!parse_args(argc, argv)); + require(!connect_ndb()); + + if(g_setup_tables){ + require(!drop_all_tables()); + + if(NDBT_Tables::createTable(g_ndb, g_tablename) != 0){ + exit(-1); + } + } + + g_table = g_ndb->getDictionary()->getTable(g_tablename); + if(g_table == 0){ + g_err << "Failed to retreive table: " << g_tablename << endl; + exit(-1); + } + require(g_hugo_ops = new HugoOperations(* g_table)); + require(!g_hugo_ops->startTransaction(g_ndb)); + + g_cases= new CASE[g_rows]; + require(!load_table()); + + g_info << "Performing all ops wo/ inteference of LCP" << endl; + + g_info << "Testing pre LCP operations, ZLCP_OP_WRITE_RT_BREAK" << endl; + g_info << " where ZLCP_OP_WRITE_RT_BREAK is finished before SAVE_PAGES" + << endl; + require(!pause_lcp()); + for(size_t j = 0; j<g_rows; j++){ + require(!do_op(j)); + } + require(!continue_lcp(5900)); + require(!commit()); + require(!restart()); + require(!validate()); + + g_info << "Testing pre LCP operations, ZLCP_OP_WRITE_RT_BREAK" << endl; + g_info << " where ZLCP_OP_WRITE_RT_BREAK is finished after SAVE_PAGES" + << endl; + require(!load_table()); + require(!pause_lcp()); + for(size_t j = 0; j<g_rows; j++){ + require(!do_op(j)); + } + require(!continue_lcp(5901)); + require(!commit()); + require(!restart()); + require(!validate()); + + g_info << "Testing pre LCP operations, undo-ed at commit" << endl; + require(!load_table()); + require(!pause_lcp()); + for(size_t j = 0; j<g_rows; j++){ + require(!do_op(j)); + } + require(!continue_lcp(5902)); + require(!commit()); + require(!continue_lcp(5903)); + require(!restart()); + require(!validate()); +} + +static int init_ndb(int argc, char** argv) +{ + return 0; +} + +static int parse_args(int argc, char** argv) +{ + return 0; +} + +static int connect_ndb() +{ + g_ndb = new Ndb("TEST_DB"); + g_ndb->init(); + if(g_ndb->waitUntilReady(30) == 0){ + int args[] = { DumpStateOrd::DihMaxTimeBetweenLCP }; + return g_restarter.dumpStateAllNodes(args, 1); + } + return -1; +} + +static int disconnect_ndb() +{ + delete g_ndb; + g_ndb = 0; + g_table = 0; + return 0; +} + +static int drop_all_tables() +{ + NdbDictionary::Dictionary * dict = g_ndb->getDictionary(); + require(dict); + + BaseString db = g_ndb->getDatabaseName(); + BaseString schema = g_ndb->getSchemaName(); + + NdbDictionary::Dictionary::List list; + if (dict->listObjects(list, NdbDictionary::Object::TypeUndefined) == -1){ + g_err << "Failed to list tables: " << endl + << dict->getNdbError() << endl; + return -1; + } + for (unsigned i = 0; i < list.count; i++) { + NdbDictionary::Dictionary::List::Element& elt = list.elements[i]; + switch (elt.type) { + case NdbDictionary::Object::SystemTable: + case NdbDictionary::Object::UserTable: + g_ndb->setDatabaseName(elt.database); + g_ndb->setSchemaName(elt.schema); + if(dict->dropTable(elt.name) != 0){ + g_err << "Failed to drop table: " + << elt.database << "/" << elt.schema << "/" << elt.name <<endl; + g_err << dict->getNdbError() << endl; + return -1; + } + break; + case NdbDictionary::Object::UniqueHashIndex: + case NdbDictionary::Object::OrderedIndex: + case NdbDictionary::Object::HashIndexTrigger: + case NdbDictionary::Object::IndexTrigger: + case NdbDictionary::Object::SubscriptionTrigger: + case NdbDictionary::Object::ReadOnlyConstraint: + default: + break; + } + } + + g_ndb->setDatabaseName(db.c_str()); + g_ndb->setSchemaName(schema.c_str()); + + return 0; +} + +static int load_table() +{ + UtilTransactions clear(* g_table); + require(!clear.clearTable(g_ndb)); + + HugoOperations ops(* g_table); + require(!ops.startTransaction(g_ndb)); + for(size_t i = 0; i<g_rows; i++){ + g_cases[i] = g_ops[ i % OP_COUNT]; + if(g_cases[i].start_row){ + g_cases[i].curr_row = true; + g_cases[i].val = rand(); + require(!ops.pkInsertRecord(g_ndb, i, 1, g_cases[i].val)); + } + if((i+1) % 100 == 0){ + require(!ops.execute_Commit(g_ndb)); + require(!ops.getTransaction()->restart()); + } + } + if((g_rows+1) % 100 != 0) + require(!ops.execute_Commit(g_ndb)); + return 0; +} + +static int pause_lcp() +{ + return 0; +} + +static int do_op(int row) +{ + HugoOperations & ops = * g_hugo_ops; + if(strcmp(g_cases[row].op1, "INSERT") == 0){ + require(!g_cases[row].curr_row); + g_cases[row].curr_row = true; + g_cases[row].val = rand(); + require(!ops.pkInsertRecord(g_ndb, row, 1, g_cases[row].val)); + } else if(strcmp(g_cases[row].op1, "UPDATE") == 0){ + require(g_cases[row].curr_row); + g_cases[row].val = rand(); + require(!ops.pkUpdateRecord(g_ndb, row, 1, g_cases[row].val)); + } else if(strcmp(g_cases[row].op1, "DELETE") == 0){ + require(g_cases[row].curr_row); + g_cases[row].curr_row = false; + require(!ops.pkDeleteRecord(g_ndb, row, 1)); + } + + require(!ops.execute_NoCommit(g_ndb)); + + if(g_cases[row].op2 == 0){ + } else if(strcmp(g_cases[row].op2, "INSERT") == 0){ + require(!g_cases[row].curr_row); + g_cases[row].curr_row = true; + g_cases[row].val = rand(); + require(!ops.pkInsertRecord(g_ndb, row, 1, g_cases[row].val)); + } else if(strcmp(g_cases[row].op2, "UPDATE") == 0){ + require(g_cases[row].curr_row); + g_cases[row].val = rand(); + require(!ops.pkUpdateRecord(g_ndb, row, 1, g_cases[row].val)); + } else if(strcmp(g_cases[row].op2, "DELETE") == 0){ + require(g_cases[row].curr_row); + g_cases[row].curr_row = false; + require(!ops.pkDeleteRecord(g_ndb, row, 1)); + } + + if(g_cases[row].op2 != 0) + require(!ops.execute_NoCommit(g_ndb)); + return 0; +} + +static int continue_lcp(int error) +{ + error = 0; + if(g_restarter.insertErrorInAllNodes(error) == 0){ + int args[] = { DumpStateOrd::DihStartLcpImmediately }; + return g_restarter.dumpStateAllNodes(args, 1); + } + return -1; +} + +static int commit() +{ + HugoOperations & ops = * g_hugo_ops; + int res = ops.execute_Commit(g_ndb); + if(res == 0){ + return ops.getTransaction()->restart(); + } + return res; +} + +static int restart() +{ + g_info << "Restarting cluster" << endl; + disconnect_ndb(); + delete g_hugo_ops; + + require(!g_restarter.restartAll()); + require(!g_restarter.waitClusterStarted(30)); + require(!connect_ndb()); + + g_table = g_ndb->getDictionary()->getTable(g_tablename); + require(g_table); + require(g_hugo_ops = new HugoOperations(* g_table)); + require(!g_hugo_ops->startTransaction(g_ndb)); + return 0; +} + +static int validate() +{ + HugoOperations ops(* g_table); + for(size_t i = 0; i<g_rows; i++){ + require(g_cases[i].curr_row == g_cases[i].end_row); + require(!ops.startTransaction(g_ndb)); + ops.pkReadRecord(g_ndb, i, 1); + int res = ops.execute_Commit(g_ndb); + if(g_cases[i].curr_row){ + require(res == 0 && ops.verifyUpdatesValue(g_cases[i].val) == 0); + } else { + require(res == 626); + } + ops.closeTransaction(g_ndb); + } + return 0; +} + diff --git a/ndb/test/src/NDBT_Test.cpp b/ndb/test/src/NDBT_Test.cpp index 7ccc9e5588fa6b78008ba176c626edaf6a37f971..ba316bac01b9ac850e551655d1e7b7c97effdb2d 100644 --- a/ndb/test/src/NDBT_Test.cpp +++ b/ndb/test/src/NDBT_Test.cpp @@ -859,6 +859,11 @@ void NDBT_TestSuite::execute(Ndb* ndb, const NdbDictionary::Table* pTab, else numTestsOk++; numTestsExecuted++; + + if (result == NDBT_OK && createTable == true){ + pDict->dropTable(pTab->getName()); + } + delete ctx; } }