Bug#21114 (Foreign key creation fails to table with name format)

Due to the complexity of this change, everything is documented in WL#3565

This patch is the third iteration, it takes into account the comments
received to date.
parent e2d8d522
#
# Bug#21114 (Foreign key creation fails to table with name format)
#
# Trying to trick the parser into thinking $FCT(...) is a function call,
# which is not in the CREATE TABLE and FOREIGN KEY ... REFERENCES syntax
#
# Usage :
#
# let $engine_type=InnoDb;
# let $verbose=1;
# let $FCT= <value_1>;
# -- source parser_stress_func.inc
# let $FCT= <value_2>;
# -- source parser_stress_func.inc
# let $verbose=0;
# let $FCT= <value_3>;
# -- source parser_stress_func.inc
# let $FCT= <value_4>;
# -- source parser_stress_func.inc
-- disable_warnings
eval drop table if exists $FCT;
drop table if exists bug21114_child;
-- enable_warnings
--disable_query_log
--disable_result_log
eval CREATE TABLE $FCT(
col1 int not null,
col2 int not null,
col3 varchar(10),
CONSTRAINT pk PRIMARY KEY (col1, col2)
) ENGINE $engine_type;
eval CREATE TABLE bug21114_child(
pk int not null,
fk_col1 int not null,
fk_col2 int not null,
fk_col3 int not null,
fk_col4 int not null,
CONSTRAINT fk_fct FOREIGN KEY (fk_col1, fk_col2)
REFERENCES $FCT(col1, col2),
CONSTRAINT fk_fct_space FOREIGN KEY (fk_col3, fk_col4)
REFERENCES $FCT (col1, col2)
) ENGINE $engine_type;
--enable_query_log
--enable_result_log
if ($verbose)
{
eval SHOW CREATE TABLE $FCT;
SHOW CREATE TABLE bug21114_child;
}
DROP TABLE bug21114_child;
eval DROP TABLE $FCT;
...@@ -102,6 +102,18 @@ Note 1003 select pi() AS `pi()`,format(sin((pi() / 2)),6) AS `format(sin(pi()/2) ...@@ -102,6 +102,18 @@ Note 1003 select pi() AS `pi()`,format(sin((pi() / 2)),6) AS `format(sin(pi()/2)
select degrees(pi()),radians(360); select degrees(pi()),radians(360);
degrees(pi()) radians(360) degrees(pi()) radians(360)
180 6.2831853071796 180 6.2831853071796
select format(atan(-2, 2), 6);
format(atan(-2, 2), 6)
-0.785398
select format(atan(pi(), 0), 6);
format(atan(pi(), 0), 6)
1.570796
select format(atan2(-2, 2), 6);
format(atan2(-2, 2), 6)
-0.785398
select format(atan2(pi(), 0), 6);
format(atan2(pi(), 0), 6)
1.570796
SELECT ACOS(1.0); SELECT ACOS(1.0);
ACOS(1.0) ACOS(1.0)
0 0
......
SET @save_sql_mode=@@sql_mode;
set SQL_MODE='';
create table ADDDATE(a int);
drop table ADDDATE;
create table ADDDATE (a int);
drop table ADDDATE;
create table BIT_AND(a int);
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 'BIT_AND(a int)' at line 1
create table BIT_AND (a int);
drop table BIT_AND;
create table BIT_OR(a int);
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 'BIT_OR(a int)' at line 1
create table BIT_OR (a int);
drop table BIT_OR;
create table BIT_XOR(a int);
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 'BIT_XOR(a int)' at line 1
create table BIT_XOR (a int);
drop table BIT_XOR;
create table CAST(a int);
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 'CAST(a int)' at line 1
create table CAST (a int);
drop table CAST;
create table COUNT(a int);
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 'COUNT(a int)' at line 1
create table COUNT (a int);
drop table COUNT;
create table CURDATE(a int);
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 'CURDATE(a int)' at line 1
create table CURDATE (a int);
drop table CURDATE;
create table CURTIME(a int);
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 'CURTIME(a int)' at line 1
create table CURTIME (a int);
drop table CURTIME;
create table DATE_ADD(a int);
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 'DATE_ADD(a int)' at line 1
create table DATE_ADD (a int);
drop table DATE_ADD;
create table DATE_SUB(a int);
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 'DATE_SUB(a int)' at line 1
create table DATE_SUB (a int);
drop table DATE_SUB;
create table EXTRACT(a int);
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 'EXTRACT(a int)' at line 1
create table EXTRACT (a int);
drop table EXTRACT;
create table GROUP_CONCAT(a int);
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 'GROUP_CONCAT(a int)' at line 1
create table GROUP_CONCAT (a int);
drop table GROUP_CONCAT;
create table GROUP_UNIQUE_USERS(a int);
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 'GROUP_UNIQUE_USERS(a int)' at line 1
create table GROUP_UNIQUE_USERS (a int);
drop table GROUP_UNIQUE_USERS;
create table MAX(a int);
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 'MAX(a int)' at line 1
create table MAX (a int);
drop table MAX;
create table MID(a int);
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 'MID(a int)' at line 1
create table MID (a int);
drop table MID;
create table MIN(a int);
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 'MIN(a int)' at line 1
create table MIN (a int);
drop table MIN;
create table NOW(a int);
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 'NOW(a int)' at line 1
create table NOW (a int);
drop table NOW;
create table POSITION(a int);
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 'POSITION(a int)' at line 1
create table POSITION (a int);
drop table POSITION;
create table SESSION_USER(a int);
drop table SESSION_USER;
create table SESSION_USER (a int);
drop table SESSION_USER;
create table STD(a int);
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 'STD(a int)' at line 1
create table STD (a int);
drop table STD;
create table STDDEV(a int);
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 'STDDEV(a int)' at line 1
create table STDDEV (a int);
drop table STDDEV;
create table STDDEV_POP(a int);
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 'STDDEV_POP(a int)' at line 1
create table STDDEV_POP (a int);
drop table STDDEV_POP;
create table STDDEV_SAMP(a int);
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 'STDDEV_SAMP(a int)' at line 1
create table STDDEV_SAMP (a int);
drop table STDDEV_SAMP;
create table SUBDATE(a int);
drop table SUBDATE;
create table SUBDATE (a int);
drop table SUBDATE;
create table SUBSTR(a int);
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 'SUBSTR(a int)' at line 1
create table SUBSTR (a int);
drop table SUBSTR;
create table SUBSTRING(a int);
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 'SUBSTRING(a int)' at line 1
create table SUBSTRING (a int);
drop table SUBSTRING;
create table SUM(a int);
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 'SUM(a int)' at line 1
create table SUM (a int);
drop table SUM;
create table SYSDATE(a int);
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 'SYSDATE(a int)' at line 1
create table SYSDATE (a int);
drop table SYSDATE;
create table SYSTEM_USER(a int);
drop table SYSTEM_USER;
create table SYSTEM_USER (a int);
drop table SYSTEM_USER;
create table TRIM(a int);
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 'TRIM(a int)' at line 1
create table TRIM (a int);
drop table TRIM;
create table UNIQUE_USERS(a int);
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 'UNIQUE_USERS(a int)' at line 1
create table UNIQUE_USERS (a int);
drop table UNIQUE_USERS;
create table VARIANCE(a int);
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 'VARIANCE(a int)' at line 1
create table VARIANCE (a int);
drop table VARIANCE;
create table VAR_POP(a int);
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 'VAR_POP(a int)' at line 1
create table VAR_POP (a int);
drop table VAR_POP;
create table VAR_SAMP(a int);
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 'VAR_SAMP(a int)' at line 1
create table VAR_SAMP (a int);
drop table VAR_SAMP;
set SQL_MODE='IGNORE_SPACE';
create table ADDDATE(a int);
drop table ADDDATE;
create table ADDDATE (a int);
drop table ADDDATE;
create table BIT_AND(a int);
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 'BIT_AND(a int)' at line 1
create table BIT_AND (a int);
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 'BIT_AND (a int)' at line 1
create table BIT_OR(a int);
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 'BIT_OR(a int)' at line 1
create table BIT_OR (a int);
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 'BIT_OR (a int)' at line 1
create table BIT_XOR(a int);
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 'BIT_XOR(a int)' at line 1
create table BIT_XOR (a int);
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 'BIT_XOR (a int)' at line 1
create table CAST(a int);
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 'CAST(a int)' at line 1
create table CAST (a int);
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 'CAST (a int)' at line 1
create table COUNT(a int);
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 'COUNT(a int)' at line 1
create table COUNT (a int);
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 'COUNT (a int)' at line 1
create table CURDATE(a int);
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 'CURDATE(a int)' at line 1
create table CURDATE (a int);
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 'CURDATE (a int)' at line 1
create table CURTIME(a int);
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 'CURTIME(a int)' at line 1
create table CURTIME (a int);
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 'CURTIME (a int)' at line 1
create table DATE_ADD(a int);
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 'DATE_ADD(a int)' at line 1
create table DATE_ADD (a int);
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 'DATE_ADD (a int)' at line 1
create table DATE_SUB(a int);
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 'DATE_SUB(a int)' at line 1
create table DATE_SUB (a int);
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 'DATE_SUB (a int)' at line 1
create table EXTRACT(a int);
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 'EXTRACT(a int)' at line 1
create table EXTRACT (a int);
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 'EXTRACT (a int)' at line 1
create table GROUP_CONCAT(a int);
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 'GROUP_CONCAT(a int)' at line 1
create table GROUP_CONCAT (a int);
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 'GROUP_CONCAT (a int)' at line 1
create table GROUP_UNIQUE_USERS(a int);
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 'GROUP_UNIQUE_USERS(a int)' at line 1
create table GROUP_UNIQUE_USERS (a int);
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 'GROUP_UNIQUE_USERS (a int)' at line 1
create table MAX(a int);
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 'MAX(a int)' at line 1
create table MAX (a int);
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 'MAX (a int)' at line 1
create table MID(a int);
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 'MID(a int)' at line 1
create table MID (a int);
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 'MID (a int)' at line 1
create table MIN(a int);
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 'MIN(a int)' at line 1
create table MIN (a int);
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 'MIN (a int)' at line 1
create table NOW(a int);
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 'NOW(a int)' at line 1
create table NOW (a int);
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 'NOW (a int)' at line 1
create table POSITION(a int);
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 'POSITION(a int)' at line 1
create table POSITION (a int);
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 'POSITION (a int)' at line 1
create table SESSION_USER(a int);
drop table SESSION_USER;
create table SESSION_USER (a int);
drop table SESSION_USER;
create table STD(a int);
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 'STD(a int)' at line 1
create table STD (a int);
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 'STD (a int)' at line 1
create table STDDEV(a int);
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 'STDDEV(a int)' at line 1
create table STDDEV (a int);
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 'STDDEV (a int)' at line 1
create table STDDEV_POP(a int);
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 'STDDEV_POP(a int)' at line 1
create table STDDEV_POP (a int);
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 'STDDEV_POP (a int)' at line 1
create table STDDEV_SAMP(a int);
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 'STDDEV_SAMP(a int)' at line 1
create table STDDEV_SAMP (a int);
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 'STDDEV_SAMP (a int)' at line 1
create table SUBDATE(a int);
drop table SUBDATE;
create table SUBDATE (a int);
drop table SUBDATE;
create table SUBSTR(a int);
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 'SUBSTR(a int)' at line 1
create table SUBSTR (a int);
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 'SUBSTR (a int)' at line 1
create table SUBSTRING(a int);
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 'SUBSTRING(a int)' at line 1
create table SUBSTRING (a int);
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 'SUBSTRING (a int)' at line 1
create table SUM(a int);
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 'SUM(a int)' at line 1
create table SUM (a int);
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 'SUM (a int)' 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 MySQL server version for the right syntax to use near 'SYSDATE(a int)' 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 MySQL server version for the right syntax to use near 'SYSDATE (a int)' at line 1
create table SYSTEM_USER(a int);
drop table SYSTEM_USER;
create table SYSTEM_USER (a int);
drop table SYSTEM_USER;
create table TRIM(a int);
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 'TRIM(a int)' at line 1
create table TRIM (a int);
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 'TRIM (a int)' at line 1
create table UNIQUE_USERS(a int);
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 'UNIQUE_USERS(a int)' at line 1
create table UNIQUE_USERS (a int);
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 'UNIQUE_USERS (a int)' at line 1
create table VARIANCE(a int);
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 'VARIANCE(a int)' at line 1
create table VARIANCE (a int);
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 'VARIANCE (a int)' at line 1
create table VAR_POP(a int);
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 'VAR_POP(a int)' at line 1
create table VAR_POP (a int);
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 'VAR_POP (a int)' at line 1
create table VAR_SAMP(a int);
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 'VAR_SAMP(a int)' at line 1
create table VAR_SAMP (a int);
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 'VAR_SAMP (a int)' at line 1
SET @@sql_mode=@save_sql_mode;
select pi(3.14);
ERROR 42000: Incorrect parameter count in the call to native function 'pi'
select tan();
ERROR 42000: Incorrect parameter count in the call to native function 'tan'
select tan(1, 2);
ERROR 42000: Incorrect parameter count in the call to native function 'tan'
select makedate(1);
ERROR 42000: Incorrect parameter count in the call to native function 'makedate'
select makedate(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'makedate'
select maketime();
ERROR 42000: Incorrect parameter count in the call to native function 'maketime'
select maketime(1);
ERROR 42000: Incorrect parameter count in the call to native function 'maketime'
select maketime(1, 2);
ERROR 42000: Incorrect parameter count in the call to native function 'maketime'
select maketime(1, 2, 3, 4);
ERROR 42000: Incorrect parameter count in the call to native function 'maketime'
select atan();
ERROR 42000: Incorrect parameter count in the call to native function 'atan'
select atan2(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'atan2'
select benchmark(10, 1+1);
benchmark(10, 1+1)
0
select benchmark(5+5, 2);
ERROR 42000: Incorrect parameters in the call to native function 'BENCHMARK'
select concat();
ERROR 42000: Incorrect parameter count in the call to native function 'concat'
select concat("foo");
concat("foo")
foo
select concat_ws();
ERROR 42000: Incorrect parameter count in the call to native function 'concat_ws'
select concat_ws("foo");
ERROR 42000: Incorrect parameter count in the call to native function 'concat_ws'
set @pwd="my password";
select encode("secret", @pwd);
ERROR 42000: Incorrect parameters in the call to native function 'ENCODE'
select decode("encoded-secret", @pwd);
ERROR 42000: Incorrect parameters in the call to native function 'DECODE'
select encrypt();
ERROR 42000: Incorrect parameter count in the call to native function 'encrypt'
select encrypt(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'encrypt'
select des_encrypt("p1", "p2", "not expected");
ERROR 42000: Incorrect parameter count in the call to native function 'des_encrypt'
select des_decrypt("p1", "p2", "not expected");
ERROR 42000: Incorrect parameter count in the call to native function 'des_decrypt'
select elt();
ERROR 42000: Incorrect parameter count in the call to native function 'elt'
select elt(1);
ERROR 42000: Incorrect parameter count in the call to native function 'elt'
select export_set();
ERROR 42000: Incorrect parameter count in the call to native function 'export_set'
select export_set("p1");
ERROR 42000: Incorrect parameter count in the call to native function 'export_set'
select export_set("p1", "p2");
ERROR 42000: Incorrect parameter count in the call to native function 'export_set'
select export_set("p1", "p2", "p3", "p4", "p5", "p6");
ERROR 42000: Incorrect parameter count in the call to native function 'export_set'
select field();
ERROR 42000: Incorrect parameter count in the call to native function 'field'
select field("p1");
ERROR 42000: Incorrect parameter count in the call to native function 'field'
set @dec=2;
select format(pi(), @dec);
ERROR 42000: Incorrect parameters in the call to native function 'FORMAT'
select from_unixtime();
ERROR 42000: Incorrect parameter count in the call to native function 'from_unixtime'
select from_unixtime(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'from_unixtime'
select unix_timestamp(1, 2);
ERROR 42000: Incorrect parameter count in the call to native function 'unix_timestamp'
select greatest();
ERROR 42000: Incorrect parameter count in the call to native function 'greatest'
select greatest(12);
ERROR 42000: Incorrect parameter count in the call to native function 'greatest'
select last_insert_id(1, 2);
ERROR 42000: Incorrect parameter count in the call to native function 'last_insert_id'
select least();
ERROR 42000: Incorrect parameter count in the call to native function 'least'
select least(12);
ERROR 42000: Incorrect parameter count in the call to native function 'least'
select locate();
ERROR 42000: Incorrect parameter count in the call to native function 'locate'
select locate(1);
ERROR 42000: Incorrect parameter count in the call to native function 'locate'
select locate(1, 2, 3, 4);
ERROR 42000: Incorrect parameter count in the call to native function 'locate'
select log();
ERROR 42000: Incorrect parameter count in the call to native function 'log'
select log(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'log'
select make_set();
ERROR 42000: Incorrect parameter count in the call to native function 'make_set'
select make_set(1);
ERROR 42000: Incorrect parameter count in the call to native function 'make_set'
select master_pos_wait();
ERROR 42000: Incorrect parameter count in the call to native function 'master_pos_wait'
select master_pos_wait(1);
ERROR 42000: Incorrect parameter count in the call to native function 'master_pos_wait'
select master_pos_wait(1, 2, 3, 4);
ERROR 42000: Incorrect parameter count in the call to native function 'master_pos_wait'
select rand(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'rand'
select round(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'round'
select yearweek();
ERROR 42000: Incorrect parameter count in the call to native function 'yearweek'
select yearweek(1, 2, 3);
ERROR 42000: Incorrect parameter count in the call to native function 'yearweek'
drop table if exists ABS;
drop table if exists bug21114_child;
SHOW CREATE TABLE ABS;
Table Create Table
ABS CREATE TABLE `ABS` (
`col1` int(11) NOT NULL,
`col2` int(11) NOT NULL,
`col3` varchar(10) DEFAULT NULL,
PRIMARY KEY (`col1`,`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE bug21114_child;
Table Create Table
bug21114_child CREATE TABLE `bug21114_child` (
`pk` int(11) NOT NULL,
`fk_col1` int(11) NOT NULL,
`fk_col2` int(11) NOT NULL,
`fk_col3` int(11) NOT NULL,
`fk_col4` int(11) NOT NULL,
KEY `fk_fct` (`fk_col1`,`fk_col2`),
KEY `fk_fct_space` (`fk_col3`,`fk_col4`),
CONSTRAINT `fk_fct` FOREIGN KEY (`fk_col1`, `fk_col2`) REFERENCES `ABS` (`col1`, `col2`),
CONSTRAINT `fk_fct_space` FOREIGN KEY (`fk_col3`, `fk_col4`) REFERENCES `ABS` (`col1`, `col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE bug21114_child;
DROP TABLE ABS;
drop table if exists FIELD;
drop table if exists bug21114_child;
SHOW CREATE TABLE FIELD;
Table Create Table
FIELD CREATE TABLE `FIELD` (
`col1` int(11) NOT NULL,
`col2` int(11) NOT NULL,
`col3` varchar(10) DEFAULT NULL,
PRIMARY KEY (`col1`,`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE bug21114_child;
Table Create Table
bug21114_child CREATE TABLE `bug21114_child` (
`pk` int(11) NOT NULL,
`fk_col1` int(11) NOT NULL,
`fk_col2` int(11) NOT NULL,
`fk_col3` int(11) NOT NULL,
`fk_col4` int(11) NOT NULL,
KEY `fk_fct` (`fk_col1`,`fk_col2`),
KEY `fk_fct_space` (`fk_col3`,`fk_col4`),
CONSTRAINT `fk_fct` FOREIGN KEY (`fk_col1`, `fk_col2`) REFERENCES `FIELD` (`col1`, `col2`),
CONSTRAINT `fk_fct_space` FOREIGN KEY (`fk_col3`, `fk_col4`) REFERENCES `FIELD` (`col1`, `col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE bug21114_child;
DROP TABLE FIELD;
drop table if exists FORMAT;
drop table if exists bug21114_child;
SHOW CREATE TABLE FORMAT;
Table Create Table
FORMAT CREATE TABLE `FORMAT` (
`col1` int(11) NOT NULL,
`col2` int(11) NOT NULL,
`col3` varchar(10) DEFAULT NULL,
PRIMARY KEY (`col1`,`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE bug21114_child;
Table Create Table
bug21114_child CREATE TABLE `bug21114_child` (
`pk` int(11) NOT NULL,
`fk_col1` int(11) NOT NULL,
`fk_col2` int(11) NOT NULL,
`fk_col3` int(11) NOT NULL,
`fk_col4` int(11) NOT NULL,
KEY `fk_fct` (`fk_col1`,`fk_col2`),
KEY `fk_fct_space` (`fk_col3`,`fk_col4`),
CONSTRAINT `fk_fct` FOREIGN KEY (`fk_col1`, `fk_col2`) REFERENCES `FORMAT` (`col1`, `col2`),
CONSTRAINT `fk_fct_space` FOREIGN KEY (`fk_col3`, `fk_col4`) REFERENCES `FORMAT` (`col1`, `col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE bug21114_child;
DROP TABLE FORMAT;
drop table if exists ACOS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ACOS;
drop table if exists ADDDATE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ADDDATE;
drop table if exists ADDTIME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ADDTIME;
drop table if exists AES_DECRYPT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE AES_DECRYPT;
drop table if exists AES_ENCRYPT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE AES_ENCRYPT;
drop table if exists AREA;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE AREA;
drop table if exists ASBINARY;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ASBINARY;
drop table if exists ASIN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ASIN;
drop table if exists ASTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ASTEXT;
drop table if exists ASWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ASWKB;
drop table if exists ASWKT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ASWKT;
drop table if exists ATAN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ATAN;
drop table if exists ATAN2;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ATAN2;
drop table if exists BENCHMARK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE BENCHMARK;
drop table if exists BIN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE BIN;
drop table if exists BIT_COUNT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE BIT_COUNT;
drop table if exists BIT_LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE BIT_LENGTH;
drop table if exists CEIL;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CEIL;
drop table if exists CEILING;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CEILING;
drop table if exists CENTROID;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CENTROID;
drop table if exists CHARACTER_LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CHARACTER_LENGTH;
drop table if exists CHAR_LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CHAR_LENGTH;
drop table if exists COERCIBILITY;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE COERCIBILITY;
drop table if exists COMPRESS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE COMPRESS;
drop table if exists CONCAT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CONCAT;
drop table if exists CONCAT_WS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CONCAT_WS;
drop table if exists CONNECTION_ID;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CONNECTION_ID;
drop table if exists CONV;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CONV;
drop table if exists CONVERT_TZ;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CONVERT_TZ;
drop table if exists COS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE COS;
drop table if exists COT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE COT;
drop table if exists CRC32;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CRC32;
drop table if exists CROSSES;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE CROSSES;
drop table if exists DATEDIFF;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DATEDIFF;
drop table if exists DATE_FORMAT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DATE_FORMAT;
drop table if exists DAYNAME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DAYNAME;
drop table if exists DAYOFMONTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DAYOFMONTH;
drop table if exists DAYOFWEEK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DAYOFWEEK;
drop table if exists DAYOFYEAR;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DAYOFYEAR;
drop table if exists DECODE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DECODE;
drop table if exists DEGREES;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DEGREES;
drop table if exists DES_DECRYPT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DES_DECRYPT;
drop table if exists DES_ENCRYPT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DES_ENCRYPT;
drop table if exists DIMENSION;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DIMENSION;
drop table if exists DISJOINT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE DISJOINT;
drop table if exists ELT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ELT;
drop table if exists ENCODE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ENCODE;
drop table if exists ENCRYPT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ENCRYPT;
drop table if exists ENDPOINT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ENDPOINT;
drop table if exists ENVELOPE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ENVELOPE;
drop table if exists EQUALS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE EQUALS;
drop table if exists EXP;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE EXP;
drop table if exists EXPORT_SET;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE EXPORT_SET;
drop table if exists EXTERIORRING;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE EXTERIORRING;
drop table if exists EXTRACTVALUE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE EXTRACTVALUE;
drop table if exists FIND_IN_SET;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE FIND_IN_SET;
drop table if exists FLOOR;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE FLOOR;
drop table if exists FOUND_ROWS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE FOUND_ROWS;
drop table if exists FROM_DAYS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE FROM_DAYS;
drop table if exists FROM_UNIXTIME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE FROM_UNIXTIME;
drop table if exists GEOMCOLLFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMCOLLFROMTEXT;
drop table if exists GEOMCOLLFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMCOLLFROMWKB;
drop table if exists GEOMETRYCOLLECTIONFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYCOLLECTIONFROMTEXT;
drop table if exists GEOMETRYCOLLECTIONFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYCOLLECTIONFROMWKB;
drop table if exists GEOMETRYFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYFROMTEXT;
drop table if exists GEOMETRYFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYFROMWKB;
drop table if exists GEOMETRYN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYN;
drop table if exists GEOMETRYTYPE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMETRYTYPE;
drop table if exists GEOMFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMFROMTEXT;
drop table if exists GEOMFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GEOMFROMWKB;
drop table if exists GET_LOCK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GET_LOCK;
drop table if exists GLENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GLENGTH;
drop table if exists GREATEST;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE GREATEST;
drop table if exists HEX;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE HEX;
drop table if exists IFNULL;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE IFNULL;
drop table if exists INET_ATON;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE INET_ATON;
drop table if exists INET_NTOA;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE INET_NTOA;
drop table if exists INSTR;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE INSTR;
drop table if exists INTERIORRINGN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE INTERIORRINGN;
drop table if exists INTERSECTS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE INTERSECTS;
drop table if exists ISCLOSED;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ISCLOSED;
drop table if exists ISEMPTY;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ISEMPTY;
drop table if exists ISNULL;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ISNULL;
drop table if exists ISSIMPLE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ISSIMPLE;
drop table if exists IS_FREE_LOCK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE IS_FREE_LOCK;
drop table if exists IS_USED_LOCK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE IS_USED_LOCK;
drop table if exists LAST_DAY;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LAST_DAY;
drop table if exists LAST_INSERT_ID;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LAST_INSERT_ID;
drop table if exists LCASE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LCASE;
drop table if exists LEAST;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LEAST;
drop table if exists LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LENGTH;
drop table if exists LINEFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LINEFROMTEXT;
drop table if exists LINEFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LINEFROMWKB;
drop table if exists LINESTRINGFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LINESTRINGFROMTEXT;
drop table if exists LINESTRINGFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LINESTRINGFROMWKB;
drop table if exists LN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LN;
drop table if exists LOAD_FILE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOAD_FILE;
drop table if exists LOCATE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOCATE;
drop table if exists LOG;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOG;
drop table if exists LOG10;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOG10;
drop table if exists LOG2;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOG2;
drop table if exists LOWER;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LOWER;
drop table if exists LPAD;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LPAD;
drop table if exists LTRIM;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE LTRIM;
drop table if exists MAKEDATE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MAKEDATE;
drop table if exists MAKETIME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MAKETIME;
drop table if exists MAKE_SET;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MAKE_SET;
drop table if exists MASTER_POS_WAIT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MASTER_POS_WAIT;
drop table if exists MBRCONTAINS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBRCONTAINS;
drop table if exists MBRDISJOINT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBRDISJOINT;
drop table if exists MBREQUAL;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBREQUAL;
drop table if exists MBRINTERSECTS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBRINTERSECTS;
drop table if exists MBROVERLAPS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBROVERLAPS;
drop table if exists MBRTOUCHES;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBRTOUCHES;
drop table if exists MBRWITHIN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MBRWITHIN;
drop table if exists MD5;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MD5;
drop table if exists MLINEFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MLINEFROMTEXT;
drop table if exists MLINEFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MLINEFROMWKB;
drop table if exists MONTHNAME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MONTHNAME;
drop table if exists MPOINTFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MPOINTFROMTEXT;
drop table if exists MPOINTFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MPOINTFROMWKB;
drop table if exists MPOLYFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MPOLYFROMTEXT;
drop table if exists MPOLYFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MPOLYFROMWKB;
drop table if exists MULTILINESTRINGFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTILINESTRINGFROMTEXT;
drop table if exists MULTILINESTRINGFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTILINESTRINGFROMWKB;
drop table if exists MULTIPOINTFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTIPOINTFROMTEXT;
drop table if exists MULTIPOINTFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTIPOINTFROMWKB;
drop table if exists MULTIPOLYGONFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTIPOLYGONFROMTEXT;
drop table if exists MULTIPOLYGONFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE MULTIPOLYGONFROMWKB;
drop table if exists NAME_CONST;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE NAME_CONST;
drop table if exists NULLIF;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE NULLIF;
drop table if exists NUMGEOMETRIES;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE NUMGEOMETRIES;
drop table if exists NUMINTERIORRINGS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE NUMINTERIORRINGS;
drop table if exists NUMPOINTS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE NUMPOINTS;
drop table if exists OCT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE OCT;
drop table if exists OCTET_LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE OCTET_LENGTH;
drop table if exists ORD;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ORD;
drop table if exists OVERLAPS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE OVERLAPS;
drop table if exists PERIOD_ADD;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE PERIOD_ADD;
drop table if exists PERIOD_DIFF;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE PERIOD_DIFF;
drop table if exists PI;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE PI;
drop table if exists POINTFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POINTFROMTEXT;
drop table if exists POINTFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POINTFROMWKB;
drop table if exists POINTN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POINTN;
drop table if exists POLYFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POLYFROMTEXT;
drop table if exists POLYFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POLYFROMWKB;
drop table if exists POLYGONFROMTEXT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POLYGONFROMTEXT;
drop table if exists POLYGONFROMWKB;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POLYGONFROMWKB;
drop table if exists POW;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POW;
drop table if exists POWER;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE POWER;
drop table if exists QUOTE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE QUOTE;
drop table if exists RADIANS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE RADIANS;
drop table if exists RAND;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE RAND;
drop table if exists RELEASE_LOCK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE RELEASE_LOCK;
drop table if exists REVERSE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE REVERSE;
drop table if exists ROUND;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ROUND;
drop table if exists ROW_COUNT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE ROW_COUNT;
drop table if exists RPAD;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE RPAD;
drop table if exists RTRIM;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE RTRIM;
drop table if exists SEC_TO_TIME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SEC_TO_TIME;
drop table if exists SESSION_USER;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SESSION_USER;
drop table if exists SHA;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SHA;
drop table if exists SHA1;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SHA1;
drop table if exists SIGN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SIGN;
drop table if exists SIN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SIN;
drop table if exists SLEEP;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SLEEP;
drop table if exists SOUNDEX;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SOUNDEX;
drop table if exists SPACE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SPACE;
drop table if exists SQRT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SQRT;
drop table if exists SRID;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SRID;
drop table if exists STARTPOINT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE STARTPOINT;
drop table if exists STRCMP;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE STRCMP;
drop table if exists STR_TO_DATE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE STR_TO_DATE;
drop table if exists SUBDATE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SUBDATE;
drop table if exists SUBSTRING_INDEX;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SUBSTRING_INDEX;
drop table if exists SUBTIME;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SUBTIME;
drop table if exists SYSTEM_USER;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE SYSTEM_USER;
drop table if exists TAN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TAN;
drop table if exists TIMEDIFF;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TIMEDIFF;
drop table if exists TIME_FORMAT;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TIME_FORMAT;
drop table if exists TIME_TO_SEC;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TIME_TO_SEC;
drop table if exists TOUCHES;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TOUCHES;
drop table if exists TO_DAYS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE TO_DAYS;
drop table if exists UCASE;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UCASE;
drop table if exists UNCOMPRESS;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UNCOMPRESS;
drop table if exists UNCOMPRESSED_LENGTH;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UNCOMPRESSED_LENGTH;
drop table if exists UNHEX;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UNHEX;
drop table if exists UNIX_TIMESTAMP;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UNIX_TIMESTAMP;
drop table if exists UPDATEXML;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UPDATEXML;
drop table if exists UPPER;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UPPER;
drop table if exists UUID;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE UUID;
drop table if exists VERSION;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE VERSION;
drop table if exists WEEKDAY;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE WEEKDAY;
drop table if exists WEEKOFYEAR;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE WEEKOFYEAR;
drop table if exists WITHIN;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE WITHIN;
drop table if exists X;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE X;
drop table if exists Y;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE Y;
drop table if exists YEARWEEK;
drop table if exists bug21114_child;
DROP TABLE bug21114_child;
DROP TABLE YEARWEEK;
...@@ -791,13 +791,13 @@ test.`f``1` () ...@@ -791,13 +791,13 @@ test.`f``1` ()
5 5
drop view v1; drop view v1;
drop function `f``1`; drop function `f``1`;
create function x () returns int return 5; create function a() returns int return 5;
create view v1 as select x (); create view v1 as select a();
select * from v1; select * from v1;
x () a()
5 5
drop view v1; drop view v1;
drop function x; drop function a;
create table t2 (col1 char collate latin1_german2_ci); create table t2 (col1 char collate latin1_german2_ci);
create view v2 as select col1 collate latin1_german1_ci from t2; create view v2 as select col1 collate latin1_german1_ci from t2;
show create view v2; show create view v2;
......
...@@ -34,6 +34,11 @@ select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6) ...@@ -34,6 +34,11 @@ select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6)
explain extended select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6),format(cot(1),6),format(asin(1),6),format(acos(0),6),format(atan(1),6); explain extended select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6),format(cot(1),6),format(asin(1),6),format(acos(0),6),format(atan(1),6);
select degrees(pi()),radians(360); select degrees(pi()),radians(360);
select format(atan(-2, 2), 6);
select format(atan(pi(), 0), 6);
select format(atan2(-2, 2), 6);
select format(atan2(pi(), 0), 6);
# #
# Bug #2338 Trignometric arithmatic problems # Bug #2338 Trignometric arithmatic problems
# #
......
#
# This file contains tests covering the parser
#
#=============================================================================
# LEXICAL PARSER (lex)
#=============================================================================
SET @save_sql_mode=@@sql_mode;
#
# Documenting the current behavior, to detect incompatible changes.
# In each cases:
# - no error is the correct result
# - an error is the expected result with the current implementation,
# and is a limitation.
set SQL_MODE='';
create table ADDDATE(a int);
drop table ADDDATE;
create table ADDDATE (a int);
drop table ADDDATE;
--error ER_PARSE_ERROR
create table BIT_AND(a int);
create table BIT_AND (a int);
drop table BIT_AND;
--error ER_PARSE_ERROR
create table BIT_OR(a int);
create table BIT_OR (a int);
drop table BIT_OR;
--error ER_PARSE_ERROR
create table BIT_XOR(a int);
create table BIT_XOR (a int);
drop table BIT_XOR;
--error ER_PARSE_ERROR
create table CAST(a int);
create table CAST (a int);
drop table CAST;
--error ER_PARSE_ERROR
create table COUNT(a int);
create table COUNT (a int);
drop table COUNT;
--error ER_PARSE_ERROR
create table CURDATE(a int);
create table CURDATE (a int);
drop table CURDATE;
--error ER_PARSE_ERROR
create table CURTIME(a int);
create table CURTIME (a int);
drop table CURTIME;
--error ER_PARSE_ERROR
create table DATE_ADD(a int);
create table DATE_ADD (a int);
drop table DATE_ADD;
--error ER_PARSE_ERROR
create table DATE_SUB(a int);
create table DATE_SUB (a int);
drop table DATE_SUB;
--error ER_PARSE_ERROR
create table EXTRACT(a int);
create table EXTRACT (a int);
drop table EXTRACT;
--error ER_PARSE_ERROR
create table GROUP_CONCAT(a int);
create table GROUP_CONCAT (a int);
drop table GROUP_CONCAT;
--error ER_PARSE_ERROR
create table GROUP_UNIQUE_USERS(a int);
create table GROUP_UNIQUE_USERS (a int);
drop table GROUP_UNIQUE_USERS;
--error ER_PARSE_ERROR
create table MAX(a int);
create table MAX (a int);
drop table MAX;
--error ER_PARSE_ERROR
create table MID(a int);
create table MID (a int);
drop table MID;
--error ER_PARSE_ERROR
create table MIN(a int);
create table MIN (a int);
drop table MIN;
--error ER_PARSE_ERROR
create table NOW(a int);
create table NOW (a int);
drop table NOW;
--error ER_PARSE_ERROR
create table POSITION(a int);
create table POSITION (a int);
drop table POSITION;
create table SESSION_USER(a int);
drop table SESSION_USER;
create table SESSION_USER (a int);
drop table SESSION_USER;
--error ER_PARSE_ERROR
create table STD(a int);
create table STD (a int);
drop table STD;
--error ER_PARSE_ERROR
create table STDDEV(a int);
create table STDDEV (a int);
drop table STDDEV;
--error ER_PARSE_ERROR
create table STDDEV_POP(a int);
create table STDDEV_POP (a int);
drop table STDDEV_POP;
--error ER_PARSE_ERROR
create table STDDEV_SAMP(a int);
create table STDDEV_SAMP (a int);
drop table STDDEV_SAMP;
create table SUBDATE(a int);
drop table SUBDATE;
create table SUBDATE (a int);
drop table SUBDATE;
--error ER_PARSE_ERROR
create table SUBSTR(a int);
create table SUBSTR (a int);
drop table SUBSTR;
--error ER_PARSE_ERROR
create table SUBSTRING(a int);
create table SUBSTRING (a int);
drop table SUBSTRING;
--error ER_PARSE_ERROR
create table SUM(a int);
create table SUM (a int);
drop table SUM;
--error ER_PARSE_ERROR
create table SYSDATE(a int);
create table SYSDATE (a int);
drop table SYSDATE;
create table SYSTEM_USER(a int);
drop table SYSTEM_USER;
create table SYSTEM_USER (a int);
drop table SYSTEM_USER;
--error ER_PARSE_ERROR
create table TRIM(a int);
create table TRIM (a int);
drop table TRIM;
--error ER_PARSE_ERROR
create table UNIQUE_USERS(a int);
create table UNIQUE_USERS (a int);
drop table UNIQUE_USERS;
--error ER_PARSE_ERROR
create table VARIANCE(a int);
create table VARIANCE (a int);
drop table VARIANCE;
--error ER_PARSE_ERROR
create table VAR_POP(a int);
create table VAR_POP (a int);
drop table VAR_POP;
--error ER_PARSE_ERROR
create table VAR_SAMP(a int);
create table VAR_SAMP (a int);
drop table VAR_SAMP;
set SQL_MODE='IGNORE_SPACE';
create table ADDDATE(a int);
drop table ADDDATE;
create table ADDDATE (a int);
drop table ADDDATE;
--error ER_PARSE_ERROR
create table BIT_AND(a int);
--error ER_PARSE_ERROR
create table BIT_AND (a int);
--error ER_PARSE_ERROR
create table BIT_OR(a int);
--error ER_PARSE_ERROR
create table BIT_OR (a int);
--error ER_PARSE_ERROR
create table BIT_XOR(a int);
--error ER_PARSE_ERROR
create table BIT_XOR (a int);
--error ER_PARSE_ERROR
create table CAST(a int);
--error ER_PARSE_ERROR
create table CAST (a int);
--error ER_PARSE_ERROR
create table COUNT(a int);
--error ER_PARSE_ERROR
create table COUNT (a int);
--error ER_PARSE_ERROR
create table CURDATE(a int);
--error ER_PARSE_ERROR
create table CURDATE (a int);
--error ER_PARSE_ERROR
create table CURTIME(a int);
--error ER_PARSE_ERROR
create table CURTIME (a int);
--error ER_PARSE_ERROR
create table DATE_ADD(a int);
--error ER_PARSE_ERROR
create table DATE_ADD (a int);
--error ER_PARSE_ERROR
create table DATE_SUB(a int);
--error ER_PARSE_ERROR
create table DATE_SUB (a int);
--error ER_PARSE_ERROR
create table EXTRACT(a int);
--error ER_PARSE_ERROR
create table EXTRACT (a int);
--error ER_PARSE_ERROR
create table GROUP_CONCAT(a int);
--error ER_PARSE_ERROR
create table GROUP_CONCAT (a int);
--error ER_PARSE_ERROR
create table GROUP_UNIQUE_USERS(a int);
--error ER_PARSE_ERROR
create table GROUP_UNIQUE_USERS (a int);
--error ER_PARSE_ERROR
create table MAX(a int);
--error ER_PARSE_ERROR
create table MAX (a int);
--error ER_PARSE_ERROR
create table MID(a int);
--error ER_PARSE_ERROR
create table MID (a int);
--error ER_PARSE_ERROR
create table MIN(a int);
--error ER_PARSE_ERROR
create table MIN (a int);
--error ER_PARSE_ERROR
create table NOW(a int);
--error ER_PARSE_ERROR
create table NOW (a int);
--error ER_PARSE_ERROR
create table POSITION(a int);
--error ER_PARSE_ERROR
create table POSITION (a int);
create table SESSION_USER(a int);
drop table SESSION_USER;
create table SESSION_USER (a int);
drop table SESSION_USER;
--error ER_PARSE_ERROR
create table STD(a int);
--error ER_PARSE_ERROR
create table STD (a int);
--error ER_PARSE_ERROR
create table STDDEV(a int);
--error ER_PARSE_ERROR
create table STDDEV (a int);
--error ER_PARSE_ERROR
create table STDDEV_POP(a int);
--error ER_PARSE_ERROR
create table STDDEV_POP (a int);
--error ER_PARSE_ERROR
create table STDDEV_SAMP(a int);
--error ER_PARSE_ERROR
create table STDDEV_SAMP (a int);
create table SUBDATE(a int);
drop table SUBDATE;
create table SUBDATE (a int);
drop table SUBDATE;
--error ER_PARSE_ERROR
create table SUBSTR(a int);
--error ER_PARSE_ERROR
create table SUBSTR (a int);
--error ER_PARSE_ERROR
create table SUBSTRING(a int);
--error ER_PARSE_ERROR
create table SUBSTRING (a int);
--error ER_PARSE_ERROR
create table SUM(a int);
--error ER_PARSE_ERROR
create table SUM (a int);
--error ER_PARSE_ERROR
create table SYSDATE(a int);
--error ER_PARSE_ERROR
create table SYSDATE (a int);
create table SYSTEM_USER(a int);
drop table SYSTEM_USER;
create table SYSTEM_USER (a int);
drop table SYSTEM_USER;
--error ER_PARSE_ERROR
create table TRIM(a int);
--error ER_PARSE_ERROR
create table TRIM (a int);
--error ER_PARSE_ERROR
create table UNIQUE_USERS(a int);
--error ER_PARSE_ERROR
create table UNIQUE_USERS (a int);
--error ER_PARSE_ERROR
create table VARIANCE(a int);
--error ER_PARSE_ERROR
create table VARIANCE (a int);
--error ER_PARSE_ERROR
create table VAR_POP(a int);
--error ER_PARSE_ERROR
create table VAR_POP (a int);
--error ER_PARSE_ERROR
create table VAR_SAMP(a int);
--error ER_PARSE_ERROR
create table VAR_SAMP (a int);
SET @@sql_mode=@save_sql_mode;
#=============================================================================
# SYNTACTIC PARSER (bison)
#=============================================================================
#
#
# Bug#21114 (Foreign key creation fails to table with name format)
#
# Test coverage with edge conditions
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select pi(3.14);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select tan();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select tan(1, 2);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select makedate(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select makedate(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select maketime();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select maketime(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select maketime(1, 2);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select maketime(1, 2, 3, 4);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select atan();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select atan2(1, 2, 3);
select benchmark(10, 1+1);
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select benchmark(5+5, 2);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select concat();
select concat("foo");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select concat_ws();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select concat_ws("foo");
set @pwd="my password";
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select encode("secret", @pwd);
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select decode("encoded-secret", @pwd);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select encrypt();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select encrypt(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select des_encrypt("p1", "p2", "not expected");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select des_decrypt("p1", "p2", "not expected");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select elt();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select elt(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select export_set();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select export_set("p1");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select export_set("p1", "p2");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select export_set("p1", "p2", "p3", "p4", "p5", "p6");
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select field();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select field("p1");
set @dec=2;
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select format(pi(), @dec);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select from_unixtime();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select from_unixtime(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select unix_timestamp(1, 2);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select greatest();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select greatest(12);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select last_insert_id(1, 2);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select least();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select least(12);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select locate();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select locate(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select locate(1, 2, 3, 4);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select log();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select log(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select make_set();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select make_set(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select master_pos_wait();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select master_pos_wait(1);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select master_pos_wait(1, 2, 3, 4);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select rand(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select round(1, 2, 3);
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select yearweek();
-- error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
select yearweek(1, 2, 3);
-- source include/have_innodb.inc
let $engine_type=InnoDb;
#
# Bug#21114 (Foreign key creation fails to table with name format)
#
# Testing with the full log for only a few functions,
# including FORMAT for witch the bug was reported.
let $verbose=1;
let $FCT=ABS;
-- source include/parser_bug21114.inc
let $FCT=FIELD;
-- source include/parser_bug21114.inc
let $FCT=FORMAT;
-- source include/parser_bug21114.inc
# Ignoring the result of SHOW CREATE (this generates too much noise)
# Tests will fail if the create table statement can not be parsed
let verbose=0;
let $FCT=ACOS;
-- source include/parser_bug21114.inc
let $FCT=ADDDATE;
-- source include/parser_bug21114.inc
let $FCT=ADDTIME;
-- source include/parser_bug21114.inc
let $FCT=AES_DECRYPT;
-- source include/parser_bug21114.inc
let $FCT=AES_ENCRYPT;
-- source include/parser_bug21114.inc
let $FCT=AREA;
-- source include/parser_bug21114.inc
let $FCT=ASBINARY;
-- source include/parser_bug21114.inc
let $FCT=ASIN;
-- source include/parser_bug21114.inc
let $FCT=ASTEXT;
-- source include/parser_bug21114.inc
let $FCT=ASWKB;
-- source include/parser_bug21114.inc
let $FCT=ASWKT;
-- source include/parser_bug21114.inc
let $FCT=ATAN;
-- source include/parser_bug21114.inc
let $FCT=ATAN2;
-- source include/parser_bug21114.inc
let $FCT=BENCHMARK;
-- source include/parser_bug21114.inc
let $FCT=BIN;
-- source include/parser_bug21114.inc
let $FCT=BIT_COUNT;
-- source include/parser_bug21114.inc
let $FCT=BIT_LENGTH;
-- source include/parser_bug21114.inc
let $FCT=CEIL;
-- source include/parser_bug21114.inc
let $FCT=CEILING;
-- source include/parser_bug21114.inc
let $FCT=CENTROID;
-- source include/parser_bug21114.inc
let $FCT=CHARACTER_LENGTH;
-- source include/parser_bug21114.inc
let $FCT=CHAR_LENGTH;
-- source include/parser_bug21114.inc
let $FCT=COERCIBILITY;
-- source include/parser_bug21114.inc
let $FCT=COMPRESS;
-- source include/parser_bug21114.inc
let $FCT=CONCAT;
-- source include/parser_bug21114.inc
let $FCT=CONCAT_WS;
-- source include/parser_bug21114.inc
let $FCT=CONNECTION_ID;
-- source include/parser_bug21114.inc
let $FCT=CONV;
-- source include/parser_bug21114.inc
let $FCT=CONVERT_TZ;
-- source include/parser_bug21114.inc
let $FCT=COS;
-- source include/parser_bug21114.inc
let $FCT=COT;
-- source include/parser_bug21114.inc
let $FCT=CRC32;
-- source include/parser_bug21114.inc
let $FCT=CROSSES;
-- source include/parser_bug21114.inc
let $FCT=DATEDIFF;
-- source include/parser_bug21114.inc
let $FCT=DATE_FORMAT;
-- source include/parser_bug21114.inc
let $FCT=DAYNAME;
-- source include/parser_bug21114.inc
let $FCT=DAYOFMONTH;
-- source include/parser_bug21114.inc
let $FCT=DAYOFWEEK;
-- source include/parser_bug21114.inc
let $FCT=DAYOFYEAR;
-- source include/parser_bug21114.inc
let $FCT=DECODE;
-- source include/parser_bug21114.inc
let $FCT=DEGREES;
-- source include/parser_bug21114.inc
let $FCT=DES_DECRYPT;
-- source include/parser_bug21114.inc
let $FCT=DES_ENCRYPT;
-- source include/parser_bug21114.inc
let $FCT=DIMENSION;
-- source include/parser_bug21114.inc
let $FCT=DISJOINT;
-- source include/parser_bug21114.inc
let $FCT=ELT;
-- source include/parser_bug21114.inc
let $FCT=ENCODE;
-- source include/parser_bug21114.inc
let $FCT=ENCRYPT;
-- source include/parser_bug21114.inc
let $FCT=ENDPOINT;
-- source include/parser_bug21114.inc
let $FCT=ENVELOPE;
-- source include/parser_bug21114.inc
let $FCT=EQUALS;
-- source include/parser_bug21114.inc
let $FCT=EXP;
-- source include/parser_bug21114.inc
let $FCT=EXPORT_SET;
-- source include/parser_bug21114.inc
let $FCT=EXTERIORRING;
-- source include/parser_bug21114.inc
let $FCT=EXTRACTVALUE;
-- source include/parser_bug21114.inc
let $FCT=FIND_IN_SET;
-- source include/parser_bug21114.inc
let $FCT=FLOOR;
-- source include/parser_bug21114.inc
let $FCT=FOUND_ROWS;
-- source include/parser_bug21114.inc
let $FCT=FROM_DAYS;
-- source include/parser_bug21114.inc
let $FCT=FROM_UNIXTIME;
-- source include/parser_bug21114.inc
let $FCT=GEOMCOLLFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=GEOMCOLLFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYCOLLECTIONFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYCOLLECTIONFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYN;
-- source include/parser_bug21114.inc
let $FCT=GEOMETRYTYPE;
-- source include/parser_bug21114.inc
let $FCT=GEOMFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=GEOMFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=GET_LOCK;
-- source include/parser_bug21114.inc
let $FCT=GLENGTH;
-- source include/parser_bug21114.inc
let $FCT=GREATEST;
-- source include/parser_bug21114.inc
let $FCT=HEX;
-- source include/parser_bug21114.inc
let $FCT=IFNULL;
-- source include/parser_bug21114.inc
let $FCT=INET_ATON;
-- source include/parser_bug21114.inc
let $FCT=INET_NTOA;
-- source include/parser_bug21114.inc
let $FCT=INSTR;
-- source include/parser_bug21114.inc
let $FCT=INTERIORRINGN;
-- source include/parser_bug21114.inc
let $FCT=INTERSECTS;
-- source include/parser_bug21114.inc
let $FCT=ISCLOSED;
-- source include/parser_bug21114.inc
let $FCT=ISEMPTY;
-- source include/parser_bug21114.inc
let $FCT=ISNULL;
-- source include/parser_bug21114.inc
let $FCT=ISSIMPLE;
-- source include/parser_bug21114.inc
let $FCT=IS_FREE_LOCK;
-- source include/parser_bug21114.inc
let $FCT=IS_USED_LOCK;
-- source include/parser_bug21114.inc
let $FCT=LAST_DAY;
-- source include/parser_bug21114.inc
let $FCT=LAST_INSERT_ID;
-- source include/parser_bug21114.inc
let $FCT=LCASE;
-- source include/parser_bug21114.inc
let $FCT=LEAST;
-- source include/parser_bug21114.inc
let $FCT=LENGTH;
-- source include/parser_bug21114.inc
let $FCT=LINEFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=LINEFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=LINESTRINGFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=LINESTRINGFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=LN;
-- source include/parser_bug21114.inc
let $FCT=LOAD_FILE;
-- source include/parser_bug21114.inc
let $FCT=LOCATE;
-- source include/parser_bug21114.inc
let $FCT=LOG;
-- source include/parser_bug21114.inc
let $FCT=LOG10;
-- source include/parser_bug21114.inc
let $FCT=LOG2;
-- source include/parser_bug21114.inc
let $FCT=LOWER;
-- source include/parser_bug21114.inc
let $FCT=LPAD;
-- source include/parser_bug21114.inc
let $FCT=LTRIM;
-- source include/parser_bug21114.inc
let $FCT=MAKEDATE;
-- source include/parser_bug21114.inc
let $FCT=MAKETIME;
-- source include/parser_bug21114.inc
let $FCT=MAKE_SET;
-- source include/parser_bug21114.inc
let $FCT=MASTER_POS_WAIT;
-- source include/parser_bug21114.inc
let $FCT=MBRCONTAINS;
-- source include/parser_bug21114.inc
let $FCT=MBRDISJOINT;
-- source include/parser_bug21114.inc
let $FCT=MBREQUAL;
-- source include/parser_bug21114.inc
let $FCT=MBRINTERSECTS;
-- source include/parser_bug21114.inc
let $FCT=MBROVERLAPS;
-- source include/parser_bug21114.inc
let $FCT=MBRTOUCHES;
-- source include/parser_bug21114.inc
let $FCT=MBRWITHIN;
-- source include/parser_bug21114.inc
let $FCT=MD5;
-- source include/parser_bug21114.inc
let $FCT=MLINEFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MLINEFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=MONTHNAME;
-- source include/parser_bug21114.inc
let $FCT=MPOINTFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MPOINTFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=MPOLYFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MPOLYFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=MULTILINESTRINGFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MULTILINESTRINGFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=MULTIPOINTFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MULTIPOINTFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=MULTIPOLYGONFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=MULTIPOLYGONFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=NAME_CONST;
-- source include/parser_bug21114.inc
let $FCT=NULLIF;
-- source include/parser_bug21114.inc
let $FCT=NUMGEOMETRIES;
-- source include/parser_bug21114.inc
let $FCT=NUMINTERIORRINGS;
-- source include/parser_bug21114.inc
let $FCT=NUMPOINTS;
-- source include/parser_bug21114.inc
let $FCT=OCT;
-- source include/parser_bug21114.inc
let $FCT=OCTET_LENGTH;
-- source include/parser_bug21114.inc
let $FCT=ORD;
-- source include/parser_bug21114.inc
let $FCT=OVERLAPS;
-- source include/parser_bug21114.inc
let $FCT=PERIOD_ADD;
-- source include/parser_bug21114.inc
let $FCT=PERIOD_DIFF;
-- source include/parser_bug21114.inc
let $FCT=PI;
-- source include/parser_bug21114.inc
let $FCT=POINTFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=POINTFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=POINTN;
-- source include/parser_bug21114.inc
let $FCT=POLYFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=POLYFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=POLYGONFROMTEXT;
-- source include/parser_bug21114.inc
let $FCT=POLYGONFROMWKB;
-- source include/parser_bug21114.inc
let $FCT=POW;
-- source include/parser_bug21114.inc
let $FCT=POWER;
-- source include/parser_bug21114.inc
let $FCT=QUOTE;
-- source include/parser_bug21114.inc
let $FCT=RADIANS;
-- source include/parser_bug21114.inc
let $FCT=RAND;
-- source include/parser_bug21114.inc
let $FCT=RELEASE_LOCK;
-- source include/parser_bug21114.inc
let $FCT=REVERSE;
-- source include/parser_bug21114.inc
let $FCT=ROUND;
-- source include/parser_bug21114.inc
let $FCT=ROW_COUNT;
-- source include/parser_bug21114.inc
let $FCT=RPAD;
-- source include/parser_bug21114.inc
let $FCT=RTRIM;
-- source include/parser_bug21114.inc
let $FCT=SEC_TO_TIME;
-- source include/parser_bug21114.inc
let $FCT=SESSION_USER;
-- source include/parser_bug21114.inc
let $FCT=SHA;
-- source include/parser_bug21114.inc
let $FCT=SHA1;
-- source include/parser_bug21114.inc
let $FCT=SIGN;
-- source include/parser_bug21114.inc
let $FCT=SIN;
-- source include/parser_bug21114.inc
let $FCT=SLEEP;
-- source include/parser_bug21114.inc
let $FCT=SOUNDEX;
-- source include/parser_bug21114.inc
let $FCT=SPACE;
-- source include/parser_bug21114.inc
let $FCT=SQRT;
-- source include/parser_bug21114.inc
let $FCT=SRID;
-- source include/parser_bug21114.inc
let $FCT=STARTPOINT;
-- source include/parser_bug21114.inc
let $FCT=STRCMP;
-- source include/parser_bug21114.inc
let $FCT=STR_TO_DATE;
-- source include/parser_bug21114.inc
let $FCT=SUBDATE;
-- source include/parser_bug21114.inc
let $FCT=SUBSTRING_INDEX;
-- source include/parser_bug21114.inc
let $FCT=SUBTIME;
-- source include/parser_bug21114.inc
let $FCT=SYSTEM_USER;
-- source include/parser_bug21114.inc
let $FCT=TAN;
-- source include/parser_bug21114.inc
let $FCT=TIMEDIFF;
-- source include/parser_bug21114.inc
let $FCT=TIME_FORMAT;
-- source include/parser_bug21114.inc
let $FCT=TIME_TO_SEC;
-- source include/parser_bug21114.inc
let $FCT=TOUCHES;
-- source include/parser_bug21114.inc
let $FCT=TO_DAYS;
-- source include/parser_bug21114.inc
let $FCT=UCASE;
-- source include/parser_bug21114.inc
let $FCT=UNCOMPRESS;
-- source include/parser_bug21114.inc
let $FCT=UNCOMPRESSED_LENGTH;
-- source include/parser_bug21114.inc
let $FCT=UNHEX;
-- source include/parser_bug21114.inc
let $FCT=UNIX_TIMESTAMP;
-- source include/parser_bug21114.inc
let $FCT=UPDATEXML;
-- source include/parser_bug21114.inc
let $FCT=UPPER;
-- source include/parser_bug21114.inc
let $FCT=UUID;
-- source include/parser_bug21114.inc
let $FCT=VERSION;
-- source include/parser_bug21114.inc
let $FCT=WEEKDAY;
-- source include/parser_bug21114.inc
let $FCT=WEEKOFYEAR;
-- source include/parser_bug21114.inc
let $FCT=WITHIN;
-- source include/parser_bug21114.inc
let $FCT=X;
-- source include/parser_bug21114.inc
let $FCT=Y;
-- source include/parser_bug21114.inc
let $FCT=YEARWEEK;
-- source include/parser_bug21114.inc
...@@ -698,11 +698,11 @@ drop function `f``1`; ...@@ -698,11 +698,11 @@ drop function `f``1`;
# #
# tested problem when function name length close to ALIGN_SIZE # tested problem when function name length close to ALIGN_SIZE
# #
create function x () returns int return 5; create function a() returns int return 5;
create view v1 as select x (); create view v1 as select a();
select * from v1; select * from v1;
drop view v1; drop view v1;
drop function x; drop function a;
# #
# VIEW with collation # VIEW with collation
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -14,148 +14,154 @@ ...@@ -14,148 +14,154 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* Functions to create an item. Used by lex.h */ /* Functions to create an item. Used by sql/sql_yacc.yy */
Item *create_func_abs(Item* a); #ifndef ITEM_CREATE_H
Item *create_func_acos(Item* a); #define ITEM_CREATE_H
Item *create_func_aes_encrypt(Item* a, Item* b);
Item *create_func_aes_decrypt(Item* a, Item* b); /**
Item *create_func_ascii(Item* a); Public function builder interface.
Item *create_func_asin(Item* a); The parser (sql/sql_yacc.yy) uses a factory / builder pattern to
Item *create_func_bin(Item* a); construct an <code>Item</code> object for each function call.
Item *create_func_bit_count(Item* a); All the concrete function builders implements this interface,
Item *create_func_bit_length(Item* a); either directly or indirectly with some adapter helpers.
Item *create_func_coercibility(Item* a); Keeping the function creation separated from the bison grammar allows
Item *create_func_ceiling(Item* a); to simplify the parser, and avoid the need to introduce a new token
Item *create_func_char_length(Item* a); for each function, which has undesirable side effects in the grammar.
Item *create_func_cast(Item *a, Cast_target cast_type, int len, int dec, */
class Create_func
{
public:
/**
The builder create method.
Given the function name and list or arguments, this method creates
an <code>Item</code> that represents the function call.
In case or errors, a NULL item is returned, and an error is reported.
Note that the <code>thd</code> object may be modified by the builder.
In particular, the following members/methods can be set/called,
depending on the function called and the function possible side effects.
<ul>
<li><code>thd->lex->binlog_row_based_if_mixed</code></li>
<li><code>thd->lex->current_context()</code></li>
<li><code>thd->lex->safe_to_cache_query</code></li>
<li><code>thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT)</code></li>
<li><code>thd->lex->uncacheable(UNCACHEABLE_RAND)</code></li>
<li><code>thd->lex->add_time_zone_tables_to_query_tables(thd)</code></li>
</ul>
@param thd The current thread
@param name The function name
@param item_list The list of arguments to the function, can be NULL
@return An item representing the parsed function call, or NULL
*/
virtual Item* create(THD *thd, LEX_STRING name, List<Item> *item_list) = 0;
protected:
/** Constructor */
Create_func() {}
/** Destructor */
virtual ~Create_func() {}
};
/**
Function builder for qualified functions.
This builder is used with functions call using a qualified function name
syntax, as in <code>db.func(expr, expr, ...)</code>.
*/
class Create_qfunc : public Create_func
{
public:
/**
The builder create method, for unqualified functions.
This builder will use the current database for the database name.
@param thd The current thread
@param name The function name
@param item_list The list of arguments to the function, can be NULL
@return An item representing the parsed function call
*/
virtual Item* create(THD *thd, LEX_STRING name, List<Item> *item_list);
/**
The builder create method, for qualified functions.
@param thd The current thread
@param db The database name
@param name The function name
@param item_list The list of arguments to the function, can be NULL
@return An item representing the parsed function call
*/
virtual Item* create(THD *thd, LEX_STRING db, LEX_STRING name,
List<Item> *item_list) = 0;
protected:
/** Constructor. */
Create_qfunc() {}
/** Destructor. */
virtual ~Create_qfunc() {}
};
/**
Find the native function builder associated with a given function name.
@param thd The current thread
@param name The native function name
@return The native function builder associated with the name, or NULL
*/
extern Create_func * find_native_function_builder(THD *thd, LEX_STRING name);
/**
Find the function builder for qualified functions.
@param thd The current thread
@return A function builder for qualified functions
*/
extern Create_qfunc * find_qualified_function_builder(THD *thd);
#ifdef HAVE_DLOPEN
/**
Function builder for User Defined Functions.
*/
class Create_udf_func : public Create_func
{
public:
virtual Item* create(THD *thd, LEX_STRING name, List<Item> *item_list);
/**
The builder create method, for User Defined Functions.
@param thd The current thread
@param fct The User Defined Function metadata
@param item_list The list of arguments to the function, can be NULL
@return An item representing the parsed function call
*/
Item* create(THD *thd, udf_func *fct, List<Item> *item_list);
/** Singleton. */
static Create_udf_func s_singleton;
protected:
/** Constructor. */
Create_udf_func() {}
/** Destructor. */
virtual ~Create_udf_func() {}
};
#endif
/**
Builder for cast expressions.
@param thd The current thread
@param a The item to cast
@param cast_type the type casted into
@param len TODO
@param dec TODO
@param cs The character set
*/
Item*
create_func_cast(THD *thd, Item *a, Cast_target cast_type, int len, int dec,
CHARSET_INFO *cs); CHARSET_INFO *cs);
Item *create_func_connection_id(void);
Item *create_func_conv(Item* a, Item *b, Item *c); #endif
Item *create_func_cos(Item* a);
Item *create_func_cot(Item* a);
Item *create_func_crc32(Item* a);
Item *create_func_date_format(Item* a,Item *b);
Item *create_func_dayname(Item* a);
Item *create_func_dayofmonth(Item* a);
Item *create_func_dayofweek(Item* a);
Item *create_func_dayofyear(Item* a);
Item *create_func_degrees(Item *);
Item *create_func_exp(Item* a);
Item *create_func_find_in_set(Item* a, Item *b);
Item *create_func_floor(Item* a);
Item *create_func_found_rows(void);
Item *create_func_from_days(Item* a);
Item *create_func_get_lock(Item* a, Item *b);
Item *create_func_hex(Item *a);
Item *create_func_inet_aton(Item* a);
Item *create_func_inet_ntoa(Item* a);
Item *create_func_ifnull(Item* a, Item *b);
Item *create_func_instr(Item* a, Item *b);
Item *create_func_isnull(Item* a);
Item *create_func_lcase(Item* a);
Item *create_func_length(Item* a);
Item *create_func_ln(Item* a);
Item *create_func_locate(Item* a, Item *b);
Item *create_func_log2(Item* a);
Item *create_func_log10(Item* a);
Item *create_func_lpad(Item* a, Item *b, Item *c);
Item *create_func_ltrim(Item* a);
Item *create_func_md5(Item* a);
Item *create_func_mod(Item* a, Item *b);
Item *create_func_monthname(Item* a);
Item *create_func_name_const(Item *a, Item *b);
Item *create_func_nullif(Item* a, Item *b);
Item *create_func_oct(Item *);
Item *create_func_ord(Item* a);
Item *create_func_period_add(Item* a, Item *b);
Item *create_func_period_diff(Item* a, Item *b);
Item *create_func_pi(void);
Item *create_func_pow(Item* a, Item *b);
Item *create_func_radians(Item *a);
Item *create_func_release_lock(Item* a);
Item *create_func_repeat(Item* a, Item *b);
Item *create_func_reverse(Item* a);
Item *create_func_rpad(Item* a, Item *b, Item *c);
Item *create_func_rtrim(Item* a);
Item *create_func_sec_to_time(Item* a);
Item *create_func_sign(Item* a);
Item *create_func_sin(Item* a);
Item *create_func_sha(Item* a);
Item *create_func_sleep(Item* a);
Item *create_func_soundex(Item* a);
Item *create_func_space(Item *);
Item *create_func_sqrt(Item* a);
Item *create_func_strcmp(Item* a, Item *b);
Item *create_func_tan(Item* a);
Item *create_func_time_format(Item *a, Item *b);
Item *create_func_time_to_sec(Item* a);
Item *create_func_to_days(Item* a);
Item *create_func_ucase(Item* a);
Item *create_func_unhex(Item* a);
Item *create_func_uuid(void);
Item *create_func_version(void);
Item *create_func_weekday(Item* a);
Item *create_load_file(Item* a);
Item *create_func_is_free_lock(Item* a);
Item *create_func_is_used_lock(Item* a);
Item *create_func_quote(Item* a);
Item *create_func_xml_extractvalue(Item *a, Item *b);
Item *create_func_xml_update(Item *a, Item *b, Item *c);
#ifdef HAVE_SPATIAL
Item *create_func_geometry_from_text(Item *a);
Item *create_func_as_wkt(Item *a);
Item *create_func_as_wkb(Item *a);
Item *create_func_srid(Item *a);
Item *create_func_startpoint(Item *a);
Item *create_func_endpoint(Item *a);
Item *create_func_exteriorring(Item *a);
Item *create_func_centroid(Item *a);
Item *create_func_envelope(Item *a);
Item *create_func_pointn(Item *a, Item *b);
Item *create_func_interiorringn(Item *a, Item *b);
Item *create_func_geometryn(Item *a, Item *b);
Item *create_func_equals(Item *a, Item *b);
Item *create_func_disjoint(Item *a, Item *b);
Item *create_func_intersects(Item *a, Item *b);
Item *create_func_touches(Item *a, Item *b);
Item *create_func_crosses(Item *a, Item *b);
Item *create_func_within(Item *a, Item *b);
Item *create_func_contains(Item *a, Item *b);
Item *create_func_overlaps(Item *a, Item *b);
Item *create_func_isempty(Item *a);
Item *create_func_issimple(Item *a);
Item *create_func_isclosed(Item *a);
Item *create_func_geometry_type(Item *a);
Item *create_func_dimension(Item *a);
Item *create_func_x(Item *a);
Item *create_func_y(Item *a);
Item *create_func_area(Item *a);
Item *create_func_glength(Item *a);
Item *create_func_numpoints(Item *a);
Item *create_func_numinteriorring(Item *a);
Item *create_func_numgeometries(Item *a);
Item *create_func_point(Item *a, Item *b);
#endif /*HAVE_SPATIAL*/
Item *create_func_compress(Item *a);
Item *create_func_uncompress(Item *a);
Item *create_func_uncompressed_length(Item *a);
Item *create_func_datediff(Item *a, Item *b);
Item *create_func_weekofyear(Item *a);
Item *create_func_makedate(Item* a,Item* b);
Item *create_func_addtime(Item* a,Item* b);
Item *create_func_subtime(Item* a,Item* b);
Item *create_func_timediff(Item* a,Item* b);
Item *create_func_maketime(Item* a,Item* b,Item* c);
Item *create_func_str_to_date(Item* a,Item* b);
Item *create_func_last_day(Item *a);
...@@ -348,11 +348,11 @@ public: ...@@ -348,11 +348,11 @@ public:
void fix_length_and_dec() { max_length= 10; } void fix_length_and_dec() { max_length= 10; }
}; };
#define GEOM_NEW(obj_constructor) new obj_constructor #define GEOM_NEW(thd, obj_constructor) new (thd->mem_root) obj_constructor
#else /*HAVE_SPATIAL*/ #else /*HAVE_SPATIAL*/
#define GEOM_NEW(obj_constructor) NULL #define GEOM_NEW(thd, obj_constructor) NULL
#endif #endif
...@@ -30,16 +30,7 @@ SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"}; ...@@ -30,16 +30,7 @@ SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"};
#define SYM_OR_NULL(A) A #define SYM_OR_NULL(A) A
#endif #endif
#define SYM(A) SYM_OR_NULL(A),0,0,&sym_group_common #define SYM(A) SYM_OR_NULL(A),0,&sym_group_common
#define F_SYM(A) SYM_OR_NULL(A)
#define CREATE_FUNC(A) (void *)(SYM_OR_NULL(A)), &sym_group_common
#ifdef HAVE_SPATIAL
#define CREATE_FUNC_GEOM(A) (void *)(SYM_OR_NULL(A)), &sym_group_geom
#else
#define CREATE_FUNC_GEOM(A) 0, &sym_group_geom
#endif
/* /*
Symbols are broken into separated arrays to allow field names with Symbols are broken into separated arrays to allow field names with
...@@ -588,235 +579,38 @@ static SYMBOL symbols[] = { ...@@ -588,235 +579,38 @@ static SYMBOL symbols[] = {
static SYMBOL sql_functions[] = { static SYMBOL sql_functions[] = {
{ "ABS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_abs)},
{ "ACOS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_acos)},
{ "ADDDATE", SYM(ADDDATE_SYM)}, { "ADDDATE", SYM(ADDDATE_SYM)},
{ "ADDTIME", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_addtime)},
{ "AES_ENCRYPT", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_aes_encrypt)},
{ "AES_DECRYPT", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_aes_decrypt)},
{ "AREA", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_area)},
{ "ASIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_asin)},
{ "ASBINARY", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_as_wkb)},
{ "ASTEXT", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_as_wkt)},
{ "ASWKB", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_as_wkb)},
{ "ASWKT", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_as_wkt)},
{ "ATAN", SYM(ATAN)},
{ "ATAN2", SYM(ATAN)},
{ "BENCHMARK", SYM(BENCHMARK_SYM)},
{ "BIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_bin)},
{ "BIT_COUNT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_bit_count)},
{ "BIT_OR", SYM(BIT_OR)},
{ "BIT_AND", SYM(BIT_AND)}, { "BIT_AND", SYM(BIT_AND)},
{ "BIT_OR", SYM(BIT_OR)},
{ "BIT_XOR", SYM(BIT_XOR)}, { "BIT_XOR", SYM(BIT_XOR)},
{ "CAST", SYM(CAST_SYM)}, { "CAST", SYM(CAST_SYM)},
{ "CEIL", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ceiling)},
{ "CEILING", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ceiling)},
{ "BIT_LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_bit_length)},
{ "CENTROID", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_centroid)},
{ "CHAR_LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)},
{ "CHARACTER_LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)},
{ "COERCIBILITY", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_coercibility)},
{ "COMPRESS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_compress)},
{ "CONCAT", SYM(CONCAT)},
{ "CONCAT_WS", SYM(CONCAT_WS)},
{ "CONNECTION_ID", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_connection_id)},
{ "CONV", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_conv)},
{ "CONVERT_TZ", SYM(CONVERT_TZ_SYM)},
{ "COUNT", SYM(COUNT_SYM)}, { "COUNT", SYM(COUNT_SYM)},
{ "COS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
{ "COT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
{ "CRC32", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)},
{ "CROSSES", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_crosses)},
{ "CURDATE", SYM(CURDATE)}, { "CURDATE", SYM(CURDATE)},
{ "CURTIME", SYM(CURTIME)}, { "CURTIME", SYM(CURTIME)},
{ "DATE_ADD", SYM(DATE_ADD_INTERVAL)}, { "DATE_ADD", SYM(DATE_ADD_INTERVAL)},
{ "DATEDIFF", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_datediff)},
{ "DATE_FORMAT", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_date_format)},
{ "DATE_SUB", SYM(DATE_SUB_INTERVAL)}, { "DATE_SUB", SYM(DATE_SUB_INTERVAL)},
{ "DAYNAME", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_dayname)},
{ "DAYOFMONTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_dayofmonth)},
{ "DAYOFWEEK", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_dayofweek)},
{ "DAYOFYEAR", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_dayofyear)},
{ "DECODE", SYM(DECODE_SYM)},
{ "DEGREES", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_degrees)},
{ "DES_ENCRYPT", SYM(DES_ENCRYPT_SYM)},
{ "DES_DECRYPT", SYM(DES_DECRYPT_SYM)},
{ "DIMENSION", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_dimension)},
{ "DISJOINT", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_disjoint)},
{ "ELT", SYM(ELT_FUNC)},
{ "ENCODE", SYM(ENCODE_SYM)},
{ "ENCRYPT", SYM(ENCRYPT)},
{ "ENDPOINT", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_endpoint)},
{ "ENVELOPE", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_envelope)},
{ "EQUALS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_equals)},
{ "EXTERIORRING", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_exteriorring)},
{ "EXTRACT", SYM(EXTRACT_SYM)}, { "EXTRACT", SYM(EXTRACT_SYM)},
{ "EXTRACTVALUE", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_xml_extractvalue)},
{ "EXP", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_exp)},
{ "EXPORT_SET", SYM(EXPORT_SET)},
{ "FIELD", SYM(FIELD_FUNC)}, /* For compability */
{ "FIND_IN_SET", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_find_in_set)},
{ "FLOOR", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_floor)},
{ "FORMAT", SYM(FORMAT_SYM)},
{ "FOUND_ROWS", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_found_rows)},
{ "FROM_DAYS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_from_days)},
{ "FROM_UNIXTIME", SYM(FROM_UNIXTIME)},
{ "GET_LOCK", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_get_lock)},
{ "GEOMETRYN", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_geometryn)},
{ "GEOMETRYTYPE", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_geometry_type)},
{ "GEOMCOLLFROMTEXT", SYM(GEOMCOLLFROMTEXT)},
{ "GEOMCOLLFROMWKB", SYM(GEOMFROMWKB)},
{ "GEOMETRYCOLLECTIONFROMTEXT",SYM(GEOMCOLLFROMTEXT)},
{ "GEOMETRYCOLLECTIONFROMWKB",SYM(GEOMFROMWKB)},
{ "GEOMETRYFROMTEXT", SYM(GEOMFROMTEXT)},
{ "GEOMETRYFROMWKB", SYM(GEOMFROMWKB)},
{ "GEOMFROMTEXT", SYM(GEOMFROMTEXT)},
{ "GEOMFROMWKB", SYM(GEOMFROMWKB)},
{ "GLENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_glength)},
{ "GREATEST", SYM(GREATEST_SYM)},
{ "GROUP_CONCAT", SYM(GROUP_CONCAT_SYM)}, { "GROUP_CONCAT", SYM(GROUP_CONCAT_SYM)},
{ "GROUP_UNIQUE_USERS", SYM(GROUP_UNIQUE_USERS)}, { "GROUP_UNIQUE_USERS", SYM(GROUP_UNIQUE_USERS)},
{ "HEX", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_hex)},
{ "IFNULL", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_ifnull)},
{ "INET_ATON", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_inet_aton)},
{ "INET_NTOA", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_inet_ntoa)},
{ "INSTR", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_instr)},
{ "INTERIORRINGN", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_interiorringn)},
{ "INTERSECTS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_intersects)},
{ "ISCLOSED", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_isclosed)},
{ "ISEMPTY", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_isempty)},
{ "ISNULL", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isnull)},
{ "IS_FREE_LOCK", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_free_lock)},
{ "IS_USED_LOCK", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_used_lock)},
{ "LAST_INSERT_ID", SYM(LAST_INSERT_ID)},
{ "ISSIMPLE", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_issimple)},
{ "LAST_DAY", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_last_day)},
{ "LCASE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_lcase)},
{ "LEAST", SYM(LEAST_SYM)},
{ "LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)},
{ "LN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ln)},
{ "LINEFROMTEXT", SYM(LINEFROMTEXT)},
{ "LINEFROMWKB", SYM(GEOMFROMWKB)},
{ "LINESTRINGFROMTEXT",SYM(LINEFROMTEXT)},
{ "LINESTRINGFROMWKB",SYM(GEOMFROMWKB)},
{ "LOAD_FILE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_load_file)},
{ "LOCATE", SYM(LOCATE)},
{ "LOG", SYM(LOG_SYM)},
{ "LOG2", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_log2)},
{ "LOG10", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_log10)},
{ "LOWER", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_lcase)},
{ "LPAD", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_lpad)},
{ "LTRIM", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ltrim)},
{ "MAKE_SET", SYM(MAKE_SET_SYM)},
{ "MAKEDATE", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_makedate)},
{ "MAKETIME", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_maketime)},
{ "MASTER_POS_WAIT", SYM(MASTER_POS_WAIT)},
{ "MAX", SYM(MAX_SYM)}, { "MAX", SYM(MAX_SYM)},
{ "MBRCONTAINS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_contains)},
{ "MBRDISJOINT", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_disjoint)},
{ "MBREQUAL", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_equals)},
{ "MBRINTERSECTS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_intersects)},
{ "MBROVERLAPS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_overlaps)},
{ "MBRTOUCHES", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_touches)},
{ "MBRWITHIN", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_within)},
{ "MD5", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_md5)},
{ "MID", SYM(SUBSTRING)}, /* unireg function */ { "MID", SYM(SUBSTRING)}, /* unireg function */
{ "MIN", SYM(MIN_SYM)}, { "MIN", SYM(MIN_SYM)},
{ "MLINEFROMTEXT", SYM(MLINEFROMTEXT)},
{ "MLINEFROMWKB", SYM(GEOMFROMWKB)},
{ "MPOINTFROMTEXT", SYM(MPOINTFROMTEXT)},
{ "MPOINTFROMWKB", SYM(GEOMFROMWKB)},
{ "MPOLYFROMTEXT", SYM(MPOLYFROMTEXT)},
{ "MPOLYFROMWKB", SYM(GEOMFROMWKB)},
{ "MONTHNAME", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_monthname)},
{ "MULTILINESTRINGFROMTEXT",SYM(MLINEFROMTEXT)},
{ "MULTILINESTRINGFROMWKB",SYM(GEOMFROMWKB)},
{ "MULTIPOINTFROMTEXT",SYM(MPOINTFROMTEXT)},
{ "MULTIPOINTFROMWKB",SYM(GEOMFROMWKB)},
{ "MULTIPOLYGONFROMTEXT",SYM(MPOLYFROMTEXT)},
{ "MULTIPOLYGONFROMWKB",SYM(GEOMFROMWKB)},
{ "NAME_CONST", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_name_const)},
{ "NOW", SYM(NOW_SYM)}, { "NOW", SYM(NOW_SYM)},
{ "NULLIF", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_nullif)},
{ "NUMGEOMETRIES", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_numgeometries)},
{ "NUMINTERIORRINGS", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_numinteriorring)},
{ "NUMPOINTS", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_numpoints)},
{ "OCTET_LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)},
{ "OCT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_oct)},
{ "ORD", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ord)},
{ "OVERLAPS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_overlaps)},
{ "PERIOD_ADD", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_add)},
{ "PERIOD_DIFF", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_diff)},
{ "PI", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_pi)},
{ "POINTFROMTEXT", SYM(POINTFROMTEXT)},
{ "POINTFROMWKB", SYM(GEOMFROMWKB)},
{ "POINTN", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_pointn)},
{ "POLYFROMTEXT", SYM(POLYFROMTEXT)},
{ "POLYFROMWKB", SYM(GEOMFROMWKB)},
{ "POLYGONFROMTEXT", SYM(POLYFROMTEXT)},
{ "POLYGONFROMWKB", SYM(GEOMFROMWKB)},
{ "POSITION", SYM(POSITION_SYM)}, { "POSITION", SYM(POSITION_SYM)},
{ "POW", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_pow)},
{ "POWER", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_pow)},
{ "QUOTE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_quote)},
{ "RADIANS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_radians)},
{ "RAND", SYM(RAND)},
{ "RELEASE_LOCK", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_release_lock)},
{ "REVERSE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_reverse)},
{ "ROUND", SYM(ROUND)},
{ "ROW_COUNT", SYM(ROW_COUNT_SYM)},
{ "RPAD", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_rpad)},
{ "RTRIM", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_rtrim)},
{ "SEC_TO_TIME", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sec_to_time)},
{ "SESSION_USER", SYM(USER)}, { "SESSION_USER", SYM(USER)},
{ "SUBDATE", SYM(SUBDATE_SYM)},
{ "SIGN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sign)},
{ "SIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sin)},
{ "SHA", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)},
{ "SHA1", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)},
{ "SLEEP", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sleep)},
{ "SOUNDEX", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_soundex)},
{ "SPACE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_space)},
{ "SQRT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sqrt)},
{ "SRID", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_srid)},
{ "STARTPOINT", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_startpoint)},
{ "STD", SYM(STD_SYM)}, { "STD", SYM(STD_SYM)},
{ "STDDEV", SYM(STD_SYM)}, { "STDDEV", SYM(STD_SYM)},
{ "STDDEV_POP", SYM(STD_SYM)}, { "STDDEV_POP", SYM(STD_SYM)},
{ "STDDEV_SAMP", SYM(STDDEV_SAMP_SYM)}, { "STDDEV_SAMP", SYM(STDDEV_SAMP_SYM)},
{ "STR_TO_DATE", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_str_to_date)}, { "SUBDATE", SYM(SUBDATE_SYM)},
{ "STRCMP", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_strcmp)},
{ "SUBSTR", SYM(SUBSTRING)}, { "SUBSTR", SYM(SUBSTRING)},
{ "SUBSTRING", SYM(SUBSTRING)}, { "SUBSTRING", SYM(SUBSTRING)},
{ "SUBSTRING_INDEX", SYM(SUBSTRING_INDEX)},
{ "SUBTIME", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_subtime)},
{ "SUM", SYM(SUM_SYM)}, { "SUM", SYM(SUM_SYM)},
{ "SYSDATE", SYM(SYSDATE)}, { "SYSDATE", SYM(SYSDATE)},
{ "SYSTEM_USER", SYM(USER)}, { "SYSTEM_USER", SYM(USER)},
{ "TAN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_tan)},
{ "TIME_FORMAT", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_time_format)},
{ "TIME_TO_SEC", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_time_to_sec)},
{ "TIMEDIFF", F_SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_timediff)},
{ "TO_DAYS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_to_days)},
{ "TOUCHES", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_touches)},
{ "TRIM", SYM(TRIM)}, { "TRIM", SYM(TRIM)},
{ "UCASE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ucase)},
{ "UNCOMPRESS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_uncompress)},
{ "UNCOMPRESSED_LENGTH", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_uncompressed_length)},
{ "UNHEX", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_unhex)},
{ "UNIQUE_USERS", SYM(UNIQUE_USERS)}, { "UNIQUE_USERS", SYM(UNIQUE_USERS)},
{ "UNIX_TIMESTAMP", SYM(UNIX_TIMESTAMP)},
{ "UPDATEXML", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_xml_update)},
{ "UPPER", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ucase)},
{ "UUID", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_uuid)},
{ "VARIANCE", SYM(VARIANCE_SYM)}, { "VARIANCE", SYM(VARIANCE_SYM)},
{ "VAR_POP", SYM(VARIANCE_SYM)}, { "VAR_POP", SYM(VARIANCE_SYM)},
{ "VAR_SAMP", SYM(VAR_SAMP_SYM)}, { "VAR_SAMP", SYM(VAR_SAMP_SYM)},
{ "VERSION", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_version)},
{ "WEEKDAY", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_weekday)},
{ "WEEKOFYEAR", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_weekofyear)},
{ "WITHIN", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_within)},
{ "X", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_x)},
{ "Y", F_SYM(FUNC_ARG1),0,CREATE_FUNC_GEOM(create_func_y)},
{ "YEARWEEK", SYM(YEARWEEK)}
}; };
...@@ -26,7 +26,6 @@ typedef struct st_symbol { ...@@ -26,7 +26,6 @@ typedef struct st_symbol {
const char *name; const char *name;
uint tok; uint tok;
uint length; uint length;
void *create_func;
struct st_sym_group *group; struct st_sym_group *group;
} SYMBOL; } SYMBOL;
......
...@@ -2011,6 +2011,10 @@ inline void kill_delayed_threads(void) {} ...@@ -2011,6 +2011,10 @@ inline void kill_delayed_threads(void) {}
/* Used by handlers to store things in schema tables */ /* Used by handlers to store things in schema tables */
bool schema_table_store_record(THD *thd, TABLE *table); bool schema_table_store_record(THD *thd, TABLE *table);
/* sql/item_create.cc */
int item_create_init();
void item_create_cleanup();
#endif /* MYSQL_SERVER */ #endif /* MYSQL_SERVER */
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
......
...@@ -1184,6 +1184,7 @@ void clean_up(bool print_message) ...@@ -1184,6 +1184,7 @@ void clean_up(bool print_message)
hostname_cache_free(); hostname_cache_free();
item_user_lock_free(); item_user_lock_free();
lex_free(); /* Free some memory */ lex_free(); /* Free some memory */
item_create_cleanup();
set_var_free(); set_var_free();
free_charsets(); free_charsets();
(void) ha_panic(HA_PANIC_CLOSE); /* close all tables and logs */ (void) ha_panic(HA_PANIC_CLOSE); /* close all tables and logs */
...@@ -2693,6 +2694,8 @@ static int init_common_variables(const char *conf_file_name, int argc, ...@@ -2693,6 +2694,8 @@ static int init_common_variables(const char *conf_file_name, int argc,
return 1; return 1;
init_client_errs(); init_client_errs();
lex_init(); lex_init();
if (item_create_init())
return 1;
item_init(); item_init();
set_var_init(); set_var_init();
mysys_uses_curses=0; mysys_uses_curses=0;
......
...@@ -6006,4 +6006,8 @@ ER_NON_INSERTABLE_TABLE ...@@ -6006,4 +6006,8 @@ ER_NON_INSERTABLE_TABLE
eng "The target table %-.100s of the %s is not insertable-into" eng "The target table %-.100s of the %s is not insertable-into"
ER_CANT_RENAME_LOG_TABLE ER_CANT_RENAME_LOG_TABLE
eng "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'" eng "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'"
ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 42000
eng "Incorrect parameter count in the call to native function '%-.64s'"
ER_WRONG_PARAMETERS_TO_NATIVE_FCT 42000
eng "Incorrect parameters in the call to native function '%-.64s'"
...@@ -56,12 +56,17 @@ const LEX_STRING null_lex_str={0,0}; ...@@ -56,12 +56,17 @@ const LEX_STRING null_lex_str={0,0};
} }
/* Helper for parsing "IS [NOT] truth_value" */ /* Helper for parsing "IS [NOT] truth_value" */
inline Item *is_truth_value(Item *A, bool v1, bool v2) inline Item *is_truth_value(THD *thd, Item *A, bool v1, bool v2)
{ {
return new Item_func_if(create_func_ifnull(A, Item *v1_t= new (thd->mem_root) Item_int((char *) (v1 ? "TRUE" : "FALSE"),
new Item_int((char *) (v2 ? "TRUE" : "FALSE"), v2, 1)), v1, 1);
new Item_int((char *) (v1 ? "TRUE" : "FALSE"), v1, 1), Item *v1_f= new (thd->mem_root) Item_int((char *) (v1 ? "FALSE" : "TRUE"),
new Item_int((char *) (v1 ? "FALSE" : "TRUE"),!v1, 1)); !v1, 1);
Item *v2_t= new (thd->mem_root) Item_int((char *) (v2 ? "TRUE" : "FALSE"),
v2, 1);
Item *ifnull= new (thd->mem_root) Item_func_ifnull(A, v2_t);
return new (thd->mem_root) Item_func_if(ifnull, v1_t, v1_f);
} }
#ifndef DBUG_OFF #ifndef DBUG_OFF
...@@ -142,213 +147,209 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -142,213 +147,209 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%pure_parser /* We have threads */ %pure_parser /* We have threads */
%token END_OF_INPUT /*
Comments for TOKENS.
For each token, please include in the same line a comment that contains
the following tags:
SQL-2003-R : Reserved keyword as per SQL-2003
SQL-2003-N : Non Reserved keyword as per SQL-2003
SQL-1999-R : Reserved keyword as per SQL-1999
SQL-1999-N : Non Reserved keyword as per SQL-1999
MYSQL : MySQL extention (unspecified)
MYSQL-FUNC : MySQL extention, function
INTERNAL : Not a real token, lex optimization
OPERATOR : SQL operator
FUTURE-USE : Reserved for futur use
This makes the code grep-able, and helps maintenance.
*/
%token ABORT_SYM %token ABORT_SYM /* INTERNAL (used in lex) */
%token ACCESSIBLE_SYM %token ACCESSIBLE_SYM
%token ACTION %token ACTION /* SQL-2003-N */
%token ADD %token ADD /* SQL-2003-R */
%token ADDDATE_SYM %token ADDDATE_SYM /* MYSQL-FUNC */
%token AFTER_SYM %token AFTER_SYM /* SQL-2003-N */
%token AGAINST %token AGAINST
%token AGGREGATE_SYM %token AGGREGATE_SYM
%token ALGORITHM_SYM %token ALGORITHM_SYM
%token ALL %token ALL /* SQL-2003-R */
%token ALTER %token ALTER /* SQL-2003-R */
%token ANALYZE_SYM %token ANALYZE_SYM
%token AND_AND_SYM %token AND_AND_SYM /* OPERATOR */
%token AND_SYM %token AND_SYM /* SQL-2003-R */
%token ANY_SYM %token ANY_SYM /* SQL-2003-R */
%token AS %token AS /* SQL-2003-R */
%token ASC %token ASC /* SQL-2003-N */
%token ASCII_SYM %token ASCII_SYM /* MYSQL-FUNC */
%token ASENSITIVE_SYM %token ASENSITIVE_SYM /* FUTURE-USE */
%token AT_SYM %token AT_SYM /* SQL-2003-R */
%token ATAN
%token AUTHORS_SYM %token AUTHORS_SYM
%token AUTO_INC
%token AUTOEXTEND_SIZE_SYM %token AUTOEXTEND_SIZE_SYM
%token AUTO_INC
%token AVG_ROW_LENGTH %token AVG_ROW_LENGTH
%token AVG_SYM %token AVG_SYM /* SQL-2003-N */
%token BACKUP_SYM %token BACKUP_SYM
%token BEFORE_SYM %token BEFORE_SYM /* SQL-2003-N */
%token BEGIN_SYM %token BEGIN_SYM /* SQL-2003-R */
%token BENCHMARK_SYM %token BETWEEN_SYM /* SQL-2003-R */
%token BIGINT %token BIGINT /* SQL-2003-R */
%token BINARY %token BINARY /* SQL-2003-R */
%token BINLOG_SYM %token BINLOG_SYM
%token BIN_NUM %token BIN_NUM
%token BIT_AND %token BIT_AND /* MYSQL-FUNC */
%token BIT_OR %token BIT_OR /* MYSQL-FUNC */
%token BIT_SYM %token BIT_SYM /* MYSQL-FUNC */
%token BIT_XOR %token BIT_XOR /* MYSQL-FUNC */
%token BLOB_SYM %token BLOB_SYM /* SQL-2003-R */
%token BOOLEAN_SYM %token BOOLEAN_SYM /* SQL-2003-R */
%token BOOL_SYM %token BOOL_SYM
%token BOTH %token BOTH /* SQL-2003-R */
%token BTREE_SYM %token BTREE_SYM
%token BY %token BY /* SQL-2003-R */
%token BYTE_SYM %token BYTE_SYM
%token CACHE_SYM %token CACHE_SYM
%token CALL_SYM %token CALL_SYM /* SQL-2003-R */
%token CASCADE %token CASCADE /* SQL-2003-N */
%token CASCADED %token CASCADED /* SQL-2003-R */
%token CAST_SYM %token CASE_SYM /* SQL-2003-R */
%token CHAIN_SYM %token CAST_SYM /* SQL-2003-R */
%token CHAIN_SYM /* SQL-2003-N */
%token CHANGE %token CHANGE
%token CHANGED %token CHANGED
%token CHARSET %token CHARSET
%token CHAR_SYM %token CHAR_SYM /* SQL-2003-R */
%token CHECKSUM_SYM %token CHECKSUM_SYM
%token CHECK_SYM %token CHECK_SYM /* SQL-2003-R */
%token CIPHER_SYM %token CIPHER_SYM
%token CLIENT_SYM %token CLIENT_SYM
%token CLOSE_SYM %token CLOSE_SYM /* SQL-2003-R */
%token COALESCE %token COALESCE /* SQL-2003-N */
%token CODE_SYM %token CODE_SYM
%token COLLATE_SYM %token COLLATE_SYM /* SQL-2003-R */
%token COLLATION_SYM %token COLLATION_SYM /* SQL-2003-N */
%token COLUMNS %token COLUMNS
%token COLUMN_SYM %token COLUMN_SYM /* SQL-2003-R */
%token COMMENT_SYM %token COMMENT_SYM
%token COMMITTED_SYM %token COMMITTED_SYM /* SQL-2003-N */
%token COMMIT_SYM %token COMMIT_SYM /* SQL-2003-R */
%token COMPACT_SYM %token COMPACT_SYM
%token COMPLETION_SYM %token COMPLETION_SYM
%token COMPRESSED_SYM %token COMPRESSED_SYM
%token CONCAT
%token CONCAT_WS
%token CONCURRENT %token CONCURRENT
%token CONDITION_SYM %token CONDITION_SYM /* SQL-2003-N */
%token CONNECTION_SYM %token CONNECTION_SYM
%token CONSISTENT_SYM %token CONSISTENT_SYM
%token CONSTRAINT %token CONSTRAINT /* SQL-2003-R */
%token CONTAINS_SYM %token CONTAINS_SYM /* SQL-2003-N */
%token CONTINUE_SYM %token CONTINUE_SYM /* SQL-2003-R */
%token CONTRIBUTORS_SYM %token CONTRIBUTORS_SYM
%token CONVERT_SYM %token CONVERT_SYM /* SQL-2003-N */
%token CONVERT_TZ_SYM %token COUNT_SYM /* SQL-2003-N */
%token COUNT_SYM %token CREATE /* SQL-2003-R */
%token CREATE %token CROSS /* SQL-2003-R */
%token CROSS %token CUBE_SYM /* SQL-2003-R */
%token CUBE_SYM %token CURDATE /* MYSQL-FUNC */
%token CURDATE %token CURRENT_USER /* SQL-2003-R */
%token CURRENT_USER %token CURSOR_SYM /* SQL-2003-R */
%token CURSOR_SYM %token CURTIME /* MYSQL-FUNC */
%token CURTIME
%token DATABASE %token DATABASE
%token DATABASES %token DATABASES
%token DATAFILE_SYM %token DATAFILE_SYM
%token DATA_SYM %token DATA_SYM /* SQL-2003-N */
%token DATETIME %token DATETIME
%token DATE_ADD_INTERVAL %token DATE_ADD_INTERVAL /* MYSQL-FUNC */
%token DATE_SUB_INTERVAL %token DATE_SUB_INTERVAL /* MYSQL-FUNC */
%token DATE_SYM %token DATE_SYM /* SQL-2003-R */
%token DAY_HOUR_SYM %token DAY_HOUR_SYM
%token DAY_MICROSECOND_SYM %token DAY_MICROSECOND_SYM
%token DAY_MINUTE_SYM %token DAY_MINUTE_SYM
%token DAY_SECOND_SYM %token DAY_SECOND_SYM
%token DAY_SYM %token DAY_SYM /* SQL-2003-R */
%token DEALLOCATE_SYM %token DEALLOCATE_SYM /* SQL-2003-R */
%token DECIMAL_NUM %token DECIMAL_NUM
%token DECIMAL_SYM %token DECIMAL_SYM /* SQL-2003-R */
%token DECLARE_SYM %token DECLARE_SYM /* SQL-2003-R */
%token DECODE_SYM %token DEFAULT /* SQL-2003-R */
%token DEFAULT
%token DEFINER_SYM %token DEFINER_SYM
%token DELAYED_SYM %token DELAYED_SYM
%token DELAY_KEY_WRITE_SYM %token DELAY_KEY_WRITE_SYM
%token DELETE_SYM %token DELETE_SYM /* SQL-2003-R */
%token DESC %token DESC /* SQL-2003-N */
%token DESCRIBE %token DESCRIBE /* SQL-2003-R */
%token DES_DECRYPT_SYM
%token DES_ENCRYPT_SYM
%token DES_KEY_FILE %token DES_KEY_FILE
%token DETERMINISTIC_SYM %token DETERMINISTIC_SYM /* SQL-2003-R */
%token DIRECTORY_SYM %token DIRECTORY_SYM
%token DISABLE_SYM %token DISABLE_SYM
%token DISCARD %token DISCARD
%token DISK_SYM %token DISK_SYM
%token DISTINCT %token DISTINCT /* SQL-2003-R */
%token DIV_SYM %token DIV_SYM
%token DOUBLE_SYM %token DOUBLE_SYM /* SQL-2003-R */
%token DO_SYM %token DO_SYM
%token DROP %token DROP /* SQL-2003-R */
%token DUAL_SYM %token DUAL_SYM
%token DUMPFILE %token DUMPFILE
%token DUPLICATE_SYM %token DUPLICATE_SYM
%token DYNAMIC_SYM %token DYNAMIC_SYM /* SQL-2003-R */
%token EACH_SYM %token EACH_SYM /* SQL-2003-R */
%token ELSE /* SQL-2003-R */
%token ELSEIF_SYM %token ELSEIF_SYM
%token ELT_FUNC
%token ENABLE_SYM %token ENABLE_SYM
%token ENCLOSED %token ENCLOSED
%token ENCODE_SYM %token END /* SQL-2003-R */
%token ENCRYPT
%token END
%token ENDS_SYM %token ENDS_SYM
%token END_OF_INPUT /* INTERNAL */
%token ENGINES_SYM %token ENGINES_SYM
%token ENGINE_SYM %token ENGINE_SYM
%token ENUM %token ENUM
%token EQ %token EQ /* OPERATOR */
%token EQUAL_SYM %token EQUAL_SYM /* OPERATOR */
%token ERRORS %token ERRORS
%token ESCAPED %token ESCAPED
%token ESCAPE_SYM %token ESCAPE_SYM /* SQL-2003-R */
%token EVENT_SYM
%token EVENTS_SYM %token EVENTS_SYM
%token EVERY_SYM %token EVENT_SYM
%token EXECUTE_SYM %token EVERY_SYM /* SQL-2003-N */
%token EXISTS %token EXECUTE_SYM /* SQL-2003-R */
%token EXISTS /* SQL-2003-R */
%token EXIT_SYM %token EXIT_SYM
%token EXPANSION_SYM %token EXPANSION_SYM
%token EXPORT_SET
%token EXTENDED_SYM %token EXTENDED_SYM
%token EXTENT_SIZE_SYM %token EXTENT_SIZE_SYM
%token EXTRACT_SYM %token EXTRACT_SYM /* SQL-2003-N */
%token FALSE_SYM %token FALSE_SYM /* SQL-2003-R */
%token FAST_SYM %token FAST_SYM
%token FETCH_SYM %token FETCH_SYM /* SQL-2003-R */
%token FIELD_FUNC
%token FILE_SYM %token FILE_SYM
%token FIRST_SYM %token FIRST_SYM /* SQL-2003-N */
%token FIXED_SYM %token FIXED_SYM
%token FLOAT_NUM %token FLOAT_NUM
%token FLOAT_SYM %token FLOAT_SYM /* SQL-2003-R */
%token FLUSH_SYM %token FLUSH_SYM
%token FORCE_SYM %token FORCE_SYM
%token FOREIGN %token FOREIGN /* SQL-2003-R */
%token FORMAT_SYM %token FOR_SYM /* SQL-2003-R */
%token FOR_SYM %token FOUND_SYM /* SQL-2003-R */
%token FOUND_SYM
%token FRAC_SECOND_SYM %token FRAC_SECOND_SYM
%token FROM %token FROM
%token FROM_UNIXTIME %token FULL /* SQL-2003-R */
%token FULL
%token FULLTEXT_SYM %token FULLTEXT_SYM
%token FUNCTION_SYM %token FUNCTION_SYM /* SQL-2003-R */
%token FUNC_ARG0
%token FUNC_ARG1
%token FUNC_ARG2
%token FUNC_ARG3
%token GE %token GE
%token GEOMCOLLFROMTEXT
%token GEOMETRYCOLLECTION %token GEOMETRYCOLLECTION
%token GEOMETRY_SYM %token GEOMETRY_SYM
%token GEOMFROMTEXT %token GET_FORMAT /* MYSQL-FUNC */
%token GEOMFROMWKB %token GLOBAL_SYM /* SQL-2003-R */
%token GET_FORMAT %token GRANT /* SQL-2003-R */
%token GLOBAL_SYM
%token GRANT
%token GRANTS %token GRANTS
%token GREATEST_SYM %token GROUP /* SQL-2003-R */
%token GROUP
%token GROUP_CONCAT_SYM %token GROUP_CONCAT_SYM
%token GROUP_UNIQUE_USERS %token GROUP_UNIQUE_USERS
%token GT_SYM %token GT_SYM /* OPERATOR */
%token HANDLER_SYM %token HANDLER_SYM
%token HASH_SYM %token HASH_SYM
%token HAVING %token HAVING /* SQL-2003-R */
%token HELP_SYM %token HELP_SYM
%token HEX_NUM %token HEX_NUM
%token HIGH_PRIORITY %token HIGH_PRIORITY
...@@ -356,7 +357,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -356,7 +357,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token HOUR_MICROSECOND_SYM %token HOUR_MICROSECOND_SYM
%token HOUR_MINUTE_SYM %token HOUR_MINUTE_SYM
%token HOUR_SECOND_SYM %token HOUR_SECOND_SYM
%token HOUR_SYM %token HOUR_SYM /* SQL-2003-R */
%token IDENT %token IDENT
%token IDENTIFIED_SYM %token IDENTIFIED_SYM
%token IDENT_QUOTED %token IDENT_QUOTED
...@@ -367,70 +368,63 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -367,70 +368,63 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token INDEX_SYM %token INDEX_SYM
%token INFILE %token INFILE
%token INITIAL_SIZE_SYM %token INITIAL_SIZE_SYM
%token INNER_SYM %token INNER_SYM /* SQL-2003-R */
%token INNOBASE_SYM %token INNOBASE_SYM
%token INOUT_SYM %token INOUT_SYM /* SQL-2003-R */
%token INSENSITIVE_SYM %token INSENSITIVE_SYM /* SQL-2003-R */
%token INSERT %token INSERT /* SQL-2003-R */
%token INSERT_METHOD %token INSERT_METHOD
%token INSTALL_SYM %token INSTALL_SYM
%token INTERVAL_SYM %token INTERVAL_SYM /* SQL-2003-R */
%token INTO %token INTO /* SQL-2003-R */
%token INT_SYM %token INT_SYM /* SQL-2003-R */
%token INVOKER_SYM %token INVOKER_SYM
%token IN_SYM %token IN_SYM /* SQL-2003-R */
%token IS %token IS /* SQL-2003-R */
%token ISOLATION %token ISOLATION /* SQL-2003-R */
%token ISSUER_SYM %token ISSUER_SYM
%token ITERATE_SYM %token ITERATE_SYM
%token JOIN_SYM %token JOIN_SYM /* SQL-2003-R */
%token KEYS %token KEYS
%token KEY_SYM
%token KEY_BLOCK_SIZE %token KEY_BLOCK_SIZE
%token KEY_SYM /* SQL-2003-N */
%token KILL_SYM %token KILL_SYM
%token LANGUAGE_SYM %token LANGUAGE_SYM /* SQL-2003-R */
%token LAST_INSERT_ID %token LAST_SYM /* SQL-2003-N */
%token LAST_SYM %token LE /* OPERATOR */
%token LE %token LEADING /* SQL-2003-R */
%token LEADING
%token LEAST_SYM
%token LEAVES %token LEAVES
%token LEAVE_SYM %token LEAVE_SYM
%token LEFT %token LEFT /* SQL-2003-R */
%token LESS_SYM %token LESS_SYM
%token LEVEL_SYM %token LEVEL_SYM
%token LEX_HOSTNAME %token LEX_HOSTNAME
%token LIKE %token LIKE /* SQL-2003-R */
%token LIMIT %token LIMIT
%token LINEAR_SYM %token LINEAR_SYM
%token LINEFROMTEXT
%token LINES %token LINES
%token LINESTRING %token LINESTRING
%token LIST_SYM %token LIST_SYM
%token LOAD %token LOAD
%token LOCAL_SYM %token LOCAL_SYM /* SQL-2003-R */
%token LOCATE %token LOCATOR_SYM /* SQL-2003-N */
%token LOCATOR_SYM
%token LOCKS_SYM %token LOCKS_SYM
%token LOCK_SYM %token LOCK_SYM
%token LOGFILE_SYM %token LOGFILE_SYM
%token LOGS_SYM %token LOGS_SYM
%token LOG_SYM
%token LONGBLOB %token LONGBLOB
%token LONGTEXT %token LONGTEXT
%token LONG_NUM %token LONG_NUM
%token LONG_SYM %token LONG_SYM
%token LOOP_SYM %token LOOP_SYM
%token LOW_PRIORITY %token LOW_PRIORITY
%token LT %token LT /* OPERATOR */
%token MAKE_SET_SYM
%token MASTER_CONNECT_RETRY_SYM %token MASTER_CONNECT_RETRY_SYM
%token MASTER_HOST_SYM %token MASTER_HOST_SYM
%token MASTER_LOG_FILE_SYM %token MASTER_LOG_FILE_SYM
%token MASTER_LOG_POS_SYM %token MASTER_LOG_POS_SYM
%token MASTER_PASSWORD_SYM %token MASTER_PASSWORD_SYM
%token MASTER_PORT_SYM %token MASTER_PORT_SYM
%token MASTER_POS_WAIT
%token MASTER_SERVER_ID_SYM %token MASTER_SERVER_ID_SYM
%token MASTER_SSL_CAPATH_SYM %token MASTER_SSL_CAPATH_SYM
%token MASTER_SSL_CA_SYM %token MASTER_SSL_CA_SYM
...@@ -440,134 +434,128 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -440,134 +434,128 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token MASTER_SSL_SYM %token MASTER_SSL_SYM
%token MASTER_SYM %token MASTER_SYM
%token MASTER_USER_SYM %token MASTER_USER_SYM
%token MATCH %token MATCH /* SQL-2003-R */
%token MAX_CONNECTIONS_PER_HOUR %token MAX_CONNECTIONS_PER_HOUR
%token MAX_QUERIES_PER_HOUR %token MAX_QUERIES_PER_HOUR
%token MAX_ROWS %token MAX_ROWS
%token MAX_SIZE_SYM %token MAX_SIZE_SYM
%token MAX_SYM %token MAX_SYM /* SQL-2003-N */
%token MAX_UPDATES_PER_HOUR %token MAX_UPDATES_PER_HOUR
%token MAX_USER_CONNECTIONS_SYM %token MAX_USER_CONNECTIONS_SYM
%token MAX_VALUE_SYM %token MAX_VALUE_SYM /* SQL-2003-N */
%token MEDIUMBLOB %token MEDIUMBLOB
%token MEDIUMINT %token MEDIUMINT
%token MEDIUMTEXT %token MEDIUMTEXT
%token MEDIUM_SYM %token MEDIUM_SYM
%token MEMORY_SYM %token MEMORY_SYM
%token MERGE_SYM %token MERGE_SYM /* SQL-2003-R */
%token MICROSECOND_SYM %token MICROSECOND_SYM /* MYSQL-FUNC */
%token MIGRATE_SYM %token MIGRATE_SYM
%token MINUTE_MICROSECOND_SYM %token MINUTE_MICROSECOND_SYM
%token MINUTE_SECOND_SYM %token MINUTE_SECOND_SYM
%token MINUTE_SYM %token MINUTE_SYM /* SQL-2003-R */
%token MIN_ROWS %token MIN_ROWS
%token MIN_SYM %token MIN_SYM /* SQL-2003-N */
%token MLINEFROMTEXT
%token MODE_SYM %token MODE_SYM
%token MODIFIES_SYM %token MODIFIES_SYM /* SQL-2003-R */
%token MODIFY_SYM %token MODIFY_SYM
%token MOD_SYM %token MOD_SYM /* SQL-2003-N */
%token MONTH_SYM %token MONTH_SYM /* SQL-2003-R */
%token MPOINTFROMTEXT
%token MPOLYFROMTEXT
%token MULTILINESTRING %token MULTILINESTRING
%token MULTIPOINT %token MULTIPOINT
%token MULTIPOLYGON %token MULTIPOLYGON
%token MUTEX_SYM %token MUTEX_SYM
%token NAMES_SYM %token NAMES_SYM /* SQL-2003-N */
%token NAME_SYM %token NAME_SYM /* SQL-2003-N */
%token NATIONAL_SYM %token NATIONAL_SYM /* SQL-2003-R */
%token NATURAL %token NATURAL /* SQL-2003-R */
%token NCHAR_STRING %token NCHAR_STRING
%token NCHAR_SYM %token NCHAR_SYM /* SQL-2003-R */
%token NDBCLUSTER_SYM %token NDBCLUSTER_SYM
%token NE %token NE /* OPERATOR */
%token NEW_SYM %token NEG
%token NEXT_SYM %token NEW_SYM /* SQL-2003-R */
%token NEXT_SYM /* SQL-2003-N */
%token NODEGROUP_SYM %token NODEGROUP_SYM
%token NONE_SYM %token NONE_SYM /* SQL-2003-R */
%token NOT2_SYM %token NOT2_SYM
%token NOT_SYM %token NOT_SYM /* SQL-2003-R */
%token NOW_SYM %token NOW_SYM
%token NO_SYM %token NO_SYM /* SQL-2003-R */
%token NO_WAIT_SYM %token NO_WAIT_SYM
%token NO_WRITE_TO_BINLOG %token NO_WRITE_TO_BINLOG
%token NULL_SYM %token NULL_SYM /* SQL-2003-R */
%token NUM %token NUM
%token NUMERIC_SYM %token NUMERIC_SYM /* SQL-2003-R */
%token NVARCHAR_SYM %token NVARCHAR_SYM
%token OFFSET_SYM %token OFFSET_SYM
%token OJ_SYM
%token OLD_PASSWORD %token OLD_PASSWORD
%token ON %token ON /* SQL-2003-R */
%token ONE_SHOT_SYM %token ONE_SHOT_SYM
%token ONE_SYM %token ONE_SYM
%token OPEN_SYM %token OPEN_SYM /* SQL-2003-R */
%token OPTIMIZE %token OPTIMIZE
%token OPTION %token OPTION /* SQL-2003-N */
%token OPTIONALLY %token OPTIONALLY
%token OR2_SYM %token OR2_SYM
%token ORDER_SYM %token ORDER_SYM /* SQL-2003-R */
%token OR_OR_SYM %token OR_OR_SYM /* OPERATOR */
%token OR_SYM %token OR_SYM /* SQL-2003-R */
%token OUTER %token OUTER
%token OUTFILE %token OUTFILE
%token OUT_SYM %token OUT_SYM /* SQL-2003-R */
%token PACK_KEYS_SYM %token PACK_KEYS_SYM
%token PARAM_MARKER
%token PARSER_SYM %token PARSER_SYM
%token PARTIAL %token PARTIAL /* SQL-2003-N */
%token PARTITION_SYM
%token PARTITIONING_SYM %token PARTITIONING_SYM
%token PARTITIONS_SYM %token PARTITIONS_SYM
%token PARTITION_SYM /* SQL-2003-R */
%token PASSWORD %token PASSWORD
%token PARAM_MARKER
%token PHASE_SYM %token PHASE_SYM
%token PLUGIN_SYM
%token PLUGINS_SYM %token PLUGINS_SYM
%token POINTFROMTEXT %token PLUGIN_SYM
%token POINT_SYM %token POINT_SYM
%token POLYFROMTEXT
%token POLYGON %token POLYGON
%token POSITION_SYM %token POSITION_SYM /* SQL-2003-N */
%token PRECISION %token PRECISION /* SQL-2003-R */
%token PREPARE_SYM %token PREPARE_SYM /* SQL-2003-R */
%token PRESERVE_SYM %token PRESERVE_SYM
%token PREV_SYM %token PREV_SYM
%token PRIMARY_SYM %token PRIMARY_SYM /* SQL-2003-R */
%token PRIVILEGES %token PRIVILEGES /* SQL-2003-N */
%token PROCEDURE %token PROCEDURE /* SQL-2003-R */
%token PROCESS %token PROCESS
%token PROCESSLIST_SYM %token PROCESSLIST_SYM
%token PURGE %token PURGE
%token QUARTER_SYM %token QUARTER_SYM
%token QUERY_SYM %token QUERY_SYM
%token QUICK %token QUICK
%token RAND %token RANGE_SYM /* SQL-2003-R */
%token RANGE_SYM %token READS_SYM /* SQL-2003-R */
%token READS_SYM
%token READ_ONLY_SYM %token READ_ONLY_SYM
%token READ_SYM %token READ_SYM /* SQL-2003-N */
%token READ_WRITE_SYM %token READ_WRITE_SYM
%token REAL %token REAL /* SQL-2003-R */
%token REBUILD_SYM %token REBUILD_SYM
%token RECOVER_SYM %token RECOVER_SYM
%token REDO_BUFFER_SIZE_SYM
%token REDOFILE_SYM %token REDOFILE_SYM
%token REDO_BUFFER_SIZE_SYM
%token REDUNDANT_SYM %token REDUNDANT_SYM
%token REFERENCES %token REFERENCES /* SQL-2003-R */
%token REGEXP %token REGEXP
%token RELAY_LOG_FILE_SYM %token RELAY_LOG_FILE_SYM
%token RELAY_LOG_POS_SYM %token RELAY_LOG_POS_SYM
%token RELAY_THREAD %token RELAY_THREAD
%token RELEASE_SYM %token RELEASE_SYM /* SQL-2003-R */
%token RELOAD %token RELOAD
%token REMOVE_SYM %token REMOVE_SYM
%token RENAME %token RENAME
%token REORGANIZE_SYM %token REORGANIZE_SYM
%token REPAIR %token REPAIR
%token REPEATABLE_SYM %token REPEATABLE_SYM /* SQL-2003-N */
%token REPEAT_SYM %token REPEAT_SYM /* MYSQL-FUNC */
%token REPLACE %token REPLACE /* MYSQL-FUNC */
%token REPLICATION %token REPLICATION
%token REQUIRE_SYM %token REQUIRE_SYM
%token RESET_SYM %token RESET_SYM
...@@ -575,159 +563,155 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -575,159 +563,155 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token RESTORE_SYM %token RESTORE_SYM
%token RESTRICT %token RESTRICT
%token RESUME_SYM %token RESUME_SYM
%token RETURNS_SYM %token RETURNS_SYM /* SQL-2003-R */
%token RETURN_SYM %token RETURN_SYM /* SQL-2003-R */
%token REVOKE %token REVOKE /* SQL-2003-R */
%token RIGHT %token RIGHT /* SQL-2003-R */
%token ROLLBACK_SYM %token ROLLBACK_SYM /* SQL-2003-R */
%token ROLLUP_SYM %token ROLLUP_SYM /* SQL-2003-R */
%token ROUND %token ROUTINE_SYM /* SQL-2003-N */
%token ROUTINE_SYM %token ROWS_SYM /* SQL-2003-R */
%token ROWS_SYM
%token ROW_COUNT_SYM
%token ROW_FORMAT_SYM %token ROW_FORMAT_SYM
%token ROW_SYM %token ROW_SYM /* SQL-2003-R */
%token RTREE_SYM %token RTREE_SYM
%token SAVEPOINT_SYM %token SAVEPOINT_SYM /* SQL-2003-R */
%token SCHEDULE_SYM %token SCHEDULE_SYM
%token SECOND_MICROSECOND_SYM %token SECOND_MICROSECOND_SYM
%token SECOND_SYM %token SECOND_SYM /* SQL-2003-R */
%token SECURITY_SYM %token SECURITY_SYM /* SQL-2003-N */
%token SELECT_SYM %token SELECT_SYM /* SQL-2003-R */
%token SENSITIVE_SYM %token SENSITIVE_SYM /* FUTURE-USE */
%token SEPARATOR_SYM %token SEPARATOR_SYM
%token SERIALIZABLE_SYM %token SERIALIZABLE_SYM /* SQL-2003-N */
%token SERIAL_SYM %token SERIAL_SYM
%token SESSION_SYM %token SESSION_SYM /* SQL-2003-N */
%token SET %token SET /* SQL-2003-R */
%token SET_VAR %token SET_VAR
%token SHARE_SYM %token SHARE_SYM
%token SHIFT_LEFT %token SHIFT_LEFT /* OPERATOR */
%token SHIFT_RIGHT %token SHIFT_RIGHT /* OPERATOR */
%token SHOW %token SHOW
%token SHUTDOWN %token SHUTDOWN
%token SIGNED_SYM %token SIGNED_SYM
%token SIMPLE_SYM %token SIMPLE_SYM /* SQL-2003-N */
%token SLAVE %token SLAVE
%token SMALLINT %token SMALLINT /* SQL-2003-R */
%token SNAPSHOT_SYM %token SNAPSHOT_SYM
%token SONAME_SYM %token SONAME_SYM
%token SOUNDS_SYM %token SOUNDS_SYM
%token SPATIAL_SYM %token SPATIAL_SYM
%token SPECIFIC_SYM %token SPECIFIC_SYM /* SQL-2003-R */
%token SQLEXCEPTION_SYM %token SQLEXCEPTION_SYM /* SQL-2003-R */
%token SQLSTATE_SYM %token SQLSTATE_SYM /* SQL-2003-R */
%token SQLWARNING_SYM %token SQLWARNING_SYM /* SQL-2003-R */
%token SQL_BIG_RESULT %token SQL_BIG_RESULT
%token SQL_BUFFER_RESULT %token SQL_BUFFER_RESULT
%token SQL_CACHE_SYM %token SQL_CACHE_SYM
%token SQL_CALC_FOUND_ROWS %token SQL_CALC_FOUND_ROWS
%token SQL_NO_CACHE_SYM %token SQL_NO_CACHE_SYM
%token SQL_SMALL_RESULT %token SQL_SMALL_RESULT
%token SQL_SYM %token SQL_SYM /* SQL-2003-R */
%token SQL_THREAD %token SQL_THREAD
%token SSL_SYM %token SSL_SYM
%token STARTING %token STARTING
%token START_SYM
%token STARTS_SYM %token STARTS_SYM
%token START_SYM /* SQL-2003-R */
%token STATUS_SYM %token STATUS_SYM
%token STDDEV_SAMP_SYM /* SQL-2003-N */
%token STD_SYM %token STD_SYM
%token STDDEV_SAMP_SYM
%token STOP_SYM %token STOP_SYM
%token STORAGE_SYM %token STORAGE_SYM
%token STRAIGHT_JOIN %token STRAIGHT_JOIN
%token STRING_SYM %token STRING_SYM
%token SUBDATE_SYM %token SUBDATE_SYM
%token SUBJECT_SYM %token SUBJECT_SYM
%token SUBPARTITION_SYM
%token SUBPARTITIONS_SYM %token SUBPARTITIONS_SYM
%token SUBSTRING %token SUBPARTITION_SYM
%token SUBSTRING_INDEX %token SUBSTRING /* SQL-2003-N */
%token SUM_SYM %token SUM_SYM /* SQL-2003-N */
%token SUPER_SYM %token SUPER_SYM
%token SUSPEND_SYM %token SUSPEND_SYM
%token SYSDATE %token SYSDATE
%token TABLES %token TABLES
%token TABLESPACE %token TABLESPACE
%token TABLE_SYM %token TABLE_REF_PRIORITY
%token TEMPORARY %token TABLE_SYM /* SQL-2003-R */
%token TEMPORARY /* SQL-2003-N */
%token TEMPTABLE_SYM %token TEMPTABLE_SYM
%token TERMINATED %token TERMINATED
%token TEXT_STRING %token TEXT_STRING
%token TEXT_SYM %token TEXT_SYM
%token TIMESTAMP %token THAN_SYM
%token THEN_SYM /* SQL-2003-R */
%token TIMESTAMP /* SQL-2003-R */
%token TIMESTAMP_ADD %token TIMESTAMP_ADD
%token TIMESTAMP_DIFF %token TIMESTAMP_DIFF
%token TIME_SYM %token TIME_SYM /* SQL-2003-R */
%token TINYBLOB %token TINYBLOB
%token TINYINT %token TINYINT
%token TINYTEXT %token TINYTEXT
%token THAN_SYM %token TO_SYM /* SQL-2003-R */
%token TO_SYM %token TRAILING /* SQL-2003-R */
%token TRAILING
%token TRANSACTION_SYM %token TRANSACTION_SYM
%token TRIGGER_SYM
%token TRIGGERS_SYM %token TRIGGERS_SYM
%token TRIM %token TRIGGER_SYM /* SQL-2003-R */
%token TRUE_SYM %token TRIM /* SQL-2003-N */
%token TRUE_SYM /* SQL-2003-R */
%token TRUNCATE_SYM %token TRUNCATE_SYM
%token TYPES_SYM %token TYPES_SYM
%token TYPE_SYM %token TYPE_SYM /* SQL-2003-N */
%token UDF_RETURNS_SYM %token UDF_RETURNS_SYM
%token ULONGLONG_NUM %token ULONGLONG_NUM
%token UNCOMMITTED_SYM %token UNCOMMITTED_SYM /* SQL-2003-N */
%token UNDEFINED_SYM %token UNDEFINED_SYM
%token UNDO_BUFFER_SIZE_SYM
%token UNDOFILE_SYM
%token UNDERSCORE_CHARSET %token UNDERSCORE_CHARSET
%token UNDO_SYM %token UNDOFILE_SYM
%token UNDO_BUFFER_SIZE_SYM
%token UNDO_SYM /* FUTURE-USE */
%token UNICODE_SYM %token UNICODE_SYM
%token UNINSTALL_SYM %token UNINSTALL_SYM
%token UNION_SYM %token UNION_SYM /* SQL-2003-R */
%token UNIQUE_SYM %token UNIQUE_SYM
%token UNIQUE_USERS %token UNIQUE_USERS
%token UNIX_TIMESTAMP %token UNKNOWN_SYM /* SQL-2003-R */
%token UNKNOWN_SYM
%token UNLOCK_SYM %token UNLOCK_SYM
%token UNSIGNED %token UNSIGNED
%token UNTIL_SYM %token UNTIL_SYM
%token UPDATE_SYM %token UPDATE_SYM /* SQL-2003-R */
%token UPGRADE_SYM %token UPGRADE_SYM
%token USAGE %token USAGE /* SQL-2003-N */
%token USER %token USER /* SQL-2003-R */
%token USE_FRM %token USE_FRM
%token USE_SYM %token USE_SYM
%token USING %token USING /* SQL-2003-R */
%token UTC_DATE_SYM %token UTC_DATE_SYM
%token UTC_TIMESTAMP_SYM %token UTC_TIMESTAMP_SYM
%token UTC_TIME_SYM %token UTC_TIME_SYM
%token VAR_SAMP_SYM %token VALUES /* SQL-2003-R */
%token VALUES %token VALUE_SYM /* SQL-2003-R */
%token VALUE_SYM
%token VARBINARY %token VARBINARY
%token VARCHAR %token VARCHAR /* SQL-2003-R */
%token VARIABLES %token VARIABLES
%token VARIANCE_SYM %token VARIANCE_SYM
%token VARYING %token VARYING /* SQL-2003-R */
%token VIEW_SYM %token VAR_SAMP_SYM
%token VIEW_SYM /* SQL-2003-N */
%token WAIT_SYM %token WAIT_SYM
%token WARNINGS %token WARNINGS
%token WEEK_SYM %token WEEK_SYM
%token WHEN_SYM %token WHEN_SYM /* SQL-2003-R */
%token WHERE %token WHERE /* SQL-2003-R */
%token WHILE_SYM %token WHILE_SYM
%token WITH %token WITH /* SQL-2003-R */
%token WORK_SYM %token WORK_SYM /* SQL-2003-N */
%token WRITE_SYM %token WRITE_SYM /* SQL-2003-N */
%token X509_SYM %token X509_SYM
%token XA_SYM %token XA_SYM
%token XOR %token XOR
%token YEARWEEK
%token YEAR_MONTH_SYM %token YEAR_MONTH_SYM
%token YEAR_SYM %token YEAR_SYM /* SQL-2003-R */
%token ZEROFILL %token ZEROFILL
%left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT %left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT
/* A dummy token to force the priority of table_ref production in a join. */ /* A dummy token to force the priority of table_ref production in a join. */
%left TABLE_REF_PRIORITY %left TABLE_REF_PRIORITY
...@@ -803,6 +787,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -803,6 +787,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
simple_ident_nospvar simple_ident_q simple_ident_nospvar simple_ident_q
field_or_var limit_option field_or_var limit_option
part_func_expr part_func_expr
function_call_keyword
function_call_nonkeyword
function_call_generic
function_call_conflict
%type <item_num> %type <item_num>
NUM_literal NUM_literal
...@@ -810,6 +798,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -810,6 +798,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%type <item_list> %type <item_list>
expr_list udf_expr_list udf_expr_list2 when_list expr_list udf_expr_list udf_expr_list2 when_list
ident_list ident_list_arg ident_list ident_list_arg
expr_list_opt
%type <var_type> %type <var_type>
option_type opt_var_type opt_var_ident_type option_type opt_var_type opt_var_ident_type
...@@ -848,7 +837,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -848,7 +837,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%type <udf_type> udf_func_type %type <udf_type> udf_func_type
%type <symbol> FUNC_ARG0 FUNC_ARG1 FUNC_ARG2 FUNC_ARG3 keyword keyword_sp %type <symbol> keyword keyword_sp
%type <lex_user> user grant_user %type <lex_user> user grant_user
...@@ -5825,10 +5814,10 @@ bool_factor: ...@@ -5825,10 +5814,10 @@ bool_factor:
| bool_test ; | bool_test ;
bool_test: bool_test:
bool_pri IS TRUE_SYM { $$= is_truth_value($1,1,0); } bool_pri IS TRUE_SYM { $$= is_truth_value(YYTHD, $1,1,0); }
| bool_pri IS not TRUE_SYM { $$= is_truth_value($1,0,0); } | bool_pri IS not TRUE_SYM { $$= is_truth_value(YYTHD, $1,0,0); }
| bool_pri IS FALSE_SYM { $$= is_truth_value($1,0,1); } | bool_pri IS FALSE_SYM { $$= is_truth_value(YYTHD, $1,0,1); }
| bool_pri IS not FALSE_SYM { $$= is_truth_value($1,1,1); } | bool_pri IS not FALSE_SYM { $$= is_truth_value(YYTHD, $1,1,1); }
| bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); } | bool_pri IS UNKNOWN_SYM { $$= new Item_func_isnull($1); }
| bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); } | bool_pri IS not UNKNOWN_SYM { $$= new Item_func_isnotnull($1); }
| bool_pri ; | bool_pri ;
...@@ -5949,56 +5938,67 @@ interval_expr: ...@@ -5949,56 +5938,67 @@ interval_expr:
simple_expr: simple_expr:
simple_ident simple_ident
| function_call_keyword
| function_call_nonkeyword
| function_call_generic
| function_call_conflict
| simple_expr COLLATE_SYM ident_or_text %prec NEG | simple_expr COLLATE_SYM ident_or_text %prec NEG
{ {
$$= new Item_func_set_collation($1, THD *thd= YYTHD;
new Item_string($3.str, Item *i1= new (thd->mem_root) Item_string($3.str,
$3.length, $3.length,
YYTHD->charset())); thd->charset());
$$= new (thd->mem_root) Item_func_set_collation($1, i1);
} }
| literal | literal
| param_marker | param_marker
| variable | variable
| sum_expr | sum_expr
| simple_expr OR_OR_SYM simple_expr | simple_expr OR_OR_SYM simple_expr
{ $$= new Item_func_concat($1, $3); } { $$= new (YYTHD->mem_root) Item_func_concat($1, $3); }
| '+' simple_expr %prec NEG { $$= $2; } | '+' simple_expr %prec NEG { $$= $2; }
| '-' simple_expr %prec NEG { $$= new Item_func_neg($2); } | '-' simple_expr %prec NEG
| '~' simple_expr %prec NEG { $$= new Item_func_bit_neg($2); } { $$= new (YYTHD->mem_root) Item_func_neg($2); }
| not2 simple_expr %prec NEG { $$= negate_expression(YYTHD, $2); } | '~' simple_expr %prec NEG
{ $$= new (YYTHD->mem_root) Item_func_bit_neg($2); }
| not2 simple_expr %prec NEG
{ $$= negate_expression(YYTHD, $2); }
| '(' subselect ')' | '(' subselect ')'
{ {
$$= new Item_singlerow_subselect($2); $$= new (YYTHD->mem_root) Item_singlerow_subselect($2);
} }
| '(' expr ')' { $$= $2; } | '(' expr ')' { $$= $2; }
| '(' expr ',' expr_list ')' | '(' expr ',' expr_list ')'
{ {
$4->push_front($2); $4->push_front($2);
$$= new Item_row(*$4); $$= new (YYTHD->mem_root) Item_row(*$4);
} }
| ROW_SYM '(' expr ',' expr_list ')' | ROW_SYM '(' expr ',' expr_list ')'
{ {
$5->push_front($3); $5->push_front($3);
$$= new Item_row(*$5); $$= new (YYTHD->mem_root) Item_row(*$5);
} }
| EXISTS '(' subselect ')' | EXISTS '(' subselect ')'
{ {
$$= new Item_exists_subselect($3); $$= new (YYTHD->mem_root) Item_exists_subselect($3);
} }
| '{' ident expr '}' { $$= $3; } | '{' ident expr '}' { $$= $3; }
| MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')' | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')'
{ $2->push_front($5); {
Select->add_ftfunc_to_list((Item_func_match*) $2->push_front($5);
($$=new Item_func_match(*$2,$6))); } Item_func_match *i1= new (YYTHD->mem_root) Item_func_match(*$2, $6);
| ASCII_SYM '(' expr ')' { $$= new Item_func_ascii($3); } Select->add_ftfunc_to_list(i1);
$$= i1;
}
| BINARY simple_expr %prec NEG | BINARY simple_expr %prec NEG
{ {
$$= create_func_cast($2, ITEM_CAST_CHAR, -1, 0, &my_charset_bin); $$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR, -1, 0,
&my_charset_bin);
} }
| CAST_SYM '(' expr AS cast_type ')' | CAST_SYM '(' expr AS cast_type ')'
{ {
LEX *lex= Lex; LEX *lex= Lex;
$$= create_func_cast($3, $5, $$= create_func_cast(YYTHD, $3, $5,
lex->length ? atoi(lex->length) : -1, lex->length ? atoi(lex->length) : -1,
lex->dec ? atoi(lex->dec) : 0, lex->dec ? atoi(lex->dec) : 0,
lex->charset); lex->charset);
...@@ -6006,10 +6006,10 @@ simple_expr: ...@@ -6006,10 +6006,10 @@ simple_expr:
YYABORT; YYABORT;
} }
| CASE_SYM opt_expr WHEN_SYM when_list opt_else END | CASE_SYM opt_expr WHEN_SYM when_list opt_else END
{ $$= new Item_func_case(* $4, $2, $5 ); } { $$= new (YYTHD->mem_root) Item_func_case(* $4, $2, $5 ); }
| CONVERT_SYM '(' expr ',' cast_type ')' | CONVERT_SYM '(' expr ',' cast_type ')'
{ {
$$= create_func_cast($3, $5, $$= create_func_cast(YYTHD, $3, $5,
Lex->length ? atoi(Lex->length) : -1, Lex->length ? atoi(Lex->length) : -1,
Lex->dec ? atoi(Lex->dec) : 0, Lex->dec ? atoi(Lex->dec) : 0,
Lex->charset); Lex->charset);
...@@ -6017,7 +6017,7 @@ simple_expr: ...@@ -6017,7 +6017,7 @@ simple_expr:
YYABORT; YYABORT;
} }
| CONVERT_SYM '(' expr USING charset_name ')' | CONVERT_SYM '(' expr USING charset_name ')'
{ $$= new Item_func_conv_charset($3,$5); } { $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5); }
| DEFAULT '(' simple_ident ')' | DEFAULT '(' simple_ident ')'
{ {
if ($3->is_splocal()) if ($3->is_splocal())
...@@ -6027,325 +6027,334 @@ simple_expr: ...@@ -6027,325 +6027,334 @@ simple_expr:
my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str); my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str);
YYABORT; YYABORT;
} }
$$= new Item_default_value(Lex->current_context(), $3); $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(),
$3);
} }
| VALUES '(' simple_ident_nospvar ')' | VALUES '(' simple_ident_nospvar ')'
{ $$= new Item_insert_value(Lex->current_context(), $3); } { $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(),
| FUNC_ARG0 '(' ')' $3); }
| interval_expr interval '+' expr
/* we cannot put interval before - */
{ $$= new (YYTHD->mem_root) Item_date_add_interval($4,$1,$2,0); }
| interval_expr
{ {
if (!$1.symbol->create_func) if ($1->type() != Item::ROW_ITEM)
{ {
my_error(ER_FEATURE_DISABLED, MYF(0), yyerror(ER(ER_SYNTAX_ERROR));
$1.symbol->group->name,
$1.symbol->group->needed_define);
YYABORT; YYABORT;
} }
$$= ((Item*(*)(void))($1.symbol->create_func))(); $$= new (YYTHD->mem_root) Item_func_interval((Item_row *)$1);
} }
| FUNC_ARG1 '(' expr ')' | UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' expr_list ')'
{
if (!$1.symbol->create_func)
{ {
my_error(ER_FEATURE_DISABLED, MYF(0), $$= new Item_func_unique_users($3,atoi($5.str),atoi($7.str), * $9);
$1.symbol->group->name,
$1.symbol->group->needed_define);
YYABORT;
}
$$= ((Item*(*)(Item*))($1.symbol->create_func))($3);
} }
| FUNC_ARG2 '(' expr ',' expr ')' ;
{
if (!$1.symbol->create_func) /*
Function call syntax using official SQL 2003 keywords.
Because the function name is an official token,
a dedicated grammar rule is needed in the parser.
There is no potential for conflicts
*/
function_call_keyword:
CHAR_SYM '(' expr_list ')'
{ $$= new (YYTHD->mem_root) Item_func_char(*$3); }
| CHAR_SYM '(' expr_list USING charset_name ')'
{ $$= new (YYTHD->mem_root) Item_func_char(*$3, $5); }
| CURRENT_USER optional_braces
{ {
my_error(ER_FEATURE_DISABLED, MYF(0), $$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context());
$1.symbol->group->name, Lex->safe_to_cache_query= 0;
$1.symbol->group->needed_define);
YYABORT;
}
$$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);
} }
| FUNC_ARG3 '(' expr ',' expr ',' expr ')' | DATE_SYM '(' expr ')'
{ { $$= new (YYTHD->mem_root) Item_date_typecast($3); }
if (!$1.symbol->create_func) | DAY_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_dayofmonth($3); }
| HOUR_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_hour($3); }
| INSERT '(' expr ',' expr ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); }
| LEFT '(' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_left($3,$5); }
| MINUTE_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_minute($3); }
| MONTH_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_month($3); }
| RIGHT '(' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_right($3,$5); }
| SECOND_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_second($3); }
| TIME_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_time_typecast($3); }
| TIMESTAMP '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_datetime_typecast($3); }
| TIMESTAMP '(' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0); }
| TRIM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_trim($3); }
| TRIM '(' LEADING expr FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4); }
| TRIM '(' TRAILING expr FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4); }
| TRIM '(' BOTH expr FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_trim($6,$4); }
| TRIM '(' LEADING FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_ltrim($5); }
| TRIM '(' TRAILING FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_rtrim($5); }
| TRIM '(' BOTH FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_trim($5); }
| TRIM '(' expr FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_trim($5,$3); }
| USER '(' ')'
{ {
my_error(ER_FEATURE_DISABLED, MYF(0), $$= new (YYTHD->mem_root) Item_func_user();
$1.symbol->group->name, Lex->safe_to_cache_query=0;
$1.symbol->group->needed_define);
YYABORT;
} }
$$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7); | YEAR_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_year($3); }
;
/*
Function calls using non reserved keywords, with special syntaxic forms.
Dedicated grammar rules are needed because of the syntax,
but also have the potential to cause incompatibilities with other
parts of the language.
MAINTAINER:
The only reasons a function should be added here are:
- for compatibility reasons with another SQL syntax (CURDATE),
- for typing reasons (GET_FORMAT)
Any other 'Syntaxic sugar' enhancements should be *STRONGLY*
discouraged.
*/
function_call_nonkeyword:
ADDDATE_SYM '(' expr ',' expr ')'
{
$$= new (YYTHD->mem_root) Item_date_add_interval($3, $5,
INTERVAL_DAY, 0);
} }
| ADDDATE_SYM '(' expr ',' expr ')'
{ $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 0);}
| ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
{ $$= new Item_date_add_interval($3, $6, $7, 0); } { $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0); }
| REPEAT_SYM '(' expr ',' expr ')' | CURDATE optional_braces
{ $$= new Item_func_repeat($3,$5); }
| ATAN '(' expr ')'
{ $$= new Item_func_atan($3); }
| ATAN '(' expr ',' expr ')'
{ $$= new Item_func_atan($3,$5); }
| CHAR_SYM '(' expr_list ')'
{ $$= new Item_func_char(*$3); }
| CHAR_SYM '(' expr_list USING charset_name ')'
{ $$= new Item_func_char(*$3, $5); }
| CHARSET '(' expr ')'
{ $$= new Item_func_charset($3); }
| COALESCE '(' expr_list ')'
{ $$= new Item_func_coalesce(* $3); }
| COLLATION_SYM '(' expr ')'
{ $$= new Item_func_collation($3); }
| CONCAT '(' expr_list ')'
{ $$= new Item_func_concat(* $3); }
| CONCAT_WS '(' expr ',' expr_list ')'
{ $5->push_front($3); $$= new Item_func_concat_ws(*$5); }
| CONVERT_TZ_SYM '(' expr ',' expr ',' expr ')'
{ {
if (Lex->add_time_zone_tables_to_query_tables(YYTHD)) $$= new (YYTHD->mem_root) Item_func_curdate_local();
YYABORT; Lex->safe_to_cache_query=0;
$$= new Item_func_convert_tz($3, $5, $7);
} }
| CURDATE optional_braces
{ $$= new Item_func_curdate_local(); Lex->safe_to_cache_query=0; }
| CURTIME optional_braces | CURTIME optional_braces
{ $$= new Item_func_curtime_local(); Lex->safe_to_cache_query=0; }
| CURTIME '(' expr ')'
{ {
$$= new Item_func_curtime_local($3); $$= new (YYTHD->mem_root) Item_func_curtime_local();
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| CURRENT_USER optional_braces | CURTIME '(' expr ')'
{ {
$$= new Item_func_current_user(Lex->current_context()); $$= new (YYTHD->mem_root) Item_func_curtime_local($3);
Lex->safe_to_cache_query= 0; Lex->safe_to_cache_query=0;
} }
| DATE_ADD_INTERVAL '(' expr ',' interval_expr interval ')' | DATE_ADD_INTERVAL '(' expr ',' interval_expr interval ')'
{ $$= new Item_date_add_interval($3,$5,$6,0); } { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,0); }
| DATE_SUB_INTERVAL '(' expr ',' interval_expr interval ')' | DATE_SUB_INTERVAL '(' expr ',' interval_expr interval ')'
{ $$= new Item_date_add_interval($3,$5,$6,1); } { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$5,$6,1); }
| DATABASE '(' ')' | EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new (YYTHD->mem_root) Item_extract( $3, $5); }
| GET_FORMAT '(' date_time_type ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_get_format($3, $5); }
| NOW_SYM optional_braces
{ {
$$= new Item_func_database(); $$= new (YYTHD->mem_root) Item_func_now_local();
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| DATE_SYM '(' expr ')' | NOW_SYM '(' expr ')'
{ $$= new Item_date_typecast($3); }
| DAY_SYM '(' expr ')'
{ $$= new Item_func_dayofmonth($3); }
| ELT_FUNC '(' expr ',' expr_list ')'
{ $5->push_front($3); $$= new Item_func_elt(*$5); }
| MAKE_SET_SYM '(' expr ',' expr_list ')'
{ $$= new Item_func_make_set($3, *$5); }
| ENCRYPT '(' expr ')'
{
$$= new Item_func_encrypt($3);
Lex->uncacheable(UNCACHEABLE_RAND);
}
| ENCRYPT '(' expr ',' expr ')' { $$= new Item_func_encrypt($3,$5); }
| DECODE_SYM '(' expr ',' TEXT_STRING_literal ')'
{ $$= new Item_func_decode($3,$5.str); }
| ENCODE_SYM '(' expr ',' TEXT_STRING_literal ')'
{ $$= new Item_func_encode($3,$5.str); }
| DES_DECRYPT_SYM '(' expr ')'
{ $$= new Item_func_des_decrypt($3); }
| DES_DECRYPT_SYM '(' expr ',' expr ')'
{ $$= new Item_func_des_decrypt($3,$5); }
| DES_ENCRYPT_SYM '(' expr ')'
{ $$= new Item_func_des_encrypt($3); }
| DES_ENCRYPT_SYM '(' expr ',' expr ')'
{ $$= new Item_func_des_encrypt($3,$5); }
| EXPORT_SET '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_export_set($3, $5, $7); }
| EXPORT_SET '(' expr ',' expr ',' expr ',' expr ')'
{ $$= new Item_func_export_set($3, $5, $7, $9); }
| EXPORT_SET '(' expr ',' expr ',' expr ',' expr ',' expr ')'
{ $$= new Item_func_export_set($3, $5, $7, $9, $11); }
| FORMAT_SYM '(' expr ',' NUM ')'
{ $$= new Item_func_format($3,atoi($5.str)); }
| FROM_UNIXTIME '(' expr ')'
{ $$= new Item_func_from_unixtime($3); }
| FROM_UNIXTIME '(' expr ',' expr ')'
{
$$= new Item_func_date_format (new Item_func_from_unixtime($3),$5,0);
}
| FIELD_FUNC '(' expr ',' expr_list ')'
{ $5->push_front($3); $$= new Item_func_field(*$5); }
| geometry_function
{ {
#ifdef HAVE_SPATIAL $$= new (YYTHD->mem_root) Item_func_now_local($3);
$$= $1; Lex->safe_to_cache_query=0;
#else
my_error(ER_FEATURE_DISABLED, MYF(0),
sym_group_geom.name, sym_group_geom.needed_define);
YYABORT;
#endif
} }
| GET_FORMAT '(' date_time_type ',' expr ')' | POSITION_SYM '(' bit_expr IN_SYM expr ')'
{ $$= new Item_func_get_format($3, $5); } { $$ = new (YYTHD->mem_root) Item_func_locate($5,$3); }
| HOUR_SYM '(' expr ')' | SUBDATE_SYM '(' expr ',' expr ')'
{ $$= new Item_func_hour($3); }
| IF '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_if($3,$5,$7); }
| INSERT '(' expr ',' expr ',' expr ',' expr ')'
{ $$= new Item_func_insert($3,$5,$7,$9); }
| interval_expr interval '+' expr
/* we cannot put interval before - */
{ $$= new Item_date_add_interval($4,$1,$2,0); }
| interval_expr
{ {
if ($1->type() != Item::ROW_ITEM) $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5,
INTERVAL_DAY, 1);
}
| SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
{ $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1); }
| SUBSTRING '(' expr ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); }
| SUBSTRING '(' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_substr($3,$5); }
| SUBSTRING '(' expr FROM expr FOR_SYM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); }
| SUBSTRING '(' expr FROM expr ')'
{ $$= new (YYTHD->mem_root) Item_func_substr($3,$5); }
| SYSDATE optional_braces
{ {
yyerror(ER(ER_SYNTAX_ERROR)); if (global_system_variables.sysdate_is_now == 0)
YYABORT; $$= new (YYTHD->mem_root) Item_func_sysdate_local();
else
$$= new (YYTHD->mem_root) Item_func_now_local();
Lex->safe_to_cache_query=0;
} }
$$= new Item_func_interval((Item_row *)$1); | SYSDATE '(' expr ')'
{
if (global_system_variables.sysdate_is_now == 0)
$$= new (YYTHD->mem_root) Item_func_sysdate_local($3);
else
$$= new (YYTHD->mem_root) Item_func_now_local($3);
Lex->safe_to_cache_query=0;
} }
| LAST_INSERT_ID '(' ')' | TIMESTAMP_ADD '(' interval_time_st ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0); }
| TIMESTAMP_DIFF '(' interval_time_st ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3); }
| UTC_DATE_SYM optional_braces
{ {
$$= new Item_func_last_insert_id(); $$= new (YYTHD->mem_root) Item_func_curdate_utc();
Lex->safe_to_cache_query= 0; Lex->safe_to_cache_query=0;
} }
| LAST_INSERT_ID '(' expr ')' | UTC_TIME_SYM optional_braces
{ {
$$= new Item_func_last_insert_id($3); $$= new (YYTHD->mem_root) Item_func_curtime_utc();
Lex->safe_to_cache_query= 0; Lex->safe_to_cache_query=0;
} }
| LEFT '(' expr ',' expr ')' | UTC_TIMESTAMP_SYM optional_braces
{ $$= new Item_func_left($3,$5); } {
| LOCATE '(' expr ',' expr ')' $$= new (YYTHD->mem_root) Item_func_now_utc();
{ $$= new Item_func_locate($5,$3); }
| LOCATE '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_locate($5,$3,$7); }
| GREATEST_SYM '(' expr ',' expr_list ')'
{ $5->push_front($3); $$= new Item_func_max(*$5); }
| LEAST_SYM '(' expr ',' expr_list ')'
{ $5->push_front($3); $$= new Item_func_min(*$5); }
| LOG_SYM '(' expr ')'
{ $$= new Item_func_log($3); }
| LOG_SYM '(' expr ',' expr ')'
{ $$= new Item_func_log($3, $5); }
| MASTER_POS_WAIT '(' expr ',' expr ')'
{
$$= new Item_master_pos_wait($3, $5);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| MASTER_POS_WAIT '(' expr ',' expr ',' expr ')' ;
/*
Functions calls using a non reserved keywork, and using a regular syntax.
Because the non reserved keyword is used in another part of the grammar,
a dedicated rule is needed here.
*/
function_call_conflict:
ASCII_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_ascii($3); }
| CHARSET '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_charset($3); }
| COALESCE '(' expr_list ')'
{ $$= new (YYTHD->mem_root) Item_func_coalesce(* $3); }
| COLLATION_SYM '(' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_collation($3); }
| DATABASE '(' ')'
{ {
$$= new Item_master_pos_wait($3, $5, $7); $$= new (YYTHD->mem_root) Item_func_database();
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| IF '(' expr ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7); }
| MICROSECOND_SYM '(' expr ')' | MICROSECOND_SYM '(' expr ')'
{ $$= new Item_func_microsecond($3); } { $$= new (YYTHD->mem_root) Item_func_microsecond($3); }
| MINUTE_SYM '(' expr ')'
{ $$= new Item_func_minute($3); }
| MOD_SYM '(' expr ',' expr ')' | MOD_SYM '(' expr ',' expr ')'
{ $$ = new Item_func_mod( $3, $5); } { $$ = new (YYTHD->mem_root) Item_func_mod( $3, $5); }
| MONTH_SYM '(' expr ')' | OLD_PASSWORD '(' expr ')'
{ $$= new Item_func_month($3); } { $$= new (YYTHD->mem_root) Item_func_old_password($3); }
| NOW_SYM optional_braces
{ $$= new Item_func_now_local(); Lex->safe_to_cache_query=0;}
| NOW_SYM '(' expr ')'
{ $$= new Item_func_now_local($3); Lex->safe_to_cache_query=0;}
| PASSWORD '(' expr ')' | PASSWORD '(' expr ')'
{ {
$$= YYTHD->variables.old_passwords ? THD *thd= YYTHD;
(Item *) new Item_func_old_password($3) : Item* i1;
(Item *) new Item_func_password($3); if (thd->variables.old_passwords)
i1= new (thd->mem_root) Item_func_old_password($3);
else
i1= new (thd->mem_root) Item_func_password($3);
$$= i1;
} }
| OLD_PASSWORD '(' expr ')'
{ $$= new Item_func_old_password($3); }
| POSITION_SYM '(' bit_expr IN_SYM expr ')'
{ $$ = new Item_func_locate($5,$3); }
| QUARTER_SYM '(' expr ')' | QUARTER_SYM '(' expr ')'
{ $$ = new Item_func_quarter($3); } { $$ = new (YYTHD->mem_root) Item_func_quarter($3); }
| RAND '(' expr ')' | REPEAT_SYM '(' expr ',' expr ')'
{ $$= new Item_func_rand($3); Lex->uncacheable(UNCACHEABLE_RAND);} { $$= new (YYTHD->mem_root) Item_func_repeat($3,$5); }
| RAND '(' ')'
{ $$= new Item_func_rand(); Lex->uncacheable(UNCACHEABLE_RAND);}
| REPLACE '(' expr ',' expr ',' expr ')' | REPLACE '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_replace($3,$5,$7); } { $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7); }
| RIGHT '(' expr ',' expr ')' | TRUNCATE_SYM '(' expr ',' expr ')'
{ $$= new Item_func_right($3,$5); } { $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); }
| ROUND '(' expr ')' | WEEK_SYM '(' expr ')'
{ $$= new Item_func_round($3, new Item_int((char*)"0",0,1),0); }
| ROUND '(' expr ',' expr ')' { $$= new Item_func_round($3,$5,0); }
| ROW_COUNT_SYM '(' ')'
{ {
$$= new Item_func_row_count(); THD *thd= YYTHD;
Lex->safe_to_cache_query= 0; Item *i1= new (thd->mem_root) Item_int((char*) "0",
thd->variables.default_week_format,
1);
$$= new (thd->mem_root) Item_func_week($3, i1);
} }
| SUBDATE_SYM '(' expr ',' expr ')' | WEEK_SYM '(' expr ',' expr ')'
{ $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 1);} { $$= new (YYTHD->mem_root) Item_func_week($3,$5); }
| SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' | geometry_function
{ $$= new Item_date_add_interval($3, $6, $7, 1); }
| SECOND_SYM '(' expr ')'
{ $$= new Item_func_second($3); }
| SUBSTRING '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_substr($3,$5,$7); }
| SUBSTRING '(' expr ',' expr ')'
{ $$= new Item_func_substr($3,$5); }
| SUBSTRING '(' expr FROM expr FOR_SYM expr ')'
{ $$= new Item_func_substr($3,$5,$7); }
| SUBSTRING '(' expr FROM expr ')'
{ $$= new Item_func_substr($3,$5); }
| SUBSTRING_INDEX '(' expr ',' expr ',' expr ')'
{ $$= new Item_func_substr_index($3,$5,$7); }
| SYSDATE optional_braces
{ {
if (global_system_variables.sysdate_is_now == 0) #ifdef HAVE_SPATIAL
$$= new Item_func_sysdate_local(); $$= $1;
else $$= new Item_func_now_local(); #else
Lex->safe_to_cache_query=0; my_error(ER_FEATURE_DISABLED, MYF(0),
sym_group_geom.name, sym_group_geom.needed_define);
YYABORT;
#endif
} }
| SYSDATE '(' expr ')' ;
geometry_function:
CONTAINS_SYM '(' expr ',' expr ')'
{ {
if (global_system_variables.sysdate_is_now == 0) $$= GEOM_NEW(YYTHD,
$$= new Item_func_sysdate_local($3); Item_func_spatial_rel($3, $5,
else $$= new Item_func_now_local($3); Item_func::SP_CONTAINS_FUNC));
Lex->safe_to_cache_query=0;
} }
| TIME_SYM '(' expr ')' | GEOMETRYCOLLECTION '(' expr_list ')'
{ $$= new Item_time_typecast($3); }
| TIMESTAMP '(' expr ')'
{ $$= new Item_datetime_typecast($3); }
| TIMESTAMP '(' expr ',' expr ')'
{ $$= new Item_func_add_time($3, $5, 1, 0); }
| TIMESTAMP_ADD '(' interval_time_st ',' expr ',' expr ')'
{ $$= new Item_date_add_interval($7,$5,$3,0); }
| TIMESTAMP_DIFF '(' interval_time_st ',' expr ',' expr ')'
{ $$= new Item_func_timestamp_diff($5,$7,$3); }
| TRIM '(' expr ')'
{ $$= new Item_func_trim($3); }
| TRIM '(' LEADING expr FROM expr ')'
{ $$= new Item_func_ltrim($6,$4); }
| TRIM '(' TRAILING expr FROM expr ')'
{ $$= new Item_func_rtrim($6,$4); }
| TRIM '(' BOTH expr FROM expr ')'
{ $$= new Item_func_trim($6,$4); }
| TRIM '(' LEADING FROM expr ')'
{ $$= new Item_func_ltrim($5); }
| TRIM '(' TRAILING FROM expr ')'
{ $$= new Item_func_rtrim($5); }
| TRIM '(' BOTH FROM expr ')'
{ $$= new Item_func_trim($5); }
| TRIM '(' expr FROM expr ')'
{ $$= new Item_func_trim($5,$3); }
| TRUNCATE_SYM '(' expr ',' expr ')'
{ $$= new Item_func_round($3,$5,1); }
| ident '.' ident '(' udf_expr_list ')'
{ {
LEX *lex= Lex; $$= GEOM_NEW(YYTHD,
sp_name *name= new sp_name($1, $3); Item_func_spatial_collection(* $3,
Geometry::wkb_geometrycollection,
name->init_qname(YYTHD); Geometry::wkb_point));
sp_add_used_routine(lex, YYTHD, name, TYPE_ENUM_FUNCTION); }
if ($5) | LINESTRING '(' expr_list ')'
$$= new Item_func_sp(Lex->current_context(), name, *$5); {
else $$= GEOM_NEW(YYTHD,
$$= new Item_func_sp(Lex->current_context(), name); Item_func_spatial_collection(* $3,
lex->safe_to_cache_query=0; Geometry::wkb_linestring,
Geometry::wkb_point));
} }
| IDENT_sys '(' | MULTILINESTRING '(' expr_list ')'
{
$$= GEOM_NEW(YYTHD,
Item_func_spatial_collection(* $3,
Geometry::wkb_multilinestring,
Geometry::wkb_linestring));
}
| MULTIPOINT '(' expr_list ')'
{
$$= GEOM_NEW(YYTHD,
Item_func_spatial_collection(* $3,
Geometry::wkb_multipoint,
Geometry::wkb_point));
}
| MULTIPOLYGON '(' expr_list ')'
{
$$= GEOM_NEW(YYTHD,
Item_func_spatial_collection(* $3,
Geometry::wkb_multipolygon,
Geometry::wkb_polygon));
}
| POINT_SYM '(' expr ',' expr ')'
{ $$= GEOM_NEW(YYTHD, Item_func_point($3,$5)); }
| POLYGON '(' expr_list ')'
{
$$= GEOM_NEW(YYTHD,
Item_func_spatial_collection(* $3,
Geometry::wkb_polygon,
Geometry::wkb_linestring));
}
;
/*
Regular function calls.
The function name is *not* a token, and therefore is guaranteed to not
introduce side effects to the language in general.
MAINTAINER:
All the new functions implemented for new features should fit into
this category. The place to implement the function itself is
in sql/item_create.cc
*/
function_call_generic:
IDENT_sys '('
{ {
#ifdef HAVE_DLOPEN #ifdef HAVE_DLOPEN
udf_func *udf= 0; udf_func *udf= 0;
...@@ -6360,211 +6369,89 @@ simple_expr: ...@@ -6360,211 +6369,89 @@ simple_expr:
YYABORT; YYABORT;
} }
} }
/* Temporary placing the result of find_udf in $3 */
$<udf>$= udf; $<udf>$= udf;
#endif #endif
} }
udf_expr_list ')' expr_list_opt ')'
{
#ifdef HAVE_DLOPEN
udf_func *udf= $<udf>3;
SELECT_LEX *sel= Select;
if (udf)
{ {
if (udf->type == UDFTYPE_AGGREGATE) THD *thd= YYTHD;
Select->in_sum_expr--; LEX *lex= Lex;
Create_func *builder;
Item *item= NULL;
Lex->binlog_row_based_if_mixed= TRUE; /*
Implementation note:
names are resolved with the following order:
- MySQL native functions,
- User Defined Functions,
- Stored Functions (assuming the current <use> database)
switch (udf->returns) { This will be revised with WL#2128 (SQL PATH)
case STRING_RESULT: */
if (udf->type == UDFTYPE_FUNCTION) builder= find_native_function_builder(thd, $1);
if (builder)
{ {
if ($4 != NULL) item= builder->create(thd, $1, $4);
$$ = new Item_func_udf_str(udf, *$4);
else
$$ = new Item_func_udf_str(udf);
} }
else else
{ {
if ($4 != NULL) #ifdef HAVE_DLOPEN
$$ = new Item_sum_udf_str(udf, *$4); /* Retrieving the result of find_udf */
else udf_func *udf= $<udf>3;
$$ = new Item_sum_udf_str(udf);
} if (udf)
break;
case REAL_RESULT:
if (udf->type == UDFTYPE_FUNCTION)
{ {
if ($4 != NULL) if (udf->type == UDFTYPE_AGGREGATE)
$$ = new Item_func_udf_float(udf, *$4);
else
$$ = new Item_func_udf_float(udf);
}
else
{ {
if ($4 != NULL) Select->in_sum_expr--;
$$ = new Item_sum_udf_float(udf, *$4);
else
$$ = new Item_sum_udf_float(udf);
} }
break;
case INT_RESULT: item= Create_udf_func::s_singleton.create(thd, udf, $4);
if (udf->type == UDFTYPE_FUNCTION)
{
if ($4 != NULL)
$$ = new Item_func_udf_int(udf, *$4);
else
$$ = new Item_func_udf_int(udf);
} }
else else
#endif
{ {
if ($4 != NULL) builder= find_qualified_function_builder(thd);
$$ = new Item_sum_udf_int(udf, *$4); DBUG_ASSERT(builder);
else item= builder->create(thd, $1, $4);
$$ = new Item_sum_udf_int(udf);
} }
break;
case DECIMAL_RESULT:
if (udf->type == UDFTYPE_FUNCTION)
{
if ($4 != NULL)
$$ = new Item_func_udf_decimal(udf, *$4);
else
$$ = new Item_func_udf_decimal(udf);
} }
else
if (! ($$= item))
{ {
if ($4 != NULL)
$$ = new Item_sum_udf_decimal(udf, *$4);
else
$$ = new Item_sum_udf_decimal(udf);
}
break;
default:
YYABORT; YYABORT;
} }
} }
else | ident '.' ident '(' udf_expr_list ')'
#endif /* HAVE_DLOPEN */
{ {
LEX *lex= Lex; THD *thd= YYTHD;
THD *thd= lex->thd; Create_qfunc *builder;
LEX_STRING db; Item *item= NULL;
if (thd->copy_db_to(&db.str, &db.length))
YYABORT;
sp_name *name= new sp_name(db, $1);
if (name)
name->init_qname(thd);
sp_add_used_routine(lex, YYTHD, name, TYPE_ENUM_FUNCTION); /*
if ($4) The following in practice calls:
$$= new Item_func_sp(Lex->current_context(), name, *$4); <code>Create_sp_func::create()</code>
else and builds a stored function.
$$= new Item_func_sp(Lex->current_context(), name);
lex->safe_to_cache_query=0; However, it's important to maintain the interface between the
} parser and the implementation in item_create.cc clean,
} since this will change with WL#2128 (SQL PATH):
| UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' expr_list ')' - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native
{ funtion version(),
$$= new Item_func_unique_users($3,atoi($5.str),atoi($7.str), * $9); - MySQL.version() is the SQL 2003 syntax for the native function
} version() (a vendor can specify any schema).
| UNIX_TIMESTAMP '(' ')' */
{
$$= new Item_func_unix_timestamp(); builder= find_qualified_function_builder(thd);
Lex->safe_to_cache_query=0; DBUG_ASSERT(builder);
} item= builder->create(thd, $1, $3, $5);
| UNIX_TIMESTAMP '(' expr ')'
{ $$= new Item_func_unix_timestamp($3); } if (! ($$= item))
| USER '(' ')'
{ $$= new Item_func_user(); Lex->safe_to_cache_query=0; }
| UTC_DATE_SYM optional_braces
{ $$= new Item_func_curdate_utc(); Lex->safe_to_cache_query=0;}
| UTC_TIME_SYM optional_braces
{ $$= new Item_func_curtime_utc(); Lex->safe_to_cache_query=0;}
| UTC_TIMESTAMP_SYM optional_braces
{ $$= new Item_func_now_utc(); Lex->safe_to_cache_query=0;}
| WEEK_SYM '(' expr ')'
{ {
$$= new Item_func_week($3,new Item_int((char*) "0", YYABORT;
YYTHD->variables.default_week_format,1));
} }
| WEEK_SYM '(' expr ',' expr ')'
{ $$= new Item_func_week($3,$5); }
| YEAR_SYM '(' expr ')'
{ $$= new Item_func_year($3); }
| YEARWEEK '(' expr ')'
{ $$= new Item_func_yearweek($3,new Item_int((char*) "0",0,1)); }
| YEARWEEK '(' expr ',' expr ')'
{ $$= new Item_func_yearweek($3, $5); }
| BENCHMARK_SYM '(' ulong_num ',' expr ')'
{
$$=new Item_func_benchmark($3,$5);
Lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
} }
| EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new Item_extract( $3, $5); };
geometry_function:
CONTAINS_SYM '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_spatial_rel($3, $5, Item_func::SP_CONTAINS_FUNC)); }
| GEOMFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| GEOMFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| GEOMFROMWKB '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_wkb($3)); }
| GEOMFROMWKB '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_wkb($3, $5)); }
| GEOMETRYCOLLECTION '(' expr_list ')'
{ $$= GEOM_NEW(Item_func_spatial_collection(* $3,
Geometry::wkb_geometrycollection,
Geometry::wkb_point)); }
| LINESTRING '(' expr_list ')'
{ $$= GEOM_NEW(Item_func_spatial_collection(* $3,
Geometry::wkb_linestring, Geometry::wkb_point)); }
| MULTILINESTRING '(' expr_list ')'
{ $$= GEOM_NEW( Item_func_spatial_collection(* $3,
Geometry::wkb_multilinestring, Geometry::wkb_linestring)); }
| MLINEFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| MLINEFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| MPOINTFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| MPOINTFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| MPOLYFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| MPOLYFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| MULTIPOINT '(' expr_list ')'
{ $$= GEOM_NEW(Item_func_spatial_collection(* $3,
Geometry::wkb_multipoint, Geometry::wkb_point)); }
| MULTIPOLYGON '(' expr_list ')'
{ $$= GEOM_NEW(Item_func_spatial_collection(* $3,
Geometry::wkb_multipolygon, Geometry::wkb_polygon)); }
| POINT_SYM '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_point($3,$5)); }
| POINTFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| POINTFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| POLYFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| POLYFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| POLYGON '(' expr_list ')'
{ $$= GEOM_NEW(Item_func_spatial_collection(* $3,
Geometry::wkb_polygon, Geometry::wkb_linestring)); }
| GEOMCOLLFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| GEOMCOLLFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
| LINEFROMTEXT '(' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3)); }
| LINEFROMTEXT '(' expr ',' expr ')'
{ $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); }
; ;
fulltext_options: fulltext_options:
...@@ -6775,6 +6662,13 @@ cast_type: ...@@ -6775,6 +6662,13 @@ cast_type:
| DECIMAL_SYM float_options { $$=ITEM_CAST_DECIMAL; Lex->charset= NULL; } | DECIMAL_SYM float_options { $$=ITEM_CAST_DECIMAL; Lex->charset= NULL; }
; ;
expr_list_opt:
/* empty */
{ $$ = NULL; }
| expr_list
{ $$ = $1;}
;
expr_list: expr_list:
{ Select->expr_list.push_front(new List<Item>); } { Select->expr_list.push_front(new List<Item>); }
expr_list2 expr_list2
......
...@@ -8685,7 +8685,7 @@ static void test_sqlmode() ...@@ -8685,7 +8685,7 @@ static void test_sqlmode()
if (!opt_silent) if (!opt_silent)
fprintf(stdout, "\n query: %s", query); fprintf(stdout, "\n query: %s", query);
stmt= mysql_simple_prepare(mysql, query); stmt= mysql_simple_prepare(mysql, query);
check_stmt_r(stmt); check_stmt(stmt);
/* ANSI */ /* ANSI */
strmov(query, "SET SQL_MODE= \"ANSI\""); strmov(query, "SET SQL_MODE= \"ANSI\"");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment