diff options
author | unknown <monty@mysql.com> | 2005-07-04 16:01:04 +0300 |
---|---|---|
committer | unknown <monty@mysql.com> | 2005-07-04 16:01:04 +0300 |
commit | 5d82b41e3adccc566b68542bf5be097ed45f5390 (patch) | |
tree | 5d98db8559f519e7aac489fe047ee7fb3f2b8d3b | |
parent | 3c82f72091d2c21519540ee5bcc3b2acadfbf198 (diff) | |
download | mariadb-git-5d82b41e3adccc566b68542bf5be097ed45f5390.tar.gz |
After merge fixes
mysql-test/r/group_by.result:
After merge fix
(Put test in same order as in 4.1)
mysql-test/t/group_by.test:
After merge fix
(Put test in same order as in 4.1)
sql/item_cmpfunc.cc:
After merge fix (+ simple fix to not allow compiler to do tail optimization)
sql/item_cmpfunc.h:
After merge fix
-rw-r--r-- | mysql-test/r/group_by.result | 56 | ||||
-rw-r--r-- | mysql-test/t/group_by.test | 68 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 10 | ||||
-rw-r--r-- | sql/item_cmpfunc.h | 2 |
4 files changed, 71 insertions, 65 deletions
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 34a9cc4221f..64446e63e6f 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -723,6 +723,34 @@ WHERE hostname LIKE '%aol%' hostname no cache-dtc-af05.proxy.aol.com 1 DROP TABLE t1; +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,2), (1,3); +SELECT a, b FROM t1 GROUP BY 'const'; +a b +1 2 +SELECT DISTINCT a, b FROM t1 GROUP BY 'const'; +a b +1 2 +DROP TABLE t1; +CREATE TABLE t1 (id INT, dt DATETIME); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f; +f id +20050501123000 1 +DROP TABLE t1; +CREATE TABLE t1 (id varchar(20) NOT NULL); +INSERT INTO t1 VALUES ('trans1'), ('trans2'); +CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL); +INSERT INTO t2 VALUES ('trans1', 'a problem'); +SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment +FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment; +COUNT(DISTINCT(t1.id)) comment +1 NULL +1 a problem +DROP TABLE t1, t2; CREATE TABLE t1 (n int); INSERT INTO t1 VALUES (1); SELECT n+1 AS n FROM t1 GROUP BY n; @@ -752,31 +780,3 @@ aaa show warnings; Level Code Message drop table t1, t2; -CREATE TABLE t1 (a int, b int); -INSERT INTO t1 VALUES (1,2), (1,3); -SELECT a, b FROM t1 GROUP BY 'const'; -a b -1 2 -SELECT DISTINCT a, b FROM t1 GROUP BY 'const'; -a b -1 2 -DROP TABLE t1; -CREATE TABLE t1 (id INT, dt DATETIME); -INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); -INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); -INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); -INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); -SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f; -f id -20050501123000 1 -DROP TABLE t1; -CREATE TABLE t1 (id varchar(20) NOT NULL); -INSERT INTO t1 VALUES ('trans1'), ('trans2'); -CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL); -INSERT INTO t2 VALUES ('trans1', 'a problem'); -SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment -FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment; -COUNT(DISTINCT(t1.id)) comment -1 NULL -1 a problem -DROP TABLE t1, t2; diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 2defb480deb..6f1880ae8fb 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -543,39 +543,6 @@ SELECT hostname, COUNT(DISTINCT user_id) as no FROM t1 DROP TABLE t1; # -# Bug#11211: Ambiguous column reference in GROUP BY. -# - -create table t1 (c1 char(3), c2 char(3)); -create table t2 (c3 char(3), c4 char(3)); -insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2'); -insert into t2 values ('aaa', 'bb1'), ('aaa', 'bb2'); - -# query with ambiguous column reference 'c2' ---disable_ps_protocol -select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4 -group by c2; -show warnings; ---enable_ps_protocol - -# this query has no ambiguity -select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4 -group by t1.c1; - -show warnings; -drop table t1, t2; - -# -# Test for bug #11414: crash on Windows for a simple GROUP BY query -# - -CREATE TABLE t1 (n int); -INSERT INTO t1 VALUES (1); ---disable_ps_protocol -SELECT n+1 AS n FROM t1 GROUP BY n; ---enable_ps_protocol -DROP TABLE t1; - # Test for bug #8614: GROUP BY 'const' with DISTINCT # @@ -613,3 +580,38 @@ SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment; DROP TABLE t1, t2; + +# +# Test for bug #11414: crash on Windows for a simple GROUP BY query +# + +CREATE TABLE t1 (n int); +INSERT INTO t1 VALUES (1); +--disable_ps_protocol +SELECT n+1 AS n FROM t1 GROUP BY n; +--enable_ps_protocol +DROP TABLE t1; + +# +# Bug#11211: Ambiguous column reference in GROUP BY. +# + +create table t1 (c1 char(3), c2 char(3)); +create table t2 (c3 char(3), c4 char(3)); +insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2'); +insert into t2 values ('aaa', 'bb1'), ('aaa', 'bb2'); + +# query with ambiguous column reference 'c2' +--disable_ps_protocol +select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4 +group by c2; +show warnings; +--enable_ps_protocol + +# this query has no ambiguity +select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4 +group by t1.c1; + +show warnings; +drop table t1, t2; + diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index bce6a58330f..5ed857319be 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1578,17 +1578,21 @@ my_decimal *Item_func_case::val_decimal(my_decimal *decimal_value) } -bool Item_func_case::fix_fields(THD *thd, struct st_table_list *tables, - Item **ref) +bool Item_func_case::fix_fields(THD *thd, Item **ref) { /* buff should match stack usage from Item_func_case::val_int() -> Item_func_case::find_item() */ char buff[MAX_FIELD_WIDTH*2+sizeof(String)*2+sizeof(String*)*2+sizeof(double)*2+sizeof(longlong)*2]; + bool res= Item_func::fix_fields(thd, ref); + /* + Call check_stack_overrun after fix_fields to be sure that stack variable + is not optimized away + */ if (check_stack_overrun(thd, STACK_MIN_SIZE, buff)) return TRUE; // Fatal error flag is set! - return Item_func::fix_fields(thd, tables, ref); + return res; } diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index c21e9ba4925..75c8411b844 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -566,7 +566,7 @@ public: longlong val_int(); String *val_str(String *); my_decimal *val_decimal(my_decimal *); - bool fix_fields(THD *thd,struct st_table_list *tlist, Item **ref); + bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); uint decimal_precision() const; table_map not_null_tables() const { return 0; } |