diff --git a/mysql-test/suite/compat/oracle/r/type_varchar.result b/mysql-test/suite/compat/oracle/r/type_varchar.result new file mode 100644 index 0000000000000..906e16867cd73 --- /dev/null +++ b/mysql-test/suite/compat/oracle/r/type_varchar.result @@ -0,0 +1,9 @@ +SET sql_mode=ORACLE; +# +# MDEV-11275 sql_mode=ORACLE: CAST(..AS VARCHAR(N)) +# +SELECT CAST(123 AS VARCHAR(10)) FROM DUAL; +CAST(123 AS VARCHAR(10)) +123 +SELECT CAST(123 AS VARCHAR) FROM DUAL; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') FROM DUAL' at line 1 diff --git a/mysql-test/suite/compat/oracle/r/type_varchar2.result b/mysql-test/suite/compat/oracle/r/type_varchar2.result index 827b4d4396bb8..5030cfbaa0a85 100644 --- a/mysql-test/suite/compat/oracle/r/type_varchar2.result +++ b/mysql-test/suite/compat/oracle/r/type_varchar2.result @@ -13,3 +13,11 @@ t1 CREATE TABLE "t1" ( "a" varchar(10) DEFAULT NULL ) DROP TABLE t1; +# +# MDEV-11275 sql_mode=ORACLE: CAST(..AS VARCHAR(N)) +# +SELECT CAST(123 AS VARCHAR2(10)) FROM DUAL; +CAST(123 AS VARCHAR2(10)) +123 +SELECT CAST(123 AS VARCHAR2) FROM DUAL; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') FROM DUAL' at line 1 diff --git a/mysql-test/suite/compat/oracle/t/type_varchar.test b/mysql-test/suite/compat/oracle/t/type_varchar.test new file mode 100644 index 0000000000000..05691bfb8e6bc --- /dev/null +++ b/mysql-test/suite/compat/oracle/t/type_varchar.test @@ -0,0 +1,9 @@ +SET sql_mode=ORACLE; + +--echo # +--echo # MDEV-11275 sql_mode=ORACLE: CAST(..AS VARCHAR(N)) +--echo # + +SELECT CAST(123 AS VARCHAR(10)) FROM DUAL; +--error ER_PARSE_ERROR +SELECT CAST(123 AS VARCHAR) FROM DUAL; diff --git a/mysql-test/suite/compat/oracle/t/type_varchar2.test b/mysql-test/suite/compat/oracle/t/type_varchar2.test index 1cf9152982a04..bd0243713b6d3 100644 --- a/mysql-test/suite/compat/oracle/t/type_varchar2.test +++ b/mysql-test/suite/compat/oracle/t/type_varchar2.test @@ -8,3 +8,12 @@ DROP TABLE varchar2; CREATE TABLE t1 (a VARCHAR2(10)); SHOW CREATE TABLE t1; DROP TABLE t1; + + +--echo # +--echo # MDEV-11275 sql_mode=ORACLE: CAST(..AS VARCHAR(N)) +--echo # + +SELECT CAST(123 AS VARCHAR2(10)) FROM DUAL; +--error ER_PARSE_ERROR +SELECT CAST(123 AS VARCHAR2) FROM DUAL; diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy index 8926e49f67b1f..871d402d99076 100644 --- a/sql/sql_yacc_ora.yy +++ b/sql/sql_yacc_ora.yy @@ -10314,6 +10314,14 @@ cast_type: { Lex->charset= thd->variables.collation_connection; } opt_binary { $$.set(ITEM_CAST_CHAR, $2); } + | VARCHAR field_length + { Lex->charset= thd->variables.collation_connection; } + opt_binary + { $$.set(ITEM_CAST_CHAR, $2); } + | VARCHAR2 field_length + { Lex->charset= thd->variables.collation_connection; } + opt_binary + { $$.set(ITEM_CAST_CHAR, $2); } | NCHAR_SYM opt_field_length { Lex->charset= national_charset_info;