| List: | Commits | « Previous MessageNext Message » | |
| From: | Guilhem Bichot | Date: | March 13 2009 2:10pm |
| Subject: | bzr commit into mysql-6.0 branch (guilhem:2726) Bug#42297 Bug#42298 Bug#42299 Bug#42681 Bug#42683 Bug#43527 Bug#43530 Bug#43552 Bug#43620 Bug#43623 | ||
| View as plain text | |||
#At file:///home/mysql_src/bzrrepos/mysql-6.0-maria/ based on revid:guilhem@stripped
2726 Guilhem Bichot 2009-03-13
Fix for multiple symptoms sharing the same cause:
BUG#42297 Maria: crash in multi-range-read code
BUG#42298 Maria: SELECT with join returns no rows
BUG#42299 Maria: SELECT using cp1251-table returns no rows
BUG#42681 Maria returns duplicate rows with range access on 'date type
BUG#42683 Maria returns wrong results for <= NULL and <> NULL
BUG#43527 Maria returns no rows on multi range access with limit clause
BUG#43530 Maria has Issues with range select <>, < with -ve range values on signed index
BUG#43552 Maria returned wrong rows with range access on float
BUG#43620 Maria throws 'Got error 176 from storage engine' on a range query
BUG#43623 Maria returns no rows with date index on range access >, >=, BETWEEN
@ mysql-test/suite/maria/r/maria.result
after fixing the bug, we can see one more row in the result. Ah, if we had paid attention
to maria.result when we added this straight_join test, we would have caught the bug immediately.
@ mysql-test/suite/maria/r/maria4.result
result
@ mysql-test/suite/maria/t/maria4.test
test for fixed bugs. All its pieces would fail (errno 176, missing rows, too many rows) without the entire
bugfix of ma_rkey.c
@ storage/maria/ma_rkey.c
Because of missing (), icp_res was inverted compared to the result of
ma_check_index_cond(), which wasn't desired (0==0 -> 1, 1==0 -> 0). We would go
to "err:" wrongly and thus pick up the value of my_errno which was left from previous
functions (for example, 176 left by the ha_tina CSV log write at start of statement!);
sometimes the errno would be returned to client, sometimes it would just cause
a matching row to be missed.
This fixed BUG#42297 BUG#42298. But was not enough for BUG#43552:
- icp_res==2 was not converted to "key not found", causing non-matching rows to be returned.
Now the usage of icp_res is closer to ma_rnext.c and ma_rnext_same.c.
added:
mysql-test/suite/maria/r/maria4.result
mysql-test/suite/maria/t/maria4.test
modified:
mysql-test/suite/maria/r/maria.result
storage/maria/ma_key.c
storage/maria/ma_rkey.c
=== modified file 'mysql-test/suite/maria/r/maria.result'
--- a/mysql-test/suite/maria/r/maria.result 2009-02-13 16:30:54 +0000
+++ b/mysql-test/suite/maria/r/maria.result 2009-03-13 14:10:43 +0000
@@ -574,6 +574,7 @@ commit;
select straight_join * from t1,t2 force index (primary) where t1.a=t2.a;
a a b
1 1 1
+2 2 1
unlock tables;
drop table t1,t2;
set autocommit=1;
=== added file 'mysql-test/suite/maria/r/maria4.result'
--- a/mysql-test/suite/maria/r/maria4.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/maria/r/maria4.result 2009-03-13 14:10:43 +0000
@@ -0,0 +1,253 @@
+set global storage_engine=Maria;
+set session storage_engine=Maria;
+create table t1 (a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t2 (a int, filler char(200), key(a));
+insert into t2 select C.a*2, 'no' from t1 A, t1 B, t1 C;
+insert into t2 select C.a*2+1, 'yes' from t1 C;
+select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
+a filler
+1 yes
+11 yes
+13 yes
+15 yes
+17 yes
+19 yes
+3 yes
+5 yes
+7 yes
+9 yes
+drop table t1,t2;
+CREATE TABLE t1 (a varchar(32), b char(3), UNIQUE KEY a (a,b), KEY b (b));
+INSERT INTO t1 (a, b) VALUES
+( 'ppfcz1', 'DE'), ( 'ppfcz1', 'FR');
+CREATE TABLE t2 (a varchar(32), b int(11), c float, d double,
+UNIQUE KEY a (a,b,c));
+INSERT INTO t2 (a, b, c, d) VALUES
+( 'ppfcz1', 14, 5, 48.5), ( 'ppfcz1', 14, 6, 52.5);
+SELECT t1.a,t2.a,t2.c,t2.d FROM t1, t2
+WHERE t2.b=14 AND t2.a=t1.a AND 5.1<t2.c AND t1.b='DE';
+a a c d
+ppfcz1 ppfcz1 6 52.5
+drop table t1,t2;
+CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c2));
+INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
+INSERT INTO t1(c1) VALUES('12345.000009');
+INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
+DELETE FROM t1 WHERE c1='100000.00000' AND c2='-100000.00000';
+INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
+Warnings:
+Warning 1264 Out of range value for column 'c1' at row 1
+Warning 1264 Out of range value for column 'c2' at row 1
+insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
+insert into t1 values ("-.1","-.1","-.1",13);
+Warnings:
+Warning 1264 Out of range value for column 'c1' at row 1
+insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
+Warnings:
+Warning 1264 Out of range value for column 'c1' at row 1
+Warning 1264 Out of range value for column 'c2' at row 1
+SELECT * FROM t1;
+c1 c2 c3 c4
+0.00000 -0.10000 -0.1 13
+0.00000 0.00000 0 7
+1.00000 1.00000 1 10
+100.05000 -100.05000 100.05 1
+100000.00000 -100000.00000 100000 5
+100000.00000 100000.00000 111111000 19
+12345.00000 NULL NULL NULL
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
+c1 c2 c3 c4
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
+c1 c2 c3 c4
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
+c1 c2 c3 c4
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
+c1 c2 c3 c4
+DROP TABLE t1;
+CREATE TABLE t1(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, PRIMARY KEY(c1), UNIQUE INDEX(c2));
+CREATE TABLE t2(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, PRIMARY KEY(c1,c2));
+CREATE TABLE t3(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, UNIQUE INDEX idx(c1,c2));
+INSERT INTO t1 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+Note 1265 Data truncated for column 'c1' at row 2
+Note 1265 Data truncated for column 'c2' at row 2
+INSERT INTO t2 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+Note 1265 Data truncated for column 'c1' at row 2
+Note 1265 Data truncated for column 'c2' at row 2
+INSERT INTO t3 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+Note 1265 Data truncated for column 'c1' at row 2
+Note 1265 Data truncated for column 'c2' at row 2
+INSERT INTO t1 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t2 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t3 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t1 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t2 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t3 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+SET TIMESTAMP=1233216687;
+INSERT INTO t1 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+INSERT INTO t2 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+INSERT INTO t3 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+INSERT INTO t2 VALUES('98-12-31 11:30:45','98@12@30 11^30^45','98-12-31 11:30:45','98.12.31 11+30+45'),('98-12-29','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+Note 1265 Data truncated for column 'c2' at row 2
+INSERT INTO t3 VALUES('98-12-31 11:30:45','98@12@30 11^30^45','98-12-31 11:30:45','98.12.31 11+30+45'),('98-12-29','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45');
+Warnings:
+Note 1265 Data truncated for column 'c1' at row 1
+Note 1265 Data truncated for column 'c2' at row 1
+Note 1265 Data truncated for column 'c2' at row 2
+INSERT INTO t1 VALUES('2008-01-01',NULL,'08-01-02','08/01/03');
+INSERT INTO t3 VALUES('2008-01-01',NULL,'08-01-02','08/01/03');
+INSERT INTO t1(c1,c2) VALUES('08/01/17',NULL);
+DELETE FROM t1 WHERE c1='08/01/17' AND c2 IS NULL;
+INSERT INTO t1 VALUES('','','08-01-04','08/01/05') /* Inserts zero dates for '' strings */;
+Warnings:
+Warning 1265 Data truncated for column 'c1' at row 1
+Warning 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t2 VALUES('2008-04-31','2008-04-31','08-01-06','08/01/07') /* Inserts zero dates for invalid dates */;
+Warnings:
+Warning 1265 Data truncated for column 'c1' at row 1
+Warning 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t3 VALUES('10:45:15','10:45:15','08-01-08','08/1/9') /* Inserts zero dates for invalid dates */;
+Warnings:
+Warning 1265 Data truncated for column 'c1' at row 1
+Warning 1265 Data truncated for column 'c2' at row 1
+INSERT INTO t2 VALUES('0000-00-00','08-01-06','08-01-06','08/01/07');
+INSERT INTO t3 VALUES('08-01-06','00-00-00','08-01-08','08/1/9');
+SELECT * FROM t1;
+c1 c2 c3 c4
+0000-00-00 0000-00-00 2008-01-04 00:00:00 2008-01-05 00:00:00
+1983-09-05 1983-09-05 1983-09-06 13:28:00 1983-09-06 13:28:00
+1983-09-07 1983-09-07 1983-09-08 00:00:00 1983-09-08 00:00:00
+1998-12-28 1998-12-28 1998-12-28 00:00:00 1998-12-28 00:00:00
+1998-12-29 1998-12-29 1998-12-29 00:00:00 1998-12-29 00:00:00
+1998-12-30 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t2;
+c1 c2 c3 c4
+0000-00-00 0000-00-00 2008-01-06 00:00:00 2008-01-07 00:00:00
+0000-00-00 2008-01-06 2008-01-06 00:00:00 2008-01-07 00:00:00
+1983-09-05 1983-09-05 1983-09-06 13:28:00 1983-09-06 13:28:00
+1983-09-07 1983-09-07 1983-09-08 00:00:00 1983-09-08 00:00:00
+1998-12-28 1998-12-28 1998-12-28 00:00:00 1998-12-28 00:00:00
+1998-12-29 1998-12-29 1998-12-29 00:00:00 1998-12-29 00:00:00
+1998-12-29 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-30 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-31 1998-12-30 1998-12-31 11:30:45 1998-12-31 11:30:45
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t3;
+c1 c2 c3 c4
+0000-00-00 0000-00-00 2008-01-08 00:00:00 2008-01-09 00:00:00
+1983-09-05 1983-09-05 1983-09-06 13:28:00 1983-09-06 13:28:00
+1983-09-07 1983-09-07 1983-09-08 00:00:00 1983-09-08 00:00:00
+1998-12-28 1998-12-28 1998-12-28 00:00:00 1998-12-28 00:00:00
+1998-12-29 1998-12-29 1998-12-29 00:00:00 1998-12-29 00:00:00
+1998-12-29 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-30 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-31 1998-12-30 1998-12-31 11:30:45 1998-12-31 11:30:45
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
+2008-01-06 0000-00-00 2008-01-08 00:00:00 2008-01-09 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t1 WHERE c1 > '1998-12-31 11:30:45' ORDER BY c1;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t1 WHERE c1 > '1998-12-31 11:30:45' ORDER BY c1 LIMIT 2;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+SELECT * FROM t1 WHERE c1 >= '1998-12-31 11:30:45' ORDER BY c1;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t1 WHERE c1 >= '1998-12-31 11:30:45' ORDER BY c1 LIMIT 2;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+SELECT * FROM t1 WHERE c2 > '1998-12-30 11:30:45' ORDER BY c2;
+c1 c2 c3 c4
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t1 WHERE c2 > '1998-12-30 11:30:45' ORDER BY c2 LIMIT 2;
+c1 c2 c3 c4
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+SELECT * FROM t1 WHERE c2 >= '1998-12-30 11:30:45' ORDER BY c2;
+c1 c2 c3 c4
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2009-01-29 2009-01-29 2009-01-29 11:11:27 2009-01-29 00:00:00
+SELECT * FROM t1 WHERE c2 >= '1998-12-30 11:30:45' ORDER BY c2 LIMIT 2;
+c1 c2 c3 c4
+1998-12-31 1998-12-31 1998-12-31 11:30:45 1998-12-31 11:30:45
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+SELECT * FROM t2 WHERE c1 > '1998-12-29 00:00:00' ORDER BY c1,c2 LIMIT 2;
+c1 c2 c3 c4
+1998-12-30 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+1998-12-31 1998-12-30 1998-12-31 11:30:45 1998-12-31 11:30:45
+SELECT * FROM t3 WHERE c1 > '1998-12-28 00:00:00' ORDER BY c1,c2 LIMIT 2;
+c1 c2 c3 c4
+1998-12-29 1998-12-29 1998-12-29 00:00:00 1998-12-29 00:00:00
+1998-12-29 1998-12-30 1998-12-30 11:30:45 1998-12-30 11:30:45
+SELECT * FROM t3 WHERE c1 BETWEEN '1998-12-31 11:30:45' AND '2008-01-06 00:00:00' ORDER BY c1,c2;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
+2008-01-06 0000-00-00 2008-01-08 00:00:00 2008-01-09 00:00:00
+SELECT * FROM t3 WHERE c1 BETWEEN '1998-12-31 11:30:45' AND '2008-01-06 00:00:00' ORDER BY c1,c2 LIMIT 2;
+c1 c2 c3 c4
+2007-05-23 2007-05-23 2007-05-24 09:15:28 2007-05-24 09:15:28
+2007-05-25 2007-05-25 2007-05-26 00:00:00 2007-05-26 00:00:00
+DROP TABLE t1,t2,t3;
=== added file 'mysql-test/suite/maria/t/maria4.test'
--- a/mysql-test/suite/maria/t/maria4.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/maria/t/maria4.test 2009-03-13 14:10:43 +0000
@@ -0,0 +1,138 @@
+-- source include/have_maria.inc
+
+let $engine_type= Maria;
+let $default_engine=`select @@global.storage_engine`;
+eval set global storage_engine=$engine_type;
+eval set session storage_engine=$engine_type;
+
+# We start with tests for problems which were due to the Index Condition
+# Pushdown implementation.
+
+# BUG#42297 func_in.test failing with engine=maria
+create table t1 (a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t2 (a int, filler char(200), key(a));
+
+insert into t2 select C.a*2, 'no' from t1 A, t1 B, t1 C;
+insert into t2 select C.a*2+1, 'yes' from t1 C;
+--sorted_result
+select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18);
+
+drop table t1,t2;
+
+# BUG#42298 "SELECT with join returns no rows"
+
+# Reduced testcase used to give 1030: Got error 176 from
+# storage engine
+CREATE TABLE t1 (a varchar(32), b char(3), UNIQUE KEY a (a,b), KEY b (b));
+INSERT INTO t1 (a, b) VALUES
+( 'ppfcz1', 'DE'), ( 'ppfcz1', 'FR');
+CREATE TABLE t2 (a varchar(32), b int(11), c float, d double,
+ UNIQUE KEY a (a,b,c));
+INSERT INTO t2 (a, b, c, d) VALUES
+( 'ppfcz1', 14, 5, 48.5), ( 'ppfcz1', 14, 6, 52.5);
+--sorted_result
+SELECT t1.a,t2.a,t2.c,t2.d FROM t1, t2
+WHERE t2.b=14 AND t2.a=t1.a AND 5.1<t2.c AND t1.b='DE';
+drop table t1,t2;
+
+# BUG#43552 Maria returned wrong rows with range access on float
+
+CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c2));
+INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
+INSERT INTO t1(c1) VALUES('12345.000009');
+INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
+DELETE FROM t1 WHERE c1='100000.00000' AND c2='-100000.00000';
+INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
+insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
+insert into t1 values ("-.1","-.1","-.1",13);
+insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
+--sorted_result
+SELECT * FROM t1;
+--sorted_result
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
+--sorted_result
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
+--sorted_result
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
+--sorted_result
+SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
+DROP TABLE t1;
+
+# BUG#43623 Maria returns no rows with date index on range access >,
+# >=, BETWEEN
+
+CREATE TABLE t1(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, PRIMARY KEY(c1), UNIQUE INDEX(c2));
+CREATE TABLE t2(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, PRIMARY KEY(c1,c2));
+CREATE TABLE t3(c1 DATE NOT NULL, c2 DATE NULL, c3 DATETIME, c4 TIMESTAMP, UNIQUE INDEX idx(c1,c2));
+
+# As a string in either 'YYYY-MM-DD HH:MM:SS', 'YY-MM-DD HH:MM:SS', 'YYYY-MM-DD' or 'YY-MM-DD' format
+INSERT INTO t1 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+INSERT INTO t2 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+INSERT INTO t3 VALUES('98-12-31 11:30:45','98.12.31 11+30+45','98-12-31 11:30:45','98.12.31 11+30+45'),('98/12/30 11*30*45','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45'),('98-12-29','98.12.29','98-12-29','98.12.29'),('98/12/28','98@12@28','98/12/28','98@12@28');
+
+# As a string with no delimiters in either 'YYYYMMDDHHMMSS', 'YYMMDDHHMMSS', 'YYYYMMDD' or 'YYMMDD' format
+INSERT INTO t1 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+INSERT INTO t2 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+INSERT INTO t3 VALUES('20070523091528','070523091528','20070524091528','070524091528'),('20070525','070525','20070526','070526');
+
+# As a number in either YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD or YYMMDD format
+INSERT INTO t1 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+INSERT INTO t2 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+INSERT INTO t3 VALUES(19830905132800,830905132800,19830906132800,830906132800),(19830907,830907,19830908,830908);
+
+# As the result of a function
+SET TIMESTAMP=1233216687; # 2009-01-29 13:41:27
+INSERT INTO t1 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+INSERT INTO t2 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+INSERT INTO t3 VALUES(NOW(),CURRENT_DATE,NOW(),CURRENT_DATE);
+
+# Insert duplicates for parts of the clustered key/unique index
+INSERT INTO t2 VALUES('98-12-31 11:30:45','98@12@30 11^30^45','98-12-31 11:30:45','98.12.31 11+30+45'),('98-12-29','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45');
+INSERT INTO t3 VALUES('98-12-31 11:30:45','98@12@30 11^30^45','98-12-31 11:30:45','98.12.31 11+30+45'),('98-12-29','98@12@30 11^30^45','98/12/30 11*30*45','98@12@30 11^30^45');
+
+# Insert permissible NULLs
+INSERT INTO t1 VALUES('2008-01-01',NULL,'08-01-02','08/01/03');
+INSERT INTO t3 VALUES('2008-01-01',NULL,'08-01-02','08/01/03');
+
+# Insert duplicate NULLs to unique column
+INSERT INTO t1(c1,c2) VALUES('08/01/17',NULL);
+DELETE FROM t1 WHERE c1='08/01/17' AND c2 IS NULL;
+
+# Insert empty string '', would be converted to zero value of the appropriate type
+INSERT INTO t1 VALUES('','','08-01-04','08/01/05') /* Inserts zero dates for '' strings */;
+
+# Insert invalid dates, would be converted to zero value of the appropriate type
+INSERT INTO t2 VALUES('2008-04-31','2008-04-31','08-01-06','08/01/07') /* Inserts zero dates for invalid dates */;
+INSERT INTO t3 VALUES('10:45:15','10:45:15','08-01-08','08/1/9') /* Inserts zero dates for invalid dates */;
+
+# Insert zero dates
+INSERT INTO t2 VALUES('0000-00-00','08-01-06','08-01-06','08/01/07');
+INSERT INTO t3 VALUES('08-01-06','00-00-00','08-01-08','08/1/9');
+
+--sorted_result
+SELECT * FROM t1;
+--sorted_result
+SELECT * FROM t2;
+--sorted_result
+SELECT * FROM t3;
+
+SELECT * FROM t1 WHERE c1 > '1998-12-31 11:30:45' ORDER BY c1;
+SELECT * FROM t1 WHERE c1 > '1998-12-31 11:30:45' ORDER BY c1 LIMIT 2;
+SELECT * FROM t1 WHERE c1 >= '1998-12-31 11:30:45' ORDER BY c1;
+SELECT * FROM t1 WHERE c1 >= '1998-12-31 11:30:45' ORDER BY c1 LIMIT 2;
+SELECT * FROM t1 WHERE c2 > '1998-12-30 11:30:45' ORDER BY c2;
+SELECT * FROM t1 WHERE c2 > '1998-12-30 11:30:45' ORDER BY c2 LIMIT 2;
+SELECT * FROM t1 WHERE c2 >= '1998-12-30 11:30:45' ORDER BY c2;
+SELECT * FROM t1 WHERE c2 >= '1998-12-30 11:30:45' ORDER BY c2 LIMIT 2;
+SELECT * FROM t2 WHERE c1 > '1998-12-29 00:00:00' ORDER BY c1,c2 LIMIT 2;
+SELECT * FROM t3 WHERE c1 > '1998-12-28 00:00:00' ORDER BY c1,c2 LIMIT 2;
+SELECT * FROM t3 WHERE c1 BETWEEN '1998-12-31 11:30:45' AND '2008-01-06 00:00:00' ORDER BY c1,c2;
+SELECT * FROM t3 WHERE c1 BETWEEN '1998-12-31 11:30:45' AND '2008-01-06 00:00:00' ORDER BY c1,c2 LIMIT 2;
+DROP TABLE t1,t2,t3;
+
+--disable_result_log
+--disable_query_log
+eval set global storage_engine=$default_engine;
+--enable_result_log
+--enable_query_log
=== modified file 'storage/maria/ma_key.c'
--- a/storage/maria/ma_key.c 2009-01-25 16:59:07 +0000
+++ b/storage/maria/ma_key.c 2009-03-13 14:10:43 +0000
@@ -628,6 +628,7 @@ static int _ma_put_key_in_record(registe
DBUG_RETURN(0);
err:
+ DBUG_PRINT("info",("error"));
DBUG_RETURN(1); /* Crashed row */
} /* _ma_put_key_in_record */
=== modified file 'storage/maria/ma_rkey.c'
--- a/storage/maria/ma_rkey.c 2008-09-05 06:10:12 +0000
+++ b/storage/maria/ma_rkey.c 2009-03-13 14:10:43 +0000
@@ -113,7 +113,7 @@ int maria_rkey(MARIA_HA *info, uchar *bu
not satisfied with an out-of-range condition.
*/
if ((*share->row_is_visible)(info) &&
- (icp_res= ma_check_index_cond(info, inx, buf) != 0))
+ ((icp_res= ma_check_index_cond(info, inx, buf)) != 0))
break;
/* The key references a concurrently inserted record. */
@@ -158,7 +158,7 @@ int maria_rkey(MARIA_HA *info, uchar *bu
}
} while (!(*share->row_is_visible)(info) ||
- (icp_res= ma_check_index_cond(info, inx, buf) == 0));
+ ((icp_res= ma_check_index_cond(info, inx, buf)) == 0));
}
}
if (share->lock_key_trees)
@@ -166,6 +166,11 @@ int maria_rkey(MARIA_HA *info, uchar *bu
if (info->cur_row.lastpos == HA_OFFSET_ERROR || (icp_res != 1))
{
+ if (icp_res == 2)
+ {
+ info->cur_row.lastpos= HA_OFFSET_ERROR;
+ my_errno= HA_ERR_KEY_NOT_FOUND;
+ }
fast_ma_writeinfo(info);
goto err;
}
Attachment: [text/bzr-bundle] bzr/guilhem@mysql.com-20090313141043-73a6mr7hsrqm3djc.bundle
| Thread | ||
|---|---|---|
| • bzr commit into mysql-6.0 branch (guilhem:2726) Bug#42297 Bug#42298Bug#42299 Bug#42681 Bug#42683 Bug#43527 Bug#43530 Bug#43552 Bug#43620Bug#43623 | Guilhem Bichot | 13 Mar |
