Loading mysql-test/r/union.result +51 −0 Original line number Diff line number Diff line Loading @@ -1445,4 +1445,55 @@ select @var; 1 (select 2) union (select 1 into @var); ERROR 42000: Result consisted of more than one row CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (10), (20); CREATE TABLE t2 (b int); INSERT INTO t2 VALUES (10), (50), (50); SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a; a 1 NULL 3 10 1 20 1 50 2 SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; a 1 50 2 20 1 10 1 NULL 3 SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a ASC LIMIT 3; a 1 NULL 3 10 1 20 1 SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; a 1 50 2 20 1 10 1 10 1 NULL 3 SELECT a,1 FROM t1 UNION (SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a); ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a UNION SELECT 1,1; ERROR HY000: Incorrect usage of UNION and ORDER BY DROP TABLE t1,t2; End of 5.0 tests mysql-test/suite/rpl/r/rpl_trigger.result +8 −4 Original line number Diff line number Diff line Loading @@ -91,21 +91,25 @@ select a=b && a=c from t1; a=b && a=c 1 SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; routine_name definer bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; trigger_name definer t1_first root@localhost --- On slave -- SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; routine_name definer bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; trigger_name definer t1_first root@localhost select a=b && a=c from t1; Loading mysql-test/suite/rpl/t/rpl_trigger.test +8 −4 Original line number Diff line number Diff line Loading @@ -101,10 +101,12 @@ let $time=`select a from t1`; # - dump definers on the slave; SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; save_master_pos; connection slave; Loading @@ -119,10 +121,12 @@ select "--- On slave --" as ""; # item. SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; select a=b && a=c from t1; --disable_query_log Loading mysql-test/t/union.test +44 −0 Original line number Diff line number Diff line Loading @@ -922,4 +922,48 @@ DROP TABLE t1; select @var; --error 1172 (select 2) union (select 1 into @var); # # Bug#27848: order-by of union clashes with rollup of select part # CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (10), (20); CREATE TABLE t2 (b int); INSERT INTO t2 VALUES (10), (50), (50); SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a; SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a ASC LIMIT 3; SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; --error ER_WRONG_USAGE SELECT a,1 FROM t1 UNION (SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a); --error ER_WRONG_USAGE SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a UNION SELECT 1,1; DROP TABLE t1,t2; --echo End of 5.0 tests sql/sql_yacc.yy +10 −1 Original line number Diff line number Diff line Loading @@ -6151,6 +6151,14 @@ select_paren: my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; } if (sel->linkage == UNION_TYPE && sel->olap != UNSPECIFIED_OLAP_TYPE && sel->master_unit()->fake_select_lex) { my_error(ER_WRONG_USAGE, MYF(0), "CUBE/ROLLUP", "ORDER BY"); MYSQL_YYABORT; } /* select in braces, can't contain global parameters */ if (sel->master_unit()->fake_select_lex) sel->master_unit()->global_parameters= Loading Loading @@ -8039,7 +8047,8 @@ order_clause: SELECT_LEX *sel= lex->current_select; SELECT_LEX_UNIT *unit= sel-> master_unit(); if (sel->linkage != GLOBAL_OPTIONS_TYPE && sel->olap != UNSPECIFIED_OLAP_TYPE) sel->olap != UNSPECIFIED_OLAP_TYPE && (sel->linkage != UNION_TYPE || sel->braces)) { my_error(ER_WRONG_USAGE, MYF(0), "CUBE/ROLLUP", "ORDER BY"); Loading Loading
mysql-test/r/union.result +51 −0 Original line number Diff line number Diff line Loading @@ -1445,4 +1445,55 @@ select @var; 1 (select 2) union (select 1 into @var); ERROR 42000: Result consisted of more than one row CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (10), (20); CREATE TABLE t2 (b int); INSERT INTO t2 VALUES (10), (50), (50); SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a; a 1 NULL 3 10 1 20 1 50 2 SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; a 1 50 2 20 1 10 1 NULL 3 SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a ASC LIMIT 3; a 1 NULL 3 10 1 20 1 SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; a 1 50 2 20 1 10 1 10 1 NULL 3 SELECT a,1 FROM t1 UNION (SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a); ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a UNION SELECT 1,1; ERROR HY000: Incorrect usage of UNION and ORDER BY DROP TABLE t1,t2; End of 5.0 tests
mysql-test/suite/rpl/r/rpl_trigger.result +8 −4 Original line number Diff line number Diff line Loading @@ -91,21 +91,25 @@ select a=b && a=c from t1; a=b && a=c 1 SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; routine_name definer bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; trigger_name definer t1_first root@localhost --- On slave -- SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; routine_name definer bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; trigger_name definer t1_first root@localhost select a=b && a=c from t1; Loading
mysql-test/suite/rpl/t/rpl_trigger.test +8 −4 Original line number Diff line number Diff line Loading @@ -101,10 +101,12 @@ let $time=`select a from t1`; # - dump definers on the slave; SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; save_master_pos; connection slave; Loading @@ -119,10 +121,12 @@ select "--- On slave --" as ""; # item. SELECT routine_name, definer FROM information_schema.routines; FROM information_schema.routines WHERE routine_name = 'bug12480'; SELECT trigger_name, definer FROM information_schema.triggers; FROM information_schema.triggers WHERE trigger_name = 't1_first'; select a=b && a=c from t1; --disable_query_log Loading
mysql-test/t/union.test +44 −0 Original line number Diff line number Diff line Loading @@ -922,4 +922,48 @@ DROP TABLE t1; select @var; --error 1172 (select 2) union (select 1 into @var); # # Bug#27848: order-by of union clashes with rollup of select part # CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (10), (20); CREATE TABLE t2 (b int); INSERT INTO t2 VALUES (10), (50), (50); SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a; SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; SELECT a,1 FROM t1 UNION SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a ASC LIMIT 3; SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a DESC; --error ER_WRONG_USAGE SELECT a,1 FROM t1 UNION (SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a); --error ER_WRONG_USAGE SELECT a,1 FROM t1 UNION ALL SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a UNION SELECT 1,1; DROP TABLE t1,t2; --echo End of 5.0 tests
sql/sql_yacc.yy +10 −1 Original line number Diff line number Diff line Loading @@ -6151,6 +6151,14 @@ select_paren: my_parse_error(ER(ER_SYNTAX_ERROR)); MYSQL_YYABORT; } if (sel->linkage == UNION_TYPE && sel->olap != UNSPECIFIED_OLAP_TYPE && sel->master_unit()->fake_select_lex) { my_error(ER_WRONG_USAGE, MYF(0), "CUBE/ROLLUP", "ORDER BY"); MYSQL_YYABORT; } /* select in braces, can't contain global parameters */ if (sel->master_unit()->fake_select_lex) sel->master_unit()->global_parameters= Loading Loading @@ -8039,7 +8047,8 @@ order_clause: SELECT_LEX *sel= lex->current_select; SELECT_LEX_UNIT *unit= sel-> master_unit(); if (sel->linkage != GLOBAL_OPTIONS_TYPE && sel->olap != UNSPECIFIED_OLAP_TYPE) sel->olap != UNSPECIFIED_OLAP_TYPE && (sel->linkage != UNION_TYPE || sel->braces)) { my_error(ER_WRONG_USAGE, MYF(0), "CUBE/ROLLUP", "ORDER BY"); Loading