MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:igor Date:May 15 2007 6:55am
Subject:bk commit into 4.1 tree (igor:1.2656) BUG#28272
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of igor. When igor does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-05-14 23:55:18-07:00, igor@stripped +3 -0
  Fixed bug #28272: crash that occurs when running an EXPLAIN command
  for a query over an empty table right after its creation. 
  The crash is the result of an attempt made by JOIN::optimize to evaluate
  the WHERE condition when no records have been actually read.
  The added test case can reproduce the crash only with InnoDB tables and
  only with 5.0.x.
   

  mysql-test/r/innodb_mysql.result@stripped, 2007-05-14 23:55:16-07:00, igor@stripped +21 -0
    Added a test case for bug #28272.

  mysql-test/t/innodb_mysql.test@stripped, 2007-05-14 23:55:16-07:00, igor@stripped +25 -0
    Added a test case for bug #28272.

  sql/sql_select.cc@stripped, 2007-05-14 23:55:16-07:00, igor@stripped +6 -0
    Fixed bug #28272: crash that occurs when running an EXPLAIN command
    for a query over an empty table right after its creation. 
    The crash is the result of an attempt made by JOIN::optimize to evaluate
    the WHERE condition when no records have been actually read.
    Such attempts could be observed only with EXPLAIN commands.
    Now at the optimization phase the WHERE condition is never evaluated if 
    there is no record previously read from the table. 

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	igor
# Host:	olga.mysql.com
# Root:	/home/igor/dev-opt/mysql-4.1-opt-bug28272

--- 1.471/sql/sql_select.cc	2007-05-14 23:55:22 -07:00
+++ 1.472/sql/sql_select.cc	2007-05-14 23:55:22 -07:00
@@ -634,6 +634,12 @@
     DBUG_PRINT("error",("Error: make_select() failed"));
     DBUG_RETURN(1);
   }
+  if (conds &&!outer_join && const_table_map != found_const_table_map && 
+      (select_options & SELECT_DESCRIBE) &&
+      select_lex->master_unit() == &thd->lex->unit) // upper level SELECT
+  {
+    conds=new Item_int((longlong) 0,1);	// Always false
+  }
   if (make_join_select(this, select, conds))
   {
     zero_result_cause=

--- 1.8/mysql-test/r/innodb_mysql.result	2007-05-14 23:55:22 -07:00
+++ 1.9/mysql-test/r/innodb_mysql.result	2007-05-14 23:55:22 -07:00
@@ -161,4 +161,25 @@
 c1	cnt
 1a	2
 DROP TABLE t1;
+CREATE TABLE t1 (
+a1 decimal(10,0) DEFAULT NULL,
+a2 blob,
+a3 time DEFAULT NULL,
+a4 blob,
+a5 char(175) DEFAULT NULL,
+a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+a7 tinyblob,
+INDEX idx (a6,a7(239),a5)
+) ENGINE=InnoDB;
+EXPLAIN SELECT a4 FROM t1 WHERE
+a6=NULL AND
+a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE noticed after reading const tables
+EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE
+t.a6=t.a6 AND t1.a6=NULL AND
+t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE noticed after reading const tables
+DROP TABLE t1;
 End of 4.1 tests

--- 1.8/mysql-test/t/innodb_mysql.test	2007-05-14 23:55:22 -07:00
+++ 1.9/mysql-test/t/innodb_mysql.test	2007-05-14 23:55:22 -07:00
@@ -191,4 +191,29 @@
 SELECT * FROM t1;
 DROP TABLE t1;
 
+#
+# Bug #28272: EXPLAIN for SELECT from an empty InnoDB table
+#
+
+CREATE TABLE t1 (
+  a1 decimal(10,0) DEFAULT NULL,
+  a2 blob,
+  a3 time DEFAULT NULL,
+  a4 blob,
+  a5 char(175) DEFAULT NULL,
+  a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+  a7 tinyblob,
+  INDEX idx (a6,a7(239),a5)
+) ENGINE=InnoDB;
+
+EXPLAIN SELECT a4 FROM t1 WHERE
+a6=NULL AND
+a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
+
+EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE
+t.a6=t.a6 AND t1.a6=NULL AND
+t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
+
+DROP TABLE t1;
+
 --echo End of 4.1 tests
Thread
bk commit into 4.1 tree (igor:1.2656) BUG#28272igor15 May