Merge lp:~vkolesnikov/pbxt/pbxt-bug-341115 into lp:pbxt

Proposed by Vladimir Kolesnikov
Status: Merged
Merged at revision: not available
Proposed branch: lp:~vkolesnikov/pbxt/pbxt-bug-341115
Merge into: lp:pbxt
Diff against target: None lines
To merge this branch: bzr merge lp:~vkolesnikov/pbxt/pbxt-bug-341115
Reviewer Review Type Date Requested Status
PBXT Core Pending
Review via email: mp+4590@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ChangeLog'
--- ChangeLog 2009-03-13 15:14:42 +0000
+++ ChangeLog 2009-03-17 16:06:29 +0000
@@ -3,6 +3,8 @@
33
4------- 1.0.08 RC - Not yet released4------- 1.0.08 RC - Not yet released
55
6RN228: Fixed bug #341115: 'Out of memory' error (a bug in key comparison algorithm)
7
6RN227: Changed conflict handling to use spin locks and improve efficiency.8RN227: Changed conflict handling to use spin locks and improve efficiency.
79
8RN226: Fixed bug #340316: Issue with bigint unsigned auto-increment field.10RN226: Fixed bug #340316: Issue with bigint unsigned auto-increment field.
911
=== modified file 'src/index_xt.cc'
--- src/index_xt.cc 2009-03-13 15:14:42 +0000
+++ src/index_xt.cc 2009-03-17 16:06:29 +0000
@@ -428,7 +428,11 @@
428428
429 switch (ind->mi_single_type) {429 switch (ind->mi_single_type) {
430 case HA_KEYTYPE_LONG_INT:430 case HA_KEYTYPE_LONG_INT:
431 r = XT_GET_DISK_4(value->sv_key) - XT_GET_DISK_4(bitem);431 register xtInt4 a, b;
432
433 a = XT_GET_DISK_4(value->sv_key);
434 b = XT_GET_DISK_4(bitem);
435 r = (a < b) ? -1 : (a == b ? 0 : 1);
432 break;436 break;
433 case HA_KEYTYPE_ULONG_INT: {437 case HA_KEYTYPE_ULONG_INT: {
434 register xtWord4 a, b;438 register xtWord4 a, b;
435439
=== modified file 'test/mysql-test/r/pbxt_bugs.result'
--- test/mysql-test/r/pbxt_bugs.result 2009-03-11 11:18:00 +0000
+++ test/mysql-test/r/pbxt_bugs.result 2009-03-17 16:06:29 +0000
@@ -1045,3 +1045,168 @@
104516777215 -32768 16 17 18 19 20 20104516777215 -32768 16 17 18 19 20 20
10464294967295 -128 21 22 23 24 25 2510464294967295 -128 21 22 23 24 25 25
10479223372036854775807 9223372036854775807 26 27 28 29 30 3010479223372036854775807 9223372036854775807 26 27 28 29 30 30
1048CREATE TABLE t2(c1 INT SIGNED NOT NULL, c2 INT UNSIGNED NULL, c3 INT, KEY(c1), KEY(c2));
1049INSERT INTO t2 VALUES(-1,1,1),(-2,2,2),(-3,3,3),(-4,4,4),(-5,5,5),(-6,6,6),(-7,7,7),(-8,8,8),(-9,9,9),(10,10,10),(-11,NULL,11),(-12,12,12);
1050INSERT INTO t2 VALUES(-2147483648,0,13),(2147483647,4294967295,14),(0,2147483648,15),(2147483647,2147483647,16);
1051SELECT * FROM t2;
1052c1 c2 c3
1053-1 1 1
1054-11 NULL 11
1055-12 12 12
1056-2 2 2
1057-2147483648 0 13
1058-3 3 3
1059-4 4 4
1060-5 5 5
1061-6 6 6
1062-7 7 7
1063-8 8 8
1064-9 9 9
10650 2147483648 15
106610 10 10
10672147483647 2147483647 16
10682147483647 4294967295 14
1069EXPLAIN SELECT c1 FROM t2;
1070id select_type table type possible_keys key key_len ref rows Extra
10711 SIMPLE t2 index NULL c1 4 NULL 16 Using index
1072SELECT c1 FROM t2;
1073c1
1074-2147483648
1075-12
1076-11
1077-9
1078-8
1079-7
1080-6
1081-5
1082-4
1083-3
1084-2
1085-1
10860
108710
10882147483647
10892147483647
1090UPDATE t2 SET c1=-2147483648 WHERE c2 <> 0 ORDER BY c2 LIMIT 2;
1091SELECT * FROM t2 WHERE c2 <> 0 ORDER BY c2;
1092c1 c2 c3
1093-2147483648 1 1
1094-2147483648 2 2
1095-3 3 3
1096-4 4 4
1097-5 5 5
1098-6 6 6
1099-7 7 7
1100-8 8 8
1101-9 9 9
110210 10 10
1103-12 12 12
11042147483647 2147483647 16
11050 2147483648 15
11062147483647 4294967295 14
1107UPDATE t2 SET c1=-2147483648 WHERE c2 >= 0 ORDER BY c2 DESC LIMIT 2;
1108SELECT * FROM t2 WHERE c2 >= 0 ORDER BY c2 DESC;
1109c1 c2 c3
1110-2147483648 4294967295 14
1111-2147483648 2147483648 15
11122147483647 2147483647 16
1113-12 12 12
111410 10 10
1115-9 9 9
1116-8 8 8
1117-7 7 7
1118-6 6 6
1119-5 5 5
1120-4 4 4
1121-3 3 3
1122-2147483648 2 2
1123-2147483648 1 1
1124-2147483648 0 13
1125UPDATE t2 SET c1=-2147483648 WHERE c2 <= 3 ORDER BY c2 LIMIT 2;
1126SELECT * FROM t2 WHERE c2 <= 3 ORDER BY c2;
1127c1 c2 c3
1128-2147483648 0 13
1129-2147483648 1 1
1130-2147483648 2 2
1131-3 3 3
1132UPDATE t2 SET c1=-2147483648 WHERE c2 <=> 4 ORDER BY c2 DESC LIMIT 2;
1133SELECT * FROM t2 WHERE c2 <=> 4 ORDER BY c2;
1134c1 c2 c3
1135-2147483648 4 4
1136UPDATE t2 SET c1=-2147483648 WHERE c2 BETWEEN 4 AND 7 ORDER BY c2 LIMIT 2;
1137SELECT * FROM t2 WHERE c2 BETWEEN 4 AND 7 ORDER BY c2;
1138c1 c2 c3
1139-2147483648 4 4
1140-2147483648 5 5
1141-6 6 6
1142-7 7 7
1143UPDATE t2 SET c1=-2147483648 WHERE c2 IN(8,9) ORDER BY c2 DESC LIMIT 2;
1144SELECT * FROM t2 WHERE c2 IN(8,9) ORDER BY c2 DESC;
1145c1 c2 c3
1146-2147483648 9 9
1147-2147483648 8 8
1148UPDATE t2 SET c1=-2147483648 WHERE c2 IS NULL ORDER BY c2 LIMIT 2;
1149SELECT * FROM t2 WHERE c2 IS NULL ORDER BY c2;
1150c1 c2 c3
1151-2147483648 NULL 11
1152UPDATE t2 SET c1=-2147483648 WHERE c2>= 6 AND c2 < 9 ORDER BY c2 LIMIT 2;
1153SELECT * FROM t2 WHERE c2>= 6 AND c2 < 9 ORDER BY c2;
1154c1 c2 c3
1155-2147483648 6 6
1156-2147483648 7 7
1157-2147483648 8 8
1158UPDATE t2 SET c1=-2147483648 WHERE c1=-12 OR c2=1;
1159SELECT * FROM t2 WHERE c1=-2147483648;
1160c1 c2 c3
1161-2147483648 2147483648 15
1162-2147483648 4294967295 14
1163-2147483648 6 6
1164-2147483648 NULL 11
1165-2147483648 0 13
1166-2147483648 12 12
1167-2147483648 7 7
1168-2147483648 1 1
1169-2147483648 2 2
1170-2147483648 4 4
1171-2147483648 5 5
1172-2147483648 9 9
1173-2147483648 8 8
1174SELECT * FROM t2;
1175c1 c2 c3
1176-2147483648 0 13
1177-2147483648 1 1
1178-2147483648 12 12
1179-2147483648 2 2
1180-2147483648 2147483648 15
1181-2147483648 4 4
1182-2147483648 4294967295 14
1183-2147483648 5 5
1184-2147483648 6 6
1185-2147483648 7 7
1186-2147483648 8 8
1187-2147483648 9 9
1188-2147483648 NULL 11
1189-3 3 3
119010 10 10
11912147483647 2147483647 16
1192EXPLAIN SELECT c1 FROM t2;
1193id select_type table type possible_keys key key_len ref rows Extra
11941 SIMPLE t2 index NULL c1 4 NULL 16 Using index
1195SELECT c1 FROM t2;
1196c1
1197-2147483648
1198-2147483648
1199-2147483648
1200-2147483648
1201-2147483648
1202-2147483648
1203-2147483648
1204-2147483648
1205-2147483648
1206-2147483648
1207-2147483648
1208-2147483648
1209-2147483648
1210-3
121110
12122147483647
10481213
=== modified file 'test/mysql-test/t/pbxt_bugs.test'
--- test/mysql-test/t/pbxt_bugs.test 2009-03-11 11:18:00 +0000
+++ test/mysql-test/t/pbxt_bugs.test 2009-03-17 16:06:29 +0000
@@ -865,3 +865,42 @@
865INSERT INTO t5(c2,c3) VALUES(33,34);865INSERT INTO t5(c2,c3) VALUES(33,34);
866866
867SELECT * FROM t5;867SELECT * FROM t5;
868
869# bug 341115: wrong key comparison algorithm led to endless resultset
870
871CREATE TABLE t2(c1 INT SIGNED NOT NULL, c2 INT UNSIGNED NULL, c3 INT, KEY(c1), KEY(c2));
872INSERT INTO t2 VALUES(-1,1,1),(-2,2,2),(-3,3,3),(-4,4,4),(-5,5,5),(-6,6,6),(-7,7,7),(-8,8,8),(-9,9,9),(10,10,10),(-11,NULL,11),(-12,12,12);
873INSERT INTO t2 VALUES(-2147483648,0,13),(2147483647,4294967295,14),(0,2147483648,15),(2147483647,2147483647,16);
874--sorted_result
875SELECT * FROM t2;
876
877# make sure it uses index scan
878EXPLAIN SELECT c1 FROM t2;
879
880SELECT c1 FROM t2;
881
882UPDATE t2 SET c1=-2147483648 WHERE c2 <> 0 ORDER BY c2 LIMIT 2;
883SELECT * FROM t2 WHERE c2 <> 0 ORDER BY c2;
884UPDATE t2 SET c1=-2147483648 WHERE c2 >= 0 ORDER BY c2 DESC LIMIT 2;
885SELECT * FROM t2 WHERE c2 >= 0 ORDER BY c2 DESC;
886UPDATE t2 SET c1=-2147483648 WHERE c2 <= 3 ORDER BY c2 LIMIT 2;
887SELECT * FROM t2 WHERE c2 <= 3 ORDER BY c2;
888UPDATE t2 SET c1=-2147483648 WHERE c2 <=> 4 ORDER BY c2 DESC LIMIT 2;
889SELECT * FROM t2 WHERE c2 <=> 4 ORDER BY c2;
890UPDATE t2 SET c1=-2147483648 WHERE c2 BETWEEN 4 AND 7 ORDER BY c2 LIMIT 2;
891SELECT * FROM t2 WHERE c2 BETWEEN 4 AND 7 ORDER BY c2;
892UPDATE t2 SET c1=-2147483648 WHERE c2 IN(8,9) ORDER BY c2 DESC LIMIT 2;
893SELECT * FROM t2 WHERE c2 IN(8,9) ORDER BY c2 DESC;
894UPDATE t2 SET c1=-2147483648 WHERE c2 IS NULL ORDER BY c2 LIMIT 2;
895SELECT * FROM t2 WHERE c2 IS NULL ORDER BY c2;
896UPDATE t2 SET c1=-2147483648 WHERE c2>= 6 AND c2 < 9 ORDER BY c2 LIMIT 2;
897SELECT * FROM t2 WHERE c2>= 6 AND c2 < 9 ORDER BY c2;
898UPDATE t2 SET c1=-2147483648 WHERE c1=-12 OR c2=1;
899SELECT * FROM t2 WHERE c1=-2147483648;
900--sorted_result
901SELECT * FROM t2;
902
903# make sure it uses index scan
904EXPLAIN SELECT c1 FROM t2;
905
906SELECT c1 FROM t2;
868\ No newline at end of file907\ No newline at end of file

Subscribers

People subscribed via source and target branches