mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Manual merge
mysql-test/r/ps.result: Manual merge.
This commit is contained in:
commit
61c1dd02f3
4 changed files with 61 additions and 37 deletions
|
@ -411,16 +411,26 @@ a a
|
|||
2.1 2.2
|
||||
deallocate prepare stmt;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
create table t2 select * from t1;
|
||||
PREPARE my_stmt FROM 'create table t2 select * from t1';
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
execute my_stmt;
|
||||
ERROR 42S01: Table 't2' already exists
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
drop table t1,t2;
|
||||
deallocate prepare my_stmt;
|
||||
insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
prepare stmt from "select sql_calc_found_rows * from t1 limit 2";
|
||||
execute stmt;
|
||||
a
|
||||
1
|
||||
2
|
||||
select found_rows();
|
||||
found_rows()
|
||||
10
|
||||
execute stmt;
|
||||
a
|
||||
1
|
||||
2
|
||||
select found_rows();
|
||||
found_rows()
|
||||
10
|
||||
execute stmt;
|
||||
a
|
||||
1
|
||||
2
|
||||
select found_rows();
|
||||
found_rows()
|
||||
10
|
||||
|
|
|
@ -176,17 +176,17 @@ a b
|
|||
a b
|
||||
1 7
|
||||
2 7
|
||||
3 8
|
||||
4 8
|
||||
3 8
|
||||
explain extended (select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)) union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using filesort
|
||||
3 UNION t4 ALL NULL NULL NULL NULL 3 Using where; Using filesort
|
||||
3 UNION t4 ALL NULL NULL NULL NULL 3 Using where
|
||||
4 SUBQUERY t2 ALL NULL NULL NULL NULL 2
|
||||
NULL UNION RESULT <union1,3> ALL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.b = (select test.t3.a AS `a` from test.t3 order by test.t3.a desc limit 1))) union (select test.t4.a AS `a`,test.t4.b AS `b` from test.t4 where (test.t4.b = (select (max(test.t2.a) * 4) AS `max(t2.a)*4` from test.t2)) order by test.t4.a)
|
||||
Note 1003 (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.b = (select test.t3.a AS `a` from test.t3 order by test.t3.a desc limit 1))) union (select test.t4.a AS `a`,test.t4.b AS `b` from test.t4 where (test.t4.b = (select (max(test.t2.a) * 4) AS `max(t2.a)*4` from test.t2)) order by a)
|
||||
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
||||
(select a from t3 where a<t2.a*4 order by 1 desc limit 1) a
|
||||
3 1
|
||||
|
|
|
@ -422,14 +422,30 @@ deallocate prepare stmt;
|
|||
create table t1 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
create table t2 select * from t1;
|
||||
PREPARE my_stmt FROM 'create table t2 select * from t1';
|
||||
prepare stmt FROM 'create table t2 select * from t1';
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
execute stmt;
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
execute stmt;
|
||||
--error 1050
|
||||
execute my_stmt;
|
||||
execute stmt;
|
||||
drop table t2;
|
||||
execute my_stmt;
|
||||
execute stmt;
|
||||
drop table t1,t2;
|
||||
deallocate prepare my_stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
#
|
||||
# Bug#6088 "FOUND_ROWS returns wrong values for prepared statements when
|
||||
# LIMIT is used"
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
prepare stmt from "select sql_calc_found_rows * from t1 limit 2";
|
||||
execute stmt;
|
||||
select found_rows();
|
||||
execute stmt;
|
||||
select found_rows();
|
||||
execute stmt;
|
||||
select found_rows();
|
||||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
|
|
|
@ -147,6 +147,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
SELECT_LEX *lex_select_save= thd_arg->lex->current_select;
|
||||
SELECT_LEX *sl, *first_select;
|
||||
select_result *tmp_result;
|
||||
bool is_union;
|
||||
DBUG_ENTER("st_select_lex_unit::prepare");
|
||||
|
||||
describe= test(additional_options & SELECT_DESCRIBE);
|
||||
|
@ -183,10 +184,11 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
|
||||
thd_arg->lex->current_select= sl= first_select= first_select_in_union();
|
||||
found_rows_for_union= first_select->options & OPTION_FOUND_ROWS;
|
||||
is_union= test(first_select->next_select());
|
||||
|
||||
/* Global option */
|
||||
|
||||
if (first_select->next_select())
|
||||
if (is_union)
|
||||
{
|
||||
if (!(tmp_result= union_result= new select_union(0)))
|
||||
goto err;
|
||||
|
@ -195,14 +197,11 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
tmp_result= sel_result;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_result= sel_result;
|
||||
// single select should be processed like select in p[arantses
|
||||
first_select->braces= 1;
|
||||
}
|
||||
|
||||
for (;sl; sl= sl->next_select())
|
||||
{
|
||||
bool can_skip_order_by;
|
||||
sl->options|= SELECT_NO_UNLOCK;
|
||||
JOIN *join= new JOIN(thd_arg, sl->item_list,
|
||||
sl->options | thd_arg->options | additional_options,
|
||||
|
@ -217,14 +216,17 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
select_limit_cnt= HA_POS_ERROR; // no limit
|
||||
if (select_limit_cnt == HA_POS_ERROR || sl->braces)
|
||||
sl->options&= ~OPTION_FOUND_ROWS;
|
||||
|
||||
|
||||
can_skip_order_by= is_union &&
|
||||
(!sl->braces || select_limit_cnt == HA_POS_ERROR);
|
||||
|
||||
res= join->prepare(&sl->ref_pointer_array,
|
||||
(TABLE_LIST*) sl->table_list.first, sl->with_wild,
|
||||
sl->where,
|
||||
((sl->braces) ? sl->order_list.elements : 0) +
|
||||
sl->group_list.elements,
|
||||
(sl->braces) ?
|
||||
(ORDER *)sl->order_list.first : (ORDER *) 0,
|
||||
(can_skip_order_by ? 0 : sl->order_list.elements) +
|
||||
sl->group_list.elements,
|
||||
can_skip_order_by ?
|
||||
(ORDER*) 0 : (ORDER *)sl->order_list.first,
|
||||
(ORDER*) sl->group_list.first,
|
||||
sl->having,
|
||||
(ORDER*) NULL,
|
||||
|
@ -264,10 +266,8 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
}
|
||||
}
|
||||
|
||||
if (first_select->next_select())
|
||||
if (is_union)
|
||||
{
|
||||
/* This is not a single select */
|
||||
|
||||
/*
|
||||
Check that it was possible to aggregate
|
||||
all collations together for UNION.
|
||||
|
@ -364,8 +364,6 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
first_select->braces= 0; // remove our changes
|
||||
|
||||
thd_arg->lex->current_select= lex_select_save;
|
||||
|
||||
|
|
Loading…
Reference in a new issue