mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-19682 sql_mode="oracle" does not support sysdate
This commit is contained in:
committed by
Sergei Golubchik
parent
7b134ffa3d
commit
f16b8590bf
@ -109,7 +109,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||||||
create table SUM (a int);
|
create table SUM (a int);
|
||||||
drop table SUM;
|
drop table SUM;
|
||||||
create table SYSDATE(a int);
|
create table SYSDATE(a int);
|
||||||
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 'SYSDATE(a int)' at line 1
|
DROP TABLE SYSDATE;
|
||||||
create table SYSDATE (a int);
|
create table SYSDATE (a int);
|
||||||
drop table SYSDATE;
|
drop table SYSDATE;
|
||||||
create table SYSTEM_USER(a int);
|
create table SYSTEM_USER(a int);
|
||||||
@ -246,9 +246,9 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||||||
create table SUM (a int);
|
create table SUM (a int);
|
||||||
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 'SUM (a int)' at line 1
|
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 'SUM (a int)' at line 1
|
||||||
create table SYSDATE(a int);
|
create table SYSDATE(a int);
|
||||||
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 'SYSDATE(a int)' at line 1
|
DROP TABLE SYSDATE;
|
||||||
create table SYSDATE (a int);
|
create table SYSDATE (a int);
|
||||||
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 'SYSDATE (a int)' at line 1
|
DROP TABLE SYSDATE;
|
||||||
create table SYSTEM_USER(a int);
|
create table SYSTEM_USER(a int);
|
||||||
drop table SYSTEM_USER;
|
drop table SYSTEM_USER;
|
||||||
create table SYSTEM_USER (a int);
|
create table SYSTEM_USER (a int);
|
||||||
@ -2128,5 +2128,44 @@ Warnings:
|
|||||||
Note 1003 (select `test`.`t1`.`x` AS `x` from `test`.`t1` limit 1)
|
Note 1003 (select `test`.`t1`.`x` AS `x` from `test`.`t1` limit 1)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-19682 sql_mode="oracle" does not support sysdate
|
||||||
|
#
|
||||||
|
SELECT sysdate LIKE '____-__-__ __:__:__';
|
||||||
|
ERROR 42S22: Unknown column 'sysdate' in 'field list'
|
||||||
|
SELECT sysdate = sysdate();
|
||||||
|
ERROR 42S22: Unknown column 'sysdate' in 'field list'
|
||||||
|
SELECT sysdate = sysdate(0);
|
||||||
|
ERROR 42S22: Unknown column 'sysdate' in 'field list'
|
||||||
|
CREATE DATABASE sysdate;
|
||||||
|
DROP DATABASE sysdate;
|
||||||
|
CREATE TABLE sysdate (a INT);
|
||||||
|
DROP TABLE sysdate;
|
||||||
|
CREATE TABLE t1 (sysdate INT);
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE FUNCTION sysdate() RETURNS INT
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
Warnings:
|
||||||
|
Note 1585 This function 'sysdate' has the same name as a native function
|
||||||
|
DROP FUNCTION sysdate;
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE sysdate INT DEFAULT 10;
|
||||||
|
SELECT sysdate;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
sysdate
|
||||||
|
10
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a INT DEFAULT 0;
|
||||||
|
sysdate:
|
||||||
|
WHILE a DO
|
||||||
|
SELECT 1;
|
||||||
|
LEAVE sysdate;
|
||||||
|
END WHILE ;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
#
|
||||||
# End of 10.6 tests
|
# End of 10.6 tests
|
||||||
#
|
#
|
||||||
|
@ -158,8 +158,8 @@ create table SUM(a int);
|
|||||||
create table SUM (a int);
|
create table SUM (a int);
|
||||||
drop table SUM;
|
drop table SUM;
|
||||||
|
|
||||||
--error ER_PARSE_ERROR
|
|
||||||
create table SYSDATE(a int);
|
create table SYSDATE(a int);
|
||||||
|
DROP TABLE SYSDATE;
|
||||||
create table SYSDATE (a int);
|
create table SYSDATE (a int);
|
||||||
drop table SYSDATE;
|
drop table SYSDATE;
|
||||||
|
|
||||||
@ -332,10 +332,10 @@ create table SUM(a int);
|
|||||||
--error ER_PARSE_ERROR
|
--error ER_PARSE_ERROR
|
||||||
create table SUM (a int);
|
create table SUM (a int);
|
||||||
|
|
||||||
--error ER_PARSE_ERROR
|
|
||||||
create table SYSDATE(a int);
|
create table SYSDATE(a int);
|
||||||
--error ER_PARSE_ERROR
|
DROP TABLE SYSDATE;
|
||||||
create table SYSDATE (a int);
|
create table SYSDATE (a int);
|
||||||
|
DROP TABLE SYSDATE;
|
||||||
|
|
||||||
create table SYSTEM_USER(a int);
|
create table SYSTEM_USER(a int);
|
||||||
drop table SYSTEM_USER;
|
drop table SYSTEM_USER;
|
||||||
@ -1900,6 +1900,54 @@ insert into t1 values (1),(2);
|
|||||||
explain extended (SELECT x FROM t1 WINDOW w1 as () FOR UPDATE) LIMIT 1;
|
explain extended (SELECT x FROM t1 WINDOW w1 as () FOR UPDATE) LIMIT 1;
|
||||||
explain extended (SELECT x FROM t1 FOR UPDATE) LIMIT 1;
|
explain extended (SELECT x FROM t1 FOR UPDATE) LIMIT 1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19682 sql_mode="oracle" does not support sysdate
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT sysdate LIKE '____-__-__ __:__:__';
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT sysdate = sysdate();
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT sysdate = sysdate(0);
|
||||||
|
|
||||||
|
CREATE DATABASE sysdate;
|
||||||
|
DROP DATABASE sysdate;
|
||||||
|
|
||||||
|
CREATE TABLE sysdate (a INT);
|
||||||
|
DROP TABLE sysdate;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (sysdate INT);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE FUNCTION sysdate() RETURNS INT
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
DROP FUNCTION sysdate;
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE sysdate INT DEFAULT 10;
|
||||||
|
SELECT sysdate;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a INT DEFAULT 0;
|
||||||
|
sysdate:
|
||||||
|
WHILE a DO
|
||||||
|
SELECT 1;
|
||||||
|
LEAVE sysdate;
|
||||||
|
END WHILE ;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.6 tests
|
--echo # End of 10.6 tests
|
||||||
|
@ -806,3 +806,65 @@ ERROR HY000: Unknown data type: 'BEGIN'
|
|||||||
#
|
#
|
||||||
# End of 10.5 tests
|
# End of 10.5 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.6 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-19682 sql_mode="oracle" does not support sysdate
|
||||||
|
#
|
||||||
|
SELECT sysdate LIKE '____-__-__ __:__:__';
|
||||||
|
sysdate LIKE '____-__-__ __:__:__'
|
||||||
|
1
|
||||||
|
SELECT sysdate = sysdate();
|
||||||
|
sysdate = sysdate()
|
||||||
|
1
|
||||||
|
SELECT sysdate = sysdate(0);
|
||||||
|
sysdate = sysdate(0)
|
||||||
|
1
|
||||||
|
CREATE DATABASE sysdate;
|
||||||
|
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 'sysdate' at line 1
|
||||||
|
CREATE TABLE sysdate (a INT);
|
||||||
|
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 'sysdate (a INT)' at line 1
|
||||||
|
CREATE TABLE t1 (sysdate INT);
|
||||||
|
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 'sysdate INT)' at line 1
|
||||||
|
CREATE TABLE t1 (a sysdate);
|
||||||
|
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 'sysdate)' at line 1
|
||||||
|
CREATE FUNCTION sysdate RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
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 'sysdate RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END' at line 1
|
||||||
|
CREATE FUNCTION sysdate() RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
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 'sysdate() RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END' at line 1
|
||||||
|
DECLARE
|
||||||
|
sysdate INT := 10;
|
||||||
|
BEGIN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
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 'sysdate INT := 10;
|
||||||
|
BEGIN
|
||||||
|
NULL;
|
||||||
|
END' at line 2
|
||||||
|
BEGIN
|
||||||
|
<<sysdate>>
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
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 'sysdate>>
|
||||||
|
NULL;
|
||||||
|
END' at line 2
|
||||||
|
#
|
||||||
|
# End of 10.6 tests
|
||||||
|
#
|
||||||
|
@ -653,3 +653,75 @@ SELECT CAST(1 AS BEGIN);
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.5 tests
|
--echo # End of 10.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.6 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19682 sql_mode="oracle" does not support sysdate
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# SYSDATE is not deterministic. Let's use LIKE and equality.
|
||||||
|
# The main point here is only to check that SYSDATE
|
||||||
|
# gets parsed without parentheses. The actial value is not important.
|
||||||
|
SELECT sysdate LIKE '____-__-__ __:__:__';
|
||||||
|
SELECT sysdate = sysdate();
|
||||||
|
SELECT sysdate = sysdate(0);
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE DATABASE sysdate;
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE TABLE sysdate (a INT);
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE TABLE t1 (sysdate INT);
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE TABLE t1 (a sysdate);
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE FUNCTION sysdate RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CREATE FUNCTION sysdate() RETURN INT AS
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
DECLARE
|
||||||
|
sysdate INT := 10;
|
||||||
|
BEGIN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
BEGIN
|
||||||
|
<<sysdate>>
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.6 tests
|
||||||
|
--echo #
|
||||||
|
@ -648,6 +648,7 @@ static SYMBOL symbols[] = {
|
|||||||
{ "SUSPEND", SYM(SUSPEND_SYM)},
|
{ "SUSPEND", SYM(SUSPEND_SYM)},
|
||||||
{ "SWAPS", SYM(SWAPS_SYM)},
|
{ "SWAPS", SYM(SWAPS_SYM)},
|
||||||
{ "SWITCHES", SYM(SWITCHES_SYM)},
|
{ "SWITCHES", SYM(SWITCHES_SYM)},
|
||||||
|
{ "SYSDATE", SYM(SYSDATE)},
|
||||||
{ "SYSTEM", SYM(SYSTEM)},
|
{ "SYSTEM", SYM(SYSTEM)},
|
||||||
{ "SYSTEM_TIME", SYM(SYSTEM_TIME_SYM)},
|
{ "SYSTEM_TIME", SYM(SYSTEM_TIME_SYM)},
|
||||||
{ "TABLE", SYM(TABLE_SYM)},
|
{ "TABLE", SYM(TABLE_SYM)},
|
||||||
@ -787,7 +788,6 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "SUBSTR", SYM(SUBSTRING)},
|
{ "SUBSTR", SYM(SUBSTRING)},
|
||||||
{ "SUBSTRING", SYM(SUBSTRING)},
|
{ "SUBSTRING", SYM(SUBSTRING)},
|
||||||
{ "SUM", SYM(SUM_SYM)},
|
{ "SUM", SYM(SUM_SYM)},
|
||||||
{ "SYSDATE", SYM(SYSDATE)},
|
|
||||||
{ "SYSTEM_USER", SYM(USER_SYM)},
|
{ "SYSTEM_USER", SYM(USER_SYM)},
|
||||||
{ "TRIM", SYM(TRIM)},
|
{ "TRIM", SYM(TRIM)},
|
||||||
{ "TRIM_ORACLE", SYM(TRIM_ORACLE)},
|
{ "TRIM_ORACLE", SYM(TRIM_ORACLE)},
|
||||||
|
@ -9341,6 +9341,26 @@ Item *LEX::make_item_func_substr(THD *thd, Item *a, Item *b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Item *LEX::make_item_func_sysdate(THD *thd, uint fsp)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Unlike other time-related functions, SYSDATE() is
|
||||||
|
replication-unsafe because it is not affected by the
|
||||||
|
TIMESTAMP variable. It is unsafe even if
|
||||||
|
sysdate_is_now=1, because the slave may have
|
||||||
|
sysdate_is_now=0.
|
||||||
|
*/
|
||||||
|
set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
|
||||||
|
Item *item= global_system_variables.sysdate_is_now == 0 ?
|
||||||
|
(Item *) new (thd->mem_root) Item_func_sysdate_local(thd, fsp) :
|
||||||
|
(Item *) new (thd->mem_root) Item_func_now_local(thd, fsp);
|
||||||
|
if (unlikely(item == NULL))
|
||||||
|
return NULL;
|
||||||
|
safe_to_cache_query=0;
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Item *LEX::make_item_func_replace(THD *thd,
|
Item *LEX::make_item_func_replace(THD *thd,
|
||||||
Item *org,
|
Item *org,
|
||||||
Item *find,
|
Item *find,
|
||||||
|
@ -4101,6 +4101,7 @@ public:
|
|||||||
Item *make_item_func_replace(THD *thd, Item *org, Item *find, Item *replace);
|
Item *make_item_func_replace(THD *thd, Item *org, Item *find, Item *replace);
|
||||||
Item *make_item_func_substr(THD *thd, Item *a, Item *b, Item *c);
|
Item *make_item_func_substr(THD *thd, Item *a, Item *b, Item *c);
|
||||||
Item *make_item_func_substr(THD *thd, Item *a, Item *b);
|
Item *make_item_func_substr(THD *thd, Item *a, Item *b);
|
||||||
|
Item *make_item_func_sysdate(THD *thd, uint fsp);
|
||||||
Item *make_item_func_call_generic(THD *thd, Lex_ident_cli_st *db,
|
Item *make_item_func_call_generic(THD *thd, Lex_ident_cli_st *db,
|
||||||
Lex_ident_cli_st *name, List<Item> *args);
|
Lex_ident_cli_st *name, List<Item> *args);
|
||||||
Item *make_item_func_call_native_or_parse_error(THD *thd,
|
Item *make_item_func_call_native_or_parse_error(THD *thd,
|
||||||
|
@ -10361,23 +10361,22 @@ function_call_nonkeyword:
|
|||||||
if (unlikely(!($$= Lex->make_item_func_substr(thd, $3, $5))))
|
if (unlikely(!($$= Lex->make_item_func_substr(thd, $3, $5))))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| SYSDATE opt_time_precision
|
/* Start SQL_MODE_ORACLE_SPECIFIC
|
||||||
|
| SYSDATE
|
||||||
{
|
{
|
||||||
/*
|
if (unlikely(!($$= Lex->make_item_func_sysdate(thd, 0))))
|
||||||
Unlike other time-related functions, SYSDATE() is
|
MYSQL_YYABORT;
|
||||||
replication-unsafe because it is not affected by the
|
}
|
||||||
TIMESTAMP variable. It is unsafe even if
|
End SQL_MODE_ORACLE_SPECIFIC */
|
||||||
sysdate_is_now=1, because the slave may have
|
| SYSDATE '(' ')'
|
||||||
sysdate_is_now=0.
|
{
|
||||||
*/
|
if (unlikely(!($$= Lex->make_item_func_sysdate(thd, 0))))
|
||||||
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
|
MYSQL_YYABORT;
|
||||||
if (global_system_variables.sysdate_is_now == 0)
|
}
|
||||||
$$= new (thd->mem_root) Item_func_sysdate_local(thd, $2);
|
| SYSDATE '(' real_ulong_num ')'
|
||||||
else
|
{
|
||||||
$$= new (thd->mem_root) Item_func_now_local(thd, $2);
|
if (unlikely(!($$= Lex->make_item_func_sysdate(thd, (uint) $3))))
|
||||||
if (unlikely($$ == NULL))
|
MYSQL_YYABORT;
|
||||||
MYSQL_YYABORT;
|
|
||||||
Lex->safe_to_cache_query=0;
|
|
||||||
}
|
}
|
||||||
| TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')'
|
| TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')'
|
||||||
{
|
{
|
||||||
@ -16144,6 +16143,9 @@ keyword_sp_var_and_label:
|
|||||||
| SUSPEND_SYM
|
| SUSPEND_SYM
|
||||||
| SWAPS_SYM
|
| SWAPS_SYM
|
||||||
| SWITCHES_SYM
|
| SWITCHES_SYM
|
||||||
|
/* Start SQL_MODE_DEFAULT_SPECIFIC */
|
||||||
|
| SYSDATE
|
||||||
|
/* End SQL_MODE_DEFAULT_SPECIFIC */
|
||||||
| SYSTEM
|
| SYSTEM
|
||||||
| SYSTEM_TIME_SYM
|
| SYSTEM_TIME_SYM
|
||||||
| TABLE_NAME_SYM
|
| TABLE_NAME_SYM
|
||||||
@ -16393,7 +16395,6 @@ reserved_keyword_udt_not_param_type:
|
|||||||
| STRAIGHT_JOIN
|
| STRAIGHT_JOIN
|
||||||
| SUBSTRING
|
| SUBSTRING
|
||||||
| SUM_SYM
|
| SUM_SYM
|
||||||
| SYSDATE
|
|
||||||
| TABLE_REF_PRIORITY
|
| TABLE_REF_PRIORITY
|
||||||
| TABLE_SYM
|
| TABLE_SYM
|
||||||
| TERMINATED
|
| TERMINATED
|
||||||
|
Reference in New Issue
Block a user