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
ea2aaa4e
Commit
ea2aaa4e
authored
Mar 30, 2006
by
igor@rurik.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
parents
c67ed1ee
0f9ab67d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
123 additions
and
5 deletions
+123
-5
mysql-test/r/join_nested.result
mysql-test/r/join_nested.result
+58
-0
mysql-test/t/join_nested.test
mysql-test/t/join_nested.test
+52
-0
sql/sql_prepare.cc
sql/sql_prepare.cc
+9
-3
sql/sql_select.cc
sql/sql_select.cc
+4
-2
No files found.
mysql-test/r/join_nested.result
View file @
ea2aaa4e
...
@@ -1504,3 +1504,61 @@ id type cid id pid pid type
...
@@ -1504,3 +1504,61 @@ id type cid id pid pid type
1 A NULL NULL NULL NULL NULL
1 A NULL NULL NULL NULL NULL
DROP VIEW v1;
DROP VIEW v1;
DROP TABLE t1,t2,t3;
DROP TABLE t1,t2,t3;
CREATE TABLE t1 (id1 int PRIMARY KEY, id2 int);
CREATE TABLE t2 (id1 int PRIMARY KEY, id2 int);
CREATE TABLE t3 (id1 int PRIMARY KEY, id2 int);
CREATE TABLE t4 (id1 int PRIMARY KEY, id2 int);
CREATE TABLE t5 (id1 int PRIMARY KEY, id2 int);
SELECT t1.id1 AS id, t5.id1 AS ngroupbynsa
FROM t1 INNER JOIN t2 ON t2.id2 = t1.id1
LEFT OUTER JOIN
(t3 INNER JOIN t4 ON t4.id1 = t3.id2 INNER JOIN t5 ON t4.id2 = t5.id1)
ON t3.id2 IS NOT NULL
WHERE t1.id1=2;
id ngroupbynsa
PREPARE stmt FROM
"SELECT t1.id1 AS id, t5.id1 AS ngroupbynsa
FROM t1 INNER JOIN t2 ON t2.id2 = t1.id1
LEFT OUTER JOIN
(t3 INNER JOIN t4 ON t4.id1 = t3.id2 INNER JOIN t5 ON t4.id2 = t5.id1)
ON t3.id2 IS NOT NULL
WHERE t1.id1=2";
EXECUTE stmt;
id ngroupbynsa
EXECUTE stmt;
id ngroupbynsa
EXECUTE stmt;
id ngroupbynsa
EXECUTE stmt;
id ngroupbynsa
INSERT INTO t1 VALUES (1,1), (2,1), (3,2);
INSERT INTO t2 VALUES (2,1), (3,2), (4,3);
INSERT INTO t3 VALUES (1,1), (3,2), (2,NULL);
INSERT INTO t4 VALUES (1,1), (2,1), (3,3);
INSERT INTO t5 VALUES (1,1), (2,2), (3,3), (4,3);
EXECUTE stmt;
id ngroupbynsa
2 1
2 1
EXECUTE stmt;
id ngroupbynsa
2 1
2 1
EXECUTE stmt;
id ngroupbynsa
2 1
2 1
EXECUTE stmt;
id ngroupbynsa
2 1
2 1
SELECT t1.id1 AS id, t5.id1 AS ngroupbynsa
FROM t1 INNER JOIN t2 ON t2.id2 = t1.id1
LEFT OUTER JOIN
(t3 INNER JOIN t4 ON t4.id1 = t3.id2 INNER JOIN t5 ON t4.id2 = t5.id1)
ON t3.id2 IS NOT NULL
WHERE t1.id1=2;
id ngroupbynsa
2 1
2 1
DROP TABLE t1,t2,t3,t4,t5;
mysql-test/t/join_nested.test
View file @
ea2aaa4e
...
@@ -942,3 +942,55 @@ SELECT * FROM t1 p LEFT JOIN v1 ON p.id=v1.id
...
@@ -942,3 +942,55 @@ SELECT * FROM t1 p LEFT JOIN v1 ON p.id=v1.id
DROP
VIEW
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
,
t2
,
t3
;
DROP
TABLE
t1
,
t2
,
t3
;
#
# Test for bug #18279: crash when on conditions are moved out of a nested join
# to the on conditions for the nest
CREATE
TABLE
t1
(
id1
int
PRIMARY
KEY
,
id2
int
);
CREATE
TABLE
t2
(
id1
int
PRIMARY
KEY
,
id2
int
);
CREATE
TABLE
t3
(
id1
int
PRIMARY
KEY
,
id2
int
);
CREATE
TABLE
t4
(
id1
int
PRIMARY
KEY
,
id2
int
);
CREATE
TABLE
t5
(
id1
int
PRIMARY
KEY
,
id2
int
);
SELECT
t1
.
id1
AS
id
,
t5
.
id1
AS
ngroupbynsa
FROM
t1
INNER
JOIN
t2
ON
t2
.
id2
=
t1
.
id1
LEFT
OUTER
JOIN
(
t3
INNER
JOIN
t4
ON
t4
.
id1
=
t3
.
id2
INNER
JOIN
t5
ON
t4
.
id2
=
t5
.
id1
)
ON
t3
.
id2
IS
NOT
NULL
WHERE
t1
.
id1
=
2
;
PREPARE
stmt
FROM
"SELECT t1.id1 AS id, t5.id1 AS ngroupbynsa
FROM t1 INNER JOIN t2 ON t2.id2 = t1.id1
LEFT OUTER JOIN
(t3 INNER JOIN t4 ON t4.id1 = t3.id2 INNER JOIN t5 ON t4.id2 = t5.id1)
ON t3.id2 IS NOT NULL
WHERE t1.id1=2"
;
EXECUTE
stmt
;
EXECUTE
stmt
;
EXECUTE
stmt
;
EXECUTE
stmt
;
INSERT
INTO
t1
VALUES
(
1
,
1
),
(
2
,
1
),
(
3
,
2
);
INSERT
INTO
t2
VALUES
(
2
,
1
),
(
3
,
2
),
(
4
,
3
);
INSERT
INTO
t3
VALUES
(
1
,
1
),
(
3
,
2
),
(
2
,
NULL
);
INSERT
INTO
t4
VALUES
(
1
,
1
),
(
2
,
1
),
(
3
,
3
);
INSERT
INTO
t5
VALUES
(
1
,
1
),
(
2
,
2
),
(
3
,
3
),
(
4
,
3
);
EXECUTE
stmt
;
EXECUTE
stmt
;
EXECUTE
stmt
;
EXECUTE
stmt
;
SELECT
t1
.
id1
AS
id
,
t5
.
id1
AS
ngroupbynsa
FROM
t1
INNER
JOIN
t2
ON
t2
.
id2
=
t1
.
id1
LEFT
OUTER
JOIN
(
t3
INNER
JOIN
t4
ON
t4
.
id1
=
t3
.
id2
INNER
JOIN
t5
ON
t4
.
id2
=
t5
.
id1
)
ON
t3
.
id2
IS
NOT
NULL
WHERE
t1
.
id1
=
2
;
DROP
TABLE
t1
,
t2
,
t3
,
t4
,
t5
;
sql/sql_prepare.cc
View file @
ea2aaa4e
...
@@ -2126,11 +2126,17 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
...
@@ -2126,11 +2126,17 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
/* Reset is_schema_table_processed value(needed for I_S tables */
/* Reset is_schema_table_processed value(needed for I_S tables */
tables
->
is_schema_table_processed
=
FALSE
;
tables
->
is_schema_table_processed
=
FALSE
;
if
(
tables
->
prep_on_expr
)
TABLE_LIST
*
embedded
;
/* The table at the current level of nesting. */
TABLE_LIST
*
embedding
=
tables
;
/* The parent nested table reference. */
do
{
{
tables
->
on_expr
=
tables
->
prep_on_expr
->
copy_andor_structure
(
thd
);
embedded
=
embedding
;
tables
->
on_expr
->
cleanup
();
if
(
embedded
->
prep_on_expr
)
embedded
->
on_expr
=
embedded
->
prep_on_expr
->
copy_andor_structure
(
thd
);
embedding
=
embedded
->
embedding
;
}
}
while
(
embedding
&&
embedding
->
nested_join
->
join_list
.
head
()
==
embedded
);
}
}
lex
->
current_select
=
&
lex
->
select_lex
;
lex
->
current_select
=
&
lex
->
select_lex
;
...
...
sql/sql_select.cc
View file @
ea2aaa4e
...
@@ -7469,7 +7469,7 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
...
@@ -7469,7 +7469,7 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
*/
*/
if
(
table
->
on_expr
)
if
(
table
->
on_expr
)
{
{
Item
*
expr
=
table
->
prep_on_expr
?
table
->
prep_on_expr
:
table
->
on_expr
;
Item
*
expr
=
table
->
on_expr
;
/*
/*
If an on expression E is attached to the table,
If an on expression E is attached to the table,
check all null rejected predicates in this expression.
check all null rejected predicates in this expression.
...
@@ -7480,7 +7480,9 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
...
@@ -7480,7 +7480,9 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
*/
*/
expr
=
simplify_joins
(
join
,
&
nested_join
->
join_list
,
expr
=
simplify_joins
(
join
,
&
nested_join
->
join_list
,
expr
,
FALSE
);
expr
,
FALSE
);
table
->
prep_on_expr
=
table
->
on_expr
=
expr
;
table
->
on_expr
=
expr
;
if
(
!
table
->
prep_on_expr
)
table
->
prep_on_expr
=
expr
->
copy_andor_structure
(
join
->
thd
);
}
}
nested_join
->
used_tables
=
(
table_map
)
0
;
nested_join
->
used_tables
=
(
table_map
)
0
;
nested_join
->
not_null_tables
=
(
table_map
)
0
;
nested_join
->
not_null_tables
=
(
table_map
)
0
;
...
...
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