From: Tor Didriksen Date: July 7 2011 12:24pm Subject: bzr push into mysql-trunk branch (tor.didriksen:3251 to 3252) List-Archive: http://lists.mysql.com/commits/140240 Message-Id: <201107071224.p67COZoK017663@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3252 Tor Didriksen 2011-07-07 [merge] Automerge opt-team => trunk modified: mysql-test/r/subquery_all.result mysql-test/r/subquery_all_jcl6.result mysql-test/r/subquery_nomat_nosj_jcl6.result mysql-test/r/subquery_none_jcl6.result sql/opt_range.cc 3251 Davi Arnaut 2011-07-07 [merge] Merge of mysql-5.5 into mysql-trunk. modified: dbug/dbug.c libmysqld/lib_sql.cc sql/item_func.cc sql/mysqld.cc sql/protocol.cc sql/sql_class.h sql/sql_load.cc storage/innobase/btr/btr0cur.c storage/perfschema/pfs.cc tests/mysql_client_test.c unittest/mysys/lf-t.c === modified file 'mysql-test/r/subquery_all.result' --- a/mysql-test/r/subquery_all.result 2011-07-07 09:33:22 +0000 +++ b/mysql-test/r/subquery_all.result 2011-07-07 11:51:59 +0000 @@ -6508,6 +6508,31 @@ default(a) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa DROP TABLE t; # +# Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +# BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0), (1); +CREATE TABLE t2( +b TEXT, +c INT, +PRIMARY KEY (b(1)) +); +INSERT INTO t2 VALUES ('a', 2), ('b', 3); +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +ORDER BY b +); +1 +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +GROUP BY b +); +1 +DROP TABLE t1, t2; +# # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # CREATE TABLE t1 (f1 varchar(1)); === modified file 'mysql-test/r/subquery_all_jcl6.result' --- a/mysql-test/r/subquery_all_jcl6.result 2011-06-24 14:20:06 +0000 +++ b/mysql-test/r/subquery_all_jcl6.result 2011-06-28 11:35:07 +0000 @@ -6512,6 +6512,31 @@ default(a) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa DROP TABLE t; # +# Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +# BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0), (1); +CREATE TABLE t2( +b TEXT, +c INT, +PRIMARY KEY (b(1)) +); +INSERT INTO t2 VALUES ('a', 2), ('b', 3); +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +ORDER BY b +); +1 +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +GROUP BY b +); +1 +DROP TABLE t1, t2; +# # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # CREATE TABLE t1 (f1 varchar(1)); === modified file 'mysql-test/r/subquery_nomat_nosj_jcl6.result' --- a/mysql-test/r/subquery_nomat_nosj_jcl6.result 2011-06-24 14:20:06 +0000 +++ b/mysql-test/r/subquery_nomat_nosj_jcl6.result 2011-06-28 11:35:07 +0000 @@ -6512,6 +6512,31 @@ default(a) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa DROP TABLE t; # +# Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +# BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0), (1); +CREATE TABLE t2( +b TEXT, +c INT, +PRIMARY KEY (b(1)) +); +INSERT INTO t2 VALUES ('a', 2), ('b', 3); +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +ORDER BY b +); +1 +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +GROUP BY b +); +1 +DROP TABLE t1, t2; +# # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # CREATE TABLE t1 (f1 varchar(1)); === modified file 'mysql-test/r/subquery_none_jcl6.result' --- a/mysql-test/r/subquery_none_jcl6.result 2011-06-24 14:20:06 +0000 +++ b/mysql-test/r/subquery_none_jcl6.result 2011-06-28 11:35:07 +0000 @@ -6511,6 +6511,31 @@ default(a) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa DROP TABLE t; # +# Bug 11765699 - 58690: !TABLE || (!TABLE->READ_SET || +# BITMAP_IS_SET(TABLE->READ_SET, FIELD_INDEX +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0), (1); +CREATE TABLE t2( +b TEXT, +c INT, +PRIMARY KEY (b(1)) +); +INSERT INTO t2 VALUES ('a', 2), ('b', 3); +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +ORDER BY b +); +1 +SELECT 1 FROM t1 WHERE a = +(SELECT 1 FROM t2 WHERE b = +(SELECT 1 FROM t1 t11 WHERE c = 1 OR t1.a = 1 AND 1 = 2) +GROUP BY b +); +1 +DROP TABLE t1, t2; +# # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # CREATE TABLE t1 (f1 varchar(1)); === modified file 'sql/opt_range.cc' --- a/sql/opt_range.cc 2011-07-05 10:32:17 +0000 +++ b/sql/opt_range.cc 2011-07-07 11:51:59 +0000 @@ -321,7 +321,9 @@ public: uchar *min_value,*max_value; // Pointer to range /* - eq_tree() requires that left == right == 0 if the type is MAYBE_KEY. + eq_tree(), first(), last() etc require that left == right == NULL + if the type is MAYBE_KEY. Todo: fix this so SEL_ARGs without R-B + children are handled consistently. See related WL#5894. */ SEL_ARG *left,*right; /* R-B tree children */ SEL_ARG *next,*prev; /* Links for bi-directional interval list */ @@ -337,10 +339,17 @@ public: SEL_ARG(Field *,const uchar *, const uchar *); SEL_ARG(Field *field, uint8 part, uchar *min_value, uchar *max_value, uint8 min_flag, uint8 max_flag, uint8 maybe_flag); + /* + Used to construct MAYBE_KEY and IMPOSSIBLE SEL_ARGs. left and + right is NULL, so this ctor must not be used to create other + SEL_ARG types. See todo for left/right pointers. + */ SEL_ARG(enum Type type_arg) - :min_flag(0),elements(1),use_count(1),left(0),right(0),next_key_part(0), - color(BLACK), type(type_arg) - {} + :min_flag(0),elements(1),use_count(1),left(NULL),right(NULL), + next_key_part(0), color(BLACK), type(type_arg) + { + DBUG_ASSERT(type_arg == MAYBE_KEY || type_arg == IMPOSSIBLE); + } inline bool is_same(SEL_ARG *arg) { if (type != arg->type || part != arg->part) @@ -1724,6 +1733,9 @@ QUICK_RANGE::QUICK_RANGE() SEL_ARG::SEL_ARG(SEL_ARG &arg) :Sql_alloc() { + DBUG_ASSERT(arg.type != MAYBE_KEY); // Would need left=right=NULL + left=right= &null_element; + prev=next= NULL; type=arg.type; min_flag=arg.min_flag; max_flag=arg.max_flag; @@ -1742,7 +1754,7 @@ inline void SEL_ARG::make_root() { left=right= &null_element; color=BLACK; - next=prev=0; + next=prev= NULL; use_count=0; elements=1; } @@ -1750,8 +1762,8 @@ SEL_ARG::SEL_ARG(Field *f,const uchar *m const uchar *max_value_arg) :min_flag(0), max_flag(0), maybe_flag(0), maybe_null(f->real_maybe_null()), elements(1), use_count(1), field(f), min_value((uchar*) min_value_arg), - max_value((uchar*) max_value_arg), next(0),prev(0), - next_key_part(0),color(BLACK),type(KEY_RANGE) + max_value((uchar*) max_value_arg), next(NULL), prev(NULL), + next_key_part(0), color(BLACK), type(KEY_RANGE) { left=right= &null_element; } @@ -1762,7 +1774,7 @@ SEL_ARG::SEL_ARG(Field *field_,uint8 par :min_flag(min_flag_),max_flag(max_flag_),maybe_flag(maybe_flag_), part(part_),maybe_null(field_->real_maybe_null()), elements(1),use_count(1), field(field_), min_value(min_value_), max_value(max_value_), - next(0),prev(0),next_key_part(0),color(BLACK),type(KEY_RANGE) + next(NULL), prev(NULL), next_key_part(0), color(BLACK), type(KEY_RANGE) { left=right= &null_element; } @@ -6466,7 +6478,9 @@ and_all_keys(RANGE_OPT_PARAM *param, SEL } if (key1->type == SEL_ARG::MAYBE_KEY) { - key1->right= key1->left= &null_element; + // See todo for left/right pointers + DBUG_ASSERT(!key1->left); + DBUG_ASSERT(!key1->right); key1->next= key1->prev= 0; } for (next=key1->first(); next ; next=next->next) No bundle (reason: useless for push emails).