Commit b527a75e authored by unknown's avatar unknown

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-4.1-opt

into  rakia.(none):/home/kgeorge/mysql/autopush/B16792-4.1-opt


mysql-test/r/subselect.result:
  Auto merged
sql/sql_select.cc:
  Auto merged
parents ff1d115e d3dd6fa0
...@@ -559,14 +559,14 @@ COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') ...@@ -559,14 +559,14 @@ COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |')
DROP TABLE t1,t2; DROP TABLE t1,t2;
select * from (select group_concat('c') from DUAL) t; select * from (select group_concat('c') from DUAL) t;
group_concat('c') group_concat('c')
NULL c
create table t1 ( a int not null default 0); create table t1 ( a int not null default 0);
select * from (select group_concat(a) from t1) t2; select * from (select group_concat(a) from t1) t2;
group_concat(a) group_concat(a)
NULL NULL
select group_concat('x') UNION ALL select 1; select group_concat('x') UNION ALL select 1;
group_concat('x') group_concat('x')
NULL x
1 1
drop table t1; drop table t1;
CREATE TABLE t1 (id int, a varchar(9)); CREATE TABLE t1 (id int, a varchar(9));
......
...@@ -794,7 +794,7 @@ min(7) ...@@ -794,7 +794,7 @@ min(7)
NULL NULL
select min(7) from DUAL; select min(7) from DUAL;
min(7) min(7)
NULL 7
explain select min(7) from t2m join t1m; explain select min(7) from t2m join t1m;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
...@@ -809,7 +809,7 @@ max(7) ...@@ -809,7 +809,7 @@ max(7)
NULL NULL
select max(7) from DUAL; select max(7) from DUAL;
max(7) max(7)
NULL 7
explain select max(7) from t2m join t1m; explain select max(7) from t2m join t1m;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
...@@ -848,7 +848,7 @@ min(7) ...@@ -848,7 +848,7 @@ min(7)
NULL NULL
select min(7) from DUAL; select min(7) from DUAL;
min(7) min(7)
NULL 7
explain select min(7) from t2i join t1i; explain select min(7) from t2i join t1i;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2i ALL NULL NULL NULL NULL 1 1 SIMPLE t2i ALL NULL NULL NULL NULL 1
...@@ -864,7 +864,7 @@ max(7) ...@@ -864,7 +864,7 @@ max(7)
NULL NULL
select max(7) from DUAL; select max(7) from DUAL;
max(7) max(7)
NULL 7
explain select max(7) from t2i join t1i; explain select max(7) from t2i join t1i;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2i ALL NULL NULL NULL NULL 1 1 SIMPLE t2i ALL NULL NULL NULL NULL 1
...@@ -942,3 +942,19 @@ EXPLAIN SELECT MAX(b) FROM t1; ...@@ -942,3 +942,19 @@ EXPLAIN SELECT MAX(b) FROM t1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 1 SIMPLE t1 ALL NULL NULL NULL NULL 2
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,1),(1,2),(2,3);
SELECT (SELECT COUNT(DISTINCT t1.b)) FROM t1 GROUP BY t1.a;
(SELECT COUNT(DISTINCT t1.b))
1
1
SELECT (SELECT COUNT(DISTINCT 12)) FROM t1 GROUP BY t1.a;
(SELECT COUNT(DISTINCT 12))
1
1
SELECT AVG(2), BIT_AND(2), BIT_OR(2), BIT_XOR(2), COUNT(*), COUNT(12),
COUNT(DISTINCT 12), MIN(2),MAX(2),STD(2), VARIANCE(2),SUM(2),
GROUP_CONCAT(2),GROUP_CONCAT(DISTINCT 2);
AVG(2) BIT_AND(2) BIT_OR(2) BIT_XOR(2) COUNT(*) COUNT(12) COUNT(DISTINCT 12) MIN(2) MAX(2) STD(2) VARIANCE(2) SUM(2) GROUP_CONCAT(2) GROUP_CONCAT(DISTINCT 2)
2.0000 2 2 2 1 1 1 2 2 0.0000 0.0000 2 2 2
DROP TABLE t1;
...@@ -1001,7 +1001,7 @@ INSERT INTO t1 VALUES (1); ...@@ -1001,7 +1001,7 @@ INSERT INTO t1 VALUES (1);
UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i)); UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
select * from t1; select * from t1;
i i
1 2
drop table t1; drop table t1;
CREATE TABLE t1 (a int(1)); CREATE TABLE t1 (a int(1));
EXPLAIN EXTENDED SELECT (SELECT RAND() FROM t1) FROM t1; EXPLAIN EXTENDED SELECT (SELECT RAND() FROM t1) FROM t1;
...@@ -1193,7 +1193,7 @@ UPDATE t1 SET t.i=i+(SELECT MAX(i) FROM (SELECT 1) t); ...@@ -1193,7 +1193,7 @@ UPDATE t1 SET t.i=i+(SELECT MAX(i) FROM (SELECT 1) t);
ERROR 42S02: Unknown table 't' in field list ERROR 42S02: Unknown table 't' in field list
select * from t1; select * from t1;
i i
1 3
drop table t1; drop table t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
id int(11) default NULL id int(11) default NULL
......
...@@ -617,4 +617,18 @@ SELECT MAX(b) FROM t1; ...@@ -617,4 +617,18 @@ SELECT MAX(b) FROM t1;
EXPLAIN SELECT MAX(b) FROM t1; EXPLAIN SELECT MAX(b) FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #16792 query with subselect, join, and group not returning proper values
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,1),(1,2),(2,3);
SELECT (SELECT COUNT(DISTINCT t1.b)) FROM t1 GROUP BY t1.a;
SELECT (SELECT COUNT(DISTINCT 12)) FROM t1 GROUP BY t1.a;
# an attempt to test all aggregate function with no table.
SELECT AVG(2), BIT_AND(2), BIT_OR(2), BIT_XOR(2), COUNT(*), COUNT(12),
COUNT(DISTINCT 12), MIN(2),MAX(2),STD(2), VARIANCE(2),SUM(2),
GROUP_CONCAT(2),GROUP_CONCAT(DISTINCT 2);
DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -182,7 +182,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds) ...@@ -182,7 +182,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
Type of range for the key part for this field will be Type of range for the key part for this field will be
returned in range_fl. returned in range_fl.
*/ */
if ((outer_tables & table->map) || if (table->file->inited || (outer_tables & table->map) ||
!find_key_for_maxmin(0, &ref, item_field->field, conds, !find_key_for_maxmin(0, &ref, item_field->field, conds,
&range_fl, &prefix_len)) &range_fl, &prefix_len))
{ {
...@@ -269,7 +269,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds) ...@@ -269,7 +269,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
Type of range for the key part for this field will be Type of range for the key part for this field will be
returned in range_fl. returned in range_fl.
*/ */
if ((outer_tables & table->map) || if (table->file->inited || (outer_tables & table->map) ||
!find_key_for_maxmin(1, &ref, item_field->field, conds, !find_key_for_maxmin(1, &ref, item_field->field, conds,
&range_fl, &prefix_len)) &range_fl, &prefix_len))
{ {
......
...@@ -1131,7 +1131,7 @@ JOIN::exec() ...@@ -1131,7 +1131,7 @@ JOIN::exec()
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
if (!tables_list) if (!tables_list && (tables || !select_lex->with_sum_func))
{ // Only test of functions { // Only test of functions
if (select_options & SELECT_DESCRIBE) if (select_options & SELECT_DESCRIBE)
select_describe(this, FALSE, FALSE, FALSE, select_describe(this, FALSE, FALSE, FALSE,
...@@ -1170,6 +1170,11 @@ JOIN::exec() ...@@ -1170,6 +1170,11 @@ JOIN::exec()
thd->examined_row_count= 0; thd->examined_row_count= 0;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/*
don't reset the found rows count if there're no tables
as FOUND_ROWS() may be called.
*/
if (tables)
thd->limit_found_rows= thd->examined_row_count= 0; thd->limit_found_rows= thd->examined_row_count= 0;
if (zero_result_cause) if (zero_result_cause)
...@@ -1209,7 +1214,8 @@ JOIN::exec() ...@@ -1209,7 +1214,8 @@ JOIN::exec()
having= tmp_having; having= tmp_having;
select_describe(this, need_tmp, select_describe(this, need_tmp,
order != 0 && !skip_sort_order, order != 0 && !skip_sort_order,
select_distinct); select_distinct,
!tables ? "No tables used" : NullS);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -6042,9 +6048,12 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) ...@@ -6042,9 +6048,12 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
else else
end_select=end_send; end_select=end_send;
} }
if (join->tables)
{
join->join_tab[join->tables-1].next_select=end_select; join->join_tab[join->tables-1].next_select=end_select;
join_tab=join->join_tab+join->const_tables; join_tab=join->join_tab+join->const_tables;
}
join->send_records=0; join->send_records=0;
if (join->tables == join->const_tables) if (join->tables == join->const_tables)
{ {
...@@ -6062,6 +6071,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) ...@@ -6062,6 +6071,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
} }
else else
{ {
DBUG_ASSERT(join_tab);
error= sub_select(join,join_tab,0); error= sub_select(join,join_tab,0);
if (error >= 0) if (error >= 0)
error= sub_select(join,join_tab,1); error= sub_select(join,join_tab,1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment