List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:November 23 2010 11:06am
Subject:bzr push into mysql-5.5-bugteam branch (sergey.glukhov:3134 to 3135)
View as plain text  
 3135 Sergey Glukhov	2010-11-23 [merge]
      5.1-bugteam->5.5-bugteam merge
     @ mysql-test/suite/innodb/r/innodb_mysql.result
        5.1-bugteam->5.5-bugteam merge
     @ mysql-test/suite/innodb/t/innodb_mysql.test
        5.1-bugteam->5.5-bugteam merge
     @ sql/opt_range.h
        5.1-bugteam->5.5-bugteam merge
     @ sql/records.cc
        5.1-bugteam->5.5-bugteam merge

    modified:
      mysql-test/suite/innodb/r/innodb_mysql.result
      mysql-test/suite/innodb/t/innodb_mysql.test
      sql/opt_range.h
      sql/records.cc
 3134 Davi Arnaut	2010-11-22
      Assorted fixes for test failures.
     @ mysql-test/suite/sys_vars/t/shared_memory_base_name_basic.test
        The server shared memory name is located in the server's
        temporary directory, not in the mysqltest one.
     @ sql/sql_show.cc
        */ ends a comment, add space to avoid problems.

    modified:
      mysql-test/suite/sys_vars/r/shared_memory_base_name_basic.result
      mysql-test/suite/sys_vars/t/shared_memory_base_name_basic.test
      sql/sql_show.cc
=== modified file 'mysql-test/suite/innodb/r/innodb_mysql.result'
--- a/mysql-test/suite/innodb/r/innodb_mysql.result	2010-11-10 08:54:12 +0000
+++ b/mysql-test/suite/innodb/r/innodb_mysql.result	2010-11-23 10:47:35 +0000
@@ -2622,6 +2622,47 @@ SELECT LEAST((SELECT '' FROM t1),NOW()) 
 ERROR 22007: Incorrect datetime value: '' for column 'NOW()' at row 2
 DROP TABLE t1;
 SET SQL_MODE=DEFAULT;
+#
+# Bug#56862 Execution of a query that uses index merge returns a wrong result
+#
+CREATE TABLE t1 (
+pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
+a int,
+b int,
+INDEX idx(a))
+ENGINE=INNODB;
+INSERT INTO t1(a,b) VALUES
+(11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500),
+(3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800),
+(6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700),
+(13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000);
+INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1;
+INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1;
+INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1 VALUES (1000000, 0, 0);
+SET SESSION sort_buffer_size = 1024*36;
+EXPLAIN
+SELECT COUNT(*) FROM
+(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
+WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
+2	DERIVED	t1	index_merge	PRIMARY,idx	idx,PRIMARY	5,4	NULL	1536	Using sort_union(idx,PRIMARY); Using where
+SELECT COUNT(*) FROM
+(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
+WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
+COUNT(*)
+1537
+SET SESSION sort_buffer_size = DEFAULT;
+DROP TABLE t1;
 End of 5.1 tests
 #
 # Test for bug #39932 "create table fails if column for FK is in different

=== modified file 'mysql-test/suite/innodb/t/innodb_mysql.test'
--- a/mysql-test/suite/innodb/t/innodb_mysql.test	2010-11-19 10:28:17 +0000
+++ b/mysql-test/suite/innodb/t/innodb_mysql.test	2010-11-23 10:47:35 +0000
@@ -786,6 +786,49 @@ CREATE TABLE t2 
 DROP TABLE t1;  
 SET SQL_MODE=DEFAULT;
 
+--echo #
+--echo # Bug#56862 Execution of a query that uses index merge returns a wrong result
+--echo #
+
+CREATE TABLE t1 (
+  pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
+  a int,
+  b int,
+  INDEX idx(a))
+ENGINE=INNODB;
+
+INSERT INTO t1(a,b) VALUES
+  (11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500),
+  (3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800),
+  (6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700),
+  (13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000);
+INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1;
+INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1;
+INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1(a,b) SELECT a,b FROM t1;
+INSERT INTO t1 VALUES (1000000, 0, 0);
+
+SET SESSION sort_buffer_size = 1024*36;
+
+EXPLAIN
+SELECT COUNT(*) FROM
+  (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
+     WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
+
+SELECT COUNT(*) FROM
+  (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
+     WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
+
+SET SESSION sort_buffer_size = DEFAULT;
+
+DROP TABLE t1;
 
 --echo End of 5.1 tests
 

=== modified file 'sql/opt_range.h'
--- a/sql/opt_range.h	2010-07-19 09:21:24 +0000
+++ b/sql/opt_range.h	2010-11-23 10:47:35 +0000
@@ -279,6 +279,7 @@ public:
 
   virtual bool reverse_sorted() = 0;
   virtual bool unique_key_range() { return false; }
+  virtual bool clustered_pk_range() { return false; }
 
   enum {
     QS_TYPE_RANGE = 0,
@@ -553,6 +554,8 @@ public:
   THD *thd;
   int read_keys_and_merge();
 
+  bool clustered_pk_range() { return test(pk_quick_select); }
+
   /* used to get rows collected in Unique */
   READ_RECORD read_record;
 };

=== modified file 'sql/records.cc'
--- a/sql/records.cc	2010-07-08 21:20:08 +0000
+++ b/sql/records.cc	2010-11-23 10:47:35 +0000
@@ -206,6 +206,15 @@ void init_read_record(READ_RECORD *info,
 
   if (select && my_b_inited(&select->file))
     tempfile= &select->file;
+  else if (select && select->quick && select->quick->clustered_pk_range())
+  {
+    /*
+      In case of QUICK_INDEX_MERGE_SELECT with clustered pk range we have to
+      use its own access method(i.e QUICK_INDEX_MERGE_SELECT::get_next()) as
+      sort file does not contain rowids which satisfy clustered pk range.
+    */
+    tempfile= 0;
+  }
   else
     tempfile= table->sort.io_cache;
   if (tempfile && my_b_inited(tempfile)) // Test if ref-records was used

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.5-bugteam branch (sergey.glukhov:3134 to 3135) Sergey Glukhov23 Nov