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
d9f99816
Commit
d9f99816
authored
Oct 13, 2002
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed bug of multi-level EXPLAIN
parent
f6d9e96f
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
25 additions
and
4 deletions
+25
-4
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+8
-0
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+3
-0
sql/item_subselect.cc
sql/item_subselect.cc
+4
-1
sql/item_subselect.h
sql/item_subselect.h
+2
-1
sql/sql_lex.cc
sql/sql_lex.cc
+1
-1
sql/sql_lex.h
sql/sql_lex.h
+1
-0
sql/sql_union.cc
sql/sql_union.cc
+6
-1
No files found.
mysql-test/r/subselect.result
View file @
d9f99816
...
...
@@ -159,6 +159,14 @@ UNIQUE KEY `email` (`email`)
INSERT INTO inscrit (pseudo,email) VALUES ('joce','test');
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
EXPLAIN SELECT pseudo,(SELECT email FROM inscrit WHERE pseudo=(SELECT
pseudo FROM inscrit WHERE pseudo='joce')) FROM inscrit WHERE pseudo=(SELECT
pseudo FROM inscrit WHERE pseudo='joce');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY inscrit const PRIMARY PRIMARY 35 const 1
4 SUBSELECT inscrit const PRIMARY PRIMARY 35 const 1
2 SUBSELECT inscrit const PRIMARY PRIMARY 35 const 1
3 SUBSELECT inscrit const PRIMARY PRIMARY 35 const 1
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo,email FROM
inscrit WHERE pseudo='joce');
Subselect returns more than 1 field
...
...
mysql-test/t/subselect.test
View file @
d9f99816
...
...
@@ -82,6 +82,9 @@ CREATE TABLE `inscrit` (
INSERT
INTO
inscrit
(
pseudo
,
email
)
VALUES
(
'joce'
,
'test'
);
INSERT
INTO
inscrit
(
pseudo
,
email
)
VALUES
(
'joce1'
,
'test1'
);
INSERT
INTO
inscrit
(
pseudo
,
email
)
VALUES
(
'2joce1'
,
'2test1'
);
EXPLAIN
SELECT
pseudo
,(
SELECT
email
FROM
inscrit
WHERE
pseudo
=
(
SELECT
pseudo
FROM
inscrit
WHERE
pseudo
=
'joce'
))
FROM
inscrit
WHERE
pseudo
=
(
SELECT
pseudo
FROM
inscrit
WHERE
pseudo
=
'joce'
);
--
error
1239
SELECT
pseudo
FROM
inscrit
WHERE
pseudo
=
(
SELECT
pseudo
,
email
FROM
inscrit
WHERE
pseudo
=
'joce'
);
...
...
sql/item_subselect.cc
View file @
d9f99816
...
...
@@ -212,7 +212,7 @@ subselect_single_select_engine::subselect_single_select_engine(THD *thd,
select_subselect
*
result
,
Item_subselect
*
item
)
:
subselect_engine
(
thd
,
item
,
result
),
executed
(
0
),
optimiz
ed
(
0
)
prepared
(
0
),
optimized
(
0
),
execut
ed
(
0
)
{
select_lex
=
select
;
SELECT_LEX_UNIT
*
unit
=
select_lex
->
master_unit
();
...
...
@@ -251,6 +251,9 @@ subselect_union_engine::subselect_union_engine(THD *thd,
int
subselect_single_select_engine
::
prepare
()
{
if
(
prepared
)
return
0
;
prepared
=
1
;
SELECT_LEX
*
save_select
=
thd
->
lex
.
select
;
thd
->
lex
.
select
=
select_lex
;
if
(
join
->
prepare
((
TABLE_LIST
*
)
select_lex
->
table_list
.
first
,
...
...
sql/item_subselect.h
View file @
d9f99816
...
...
@@ -179,8 +179,9 @@ public:
class
subselect_single_select_engine
:
public
subselect_engine
{
my_bool
executed
;
/* simple subselect is execut
ed */
my_bool
prepared
;
/* simple subselect is prepar
ed */
my_bool
optimized
;
/* simple subselect is optimized */
my_bool
executed
;
/* simple subselect is executed */
st_select_lex
*
select_lex
;
/* corresponding select_lex */
JOIN
*
join
;
/* corresponding JOIN structure */
public:
...
...
sql/sql_lex.cc
View file @
d9f99816
...
...
@@ -944,7 +944,7 @@ void st_select_lex_unit::init_query()
global_parameters
=
this
;
select_limit_cnt
=
HA_POS_ERROR
;
offset_limit_cnt
=
0
;
optimized
=
0
;
prepared
=
optimized
=
0
;
item
=
0
;
}
...
...
sql/sql_lex.h
View file @
d9f99816
...
...
@@ -227,6 +227,7 @@ protected:
select_result
*
result
;
int
res
;
bool
describe
,
found_rows_for_union
,
prepared
,
//prepare phase already performed for UNION (unit)
optimized
;
// optimize phase already performed for UNION (unit)
public:
/*
...
...
sql/sql_union.cc
View file @
d9f99816
...
...
@@ -104,11 +104,16 @@ bool select_union::flush()
typedef
JOIN
*
JOIN_P
;
int
st_select_lex_unit
::
prepare
(
THD
*
thd
,
select_result
*
result
)
{
DBUG_ENTER
(
"st_select_lex_unit::prepare"
);
if
(
prepared
)
DBUG_RETURN
(
0
);
prepared
=
1
;
describe
=
(
first_select
()
->
options
&
SELECT_DESCRIBE
)
?
1
:
0
;
res
=
0
;
found_rows_for_union
=
false
;
TMP_TABLE_PARAM
tmp_table_param
;
DBUG_ENTER
(
"st_select_lex_unit::prepare"
);
this
->
thd
=
thd
;
this
->
result
=
result
;
SELECT_LEX
*
lex_select_save
=
thd
->
lex
.
select
;
...
...
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