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
2df0485d
Commit
2df0485d
authored
Aug 28, 2007
by
mhansson/martin@linux-st28.site
Browse files
Options
Browse Files
Download
Plain Diff
Merge mhansson@bk-internal:/home/bk/mysql-5.1-opt
into linux-st28.site:/home/martin/mysql/src/5.1o-bug30596
parents
e3450ecf
98d34d62
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
229 additions
and
4 deletions
+229
-4
mysql-test/include/mix1.inc
mysql-test/include/mix1.inc
+27
-0
mysql-test/r/distinct.result
mysql-test/r/distinct.result
+3
-3
mysql-test/r/group_by.result
mysql-test/r/group_by.result
+92
-1
mysql-test/r/innodb_mysql.result
mysql-test/r/innodb_mysql.result
+49
-0
mysql-test/t/group_by.test
mysql-test/t/group_by.test
+44
-0
sql/sql_select.cc
sql/sql_select.cc
+14
-0
No files found.
mysql-test/include/mix1.inc
View file @
2df0485d
...
...
@@ -969,6 +969,33 @@ ROLLBACK;
ROLLBACK
;
DROP
TABLE
t1
;
#
# Bug#30596: GROUP BY optimization gives wrong result order
#
CREATE
TABLE
t1
(
a
INT
,
b
INT
NOT
NULL
,
c
INT
NOT
NULL
,
d
INT
,
UNIQUE
KEY
(
c
,
b
)
)
engine
=
innodb
;
INSERT
INTO
t1
VALUES
(
1
,
1
,
1
,
50
),
(
1
,
2
,
3
,
40
),
(
2
,
1
,
3
,
4
);
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
ORDER
BY
NULL
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
ORDER
BY
NULL
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
ORDER
BY
c
,
b
,
d
;
SELECT
c
,
b
,
d
FROM
t1
ORDER
BY
c
,
b
,
d
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
;
EXPLAIN
SELECT
c
,
b
FROM
t1
GROUP
BY
c
,
b
;
SELECT
c
,
b
FROM
t1
GROUP
BY
c
,
b
;
DROP
TABLE
t1
;
--
echo
End
of
5.0
tests
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
...
...
mysql-test/r/distinct.result
View file @
2df0485d
...
...
@@ -526,10 +526,10 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL PRIMARY 4 NULL 3 Using index
EXPLAIN SELECT a,b FROM t1 GROUP BY a,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
Using filesort
EXPLAIN SELECT DISTINCT a,b FROM t1 GROUP BY a,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
Using filesort
CREATE TABLE t2(a INT, b INT NOT NULL, c INT NOT NULL, d INT,
PRIMARY KEY (a,b));
INSERT INTO t2 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
...
...
@@ -554,7 +554,7 @@ id select_type table type possible_keys key key_len ref rows Extra
CREATE UNIQUE INDEX c_b_unq ON t2 (c,b);
EXPLAIN SELECT DISTINCT a,b,d FROM t2 GROUP BY c,b,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
Using filesort
DROP TABLE t1,t2;
create table t1 (id int, dsc varchar(50));
insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three");
...
...
mysql-test/r/group_by.result
View file @
2df0485d
...
...
@@ -1093,7 +1093,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
; Using filesort
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index; Using filesort
...
...
@@ -1176,3 +1176,94 @@ old OFF
SET @@old = off;
ERROR HY000: Variable 'old' is a read only variable
DROP TABLE t1, t2;
CREATE TABLE t1(
a INT,
b INT NOT NULL,
c INT NOT NULL,
d INT,
UNIQUE KEY (c,b)
);
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
CREATE TABLE t2(
a INT,
b INT,
UNIQUE KEY(a,b)
);
INSERT INTO t2 VALUES (NULL, NULL), (NULL, NULL), (NULL, 1), (1, NULL), (1, 1), (1,2);
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
SELECT c,b,d FROM t1 GROUP BY c,b,d;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
c b d
1 1 50
3 2 40
3 1 4
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
SELECT c,b,d FROM t1 ORDER BY c,b,d;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
SELECT c,b,d FROM t1 GROUP BY c,b;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL c 8 NULL 3 Using index
SELECT c,b FROM t1 GROUP BY c,b;
c b
1 1
3 1
3 2
EXPLAIN SELECT a,b from t2 ORDER BY a,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL a 10 NULL 6 Using index
SELECT a,b from t2 ORDER BY a,b;
a b
NULL NULL
NULL NULL
NULL 1
1 NULL
1 1
1 2
EXPLAIN SELECT a,b from t2 GROUP BY a,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL a 10 NULL 6 Using index
SELECT a,b from t2 GROUP BY a,b;
a b
NULL NULL
NULL 1
1 NULL
1 1
1 2
EXPLAIN SELECT a from t2 GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL a 10 NULL 6 Using index
SELECT a from t2 GROUP BY a;
a
NULL
1
EXPLAIN SELECT b from t2 GROUP BY b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL a 10 NULL 6 Using index; Using temporary; Using filesort
SELECT b from t2 GROUP BY b;
b
NULL
1
2
DROP TABLE t1;
mysql-test/r/innodb_mysql.result
View file @
2df0485d
...
...
@@ -1141,6 +1141,55 @@ a b
ROLLBACK;
ROLLBACK;
DROP TABLE t1;
CREATE TABLE t1(
a INT,
b INT NOT NULL,
c INT NOT NULL,
d INT,
UNIQUE KEY (c,b)
) engine=innodb;
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
SELECT c,b,d FROM t1 GROUP BY c,b,d;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
SELECT c,b,d FROM t1 ORDER BY c,b,d;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL c 8 NULL 3
SELECT c,b,d FROM t1 GROUP BY c,b;
c b d
1 1 50
3 1 4
3 2 40
EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL c 8 NULL 3 Using index
SELECT c,b FROM t1 GROUP BY c,b;
c b
1 1
3 1
3 2
DROP TABLE t1;
End of 5.0 tests
CREATE TABLE `t2` (
`k` int(11) NOT NULL auto_increment,
...
...
mysql-test/t/group_by.test
View file @
2df0485d
...
...
@@ -861,3 +861,47 @@ SHOW VARIABLES LIKE 'old';
SET
@@
old
=
off
;
DROP
TABLE
t1
,
t2
;
#
# Bug#30596: GROUP BY optimization gives wrong result order
#
CREATE
TABLE
t1
(
a
INT
,
b
INT
NOT
NULL
,
c
INT
NOT
NULL
,
d
INT
,
UNIQUE
KEY
(
c
,
b
)
);
INSERT
INTO
t1
VALUES
(
1
,
1
,
1
,
50
),
(
1
,
2
,
3
,
40
),
(
2
,
1
,
3
,
4
);
CREATE
TABLE
t2
(
a
INT
,
b
INT
,
UNIQUE
KEY
(
a
,
b
)
);
INSERT
INTO
t2
VALUES
(
NULL
,
NULL
),
(
NULL
,
NULL
),
(
NULL
,
1
),
(
1
,
NULL
),
(
1
,
1
),
(
1
,
2
);
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
ORDER
BY
NULL
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
,
d
ORDER
BY
NULL
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
ORDER
BY
c
,
b
,
d
;
SELECT
c
,
b
,
d
FROM
t1
ORDER
BY
c
,
b
,
d
;
EXPLAIN
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
;
SELECT
c
,
b
,
d
FROM
t1
GROUP
BY
c
,
b
;
EXPLAIN
SELECT
c
,
b
FROM
t1
GROUP
BY
c
,
b
;
SELECT
c
,
b
FROM
t1
GROUP
BY
c
,
b
;
EXPLAIN
SELECT
a
,
b
from
t2
ORDER
BY
a
,
b
;
SELECT
a
,
b
from
t2
ORDER
BY
a
,
b
;
EXPLAIN
SELECT
a
,
b
from
t2
GROUP
BY
a
,
b
;
SELECT
a
,
b
from
t2
GROUP
BY
a
,
b
;
EXPLAIN
SELECT
a
from
t2
GROUP
BY
a
;
SELECT
a
from
t2
GROUP
BY
a
;
EXPLAIN
SELECT
b
from
t2
GROUP
BY
b
;
SELECT
b
from
t2
GROUP
BY
b
;
DROP
TABLE
t1
;
sql/sql_select.cc
View file @
2df0485d
...
...
@@ -1069,6 +1069,20 @@ JOIN::optimize()
find_field_in_order_list
,
(
void
*
)
group_list
))
{
/*
We have found that grouping can be removed since groups correspond to
only one row anyway, but we still have to guarantee correct result
order. The line below effectively rewrites the query from GROUP BY
<fields> to ORDER BY <fields>. One exception is if skip_sort_order is
set (see above), then we can simply skip GROUP BY.
*/
order
=
skip_sort_order
?
0
:
group_list
;
/*
If we have an IGNORE INDEX FOR GROUP BY(fields) clause, this must be
rewritten to IGNORE INDEX FOR ORDER BY(fields).
*/
join_tab
->
table
->
keys_in_use_for_order_by
=
join_tab
->
table
->
keys_in_use_for_group_by
;
group_list
=
0
;
group
=
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