1379 lines
36 KiB
Plaintext
1379 lines
36 KiB
Plaintext
# The include statement below is a temp one for tests that are yet to
|
||
#be ported to run with InnoDB,
|
||
#but needs to be kept for tests that would need MyISAM in future.
|
||
--source include/force_myisam_default.inc
|
||
|
||
#
|
||
# This file contains tests covering the parser
|
||
#
|
||
|
||
#=============================================================================
|
||
# LEXICAL PARSER (lex)
|
||
#=============================================================================
|
||
|
||
#
|
||
# Maintainer: these tests are for the lexical parser, so every character,
|
||
# even whitespace or comments, is significant here.
|
||
#
|
||
|
||
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;
|
||
|
||
# Limitation removed in 5.1
|
||
create table GROUP_UNIQUE_USERS(a int);
|
||
drop table GROUP_UNIQUE_USERS;
|
||
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;
|
||
|
||
# Limitation removed in 5.1
|
||
create table UNIQUE_USERS(a int);
|
||
drop table UNIQUE_USERS;
|
||
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);
|
||
|
||
# Limitation removed in 5.1
|
||
create table GROUP_UNIQUE_USERS(a int);
|
||
drop table GROUP_UNIQUE_USERS;
|
||
create table GROUP_UNIQUE_USERS (a int);
|
||
drop table GROUP_UNIQUE_USERS;
|
||
|
||
--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);
|
||
|
||
# Limitation removed in 5.1
|
||
create table UNIQUE_USERS(a int);
|
||
drop table UNIQUE_USERS;
|
||
create table UNIQUE_USERS (a int);
|
||
drop table UNIQUE_USERS;
|
||
|
||
--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);
|
||
|
||
--echo #
|
||
--echo # Test "UNIQUE KEY" and "UNIQUE" "KEY" grammar ambiguity
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (i INT KEY);
|
||
SHOW CREATE TABLE t1;
|
||
|
||
CREATE TABLE t2 (i INT UNIQUE);
|
||
SHOW CREATE TABLE t2;
|
||
|
||
CREATE TABLE t3 (i INT UNIQUE KEY);
|
||
--echo # Should output "UNIQUE KEY `i` (`i`)" only:
|
||
SHOW CREATE TABLE t3;
|
||
|
||
DROP TABLE t1, t2, t3;
|
||
|
||
--echo #
|
||
|
||
#
|
||
# Bug#25930 (CREATE TABLE x SELECT ... parses columns wrong when ran with
|
||
# ANSI_QUOTES mode)
|
||
#
|
||
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS table_25930_a;
|
||
DROP TABLE IF EXISTS table_25930_b;
|
||
--enable_warnings
|
||
|
||
SET SQL_MODE = 'ANSI_QUOTES';
|
||
CREATE TABLE table_25930_a ( "blah" INT );
|
||
CREATE TABLE table_25930_b SELECT "blah" - 1 FROM table_25930_a;
|
||
|
||
# The lexer used to chop the first <">,
|
||
# not marking the start of the token "blah" correctly.
|
||
desc table_25930_b;
|
||
|
||
DROP TABLE table_25930_a;
|
||
DROP TABLE table_25930_b;
|
||
|
||
|
||
SET @@sql_mode=@save_sql_mode;
|
||
|
||
#
|
||
# Bug#26030 (Parsing fails for stored routine w/multi-statement execution
|
||
# enabled)
|
||
#
|
||
|
||
--disable_warnings
|
||
DROP PROCEDURE IF EXISTS p26030;
|
||
--enable_warnings
|
||
|
||
delimiter $$;
|
||
|
||
select "non terminated"$$
|
||
select "terminated";$$
|
||
select "non terminated, space" $$
|
||
select "terminated, space"; $$
|
||
select "non terminated, comment" /* comment */$$
|
||
select "terminated, comment"; /* comment */$$
|
||
|
||
# Multi queries can not be used in --ps-protocol test mode
|
||
--disable_ps_protocol
|
||
|
||
select "stmt 1";select "stmt 2 non terminated"$$
|
||
select "stmt 1";select "stmt 2 terminated";$$
|
||
select "stmt 1";select "stmt 2 non terminated, space" $$
|
||
select "stmt 1";select "stmt 2 terminated, space"; $$
|
||
select "stmt 1";select "stmt 2 non terminated, comment" /* comment */$$
|
||
select "stmt 1";select "stmt 2 terminated, comment"; /* comment */$$
|
||
|
||
select "stmt 1"; select "space, stmt 2"$$
|
||
select "stmt 1";/* comment */select "comment, stmt 2"$$
|
||
|
||
DROP PROCEDURE IF EXISTS p26030; CREATE PROCEDURE p26030() BEGIN SELECT 1; END; CALL p26030()
|
||
$$
|
||
|
||
DROP PROCEDURE IF EXISTS p26030; CREATE PROCEDURE p26030() SELECT 1; CALL p26030()
|
||
$$
|
||
|
||
--enable_ps_protocol
|
||
|
||
delimiter ;$$
|
||
DROP PROCEDURE p26030;
|
||
|
||
#=============================================================================
|
||
# 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);
|
||
|
||
-- 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");
|
||
|
||
-- 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");
|
||
|
||
-- 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);
|
||
|
||
--disable_result_log
|
||
--error 0,ER_WRONG_ARGUMENTS
|
||
select master_pos_wait('master-bin.999999', 4, -1);
|
||
--enable_result_log
|
||
|
||
-- 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);
|
||
|
||
#
|
||
# Bug#24736: UDF functions parsed as Stored Functions
|
||
#
|
||
|
||
# Verify that the syntax for calling UDF : foo(expr AS param, ...)
|
||
# can not be used when calling native functions
|
||
|
||
# Native function with 1 argument
|
||
|
||
select abs(3);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select abs(3 AS three);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select abs(3 three);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select abs(3 AS "three");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select abs(3 "three");
|
||
|
||
# Native function with 2 arguments
|
||
|
||
set @bar="bar";
|
||
set @foobar="foobar";
|
||
|
||
select instr("foobar", "bar");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar" AS p1, "bar");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar" p1, "bar");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar" AS "p1", "bar");
|
||
## String concatenation, valid syntax
|
||
select instr("foobar" "p1", "bar");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr(@foobar "p1", "bar");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar", "bar" AS p2);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar", "bar" p2);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar", "bar" AS "p2");
|
||
## String concatenation, valid syntax
|
||
select instr("foobar", "bar" "p2");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar", @bar "p2");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select instr("foobar" AS p1, "bar" AS p2);
|
||
|
||
# Native function with 3 arguments
|
||
|
||
select conv(255, 10, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255 AS p1, 10, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255 p1, 10, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255 AS "p1", 10, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255 "p1", 10, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10 AS p2, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10 p2, 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10 AS "p2", 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10 "p2", 16);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10, 16 AS p3);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10, 16 p3);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10, 16 AS "p3");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255, 10, 16 "p3");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select conv(255 AS p1, 10 AS p2, 16 AS p3);
|
||
|
||
# Native function with a variable number of arguments
|
||
|
||
# Bug in libm.so on Solaris:
|
||
# atan(10) from 32-bit version returns 1.4711276743037347
|
||
# atan(10) from 64-bit version returns 1.4711276743037345
|
||
--replace_result 1.4711276743037345 1.4711276743037347
|
||
select atan(10);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 AS p1);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 p1);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 AS "p1");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 "p1");
|
||
|
||
select atan(10, 20);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 AS p1, 20);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 p1, 20);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 AS "p1", 20);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 "p1", 20);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10, 20 AS p2);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10, 20 p2);
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10, 20 AS "p2");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10, 20 "p2");
|
||
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
|
||
select atan(10 AS p1, 20 AS p2);
|
||
|
||
#
|
||
# Bug#22312 Syntax error in expression with INTERVAL()
|
||
#
|
||
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS t1;
|
||
--enable_warnings
|
||
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
|
||
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE;
|
||
SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
|
||
SELECT 1 + INTERVAL(1,0,1,2) + 1;
|
||
SELECT INTERVAL(1^1,0,1,2) + 1;
|
||
SELECT INTERVAL(1,0+1,2,3) * 5.5;
|
||
SELECT INTERVAL(3,3,1+3,4+4) / 0.5;
|
||
SELECT (INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2;
|
||
SELECT INTERVAL(1,0,1,2) + 1, 5 * INTERVAL(1,0,1,2);
|
||
SELECT INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3);
|
||
|
||
--disable_warnings
|
||
SELECT 1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND;
|
||
SELECT 1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND;
|
||
--enable_warnings
|
||
|
||
CREATE TABLE t1 (a INT, b DATETIME);
|
||
INSERT INTO t1 VALUES (INTERVAL(3,2,1) + 1, "1997-12-31 23:59:59" + INTERVAL 1 SECOND);
|
||
SELECT * FROM t1 WHERE a = INTERVAL(3,2,1) + 1;
|
||
DROP TABLE t1;
|
||
SET sql_mode = default;
|
||
#
|
||
# Bug#28317 Left Outer Join with {oj outer-join}
|
||
#
|
||
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS t1,t2,t3;
|
||
--enable_warnings
|
||
CREATE TABLE t1 (a1 INT, a2 INT, a3 INT, a4 DATETIME);
|
||
CREATE TABLE t2 LIKE t1;
|
||
CREATE TABLE t3 LIKE t1;
|
||
SELECT t1.* FROM t1 AS t0, { OJ t2 INNER JOIN t1 ON (t1.a1=t2.a1) } WHERE t0.a3=2;
|
||
SELECT t1.*,t2.* FROM { OJ ((t1 INNER JOIN t2 ON (t1.a1=t2.a2)) LEFT OUTER JOIN t3 ON t3.a3=t2.a1)};
|
||
SELECT t1.*,t2.* FROM { OJ ((t1 LEFT OUTER JOIN t2 ON t1.a3=t2.a2) INNER JOIN t3 ON (t3.a1=t2.a2))};
|
||
SELECT t1.*,t2.* FROM { OJ (t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a2) CROSS JOIN t3 ON (t3.a2=t2.a3)};
|
||
SELECT * FROM {oj t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a3} WHERE t1.a2 > 10;
|
||
SELECT {fn CONCAT(a1,a2)} FROM t1;
|
||
UPDATE t3 SET a4={d '1789-07-14'} WHERE a1=0;
|
||
SELECT a1, a4 FROM t2 WHERE a4 LIKE {fn UCASE('1789-07-14')};
|
||
DROP TABLE t1, t2, t3;
|
||
|
||
--echo #
|
||
--echo # End of 5.1 tests
|
||
--echo #
|
||
|
||
#
|
||
# Bug#31293 - Incorrect parser errors for create/alter/drop logfile group/tablespace
|
||
#
|
||
|
||
--echo # Should use myisam
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create logfile group ndb_lg1 add undofile 'ndb_undo1' initial_size=32M;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create logfile group ndb_lg1 add undofile 'ndb_undo1' engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create logfile group ndb_lg1 add undofile 'ndb_undo1';
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create tablespace ndb_ts1 add datafile 'ndb_ts1.dat' use logfile group ndb_lg1 engine=myisam initial_size=32M;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create tablespace ndb_ts1 add datafile 'ndb_ts1.dat' use logfile group ndb_lg1 engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
create tablespace ndb_ts1 add datafile 'ndb_ts1.dat' use logfile group ndb_lg1;
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter logfile group ndb_lg1 add undofile 'ndb_undo1' wait;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter logfile group ndb_lg1 add undofile 'ndb_undo1' engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter logfile group ndb_lg1 add undofile 'ndb_undo1';
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter tablespace ndb_ts1 add datafile 'ndb_ts1.dat' initial_size=32M;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter tablespace ndb_ts1 add datafile 'ndb_ts1.dat' engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
alter tablespace ndb_ts1 add datafile 'ndb_ts1.dat';
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
drop logfile group ndb_lg1 engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
drop logfile group ndb_lg1;
|
||
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
drop tablespace ndb_ts1 engine=myisam;
|
||
-- error ER_ILLEGAL_HA_CREATE_OPTION
|
||
drop tablespace ndb_ts1;
|
||
|
||
#
|
||
# Bug#12546960 - 60993: NAME QUOTED WITH QUOTE INSTEAD OF BACKTICK
|
||
# GIVES NO SYNTAX ERROR
|
||
#
|
||
CREATE TABLE t (id INT PRIMARY KEY);
|
||
--error ER_PARSE_ERROR
|
||
--query ALTER TABLE t RENAME TO `t1';
|
||
DROP TABLE t;
|
||
|
||
--echo #
|
||
--echo # Bug#13819100 BROKEN SYNTAX ACCEPTED FOR START SLAVE, STOP SLAVE
|
||
--echo #
|
||
|
||
--error ER_PARSE_ERROR
|
||
STOP SLAVE ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
|
||
--error ER_PARSE_ERROR
|
||
STOP SLAVE ,,,,,,,,,,,,, sql_thread, ,,,,,,,,,,,,,,,,,,, ;
|
||
--error ER_PARSE_ERROR
|
||
STOP SLAVE ,,,,,,,,,,,,, io_thread, ,,,,,,,,,,,,,,,,,,, ;
|
||
|
||
--echo #
|
||
--echo # Bug#13819132 BROKEN SYNTAX ACCEPTED FOR START TRANSACTION
|
||
--echo #
|
||
|
||
--error ER_PARSE_ERROR
|
||
START TRANSACTION ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
|
||
|
||
--echo #
|
||
--echo # Test of collective fix for three parser bugs:
|
||
--echo #
|
||
--echo # Bug #17727401, Bug #17426017, Bug #17473479:
|
||
--echo # The server accepts wrong syntax and then fails in different ways
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (i INT);
|
||
|
||
--echo # bug #17426017
|
||
--error ER_PARSE_ERROR
|
||
SELECT (SELECT EXISTS(SELECT * LIMIT 1 ORDER BY VALUES (c00)));
|
||
|
||
--echo # bug#17473479
|
||
CREATE TABLE a(a int);
|
||
CREATE TABLE b(a int);
|
||
--error ER_PARSE_ERROR
|
||
DELETE FROM b ORDER BY(SELECT 1 FROM a ORDER BY a ORDER BY a);
|
||
DROP TABLE a, b;
|
||
|
||
--echo # bug #17727401
|
||
--error ER_PARSE_ERROR
|
||
SELECT '' IN (SELECT '1' c FROM t1 ORDER BY '' ORDER BY '') FROM t1;
|
||
|
||
--echo # regression & coverage tests
|
||
|
||
--echo # uniform syntax for FROM DUAL clause:
|
||
|
||
SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
FOR UPDATE;
|
||
|
||
SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
PROCEDURE ANALYSE() FOR UPDATE;
|
||
|
||
SELECT 1 FROM
|
||
(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
FOR UPDATE) a;
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM
|
||
(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
PROCEDURE ANALYSE() FOR UPDATE) a;
|
||
|
||
SELECT 1 FROM t1
|
||
WHERE EXISTS(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
FOR UPDATE);
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM t1
|
||
WHERE EXISTS(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
PROCEDURE ANALYSE() FOR UPDATE);
|
||
|
||
SELECT 1 FROM t1
|
||
UNION
|
||
SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
FOR UPDATE;
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM t1
|
||
UNION
|
||
SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
PROCEDURE ANALYSE() FOR UPDATE;
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM DUAL PROCEDURE ANALYSE()
|
||
UNION
|
||
SELECT 1 FROM t1;
|
||
|
||
(SELECT 1 FROM t1)
|
||
UNION
|
||
(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
FOR UPDATE);
|
||
|
||
--error ER_WRONG_USAGE
|
||
(SELECT 1 FROM t1)
|
||
UNION
|
||
(SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
|
||
PROCEDURE ANALYSE() FOR UPDATE);
|
||
|
||
--echo # "FOR UPDATE" tests
|
||
|
||
SELECT 1 FROM t1 UNION SELECT 1 FROM t1 ORDER BY 1 LIMIT 1;
|
||
SELECT 1 FROM t1 FOR UPDATE UNION SELECT 1 FROM t1 ORDER BY 1 LIMIT 1;
|
||
SELECT 1 FROM t1 UNION SELECT 1 FROM t1 ORDER BY 1 LIMIT 1 FOR UPDATE;
|
||
|
||
|
||
--echo # "INTO" clause tests
|
||
|
||
SELECT 1 FROM t1 INTO @var17727401;
|
||
SELECT 1 FROM DUAL INTO @var17727401;
|
||
SELECT 1 INTO @var17727401;
|
||
|
||
SELECT 1 INTO @var17727401 FROM t1;
|
||
SELECT 1 INTO @var17727401 FROM DUAL;
|
||
|
||
# Double "INTO" clause: parse error is "near 'INTO @var17727401_2' at line 1"
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 INTO @var17727401_1 FROM t1 INTO @var17727401_2;
|
||
|
||
# Double "INTO" clause: parse error is "near 'INTO @var17727401_2' at line 2"
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 INTO @var17727401_1 FROM DUAL
|
||
INTO @var17727401_2;
|
||
|
||
SELECT 1 INTO @var17727401 FROM t1 WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1 LIMIT 1;
|
||
SELECT 1 FROM t1 WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1 LIMIT 1 INTO @var17727401;
|
||
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 FROM t1 WHERE 1 INTO @var17727401 GROUP BY 1 HAVING 1 ORDER BY 1 LIMIT 1;
|
||
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 INTO @var17727401_1
|
||
FROM t1 WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1 LIMIT 1
|
||
INTO @var17727401_2;
|
||
|
||
--error ER_PARSE_ERROR
|
||
SELECT (SELECT 1 FROM t1 INTO @var17727401);
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 FROM (SELECT 1 FROM t1 INTO @var17727401) a;
|
||
--error ER_PARSE_ERROR
|
||
SELECT EXISTS(SELECT 1 FROM t1 INTO @var17727401);
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM t1 INTO @var17727401 UNION SELECT 1 FROM t1 INTO t1;
|
||
--error ER_WRONG_USAGE
|
||
(SELECT 1 FROM t1 INTO @var17727401) UNION (SELECT 1 FROM t1 INTO t1);
|
||
|
||
SELECT 1 FROM t1 UNION SELECT 1 FROM t1 INTO @var17727401;
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 INTO @var17727401 FROM t1 PROCEDURE ANALYSE();
|
||
|
||
--error ER_WRONG_USAGE
|
||
SELECT 1 FROM t1 PROCEDURE ANALYSE() INTO @var17727401;
|
||
|
||
--echo # ORDER and LIMIT clause combinations
|
||
|
||
# Limited support for (SELECT ...) ORDER/LIMIT:
|
||
|
||
(SELECT 1 FROM t1 ORDER BY 1) ORDER BY 1;
|
||
(SELECT 1 FROM t1 LIMIT 1) LIMIT 1;
|
||
|
||
--error ER_PARSE_ERROR
|
||
((SELECT 1 FROM t1 ORDER BY 1) ORDER BY 1) ORDER BY 1;
|
||
--error ER_PARSE_ERROR
|
||
((SELECT 1 FROM t1 LIMIT 1) LIMIT 1) LIMIT 1;
|
||
|
||
(SELECT 1 FROM t1 ORDER BY 1) LIMIT 1;
|
||
(SELECT 1 FROM t1 LIMIT 1) ORDER BY 1;
|
||
|
||
--error ER_PARSE_ERROR
|
||
((SELECT 1 FROM t1 ORDER BY 1) LIMIT 1) ORDER BY 1);
|
||
--error ER_PARSE_ERROR
|
||
((SELECT 1 FROM t1 LIMIT 1) ORDER BY 1) LIMIT 1);
|
||
|
||
# ORDER/LIMIT and UNION:
|
||
|
||
let $q=SELECT 1 FROM t1 UNION SELECT 1 FROM t1 ORDER BY 1;
|
||
eval $q;
|
||
eval SELECT ($q);
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 UNION SELECT 1 FROM t1 LIMIT 1;
|
||
eval $q;
|
||
eval SELECT ($q);
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 UNION SELECT 1 FROM t1 ORDER BY 1 LIMIT 1;
|
||
eval $q;
|
||
eval SELECT ($q);
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 UNION SELECT 1 FROM t1 LIMIT 1 ORDER BY 1;
|
||
--error ER_PARSE_ERROR
|
||
eval $q;
|
||
--error ER_PARSE_ERROR
|
||
eval SELECT ($q);
|
||
--error ER_PARSE_ERROR
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 ORDER BY 1 UNION SELECT 1 FROM t1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 LIMIT 1 UNION SELECT 1 FROM t1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 ORDER BY 1 LIMIT 1 UNION SELECT 1 FROM t1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 LIMIT 1 ORDER BY 1 UNION SELECT 1 FROM t1;
|
||
--error ER_PARSE_ERROR
|
||
eval $q;
|
||
--error ER_PARSE_ERROR
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 ORDER BY 1 UNION SELECT 1 FROM t1 ORDER BY 1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 LIMIT 1 UNION SELECT 1 FROM t1 LIMIT 1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 LIMIT 1 UNION SELECT 1 FROM t1 ORDER BY 1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
let $q=SELECT 1 FROM t1 ORDER BY 1 UNION SELECT 1 FROM t1 LIMIT 1;
|
||
--error ER_WRONG_USAGE
|
||
eval $q;
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT ($q);
|
||
--error ER_WRONG_USAGE
|
||
eval SELECT 1 FROM ($q) a;
|
||
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # Bug #18106014: RECENT REGRESSION: MORE CASES OF ASSERTION FAILED:
|
||
--echo # !JOIN->PLAN_IS_CONST()
|
||
--echo #
|
||
|
||
SELECT COUNT(1) FROM DUAL GROUP BY '1' ORDER BY 1 ;
|
||
# The syntax for FROM DUAL is not completely generalized there yet
|
||
--error ER_PARSE_ERROR
|
||
SELECT COUNT(1) GROUP BY '1' ORDER BY 1 ;
|
||
|
||
DO(SELECT 1 c GROUP BY 1 HAVING 1 ORDER BY COUNT(1));
|
||
DO(SELECT 1 c FROM DUAL GROUP BY 1 HAVING 1 ORDER BY COUNT(1));
|
||
|
||
SELECT (SELECT 1 c GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is not expected';
|
||
SELECT (SELECT 1 c FROM DUAL GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is not expected';
|
||
SELECT (SELECT 1 c GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
SELECT (SELECT 1 c FROM DUAL GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
|
||
SELECT (SELECT 1 c WHERE 1 GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is not expected';
|
||
SELECT (SELECT 1 c FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is not expected';
|
||
SELECT (SELECT 1 c WHERE 1 GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
SELECT (SELECT 1 c FROM DUAL WHERE 1 GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
|
||
SELECT (SELECT 1 c WHERE 0 GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
SELECT (SELECT 1 c FROM DUAL WHERE 0 GROUP BY 1 HAVING 1 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
SELECT (SELECT 1 c WHERE 0 GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
SELECT (SELECT 1 c FROM DUAL WHERE 0 GROUP BY 1 HAVING 0 ORDER BY COUNT(1)) AS
|
||
'null is expected';
|
||
|
||
SELECT 1 c FROM DUAL GROUP BY 1 HAVING 1 ORDER BY COUNT(1);
|
||
SELECT 1 c FROM DUAL GROUP BY 1 HAVING 0 ORDER BY COUNT(1);
|
||
# The syntax for FROM DUAL is not completely generalized there yet
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 c GROUP BY 1 HAVING 1 ORDER BY COUNT(1);
|
||
|
||
--echo #
|
||
--echo # Bug #18106058: RECENT REGRESSION: CRASH IN JOIN::MAKE_TMP_TABLES_INFO
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (i INT);
|
||
INSERT INTO t1 VALUES (1);
|
||
|
||
SELECT ((SELECT 1 AS f HAVING EXISTS(SELECT 1 FROM t1) IS TRUE
|
||
ORDER BY f));
|
||
SELECT ((SELECT 1 AS f FROM DUAL HAVING EXISTS(SELECT 1 FROM t1) IS TRUE
|
||
ORDER BY f));
|
||
|
||
SELECT 1 AS f FROM DUAL HAVING EXISTS(SELECT 1 FROM t1) IS TRUE
|
||
ORDER BY f;
|
||
# The syntax for FROM DUAL is not completely generalized there yet
|
||
--error ER_PARSE_ERROR
|
||
SELECT 1 AS f HAVING EXISTS(SELECT 1 FROM t1) IS TRUE
|
||
ORDER BY f;
|
||
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # Bug#17075846 : unquoted file names for variable values are
|
||
--echo # accepted but parsed incorrectly
|
||
--echo #
|
||
--error ER_WRONG_TYPE_FOR_VAR
|
||
SET default_storage_engine=a.myisam;
|
||
--error ER_WRONG_TYPE_FOR_VAR
|
||
SET default_storage_engine = .a.MyISAM;
|
||
--error ER_WRONG_TYPE_FOR_VAR
|
||
SET default_storage_engine = a.b.MyISAM;
|
||
--error ER_WRONG_TYPE_FOR_VAR
|
||
SET default_storage_engine = `a`.MyISAM;
|
||
--error ER_WRONG_TYPE_FOR_VAR
|
||
SET default_storage_engine = `a`.`MyISAM`;
|
||
--error ER_UNKNOWN_STORAGE_ENGINE
|
||
set default_storage_engine = "a.MYISAM";
|
||
--error ER_UNKNOWN_STORAGE_ENGINE
|
||
set default_storage_engine = 'a.MYISAM';
|
||
--error ER_UNKNOWN_STORAGE_ENGINE
|
||
set default_storage_engine = `a.MYISAM`;
|
||
CREATE TABLE t1 (s VARCHAR(100));
|
||
--ERROR ER_BAD_FIELD_ERROR
|
||
CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
|
||
SET default_storage_engine = NEW.INNODB;
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # Some additional coverage tests for WL#7199 and friends
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (i INT);
|
||
INSERT INTO t1 VALUES (1), (2);
|
||
CREATE TABLE t2 (i INT);
|
||
INSERT INTO t2 VALUES (10), (20);
|
||
|
||
SELECT i FROM t1 WHERE i = 1
|
||
UNION
|
||
SELECT i FROM t2 WHERE i = 10
|
||
ORDER BY i;
|
||
|
||
SELECT i FROM t1 WHERE i = 1
|
||
UNION
|
||
SELECT i FROM t2 WHERE i = 10
|
||
LIMIT 100;
|
||
|
||
SELECT i FROM t1 WHERE i = 1
|
||
UNION
|
||
SELECT i FROM t2 GROUP BY i HAVING i = 10
|
||
ORDER BY i;
|
||
|
||
SELECT i FROM t1 WHERE i = 1
|
||
UNION
|
||
SELECT i FROM t2 GROUP BY i HAVING i = 10
|
||
LIMIT 100;
|
||
|
||
(SELECT i FROM t1 WHERE i = 1) ORDER BY i;
|
||
(SELECT i FROM t1 WHERE i = 1) LIMIT 100;
|
||
|
||
(SELECT i FROM t1 GROUP BY i HAVING i = 1) ORDER BY i;
|
||
(SELECT i FROM t1 GROUP BY i HAVING i = 1) LIMIT 100;
|
||
|
||
DROP TABLE t1, t2;
|
||
|
||
--echo #
|
||
--echo # Bug#18486460 ASSERTION FAILED: N < M_SIZE AFTER FIX_INNER_REFS
|
||
--echo #
|
||
|
||
CREATE TABLE t1(b INT);
|
||
CREATE TABLE t2(a INT, b INT, c INT, d INT);
|
||
|
||
--source include/turn_off_only_full_group_by.inc
|
||
EXPLAIN SELECT
|
||
(
|
||
SELECT
|
||
ROW(t1.b, a) = ROW( ROW(1, t2.c) = ROW(1, d), c) = a
|
||
FROM t1
|
||
)
|
||
FROM t2 GROUP BY a;
|
||
--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
|
||
|
||
DROP TABLE t1, t2;
|
||
|
||
--echo #
|
||
--echo # Bug#18498344: SELECT WITH ALIAS NOT WORKING IN 5.7
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (
|
||
a INT
|
||
);
|
||
|
||
INSERT INTO t1 VALUES ( 2 );
|
||
|
||
--echo # Should succeed
|
||
SELECT *
|
||
FROM ( SELECT a FROM t1 UNION SELECT 1 ORDER BY a ) AS a1
|
||
WHERE a1.a = 1 OR a1.a = 2;
|
||
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # Bug #18484088: PROBLEMS IN CREATE_FUNC_CAST ON QUERY ERRORS...
|
||
--echo #
|
||
|
||
# original bugreport:
|
||
--error ER_TOO_BIG_PRECISION
|
||
DO(CONVERT(CONVERT('',DECIMAL(66,0)), DECIMAL(66,0))), CAST(CONVERT(1,DECIMAL(65,31)) AS DATE);
|
||
|
||
# test an error message for the complex "column" name: "CONVERT('',DECIMAL(65,0))"
|
||
--error ER_TOO_BIG_PRECISION
|
||
SELECT CONVERT(CONVERT('',DECIMAL(65,0)), DECIMAL(66,0));
|
||
|
||
--echo #
|
||
--echo # Bug #18759387: PROBLEM IN ITEM_FUNC_XOR::NEG_TRANSFORMER
|
||
--echo #
|
||
|
||
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
|
||
SELECT 1<
|
||
!(1 XOR TO_BASE64()));
|
||
|
||
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
|
||
SELECT !('' XOR LENGTH());
|
||
|
||
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
|
||
SELECT !((UNHEX() IS NULL));
|
||
|
||
--echo #
|
||
--echo # Bug #20086997: PARSER CONFUSES WITH 7BIT-CHARACTER STRING DETECTION
|
||
--echo #
|
||
|
||
CREATE DATABASE mysqltest1 CHARACTER SET LATIN2;
|
||
USE mysqltest1;
|
||
CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET LATIN2);
|
||
SET CHARACTER SET cp1250_latin2;
|
||
INSERT INTO t1 VALUES ('<27><><EFBFBD><EFBFBD>');
|
||
INSERT INTO t1 VALUES ('<27><><EFBFBD><EFBFBD>' '');
|
||
SELECT HEX(a) FROM t1;
|
||
DROP DATABASE mysqltest1;
|
||
USE test;
|
||
|
||
--echo #
|
||
--echo # WL #7201, WL #7202 and WL#8062 coverage tests
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (i INT);
|
||
|
||
INSERT INTO t1 () SELECT * FROM t1;
|
||
INSERT INTO t1 SELECT HIGH_PRIORITY * FROM t1;
|
||
--error ER_WRONG_USAGE
|
||
INSERT INTO t1 SELECT DISTINCT ALL * FROM t1;
|
||
--error ER_WRONG_TABLE_NAME
|
||
REPLACE INTO `` SELECT * FROM ``;
|
||
DELETE QUICK FROM t1 WHERE i = 0;
|
||
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # Bug #21035515: PARSE_GCOL_EXPR SHOULD BE A KIND OF RESERVED WORD,
|
||
--echo # NOT A KEYWORD
|
||
|
||
SET @parse_gcol_expr = 1;
|
||
|
||
SELECT 1 AS parse_gcol_expr;
|
||
|
||
CREATE TABLE parse_gcol_expr (i INT);
|
||
DROP TABLE parse_gcol_expr;
|
||
|
||
DELIMITER |;
|
||
--echo # parse_gcol_expr can't be a label:
|
||
--error ER_PARSE_ERROR
|
||
CREATE PROCEDURE p1()
|
||
BEGIN
|
||
parse_gcol_expr: LOOP
|
||
SELECT 1;
|
||
END LOOP label1;
|
||
END|
|
||
DELIMITER ;|
|
||
|
||
--echo # PARSE_GCOL_EXPR is not a valid statement:
|
||
--error ER_PARSE_ERROR
|
||
PARSE_GCOL_EXPR (1);
|
||
|
||
--echo #
|
||
--echo # Bug #17400320 ALGORITHM= IS NOT SUPPORTED FOR ALTER TABLE WITH <PARTITION_OPTIONS>
|
||
--echo #
|
||
|
||
# Test some variant of dummy ALTER TABLE statements.
|
||
|
||
CREATE TABLE t1 (x INT PRIMARY KEY);
|
||
ALTER TABLE t1;
|
||
ALTER TABLE t1 ALGORITHM=DEFAULT;
|
||
ALTER TABLE t1 ALGORITHM=COPY;
|
||
ALTER TABLE t1 ALGORITHM=INPLACE;
|
||
ALTER TABLE t1 LOCK=DEFAULT;
|
||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||
ALTER TABLE t1 LOCK=NONE;
|
||
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
||
ALTER TABLE t1 LOCK=SHARED;
|
||
ALTER TABLE t1 LOCK=EXCLUSIVE;
|
||
ALTER TABLE t1 LOCK=SHARED, ALGORITHM=COPY,
|
||
LOCK=NONE, ALGORITHM=DEFAULT,
|
||
LOCK=EXCLUSIVE, ALGORITHM=INPLACE;
|
||
--error ER_WRONG_USAGE
|
||
ALTER TABLE t1 WITH VALIDATION;
|
||
--error ER_WRONG_USAGE
|
||
ALTER TABLE t1 WITHOUT VALIDATION;
|
||
--error ER_WRONG_USAGE
|
||
ALTER TABLE t1 LOCK=SHARED, WITH VALIDATION, ALGORITHM=COPY,
|
||
LOCK=EXCLUSIVE, WITHOUT VALIDATION, ALGORITHM=INPLACE;
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # WL#8662: Deprecate "Delphi style" column and table syntax
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (.i INT);
|
||
CREATE TABLE .t2 (i INT);
|
||
SELECT .t1.i FROM t1;
|
||
|
||
DROP TABLE t1, t2;
|
||
|
||
--echo #
|
||
|
||
--echo
|
||
--echo Bug #27714748: @@PARSER_MAX_MEM_SIZE DOES NOT WORK FOR ROUTINES
|
||
--echo
|
||
|
||
SET parser_max_mem_size = 10000000; # minimum allowed value
|
||
--let $s = `SELECT REPEAT('x', @@parser_max_mem_size)`
|
||
--disable_query_log
|
||
--error ER_CAPACITY_EXCEEDED
|
||
--eval CREATE PROCEDURE p() SELECT 1 FROM (SELECT '$s') a
|
||
--enable_query_log
|
||
SET parser_max_mem_size = default;
|