diff options
author | ramil@mysql.com <> | 2005-05-09 18:50:57 +0500 |
---|---|---|
committer | ramil@mysql.com <> | 2005-05-09 18:50:57 +0500 |
commit | ac2218795544249f043334604bac7f402782a9d9 (patch) | |
tree | 467eba7fd28f240d2765288b5693db89d6f7d2ad | |
parent | 8d30d300730699c7f44afcb6e2fb76df6b8e3510 (diff) | |
parent | ddf6225def0957de4b6ef7541574ccd4de374a3f (diff) | |
download | mariadb-git-ac2218795544249f043334604bac7f402782a9d9.tar.gz |
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/ram/work/mysql-4.1
-rw-r--r-- | mysql-test/r/select.result | 10 | ||||
-rw-r--r-- | mysql-test/t/select.test | 16 | ||||
-rw-r--r-- | sql/mysql_priv.h | 3 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 20 |
4 files changed, 47 insertions, 2 deletions
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 9df5efc66d6..50300ed9b76 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2445,3 +2445,13 @@ cast((a - b) as unsigned) 1 18446744073709551615 drop table t1; +create table t1 (a int(11)); +select all all * from t1; +a +select distinct distinct * from t1; +a +select all distinct * from t1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct * from t1' at line 1 +select distinct all * from t1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'all * from t1' at line 1 +drop table t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index f58a78205ec..6d6d5f6b6e1 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1979,3 +1979,19 @@ select a-b , (a-b < 0) from t1 order by 1; select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0; select cast((a - b) as unsigned) from t1 order by 1; drop table t1; + + +# +# Bug#8733 server accepts malformed query (multiply mentioned distinct) +# +create table t1 (a int(11)); +select all all * from t1; +select distinct distinct * from t1; +--error 1064 +select all distinct * from t1; +--error 1064 +select distinct all * from t1; +drop table t1; + + +# diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index f5d4464ce68..ca282ee2444 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -211,6 +211,9 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; key checks in some cases */ #define OPTION_RELAXED_UNIQUE_CHECKS (1L << 27) #define SELECT_NO_UNLOCK (1L << 28) +/* Thr following is used to detect a conflict with DISTINCT + in the user query has requested */ +#define SELECT_ALL (1L << 29) /* If set to 0, then the thread will ignore all warnings with level notes. Set by executing SET SQL_NOTES=1 */ diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 73845f7d645..abe7a716a69 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2481,7 +2481,15 @@ select_option: YYABORT; Lex->lock_option= TL_READ_HIGH_PRIORITY; } - | DISTINCT { Select->options|= SELECT_DISTINCT; } + | DISTINCT + { + if (Select->options & SELECT_ALL) + { + yyerror(ER(ER_SYNTAX_ERROR)); + YYABORT; + } + Select->options|= SELECT_DISTINCT; + } | SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; } | SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; } | SQL_BUFFER_RESULT @@ -2501,7 +2509,15 @@ select_option: { Lex->select_lex.options|= OPTION_TO_QUERY_CACHE; } - | ALL {} + | ALL + { + if (Select->options & SELECT_DISTINCT) + { + yyerror(ER(ER_SYNTAX_ERROR)); + YYABORT; + } + Select->options|= SELECT_ALL; + } ; select_lock_type: |