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
5e68c5ce
Commit
5e68c5ce
authored
Nov 04, 2012
by
Sergey Petrunya
Browse files
Options
Browse Files
Download
Plain Diff
Merge 5.5 -> 10.0-serg
parents
be0be7af
39e7072d
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
216 additions
and
16 deletions
+216
-16
mysql-test/r/subselect2.result
mysql-test/r/subselect2.result
+98
-1
mysql-test/t/subselect2.test
mysql-test/t/subselect2.test
+95
-1
mysys/my_context.c
mysys/my_context.c
+1
-1
sql/opt_range.cc
sql/opt_range.cc
+7
-0
sql/sql_select.cc
sql/sql_select.cc
+14
-13
sql/sql_select.h
sql/sql_select.h
+1
-0
No files found.
mysql-test/r/subselect2.result
View file @
5e68c5ce
...
...
@@ -180,6 +180,32 @@ SET optimizer_switch=@tmp_optimizer_switch;
DROP VIEW v1;
DROP TABLE t1,t2,t3;
#
# MDEV-536: LP:1050806 - different result for a query using subquery
#
DROP TABLE IF EXISTS `t1`;
Warnings:
Note 1051 Unknown table 't1'
CREATE TABLE `t1` (
`node_uid` bigint(20) unsigned DEFAULT NULL,
`date` datetime DEFAULT NULL,
`mirror_date` datetime DEFAULT NULL,
KEY `date` (`date`)
) ENGINE=MyISAM;
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
SELECT * FROM (
SELECT node_uid, date, mirror_date, @result := 0 AS result
FROM t1
WHERE date < '2012-12-12 12:12:12'
AND node_uid in (2085, 2084)
ORDER BY mirror_date ASC
) AS calculated_result;
node_uid date mirror_date result
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
DROP TABLE t1;
#
# MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed
#
CREATE TABLE t1 (a int, b int, INDEX idx(a));
...
...
@@ -197,5 +223,76 @@ a b
1 0
1 1
1 3
DROP TABLE t1, t2, t3;
set @tmp_mdev567=@@optimizer_switch;
set optimizer_switch='mrr=off';
SELECT * FROM t3
WHERE a = (SELECT COUNT(DISTINCT t2.b) FROM t1, t2
WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9
AND t3.b = t1.b
GROUP BY t1.b);
a b
1 0
1 1
1 3
DROP TABLE t1,t2,t3;
set optimizer_switch=@tmp_mdev567;
#
# MDEV-614, also MDEV-536, also LP:1050806:
# different result for a query using subquery between 5.5.25 and 5.5.27
#
CREATE TABLE `t1` (
`node_uid` bigint(20) unsigned DEFAULT NULL,
`date` datetime DEFAULT NULL,
`mirror_date` datetime DEFAULT NULL,
KEY `date` (`date`)
) ENGINE=MyISAM;
INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00');
INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00');
INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00');
explain
SELECT * FROM (
SELECT node_uid, date, mirror_date, @result := 0 AS result
FROM t1
WHERE date < '2012-12-12 12:12:12'
AND node_uid in (2085, 2084)
ORDER BY mirror_date ASC
) AS calculated_result;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE <derived2> ALL NULL NULL NULL NULL 2
2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Rowid-ordered scan; Using filesort
SELECT * FROM (
SELECT node_uid, date, mirror_date, @result := 0 AS result
FROM t1
WHERE date < '2012-12-12 12:12:12'
AND node_uid in (2085, 2084)
ORDER BY mirror_date ASC
) AS calculated_result;
node_uid date mirror_date result
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
set @tmp_mdev614=@@optimizer_switch;
set optimizer_switch='mrr=off';
explain
SELECT * FROM (
SELECT node_uid, date, mirror_date, @result := 0 AS result
FROM t1
WHERE date < '2012-12-12 12:12:12'
AND node_uid in (2085, 2084)
ORDER BY mirror_date ASC
) AS calculated_result;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE <derived2> ALL NULL NULL NULL NULL 2
2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Using filesort
SELECT * FROM (
SELECT node_uid, date, mirror_date, @result := 0 AS result
FROM t1
WHERE date < '2012-12-12 12:12:12'
AND node_uid in (2085, 2084)
ORDER BY mirror_date ASC
) AS calculated_result;
node_uid date mirror_date result
2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0
2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0
set optimizer_switch=@tmp_mdev614;
DROP TABLE t1;
set optimizer_switch=@subselect2_test_tmp;
mysql-test/t/subselect2.test
View file @
5e68c5ce
...
...
@@ -203,6 +203,32 @@ SET optimizer_switch=@tmp_optimizer_switch;
DROP
VIEW
v1
;
DROP
TABLE
t1
,
t2
,
t3
;
--
echo
#
--
echo
# MDEV-536: LP:1050806 - different result for a query using subquery
--
echo
#
DROP
TABLE
IF
EXISTS
`t1`
;
CREATE
TABLE
`t1`
(
`node_uid`
bigint
(
20
)
unsigned
DEFAULT
NULL
,
`date`
datetime
DEFAULT
NULL
,
`mirror_date`
datetime
DEFAULT
NULL
,
KEY
`date`
(
`date`
)
)
ENGINE
=
MyISAM
;
INSERT
INTO
`t1`
VALUES
(
2085
,
'2012-01-01 00:00:00'
,
'2013-01-01 00:00:00'
);
INSERT
INTO
`t1`
VALUES
(
2084
,
'2012-02-01 00:00:00'
,
'2013-01-01 00:00:00'
);
INSERT
INTO
`t1`
VALUES
(
2088
,
'2012-03-01 00:00:00'
,
'2013-01-01 00:00:00'
);
SELECT
*
FROM
(
SELECT
node_uid
,
date
,
mirror_date
,
@
result
:=
0
AS
result
FROM
t1
WHERE
date
<
'2012-12-12 12:12:12'
AND
node_uid
in
(
2085
,
2084
)
ORDER
BY
mirror_date
ASC
)
AS
calculated_result
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed
--
echo
#
...
...
@@ -220,7 +246,75 @@ SELECT * FROM t3
WHERE
t1
.
a
=
t2
.
a
AND
t2
.
a
BETWEEN
7
AND
9
AND
t3
.
b
=
t1
.
b
GROUP
BY
t1
.
b
);
DROP
TABLE
t1
,
t2
,
t3
;
set
@
tmp_mdev567
=@@
optimizer_switch
;
set
optimizer_switch
=
'mrr=off'
;
SELECT
*
FROM
t3
WHERE
a
=
(
SELECT
COUNT
(
DISTINCT
t2
.
b
)
FROM
t1
,
t2
WHERE
t1
.
a
=
t2
.
a
AND
t2
.
a
BETWEEN
7
AND
9
AND
t3
.
b
=
t1
.
b
GROUP
BY
t1
.
b
);
DROP
TABLE
t1
,
t2
,
t3
;
set
optimizer_switch
=@
tmp_mdev567
;
--
echo
#
--
echo
# MDEV-614, also MDEV-536, also LP:1050806:
--
echo
# different result for a query using subquery between 5.5.25 and 5.5.27
--
echo
#
CREATE
TABLE
`t1`
(
`node_uid`
bigint
(
20
)
unsigned
DEFAULT
NULL
,
`date`
datetime
DEFAULT
NULL
,
`mirror_date`
datetime
DEFAULT
NULL
,
KEY
`date`
(
`date`
)
)
ENGINE
=
MyISAM
;
INSERT
INTO
`t1`
VALUES
(
2085
,
'2012-01-01 00:00:00'
,
'2013-01-01 00:00:00'
);
INSERT
INTO
`t1`
VALUES
(
2084
,
'2012-02-01 00:00:00'
,
'2013-01-01 00:00:00'
);
INSERT
INTO
`t1`
VALUES
(
2088
,
'2012-03-01 00:00:00'
,
'2013-01-01 00:00:00'
);
explain
SELECT
*
FROM
(
SELECT
node_uid
,
date
,
mirror_date
,
@
result
:=
0
AS
result
FROM
t1
WHERE
date
<
'2012-12-12 12:12:12'
AND
node_uid
in
(
2085
,
2084
)
ORDER
BY
mirror_date
ASC
)
AS
calculated_result
;
SELECT
*
FROM
(
SELECT
node_uid
,
date
,
mirror_date
,
@
result
:=
0
AS
result
FROM
t1
WHERE
date
<
'2012-12-12 12:12:12'
AND
node_uid
in
(
2085
,
2084
)
ORDER
BY
mirror_date
ASC
)
AS
calculated_result
;
set
@
tmp_mdev614
=@@
optimizer_switch
;
set
optimizer_switch
=
'mrr=off'
;
explain
SELECT
*
FROM
(
SELECT
node_uid
,
date
,
mirror_date
,
@
result
:=
0
AS
result
FROM
t1
WHERE
date
<
'2012-12-12 12:12:12'
AND
node_uid
in
(
2085
,
2084
)
ORDER
BY
mirror_date
ASC
)
AS
calculated_result
;
SELECT
*
FROM
(
SELECT
node_uid
,
date
,
mirror_date
,
@
result
:=
0
AS
result
FROM
t1
WHERE
date
<
'2012-12-12 12:12:12'
AND
node_uid
in
(
2085
,
2084
)
ORDER
BY
mirror_date
ASC
)
AS
calculated_result
;
set
optimizer_switch
=@
tmp_mdev614
;
DROP
TABLE
t1
;
set
optimizer_switch
=@
subselect2_test_tmp
;
mysys/my_context.c
View file @
5e68c5ce
...
...
@@ -206,7 +206,7 @@ my_context_spawn(struct my_context *c, void (*f)(void *), void *d)
(
"movq %%rsp, (%[save])
\n\t
"
"movq %[stack], %%rsp
\n\t
"
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4
&& !defined(__INTEL_COMPILER)
/*
This emits a DWARF DW_CFA_undefined directive to make the return address
undefined. This indicates that this is the top of the stack frame, and
...
...
sql/opt_range.cc
View file @
5e68c5ce
...
...
@@ -10960,6 +10960,13 @@ int QUICK_RANGE_SELECT::reset()
cur_range
=
(
QUICK_RANGE
**
)
ranges
.
buffer
;
RANGE_SEQ_IF
seq_funcs
=
{
NULL
,
quick_range_seq_init
,
quick_range_seq_next
,
0
,
0
};
if
(
file
->
inited
==
handler
::
RND
)
{
/* Handler could be left in this state by MRR */
if
((
error
=
file
->
ha_rnd_end
()))
DBUG_RETURN
(
error
);
}
if
(
in_ror_merged_scan
)
head
->
column_bitmaps_set_no_signal
(
&
column_bitmap
,
&
column_bitmap
);
...
...
sql/sql_select.cc
View file @
5e68c5ce
...
...
@@ -19065,6 +19065,20 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
save_pre_sort_join_tab
=
join
->
pre_sort_join_tab
;
join
->
pre_sort_join_tab
=
NULL
;
}
else
{
/*
Save index #, save index condition. Do it right now, because MRR may
*/
if
(
table
->
file
->
inited
==
handler
::
INDEX
)
{
join
->
pre_sort_index
=
table
->
file
->
active_index
;
join
->
pre_sort_idx_pushed_cond
=
table
->
file
->
pushed_idx_cond
;
// no need to save key_read
}
else
join
->
pre_sort_index
=
MAX_KEY
;
}
/* Currently ORDER BY ... LIMIT is not supported in subqueries. */
DBUG_ASSERT
(
join
->
group_list
||
!
join
->
is_in_subquery
());
...
...
@@ -19155,17 +19169,6 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
*
(
join
->
pre_sort_join_tab
)
=
*
tab
;
if
(
table
->
file
->
inited
==
handler
::
INDEX
)
{
// Save index #, save index condition
join
->
pre_sort_index
=
table
->
file
->
active_index
;
join
->
pre_sort_idx_pushed_cond
=
table
->
file
->
pushed_idx_cond
;
// no need to save key_read?
err
=
table
->
file
->
ha_index_end
();
}
else
join
->
pre_sort_index
=
MAX_KEY
;
/*TODO: here, close the index scan, cancel index-only read. */
#if 0
/* MariaDB doesn't need the following: */
...
...
@@ -19211,8 +19214,6 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
#endif
tab
->
select
=
NULL
;
tab
->
set_select_cond
(
NULL
,
__LINE__
);
// tab->last_inner= 0;
// tab->first_unmatched= 0;
tab
->
type
=
JT_ALL
;
// Read with normal read_record
tab
->
read_first_record
=
join_init_read_record
;
tab
->
table
->
file
->
ha_index_or_rnd_end
();
...
...
sql/sql_select.h
View file @
5e68c5ce
...
...
@@ -895,6 +895,7 @@ class JOIN :public Sql_alloc
public:
JOIN_TAB
*
join_tab
,
**
best_ref
;
/*
For "Using temporary+Using filesort" queries, JOIN::join_tab can point to
either:
...
...
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