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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
5ed07df9
Commit
5ed07df9
authored
Jun 22, 2004
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
dc6465cc
c6cd5179
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
87 additions
and
3 deletions
+87
-3
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+41
-0
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+22
-0
sql/sql_parse.cc
sql/sql_parse.cc
+13
-1
sql/sql_prepare.cc
sql/sql_prepare.cc
+11
-2
No files found.
mysql-test/r/subselect.result
View file @
5ed07df9
...
...
@@ -1850,3 +1850,44 @@ id name id pet
2 Rebecca 2 Spot
3 NULL 3 Felix
drop table t1,t2;
CREATE TABLE t1 ( a int, b int );
CREATE TABLE t2 ( c int, d int );
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
abc b
1 2
2 3
3 4
INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t2;
c d
1 2
2 3
3 4
CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t3;
abc b
1 2
2 3
3 4
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
deallocate prepare stmt1;
select * from t2;
c d
1 2
2 3
3 4
1 2
2 3
3 4
drop table t3;
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
select * from t3;
abc b
1 2
2 3
3 4
deallocate prepare stmt1;
DROP TABLE t1, t2, t3;
mysql-test/t/subselect.test
View file @
5ed07df9
...
...
@@ -1190,3 +1190,25 @@ CREATE TABLE t2 (id int(11) default NULL, pet varchar(10) default NULL);
INSERT
INTO
t2
VALUES
(
1
,
'Fido'
),(
2
,
'Spot'
),(
3
,
'Felix'
);
SELECT
a
.*
,
b
.*
FROM
(
SELECT
*
FROM
t1
)
AS
a
JOIN
t2
as
b
on
a
.
id
=
b
.
id
;
drop
table
t1
,
t2
;
#
# outer fields resolving in INSERT/REPLACE and CRETE with SELECT
#
CREATE
TABLE
t1
(
a
int
,
b
int
);
CREATE
TABLE
t2
(
c
int
,
d
int
);
INSERT
INTO
t1
VALUES
(
1
,
2
),
(
2
,
3
),
(
3
,
4
);
SELECT
a
AS
abc
,
b
FROM
t1
WHERE
b
=
(
SELECT
MIN
(
b
)
FROM
t1
WHERE
a
=
abc
);
INSERT
INTO
t2
SELECT
a
AS
abc
,
b
FROM
t1
WHERE
b
=
(
SELECT
MIN
(
b
)
FROM
t1
WHERE
a
=
abc
);
select
*
from
t2
;
CREATE
TABLE
t3
SELECT
a
AS
abc
,
b
FROM
t1
WHERE
b
=
(
SELECT
MIN
(
b
)
FROM
t1
WHERE
a
=
abc
);
select
*
from
t3
;
prepare
stmt1
from
"INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);"
;
execute
stmt1
;
deallocate
prepare
stmt1
;
select
*
from
t2
;
drop
table
t3
;
prepare
stmt1
from
"CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);"
;
execute
stmt1
;
select
*
from
t3
;
deallocate
prepare
stmt1
;
DROP
TABLE
t1
,
t2
,
t3
;
sql/sql_parse.cc
View file @
5ed07df9
...
...
@@ -2354,7 +2354,15 @@ mysql_execute_command(THD *thd)
lex
->
create_list
,
lex
->
key_list
,
select_lex
->
item_list
,
lex
->
duplicates
)))
{
/*
CREATE from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
select_lex
->
resolve_mode
=
SELECT_LEX
::
SELECT_MODE
;
res
=
handle_select
(
thd
,
lex
,
result
);
select_lex
->
resolve_mode
=
SELECT_LEX
::
NOMATTER_MODE
;
}
//reset for PS
lex
->
create_list
.
empty
();
lex
->
key_list
.
empty
();
...
...
@@ -2704,7 +2712,11 @@ unsent_create_error:
lex
->
duplicates
)))
/* Skip first table, which is the table we are inserting in */
lex
->
select_lex
.
table_list
.
first
=
(
byte
*
)
first_local_table
->
next
;
lex
->
select_lex
.
resolve_mode
=
SELECT_LEX
::
NOMATTER_MODE
;
/*
insert/replace from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
lex
->
select_lex
.
resolve_mode
=
SELECT_LEX
::
SELECT_MODE
;
res
=
handle_select
(
thd
,
lex
,
result
);
/* revert changes for SP */
lex
->
select_lex
.
table_list
.
first
=
(
byte
*
)
first_local_table
;
...
...
sql/sql_prepare.cc
View file @
5ed07df9
...
...
@@ -1307,6 +1307,7 @@ static int mysql_test_create_table(Prepared_statement *stmt,
DBUG_ENTER
(
"mysql_test_create_table"
);
THD
*
thd
=
stmt
->
thd
;
LEX
*
lex
=
stmt
->
lex
;
SELECT_LEX
*
select_lex
=
&
lex
->
select_lex
;
int
res
=
0
;
/* Skip first table, which is the table we are creating */
...
...
@@ -1315,8 +1316,12 @@ static int mysql_test_create_table(Prepared_statement *stmt,
&
create_table_local
);
if
(
!
(
res
=
create_table_precheck
(
thd
,
tables
,
create_table
))
&&
lex
->
select_lex
.
item_list
.
elements
)
select_lex
->
item_list
.
elements
)
{
select_lex
->
resolve_mode
=
SELECT_LEX
::
SELECT_MODE
;
res
=
select_like_statement_test
(
stmt
,
tables
);
select_lex
->
resolve_mode
=
SELECT_LEX
::
NOMATTER_MODE
;
}
/* put tables back for PS rexecuting */
tables
=
lex
->
link_first_table_back
(
tables
,
create_table
,
...
...
@@ -1400,7 +1405,11 @@ static int mysql_test_insert_select(Prepared_statement *stmt,
(
TABLE_LIST
*
)
lex
->
select_lex
.
table_list
.
first
;
/* Skip first table, which is the table we are inserting in */
lex
->
select_lex
.
table_list
.
first
=
(
byte
*
)
first_local_table
->
next
;
lex
->
select_lex
.
resolve_mode
=
SELECT_LEX
::
NOMATTER_MODE
;
/*
insert/replace from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
lex
->
select_lex
.
resolve_mode
=
SELECT_LEX
::
SELECT_MODE
;
res
=
select_like_statement_test
(
stmt
,
tables
);
/* revert changes*/
lex
->
select_lex
.
table_list
.
first
=
(
byte
*
)
first_local_table
;
...
...
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