Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
39e2c957
Commit
39e2c957
authored
Mar 08, 2021
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.3 into 10.4
parents
fcc9f8b1
08d8bce5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
305 additions
and
10 deletions
+305
-10
mysql-test/main/table_value_constr.result
mysql-test/main/table_value_constr.result
+175
-0
mysql-test/main/table_value_constr.test
mysql-test/main/table_value_constr.test
+106
-0
sql/sql_lex.cc
sql/sql_lex.cc
+18
-3
sql/sql_lex.h
sql/sql_lex.h
+4
-7
sql/sql_tvc.cc
sql/sql_tvc.cc
+2
-0
No files found.
mysql-test/main/table_value_constr.result
View file @
39e2c957
...
...
@@ -2887,6 +2887,181 @@ drop table t1,t2,t3;
select sum((values(1)));
sum((values(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
#
# MDEV-22610 Crash in INSERT INTO t1 (VALUES (DEFAULT) UNION VALUES (DEFAULT))
...
...
mysql-test/main/table_value_constr.test
View file @
39e2c957
...
...
@@ -1522,6 +1522,112 @@ drop table t1,t2,t3;
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
#
...
...
sql/sql_lex.cc
View file @
39e2c957
...
...
@@ -2487,6 +2487,8 @@ void st_select_lex::init_select()
with_dep
=
0
;
join
=
0
;
lock_type
=
TL_READ_DEFAULT
;
save_many_values
.
empty
();
save_insert_list
=
0
;
tvc
=
0
;
in_funcs
.
empty
();
curr_tvc_name
=
0
;
...
...
@@ -8897,7 +8899,6 @@ bool LEX::last_field_generated_always_as_row_end()
VERS_SYS_END_FLAG
);
}
void
st_select_lex_unit
::
reset_distinct
()
{
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
()
{
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
()
{
SELECT_LEX
*
sel
;
save_values_list_state
();
many_values
.
empty
();
insert_list
=
0
;
if
(
!
(
sel
=
alloc_select
(
TRUE
))
||
...
...
@@ -9422,14 +9438,13 @@ bool LEX::parsed_TVC_start()
SELECT_LEX
*
LEX
::
parsed_TVC_end
()
{
SELECT_LEX
*
res
=
pop_select
();
// above TVC select
if
(
!
(
res
->
tvc
=
new
(
thd
->
mem_root
)
table_value_constr
(
many_values
,
res
,
res
->
options
)))
return
NULL
;
many_values
.
empty
();
restore_values_list_state
();
return
res
;
}
...
...
sql/sql_lex.h
View file @
39e2c957
...
...
@@ -1287,6 +1287,8 @@ class st_select_lex: public st_select_lex_node
/* it is for correct printing SELECT options */
thr_lock_type
lock_type
;
List
<
List_item
>
save_many_values
;
List
<
Item
>
*
save_insert_list
;
table_value_constr
*
tvc
;
bool
in_tvc
;
...
...
@@ -4409,13 +4411,6 @@ struct LEX: public Query_tables_list
return
false
;
}
void
tvc_start
()
{
field_list
.
empty
();
many_values
.
empty
();
insert_list
=
0
;
}
SELECT_LEX_UNIT
*
alloc_unit
();
SELECT_LEX
*
alloc_select
(
bool
is_select
);
SELECT_LEX_UNIT
*
create_unit
(
SELECT_LEX
*
);
...
...
@@ -4470,6 +4465,8 @@ struct LEX: public Query_tables_list
bool
distinct
);
SELECT_LEX
*
parsed_subselect
(
SELECT_LEX_UNIT
*
unit
);
bool
parsed_insert_select
(
SELECT_LEX
*
firs_select
);
void
save_values_list_state
();
void
restore_values_list_state
();
bool
parsed_TVC_start
();
SELECT_LEX
*
parsed_TVC_end
();
TABLE_LIST
*
parsed_derived_table
(
SELECT_LEX_UNIT
*
unit
,
...
...
sql/sql_tvc.cc
View file @
39e2c957
...
...
@@ -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
->
parsing_place
=
tvc_sl
->
parsing_place
;
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
;
item
=
new
(
thd
->
mem_root
)
Item_field
(
thd
,
&
wrapper_sl
->
context
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment