mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Manual merge
This commit is contained in:
@ -1,3 +1,4 @@
|
|||||||
|
drop table if exists t1,t2;
|
||||||
show tables;
|
show tables;
|
||||||
Tables_in_mysql
|
Tables_in_mysql
|
||||||
columns_priv
|
columns_priv
|
||||||
@ -71,3 +72,8 @@ show tables;
|
|||||||
Tables_in_test
|
Tables_in_test
|
||||||
delete from mysql.user where user=_binary"test";
|
delete from mysql.user where user=_binary"test";
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
create table t1 (id integer not null auto_increment primary key);
|
||||||
|
create temporary table t2(id integer not null auto_increment primary key);
|
||||||
|
set @id := 1;
|
||||||
|
delete from t1 where id like @id;
|
||||||
|
drop table t1;
|
||||||
|
@ -555,6 +555,31 @@ IFNULL(a, 'TEST') COALESCE(b, 'TEST')
|
|||||||
4 TEST
|
4 TEST
|
||||||
TEST TEST
|
TEST TEST
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
CREATE TABLE t1 (a INT(10) NOT NULL, b INT(10) NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
INSERT INTO t1 VALUES (1, 2);
|
||||||
|
SELECT a, b, a AS c, COUNT(*) AS count FROM t1 GROUP BY a, b, c WITH ROLLUP;
|
||||||
|
a b c count
|
||||||
|
1 1 1 1
|
||||||
|
1 1 NULL 1
|
||||||
|
1 2 1 1
|
||||||
|
1 2 NULL 1
|
||||||
|
1 NULL NULL 2
|
||||||
|
NULL NULL NULL 2
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a int(11) NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
SELECT * FROM (SELECT a, a + 1, COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
|
||||||
|
a a + 1 COUNT(*)
|
||||||
|
1 2 1
|
||||||
|
2 3 1
|
||||||
|
NULL NULL 2
|
||||||
|
SELECT * FROM (SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
|
||||||
|
a LENGTH(a) COUNT(*)
|
||||||
|
1 1 1
|
||||||
|
2 1 1
|
||||||
|
NULL NULL 2
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1(id int, type char(1));
|
CREATE TABLE t1(id int, type char(1));
|
||||||
INSERT INTO t1 VALUES
|
INSERT INTO t1 VALUES
|
||||||
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
|
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
|
||||||
@ -577,15 +602,3 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using filesort
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using filesort
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a INT(10) NOT NULL, b INT(10) NOT NULL);
|
|
||||||
INSERT INTO t1 VALUES (1, 1);
|
|
||||||
INSERT INTO t1 VALUES (1, 2);
|
|
||||||
SELECT a, b, a AS c, COUNT(*) AS count FROM t1 GROUP BY a, b, c WITH ROLLUP;
|
|
||||||
a b c count
|
|
||||||
1 1 1 1
|
|
||||||
1 1 NULL 1
|
|
||||||
1 2 1 1
|
|
||||||
1 2 NULL 1
|
|
||||||
1 NULL NULL 2
|
|
||||||
NULL NULL NULL 2
|
|
||||||
DROP TABLE t1;
|
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
# This test makes no sense with the embedded server
|
# This test makes no sense with the embedded server
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
#connect (con1,localhost,root,,"");
|
#connect (con1,localhost,root,,"");
|
||||||
#show tables;
|
#show tables;
|
||||||
connect (con1,localhost,root,,mysql);
|
connect (con1,localhost,root,,mysql);
|
||||||
@ -77,4 +81,18 @@ show tables;
|
|||||||
delete from mysql.user where user=_binary"test";
|
delete from mysql.user where user=_binary"test";
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#12517: Clear user variables and replication events before
|
||||||
|
# closing temp tables in thread cleanup.
|
||||||
|
connect (con2,localhost,root,,test);
|
||||||
|
connection con2;
|
||||||
|
create table t1 (id integer not null auto_increment primary key);
|
||||||
|
create temporary table t2(id integer not null auto_increment primary key);
|
||||||
|
set @id := 1;
|
||||||
|
delete from t1 where id like @id;
|
||||||
|
disconnect con2;
|
||||||
|
--sleep 5
|
||||||
|
connection default;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -2,10 +2,6 @@
|
|||||||
drop table if exists t1,t2;
|
drop table if exists t1,t2;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
set @sav_dpi= @@div_precision_increment;
|
|
||||||
set div_precision_increment= 5;
|
|
||||||
show variables like 'div_precision_increment';
|
|
||||||
|
|
||||||
create table t1 (product varchar(32), country_id int not null, year int, profit int);
|
create table t1 (product varchar(32), country_id int not null, year int, profit int);
|
||||||
insert into t1 values ( 'Computer', 2,2000, 1200),
|
insert into t1 values ( 'Computer', 2,2000, 1200),
|
||||||
( 'TV', 1, 1999, 150),
|
( 'TV', 1, 1999, 150),
|
||||||
@ -157,13 +153,6 @@ SELECT DISTINCT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1
|
|||||||
SELECT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
SELECT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
||||||
SELECT DISTINCT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
SELECT DISTINCT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
||||||
|
|
||||||
SELECT b, a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
|
||||||
SELECT DISTINCT b,a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
|
|
||||||
|
|
||||||
ALTER TABLE t1 ADD COLUMN c INT;
|
|
||||||
SELECT a,b,sum(c) FROM t1 GROUP BY a,b,c WITH ROLLUP;
|
|
||||||
SELECT distinct a,b,sum(c) FROM t1 GROUP BY a,b,c WITH ROLLUP;
|
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -195,7 +184,6 @@ SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP;
|
|||||||
SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2;
|
SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
set div_precision_increment= @sav_dpi;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tests for bug #7914: ROLLUP over expressions on temporary table
|
# Tests for bug #7914: ROLLUP over expressions on temporary table
|
||||||
@ -251,21 +239,6 @@ SELECT IFNULL(a, 'TEST'), COALESCE(b, 'TEST') FROM t2
|
|||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tests for bug #11639: ROLLUP over view executed through filesort
|
|
||||||
#
|
|
||||||
|
|
||||||
CREATE TABLE t1(id int, type char(1));
|
|
||||||
INSERT INTO t1 VALUES
|
|
||||||
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
|
|
||||||
(6,"B"),(7,"A"),(8,"C"),(9,"A"),(10,"C");
|
|
||||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
||||||
|
|
||||||
SELECT type FROM t1 GROUP BY type WITH ROLLUP;
|
|
||||||
SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
|
||||||
EXPLAIN SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
|
||||||
|
|
||||||
DROP VIEW v1;
|
|
||||||
DROP TABLE t1;
|
|
||||||
# Test for bug #11543: ROLLUP query with a repeated column in GROUP BY
|
# Test for bug #11543: ROLLUP query with a repeated column in GROUP BY
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -277,4 +250,17 @@ SELECT a, b, a AS c, COUNT(*) AS count FROM t1 GROUP BY a, b, c WITH ROLLUP;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #11885: derived table specified by a subquery with
|
||||||
|
# ROLLUP over expressions on not nullable group by attributes
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int(11) NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
|
||||||
|
SELECT * FROM (SELECT a, a + 1, COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
|
||||||
|
SELECT * FROM (SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -266,5 +266,5 @@ SignalSender::execNodeStatus(void* signalSender,
|
|||||||
|
|
||||||
template SimpleSignal* SignalSender::waitFor<WaitForNode>(unsigned, WaitForNode&);
|
template SimpleSignal* SignalSender::waitFor<WaitForNode>(unsigned, WaitForNode&);
|
||||||
template SimpleSignal* SignalSender::waitFor<WaitForAny>(unsigned, WaitForAny&);
|
template SimpleSignal* SignalSender::waitFor<WaitForAny>(unsigned, WaitForAny&);
|
||||||
template Vector<SimpleSignal*>;
|
template class Vector<SimpleSignal*>;
|
||||||
|
|
||||||
|
@ -377,6 +377,8 @@ void THD::cleanup(void)
|
|||||||
mysql_ha_flush(this, (TABLE_LIST*) 0,
|
mysql_ha_flush(this, (TABLE_LIST*) 0,
|
||||||
MYSQL_HA_CLOSE_FINAL | MYSQL_HA_FLUSH_ALL);
|
MYSQL_HA_CLOSE_FINAL | MYSQL_HA_FLUSH_ALL);
|
||||||
hash_free(&handler_tables_hash);
|
hash_free(&handler_tables_hash);
|
||||||
|
delete_dynamic(&user_var_events);
|
||||||
|
hash_free(&user_vars);
|
||||||
close_temporary_tables(this);
|
close_temporary_tables(this);
|
||||||
my_free((char*) variables.time_format, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((char*) variables.time_format, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
my_free((char*) variables.date_format, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((char*) variables.date_format, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
@ -13043,6 +13043,8 @@ void free_underlaid_joins(THD *thd, SELECT_LEX *select)
|
|||||||
The function replaces occurrences of group by fields in expr
|
The function replaces occurrences of group by fields in expr
|
||||||
by ref objects for these fields unless they are under aggregate
|
by ref objects for these fields unless they are under aggregate
|
||||||
functions.
|
functions.
|
||||||
|
The function also corrects value of the the maybe_null attribute
|
||||||
|
for the items of all subexpressions containing group by fields.
|
||||||
|
|
||||||
IMPLEMENTATION
|
IMPLEMENTATION
|
||||||
The function recursively traverses the tree of the expr expression,
|
The function recursively traverses the tree of the expr expression,
|
||||||
@ -13053,6 +13055,9 @@ void free_underlaid_joins(THD *thd, SELECT_LEX *select)
|
|||||||
This substitution is needed GROUP BY queries with ROLLUP if
|
This substitution is needed GROUP BY queries with ROLLUP if
|
||||||
SELECT list contains expressions over group by attributes.
|
SELECT list contains expressions over group by attributes.
|
||||||
|
|
||||||
|
TODO: Some functions are not null-preserving. For those functions
|
||||||
|
updating of the maybe_null attribute is an overkill.
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
SELECT a+1 FROM t1 GROUP BY a WITH ROLLUP
|
SELECT a+1 FROM t1 GROUP BY a WITH ROLLUP
|
||||||
SELECT SUM(a)+a FROM t1 GROUP BY a WITH ROLLUP
|
SELECT SUM(a)+a FROM t1 GROUP BY a WITH ROLLUP
|
||||||
@ -13074,6 +13079,7 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
|
|||||||
arg != arg_end; arg++)
|
arg != arg_end; arg++)
|
||||||
{
|
{
|
||||||
Item *item= *arg;
|
Item *item= *arg;
|
||||||
|
bool arg_changed= FALSE;
|
||||||
if (item->type() == Item::FIELD_ITEM || item->type() == Item::REF_ITEM)
|
if (item->type() == Item::FIELD_ITEM || item->type() == Item::REF_ITEM)
|
||||||
{
|
{
|
||||||
ORDER *group_tmp;
|
ORDER *group_tmp;
|
||||||
@ -13086,15 +13092,20 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
|
|||||||
item->name)))
|
item->name)))
|
||||||
return 1; // fatal_error is set
|
return 1; // fatal_error is set
|
||||||
thd->change_item_tree(arg, new_item);
|
thd->change_item_tree(arg, new_item);
|
||||||
*changed= TRUE;
|
arg_changed= TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (item->type() == Item::FUNC_ITEM)
|
else if (item->type() == Item::FUNC_ITEM)
|
||||||
{
|
{
|
||||||
if (change_group_ref(thd, (Item_func *) item, group_list, changed))
|
if (change_group_ref(thd, (Item_func *) item, group_list, &arg_changed))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (arg_changed)
|
||||||
|
{
|
||||||
|
expr->maybe_null= 1;
|
||||||
|
*changed= TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -13157,7 +13168,7 @@ bool JOIN::rollup_init()
|
|||||||
}
|
}
|
||||||
if (item->type() == Item::FUNC_ITEM)
|
if (item->type() == Item::FUNC_ITEM)
|
||||||
{
|
{
|
||||||
bool changed= 0;
|
bool changed= FALSE;
|
||||||
if (change_group_ref(thd, (Item_func *) item, group_list, &changed))
|
if (change_group_ref(thd, (Item_func *) item, group_list, &changed))
|
||||||
return 1;
|
return 1;
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user