fix for SQL_CALC_FOUND_ROWS in UNION's
This commit is contained in:
parent
fd7b04ad74
commit
34998c5ad4
@ -48946,6 +48946,10 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
|
|||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
|
fixed that SQL_CALC_FOUND_ROWS works with UNIONs. It will work only if first
|
||||||
|
select has this option and if there is global LIMIT for entire select. For the
|
||||||
|
moment this requires using braces for individual select's.
|
||||||
|
@item
|
||||||
Don't give an error for @code{CREATE TABLE ...(... VARCHAR(0))}.
|
Don't give an error for @code{CREATE TABLE ...(... VARCHAR(0))}.
|
||||||
@item
|
@item
|
||||||
Fixed @code{SIGINT} and @code{SIGQUIT} problems in @file{mysql.cc} on Linux
|
Fixed @code{SIGINT} and @code{SIGQUIT} problems in @file{mysql.cc} on Linux
|
||||||
|
@ -89,6 +89,13 @@ table type possible_keys key key_len ref rows Extra
|
|||||||
t1 ALL NULL NULL NULL NULL 4
|
t1 ALL NULL NULL NULL NULL 4
|
||||||
t2 ALL NULL NULL NULL NULL 4 Using filesort
|
t2 ALL NULL NULL NULL NULL 4 Using filesort
|
||||||
t1 ALL NULL NULL NULL NULL 4
|
t1 ALL NULL NULL NULL NULL 4
|
||||||
|
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
||||||
|
a b
|
||||||
|
1 a
|
||||||
|
2 b
|
||||||
|
select found_rows();
|
||||||
|
FOUND_ROWS()
|
||||||
|
6
|
||||||
explain select a,b from t1 union all select a,b from t2;
|
explain select a,b from t1 union all select a,b from t2;
|
||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 ALL NULL NULL NULL NULL 4
|
t1 ALL NULL NULL NULL NULL 4
|
||||||
|
@ -21,7 +21,8 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g
|
|||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1);
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1);
|
||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
||||||
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
||||||
|
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
||||||
|
select found_rows();
|
||||||
# Test some error conditions with UNION
|
# Test some error conditions with UNION
|
||||||
explain select a,b from t1 union all select a,b from t2;
|
explain select a,b from t1 union all select a,b from t2;
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
|
|||||||
TABLE *table;
|
TABLE *table;
|
||||||
int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0;
|
int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0;
|
||||||
int res;
|
int res;
|
||||||
|
bool fr=false;
|
||||||
TABLE_LIST result_table_list;
|
TABLE_LIST result_table_list;
|
||||||
TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first;
|
TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first;
|
||||||
TMP_TABLE_PARAM tmp_table_param;
|
TMP_TABLE_PARAM tmp_table_param;
|
||||||
@ -60,6 +61,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
|
|||||||
*/
|
*/
|
||||||
lex_sl= sl;
|
lex_sl= sl;
|
||||||
order= (ORDER *) lex_sl->order_list.first;
|
order= (ORDER *) lex_sl->order_list.first;
|
||||||
|
fr = lex->select_lex.options & OPTION_FOUND_ROWS && !describe && sl->select_limit && sl->select_limit != HA_POS_ERROR;
|
||||||
if (!order || !describe)
|
if (!order || !describe)
|
||||||
last_sl->next=0; // Remove this extra element
|
last_sl->next=0; // Remove this extra element
|
||||||
}
|
}
|
||||||
@ -198,6 +200,8 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
|
|||||||
item_list, NULL, (describe) ? 0 : order,
|
item_list, NULL, (describe) ? 0 : order,
|
||||||
(ORDER*) NULL, NULL, (ORDER*) NULL,
|
(ORDER*) NULL, NULL, (ORDER*) NULL,
|
||||||
thd->options, result);
|
thd->options, result);
|
||||||
|
if (fr && !res)
|
||||||
|
thd->limit_found_rows = (ulonglong)table->file->records;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user