diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index c105a3e36a8..1896db84de0 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -778,3 +778,19 @@ lily river drop table t1; deallocate prepare stmt; +create table t1 (a int); +prepare stmt from "select ??"; +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 '?' at line 1 +prepare stmt from "select ?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 '?FROM t1' at line 1 +prepare stmt from "select FROM t1 WHERE?=1"; +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 'FROM t1 WHERE?=1' at line 1 +prepare stmt from "update t1 set a=a+?WHERE 1"; +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 '?WHERE 1' at line 1 +select ?; +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 '?' at line 1 +select ??; +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 '??' at line 1 +select ? 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 '? from t1' at line 1 +drop table t1; diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index c86a69ab45f..f9b6d27bacc 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -822,4 +822,3 @@ select ??; --error 1064 select ? from t1; drop table t1; -deallocate prepare stmt; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index a4293fa76bd..630a7e950f7 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -562,7 +562,7 @@ int yylex(void *arg, void *yythd) its value in a query for the binlog, the query must stay grammatically correct. */ - else if (c == '?' && ((THD*) yythd)->command == COM_PREPARE && + else if (c == '?' && ((THD*) yythd)->command == COM_STMT_PREPARE && !ident_map[cs, yyPeek()]) return(PARAM_MARKER); return((int) c);