mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.3 into 10.4
This commit is contained in:
@ -2887,6 +2887,181 @@ drop table t1,t2,t3;
|
|||||||
select sum((values(1)));
|
select sum((values(1)));
|
||||||
sum((values(1)))
|
sum((values(1)))
|
||||||
1
|
1
|
||||||
|
#
|
||||||
|
# MDEV-22786: Nested table values constructors
|
||||||
|
#
|
||||||
|
values ((values (2)));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
values ((values (2)), (5), (select 4));
|
||||||
|
(values (2)) 5 (select 4)
|
||||||
|
2 5 4
|
||||||
|
values ((7), (values (2)), (5), (select 4));
|
||||||
|
7 (values (2)) 5 (select 4)
|
||||||
|
7 2 5 4
|
||||||
|
values ((values (2))) union values ((values (3)));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
values ((values (2))), ((values (3)));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
values ((values (2))), ((select 4)), ((values (3)));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
3
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)));
|
||||||
|
(values (4)) (values (5))
|
||||||
|
4 5
|
||||||
|
1 7
|
||||||
|
values ((values (4)), (select 5)), ((select 1), (values (7)));
|
||||||
|
(values (4)) (select 5)
|
||||||
|
4 5
|
||||||
|
1 7
|
||||||
|
values ((select 2)) union values ((values (3)));
|
||||||
|
(select 2)
|
||||||
|
2
|
||||||
|
3
|
||||||
|
values ((values (2))) union values((select 3));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
values ((values (2))) union all values ((values (2)));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
2
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)))
|
||||||
|
union
|
||||||
|
values ((values (4)), (select 5)), ((select 2), (values (8)));
|
||||||
|
(values (4)) (values (5))
|
||||||
|
4 5
|
||||||
|
1 7
|
||||||
|
2 8
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)))
|
||||||
|
union all
|
||||||
|
values ((values (4)), (select 5)), ((select 2), (values (8)));
|
||||||
|
(values (4)) (values (5))
|
||||||
|
4 5
|
||||||
|
1 7
|
||||||
|
4 5
|
||||||
|
2 8
|
||||||
|
values ((values (1) union values (1)));
|
||||||
|
(values (1) union values (1))
|
||||||
|
1
|
||||||
|
values ((values (1) union values (1) union values (1)));
|
||||||
|
(values (1) union values (1) union values (1))
|
||||||
|
1
|
||||||
|
values ((values ((values (4)))));
|
||||||
|
(values ((values (4))))
|
||||||
|
4
|
||||||
|
values ((values ((select 5))));
|
||||||
|
(values ((select 5)))
|
||||||
|
5
|
||||||
|
values ((select (values (4))), (values ((values(5)))));
|
||||||
|
(select (values (4))) (values ((values(5))))
|
||||||
|
4 5
|
||||||
|
values ((select (values (4))), (values ((select 5))));
|
||||||
|
(select (values (4))) (values ((select 5)))
|
||||||
|
4 5
|
||||||
|
values ((select (values (4))), (values ((values(5)))))
|
||||||
|
union
|
||||||
|
values ((select (values (4))), (values ((select 7))));
|
||||||
|
(select (values (4))) (values ((values(5))))
|
||||||
|
4 5
|
||||||
|
4 7
|
||||||
|
values ((values (2))), ((values ((values (4)))));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
values ((values (2))), ((values ((select 4))));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
values ((values (2))), ((values ((values (4)))))
|
||||||
|
union
|
||||||
|
values ((values (8))), ((values ((select 4))));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
8
|
||||||
|
values ((values (2))), ((values ((values (4)))))
|
||||||
|
union all
|
||||||
|
values ((values (8))), ((values ((select 4))));
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
8
|
||||||
|
4
|
||||||
|
select * from (values ((values (2)))) dt;
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
select * from (values ((values (2)), (5), (select 4))) dt;
|
||||||
|
(values (2)) 5 (select 4)
|
||||||
|
2 5 4
|
||||||
|
select * from (values ((values (2))) union values ((values (3)))) dt;
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
select * from (values ((values (2))), ((values (3)))) dt;
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
select * from (values ((values (2))), ((values (3)))) dt;
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
3
|
||||||
|
select * from (values ((values (2))), ((select 4)), ((values (3)))) dt;
|
||||||
|
(values (2))
|
||||||
|
2
|
||||||
|
4
|
||||||
|
3
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (3), (7), (1);
|
||||||
|
values ((values ((select a from t1 where a=7))));
|
||||||
|
(values ((select a from t1 where a=7)))
|
||||||
|
7
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
(values ((select (values(2)) from t1 where a=8)))
|
||||||
|
NULL
|
||||||
|
values ((values ((select a from t1 where a=7))))
|
||||||
|
union
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
(values ((select a from t1 where a=7)))
|
||||||
|
7
|
||||||
|
NULL
|
||||||
|
values ((values ((select a from t1 where a in ((values (7)))))));
|
||||||
|
(values ((select a from t1 where a in ((values (7))))))
|
||||||
|
7
|
||||||
|
values ((values ((select a from t1 where a in ((values (7), (8)))))));
|
||||||
|
(values ((select a from t1 where a in ((values (7), (8))))))
|
||||||
|
7
|
||||||
|
values ((values
|
||||||
|
((select a from t1 where a in (values (7) union values (8))))));
|
||||||
|
(values
|
||||||
|
((select a from t1 where a in (values (7) union values (8)))))
|
||||||
|
7
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
(values ((select (values(2)) from t1 where a=8)))
|
||||||
|
NULL
|
||||||
|
values ((select (values(2)) from t1 where a<7));
|
||||||
|
ERROR 21000: Subquery returns more than 1 row
|
||||||
|
select * from (values ((values ((select a from t1 where a=7))))) dt;
|
||||||
|
(values ((select a from t1 where a=7)))
|
||||||
|
7
|
||||||
|
select * from (values ((values ((select (values(2)) from t1 where a=8))))) dt;
|
||||||
|
(values ((select (values(2)) from t1 where a=8)))
|
||||||
|
NULL
|
||||||
|
insert into t1(a) values ((values (2))), ((values (3)));
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
7
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
drop table t1;
|
||||||
End of 10.3 tests
|
End of 10.3 tests
|
||||||
#
|
#
|
||||||
# MDEV-22610 Crash in INSERT INTO t1 (VALUES (DEFAULT) UNION VALUES (DEFAULT))
|
# MDEV-22610 Crash in INSERT INTO t1 (VALUES (DEFAULT) UNION VALUES (DEFAULT))
|
||||||
|
@ -1522,6 +1522,112 @@ drop table t1,t2,t3;
|
|||||||
|
|
||||||
select sum((values(1)));
|
select sum((values(1)));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-22786: Nested table values constructors
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
values ((values (2)));
|
||||||
|
|
||||||
|
values ((values (2)), (5), (select 4));
|
||||||
|
|
||||||
|
values ((7), (values (2)), (5), (select 4));
|
||||||
|
|
||||||
|
values ((values (2))) union values ((values (3)));
|
||||||
|
|
||||||
|
values ((values (2))), ((values (3)));
|
||||||
|
|
||||||
|
values ((values (2))), ((select 4)), ((values (3)));
|
||||||
|
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)));
|
||||||
|
|
||||||
|
values ((values (4)), (select 5)), ((select 1), (values (7)));
|
||||||
|
|
||||||
|
values ((select 2)) union values ((values (3)));
|
||||||
|
|
||||||
|
values ((values (2))) union values((select 3));
|
||||||
|
|
||||||
|
values ((values (2))) union all values ((values (2)));
|
||||||
|
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)))
|
||||||
|
union
|
||||||
|
values ((values (4)), (select 5)), ((select 2), (values (8)));
|
||||||
|
|
||||||
|
values ((values (4)), (values (5))), ((values (1)), (values (7)))
|
||||||
|
union all
|
||||||
|
values ((values (4)), (select 5)), ((select 2), (values (8)));
|
||||||
|
|
||||||
|
values ((values (1) union values (1)));
|
||||||
|
|
||||||
|
values ((values (1) union values (1) union values (1)));
|
||||||
|
|
||||||
|
values ((values ((values (4)))));
|
||||||
|
|
||||||
|
values ((values ((select 5))));
|
||||||
|
|
||||||
|
values ((select (values (4))), (values ((values(5)))));
|
||||||
|
|
||||||
|
values ((select (values (4))), (values ((select 5))));
|
||||||
|
|
||||||
|
values ((select (values (4))), (values ((values(5)))))
|
||||||
|
union
|
||||||
|
values ((select (values (4))), (values ((select 7))));
|
||||||
|
|
||||||
|
values ((values (2))), ((values ((values (4)))));
|
||||||
|
|
||||||
|
values ((values (2))), ((values ((select 4))));
|
||||||
|
|
||||||
|
values ((values (2))), ((values ((values (4)))))
|
||||||
|
union
|
||||||
|
values ((values (8))), ((values ((select 4))));
|
||||||
|
|
||||||
|
values ((values (2))), ((values ((values (4)))))
|
||||||
|
union all
|
||||||
|
values ((values (8))), ((values ((select 4))));
|
||||||
|
|
||||||
|
select * from (values ((values (2)))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values (2)), (5), (select 4))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values (2))) union values ((values (3)))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values (2))), ((values (3)))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values (2))), ((values (3)))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values (2))), ((select 4)), ((values (3)))) dt;
|
||||||
|
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (3), (7), (1);
|
||||||
|
|
||||||
|
values ((values ((select a from t1 where a=7))));
|
||||||
|
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
|
||||||
|
values ((values ((select a from t1 where a=7))))
|
||||||
|
union
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
|
||||||
|
values ((values ((select a from t1 where a in ((values (7)))))));
|
||||||
|
|
||||||
|
values ((values ((select a from t1 where a in ((values (7), (8)))))));
|
||||||
|
|
||||||
|
values ((values
|
||||||
|
((select a from t1 where a in (values (7) union values (8))))));
|
||||||
|
|
||||||
|
values ((values ((select (values(2)) from t1 where a=8))));
|
||||||
|
|
||||||
|
--error ER_SUBQUERY_NO_1_ROW
|
||||||
|
values ((select (values(2)) from t1 where a<7));
|
||||||
|
|
||||||
|
select * from (values ((values ((select a from t1 where a=7))))) dt;
|
||||||
|
|
||||||
|
select * from (values ((values ((select (values(2)) from t1 where a=8))))) dt;
|
||||||
|
|
||||||
|
insert into t1(a) values ((values (2))), ((values (3)));
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 10.3 tests
|
--echo End of 10.3 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -2487,6 +2487,8 @@ void st_select_lex::init_select()
|
|||||||
with_dep= 0;
|
with_dep= 0;
|
||||||
join= 0;
|
join= 0;
|
||||||
lock_type= TL_READ_DEFAULT;
|
lock_type= TL_READ_DEFAULT;
|
||||||
|
save_many_values.empty();
|
||||||
|
save_insert_list= 0;
|
||||||
tvc= 0;
|
tvc= 0;
|
||||||
in_funcs.empty();
|
in_funcs.empty();
|
||||||
curr_tvc_name= 0;
|
curr_tvc_name= 0;
|
||||||
@ -8897,7 +8899,6 @@ bool LEX::last_field_generated_always_as_row_end()
|
|||||||
VERS_SYS_END_FLAG);
|
VERS_SYS_END_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void st_select_lex_unit::reset_distinct()
|
void st_select_lex_unit::reset_distinct()
|
||||||
{
|
{
|
||||||
union_distinct= NULL;
|
union_distinct= NULL;
|
||||||
@ -8913,6 +8914,20 @@ void st_select_lex_unit::reset_distinct()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LEX::save_values_list_state()
|
||||||
|
{
|
||||||
|
current_select->save_many_values= many_values;
|
||||||
|
current_select->save_insert_list= insert_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LEX::restore_values_list_state()
|
||||||
|
{
|
||||||
|
many_values= current_select->save_many_values;
|
||||||
|
insert_list= current_select->save_insert_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void st_select_lex_unit::fix_distinct()
|
void st_select_lex_unit::fix_distinct()
|
||||||
{
|
{
|
||||||
if (union_distinct && this != union_distinct->master_unit())
|
if (union_distinct && this != union_distinct->master_unit())
|
||||||
@ -9409,6 +9424,7 @@ bool LEX::parsed_insert_select(SELECT_LEX *first_select)
|
|||||||
bool LEX::parsed_TVC_start()
|
bool LEX::parsed_TVC_start()
|
||||||
{
|
{
|
||||||
SELECT_LEX *sel;
|
SELECT_LEX *sel;
|
||||||
|
save_values_list_state();
|
||||||
many_values.empty();
|
many_values.empty();
|
||||||
insert_list= 0;
|
insert_list= 0;
|
||||||
if (!(sel= alloc_select(TRUE)) ||
|
if (!(sel= alloc_select(TRUE)) ||
|
||||||
@ -9422,14 +9438,13 @@ bool LEX::parsed_TVC_start()
|
|||||||
|
|
||||||
SELECT_LEX *LEX::parsed_TVC_end()
|
SELECT_LEX *LEX::parsed_TVC_end()
|
||||||
{
|
{
|
||||||
|
|
||||||
SELECT_LEX *res= pop_select(); // above TVC select
|
SELECT_LEX *res= pop_select(); // above TVC select
|
||||||
if (!(res->tvc=
|
if (!(res->tvc=
|
||||||
new (thd->mem_root) table_value_constr(many_values,
|
new (thd->mem_root) table_value_constr(many_values,
|
||||||
res,
|
res,
|
||||||
res->options)))
|
res->options)))
|
||||||
return NULL;
|
return NULL;
|
||||||
many_values.empty();
|
restore_values_list_state();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1287,6 +1287,8 @@ public:
|
|||||||
/* it is for correct printing SELECT options */
|
/* it is for correct printing SELECT options */
|
||||||
thr_lock_type lock_type;
|
thr_lock_type lock_type;
|
||||||
|
|
||||||
|
List<List_item> save_many_values;
|
||||||
|
List<Item> *save_insert_list;
|
||||||
table_value_constr *tvc;
|
table_value_constr *tvc;
|
||||||
bool in_tvc;
|
bool in_tvc;
|
||||||
|
|
||||||
@ -4409,13 +4411,6 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tvc_start()
|
|
||||||
{
|
|
||||||
field_list.empty();
|
|
||||||
many_values.empty();
|
|
||||||
insert_list= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SELECT_LEX_UNIT *alloc_unit();
|
SELECT_LEX_UNIT *alloc_unit();
|
||||||
SELECT_LEX *alloc_select(bool is_select);
|
SELECT_LEX *alloc_select(bool is_select);
|
||||||
SELECT_LEX_UNIT *create_unit(SELECT_LEX*);
|
SELECT_LEX_UNIT *create_unit(SELECT_LEX*);
|
||||||
@ -4470,6 +4465,8 @@ public:
|
|||||||
bool distinct);
|
bool distinct);
|
||||||
SELECT_LEX *parsed_subselect(SELECT_LEX_UNIT *unit);
|
SELECT_LEX *parsed_subselect(SELECT_LEX_UNIT *unit);
|
||||||
bool parsed_insert_select(SELECT_LEX *firs_select);
|
bool parsed_insert_select(SELECT_LEX *firs_select);
|
||||||
|
void save_values_list_state();
|
||||||
|
void restore_values_list_state();
|
||||||
bool parsed_TVC_start();
|
bool parsed_TVC_start();
|
||||||
SELECT_LEX *parsed_TVC_end();
|
SELECT_LEX *parsed_TVC_end();
|
||||||
TABLE_LIST *parsed_derived_table(SELECT_LEX_UNIT *unit,
|
TABLE_LIST *parsed_derived_table(SELECT_LEX_UNIT *unit,
|
||||||
|
@ -672,6 +672,8 @@ st_select_lex *wrap_tvc(THD *thd, st_select_lex *tvc_sl,
|
|||||||
wrapper_sl->nest_level= tvc_sl->nest_level;
|
wrapper_sl->nest_level= tvc_sl->nest_level;
|
||||||
wrapper_sl->parsing_place= tvc_sl->parsing_place;
|
wrapper_sl->parsing_place= tvc_sl->parsing_place;
|
||||||
wrapper_sl->set_linkage(tvc_sl->get_linkage());
|
wrapper_sl->set_linkage(tvc_sl->get_linkage());
|
||||||
|
wrapper_sl->exclude_from_table_unique_test=
|
||||||
|
tvc_sl->exclude_from_table_unique_test;
|
||||||
|
|
||||||
lex->current_select= wrapper_sl;
|
lex->current_select= wrapper_sl;
|
||||||
item= new (thd->mem_root) Item_field(thd, &wrapper_sl->context,
|
item= new (thd->mem_root) Item_field(thd, &wrapper_sl->context,
|
||||||
|
Reference in New Issue
Block a user