Manual merge with mysql-5.0-bugteam
This commit is contained in:
commit
b93fcb9b0e
@ -1,4 +1,4 @@
|
|||||||
--require r/have_archive.require
|
--require r/have_archive.require
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
show variables like "have_archive";
|
show variables like 'have_archive';
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_bdb.require
|
-- require r/have_bdb.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_bdb";
|
show variables like 'have_bdb';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_big5.require
|
-- require r/have_big5.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "big5_chinese_ci";
|
show collation like 'big5_chinese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_blackhole.require
|
-- require r/have_blackhole.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_blackhole_engine";
|
show variables like 'have_blackhole_engine';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--require r/case_sensitive_file_system.require
|
--require r/case_sensitive_file_system.require
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
show variables like "lower_case_file_system";
|
show variables like 'lower_case_file_system';
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_compress.require
|
-- require r/have_compress.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_compress";
|
show variables like 'have_compress';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_cp1250_ch.require
|
-- require r/have_cp1250_ch.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "cp1250_czech_cs";
|
show collation like 'cp1250_czech_cs';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_cp932.require
|
-- require r/have_cp932.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "cp932_japanese_ci";
|
show collation like 'cp932_japanese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_crypt.require
|
-- require r/have_crypt.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_crypt";
|
show variables like 'have_crypt';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_csv.require
|
-- require r/have_csv.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_csv";
|
show variables like 'have_csv';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_eucjpms.require
|
-- require r/have_eucjpms.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "eucjpms_japanese_ci";
|
show collation like 'eucjpms_japanese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_euckr.require
|
-- require r/have_euckr.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "euckr_korean_ci";
|
show collation like 'euckr_korean_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_exampledb.require
|
-- require r/have_exampledb.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_example_engine";
|
show variables like 'have_example_engine';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_federated_db.require
|
-- require r/have_federated_db.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_federated_engine";
|
show variables like 'have_federated_engine';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_gb2312.require
|
-- require r/have_gb2312.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "gb2312_chinese_ci";
|
show collation like 'gb2312_chinese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_gbk.require
|
-- require r/have_gbk.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "gbk_chinese_ci";
|
show collation like 'gbk_chinese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--require r/have_geometry.require
|
--require r/have_geometry.require
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
show variables like "have_geometry";
|
show variables like 'have_geometry';
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_innodb.require
|
-- require r/have_innodb.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_innodb";
|
show variables like 'have_innodb';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_latin2_ch.require
|
-- require r/have_latin2_ch.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "latin2_czech_cs";
|
show collation like 'latin2_czech_cs';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_log_bin.require
|
-- require r/have_log_bin.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "log_bin";
|
show variables like 'log_bin';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--require r/lowercase0.require
|
--require r/lowercase0.require
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
show variables like "lower_case_%";
|
show variables like 'lower_case_%';
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -10,7 +10,7 @@ drop table if exists t1, t2;
|
|||||||
--enable_warnings
|
--enable_warnings
|
||||||
flush tables;
|
flush tables;
|
||||||
--require r/have_ndb.require
|
--require r/have_ndb.require
|
||||||
show variables like "have_ndbcluster";
|
show variables like 'have_ndbcluster';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
|
||||||
# Check that server2 has NDB support
|
# Check that server2 has NDB support
|
||||||
@ -21,7 +21,7 @@ drop table if exists t1, t2;
|
|||||||
--enable_warnings
|
--enable_warnings
|
||||||
flush tables;
|
flush tables;
|
||||||
--require r/have_ndb.require
|
--require r/have_ndb.require
|
||||||
show variables like "have_ndbcluster";
|
show variables like 'have_ndbcluster';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
|
||||||
# Set the default connection to 'server1'
|
# Set the default connection to 'server1'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Check that server is compiled and started with support for NDB
|
# Check that server is compiled and started with support for NDB
|
||||||
-- require r/have_ndb.require
|
-- require r/have_ndb.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_ndbcluster";
|
show variables like 'have_ndbcluster';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
|
||||||
# Check that NDB is installed and known to be working
|
# Check that NDB is installed and known to be working
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
# of query cache hits
|
# of query cache hits
|
||||||
-- disable_ps_protocol
|
-- disable_ps_protocol
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_query_cache";
|
show variables like 'have_query_cache';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_sjis.require
|
-- require r/have_sjis.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "sjis_japanese_ci";
|
show collation like 'sjis_japanese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_ssl.require
|
-- require r/have_ssl.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_ssl";
|
show variables like 'have_ssl';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_tis620.require
|
-- require r/have_tis620.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "tis620_thai_ci";
|
show collation like 'tis620_thai_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_ucs2.require
|
-- require r/have_ucs2.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "ucs2_general_ci";
|
show collation like 'ucs2_general_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
--require r/have_udf.require
|
--require r/have_udf.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show variables like "have_dynamic_loading";
|
show variables like 'have_dynamic_loading';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- require r/have_ujis.require
|
-- require r/have_ujis.require
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
show collation like "ujis_japanese_ci";
|
show collation like 'ujis_japanese_ci';
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
|
@ -35,7 +35,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||||||
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;";
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;";
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*";
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*";
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';*' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*' at line 1
|
||||||
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';";
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';";
|
||||||
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 '/*!98765' AND b = 'bar'' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*!98765' AND b = 'bar'' at line 1
|
||||||
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*";
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*";
|
||||||
|
68
mysql-test/r/parser.result
Normal file
68
mysql-test/r/parser.result
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
DROP PROCEDURE IF EXISTS p26030;
|
||||||
|
select "non terminated"$$
|
||||||
|
non terminated
|
||||||
|
non terminated
|
||||||
|
select "terminated";$$
|
||||||
|
terminated
|
||||||
|
terminated
|
||||||
|
select "non terminated, space" $$
|
||||||
|
non terminated, space
|
||||||
|
non terminated, space
|
||||||
|
select "terminated, space"; $$
|
||||||
|
terminated, space
|
||||||
|
terminated, space
|
||||||
|
select "non terminated, comment" /* comment */$$
|
||||||
|
non terminated, comment
|
||||||
|
non terminated, comment
|
||||||
|
select "terminated, comment"; /* comment */$$
|
||||||
|
terminated, comment
|
||||||
|
terminated, comment
|
||||||
|
select "stmt 1";select "stmt 2 non terminated"$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 non terminated
|
||||||
|
stmt 2 non terminated
|
||||||
|
select "stmt 1";select "stmt 2 terminated";$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 terminated
|
||||||
|
stmt 2 terminated
|
||||||
|
select "stmt 1";select "stmt 2 non terminated, space" $$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 non terminated, space
|
||||||
|
stmt 2 non terminated, space
|
||||||
|
select "stmt 1";select "stmt 2 terminated, space"; $$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 terminated, space
|
||||||
|
stmt 2 terminated, space
|
||||||
|
select "stmt 1";select "stmt 2 non terminated, comment" /* comment */$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 non terminated, comment
|
||||||
|
stmt 2 non terminated, comment
|
||||||
|
select "stmt 1";select "stmt 2 terminated, comment"; /* comment */$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
stmt 2 terminated, comment
|
||||||
|
stmt 2 terminated, comment
|
||||||
|
select "stmt 1"; select "space, stmt 2"$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
space, stmt 2
|
||||||
|
space, stmt 2
|
||||||
|
select "stmt 1";/* comment */select "comment, stmt 2"$$
|
||||||
|
stmt 1
|
||||||
|
stmt 1
|
||||||
|
comment, stmt 2
|
||||||
|
comment, stmt 2
|
||||||
|
DROP PROCEDURE IF EXISTS p26030; CREATE PROCEDURE p26030() BEGIN SELECT 1; END; CALL p26030()
|
||||||
|
$$
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP PROCEDURE IF EXISTS p26030; CREATE PROCEDURE p26030() SELECT 1; CALL p26030()
|
||||||
|
$$
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP PROCEDURE p26030;
|
@ -85,9 +85,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
prepare stmt6 from 'select 1; select2';
|
prepare stmt6 from 'select 1; select2';
|
||||||
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 '; select2' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select2' at line 1
|
||||||
prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
||||||
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 '; select2' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select2' at line 1
|
||||||
explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 'insert into t1 values (5,"five"); select2'' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 'insert into t1 values (5,"five"); select2'' at line 1
|
||||||
create table t2
|
create table t2
|
||||||
|
@ -10,11 +10,6 @@
|
|||||||
# 2008-06-06 mleich Create this this variant for the embedded server.
|
# 2008-06-06 mleich Create this this variant for the embedded server.
|
||||||
#
|
#
|
||||||
|
|
||||||
let $value= query_get_value(SHOW VARIABLES LIKE 'version_compile_os',Value,1);
|
|
||||||
if (`SELECT '$value' LIKE 'apple-darwin%'`)
|
|
||||||
{
|
|
||||||
skip Bug#37380 Test funcs_1.is_columns_myisam_embedded fails on OS X;
|
|
||||||
}
|
|
||||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
||||||
{
|
{
|
||||||
--skip Test requires: embedded server
|
--skip Test requires: embedded server
|
||||||
|
59
mysql-test/t/parser.test
Normal file
59
mysql-test/t/parser.test
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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;
|
||||||
|
|
||||||
|
#============================================================================r
|
||||||
|
# SYNTACTIC PARSER (bison)
|
||||||
|
#=============================================================================
|
||||||
|
|
@ -1015,10 +1015,12 @@ static uint my_get_system_windows_directory(char *buffer, uint size)
|
|||||||
|
|
||||||
static const char *my_get_module_parent(char *buf, size_t size)
|
static const char *my_get_module_parent(char *buf, size_t size)
|
||||||
{
|
{
|
||||||
|
char *last= NULL;
|
||||||
|
char *end;
|
||||||
if (!GetModuleFileName(NULL, buf, size))
|
if (!GetModuleFileName(NULL, buf, size))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
end= strend(buf);
|
||||||
|
|
||||||
char *last= NULL, *end= strend(buf);
|
|
||||||
/*
|
/*
|
||||||
Look for the second-to-last \ in the filename, but hang on
|
Look for the second-to-last \ in the filename, but hang on
|
||||||
to a pointer after the last \ in case we're in the root of
|
to a pointer after the last \ in case we're in the root of
|
||||||
|
@ -117,7 +117,6 @@ public:
|
|||||||
create_field m_return_field_def; /* This is used for FUNCTIONs only. */
|
create_field m_return_field_def; /* This is used for FUNCTIONs only. */
|
||||||
|
|
||||||
const char *m_tmp_query; // Temporary pointer to sub query string
|
const char *m_tmp_query; // Temporary pointer to sub query string
|
||||||
uint m_old_cmq; // Old CLIENT_MULTI_QUERIES value
|
|
||||||
st_sp_chistics *m_chistics;
|
st_sp_chistics *m_chistics;
|
||||||
ulong m_sql_mode; // For SHOW CREATE and execution
|
ulong m_sql_mode; // For SHOW CREATE and execution
|
||||||
LEX_STRING m_qname; // db.name
|
LEX_STRING m_qname; // db.name
|
||||||
|
@ -1010,21 +1010,8 @@ int MYSQLlex(void *arg, void *yythd)
|
|||||||
yySkip();
|
yySkip();
|
||||||
return (SET_VAR);
|
return (SET_VAR);
|
||||||
case MY_LEX_SEMICOLON: // optional line terminator
|
case MY_LEX_SEMICOLON: // optional line terminator
|
||||||
if (yyPeek())
|
state= MY_LEX_CHAR; // Return ';'
|
||||||
{
|
break;
|
||||||
if ((thd->client_capabilities & CLIENT_MULTI_STATEMENTS) &&
|
|
||||||
!lip->stmt_prepare_mode)
|
|
||||||
{
|
|
||||||
lex->safe_to_cache_query= 0;
|
|
||||||
lip->found_semicolon= lip->ptr;
|
|
||||||
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
|
|
||||||
lip->next_state= MY_LEX_END;
|
|
||||||
return (END_OF_INPUT);
|
|
||||||
}
|
|
||||||
state= MY_LEX_CHAR; // Return ';'
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* fall true */
|
|
||||||
case MY_LEX_EOL:
|
case MY_LEX_EOL:
|
||||||
if (lip->ptr >= lip->end_of_query)
|
if (lip->ptr >= lip->end_of_query)
|
||||||
{
|
{
|
||||||
@ -1039,7 +1026,7 @@ int MYSQLlex(void *arg, void *yythd)
|
|||||||
case MY_LEX_END:
|
case MY_LEX_END:
|
||||||
lip->next_state=MY_LEX_END;
|
lip->next_state=MY_LEX_END;
|
||||||
return(0); // We found end of input last time
|
return(0); // We found end of input last time
|
||||||
|
|
||||||
/* Actually real shouldn't start with . but allow them anyhow */
|
/* Actually real shouldn't start with . but allow them anyhow */
|
||||||
case MY_LEX_REAL_OR_POINT:
|
case MY_LEX_REAL_OR_POINT:
|
||||||
if (my_isdigit(cs,yyPeek()))
|
if (my_isdigit(cs,yyPeek()))
|
||||||
|
@ -6169,6 +6169,11 @@ void mysql_parse(THD *thd, const char *inBuf, uint length,
|
|||||||
(thd->query_length= (ulong)(lip.found_semicolon - thd->query)))
|
(thd->query_length= (ulong)(lip.found_semicolon - thd->query)))
|
||||||
thd->query_length--;
|
thd->query_length--;
|
||||||
/* Actually execute the query */
|
/* Actually execute the query */
|
||||||
|
if (*found_semicolon)
|
||||||
|
{
|
||||||
|
lex->safe_to_cache_query= 0;
|
||||||
|
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
|
||||||
|
}
|
||||||
lex->set_trg_event_type_for_tables();
|
lex->set_trg_event_type_for_tables();
|
||||||
mysql_execute_command(thd);
|
mysql_execute_command(thd);
|
||||||
query_cache_end_of_result(thd);
|
query_cache_end_of_result(thd);
|
||||||
|
@ -1203,21 +1203,54 @@ END_OF_INPUT
|
|||||||
|
|
||||||
|
|
||||||
query:
|
query:
|
||||||
END_OF_INPUT
|
END_OF_INPUT
|
||||||
{
|
{
|
||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
if (!thd->bootstrap &&
|
if (!thd->bootstrap &&
|
||||||
(!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT)))
|
(!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT)))
|
||||||
{
|
{
|
||||||
my_message(ER_EMPTY_QUERY, ER(ER_EMPTY_QUERY), MYF(0));
|
my_message(ER_EMPTY_QUERY, ER(ER_EMPTY_QUERY), MYF(0));
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
else
|
thd->lex->sql_command= SQLCOM_EMPTY_QUERY;
|
||||||
{
|
thd->m_lip->found_semicolon= NULL;
|
||||||
thd->lex->sql_command= SQLCOM_EMPTY_QUERY;
|
}
|
||||||
}
|
| verb_clause
|
||||||
}
|
{
|
||||||
| verb_clause END_OF_INPUT {};
|
Lex_input_stream *lip = YYTHD->m_lip;
|
||||||
|
|
||||||
|
if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) &&
|
||||||
|
! lip->stmt_prepare_mode &&
|
||||||
|
! (lip->ptr >= lip->end_of_query))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
We found a well formed query, and multi queries are allowed:
|
||||||
|
- force the parser to stop after the ';'
|
||||||
|
- mark the start of the next query for the next invocation
|
||||||
|
of the parser.
|
||||||
|
*/
|
||||||
|
lip->next_state= MY_LEX_END;
|
||||||
|
lip->found_semicolon= lip->ptr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Single query, terminated. */
|
||||||
|
lip->found_semicolon= NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
';'
|
||||||
|
opt_end_of_input
|
||||||
|
| verb_clause END_OF_INPUT
|
||||||
|
{
|
||||||
|
/* Single query, not terminated. */
|
||||||
|
YYTHD->m_lip->found_semicolon= NULL;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
opt_end_of_input:
|
||||||
|
/* empty */
|
||||||
|
| END_OF_INPUT
|
||||||
|
;
|
||||||
|
|
||||||
verb_clause:
|
verb_clause:
|
||||||
statement
|
statement
|
||||||
@ -9867,13 +9900,6 @@ trigger_tail:
|
|||||||
|
|
||||||
lex->sphead= sp;
|
lex->sphead= sp;
|
||||||
lex->spname= $3;
|
lex->spname= $3;
|
||||||
/*
|
|
||||||
We have to turn of CLIENT_MULTI_QUERIES while parsing a
|
|
||||||
stored procedure, otherwise yylex will chop it into pieces
|
|
||||||
at each ';'.
|
|
||||||
*/
|
|
||||||
sp->m_old_cmq= thd->client_capabilities & CLIENT_MULTI_QUERIES;
|
|
||||||
thd->client_capabilities &= ~CLIENT_MULTI_QUERIES;
|
|
||||||
|
|
||||||
bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics));
|
bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics));
|
||||||
lex->sphead->m_chistics= &lex->sp_chistics;
|
lex->sphead->m_chistics= &lex->sp_chistics;
|
||||||
@ -9888,9 +9914,6 @@ trigger_tail:
|
|||||||
|
|
||||||
lex->sql_command= SQLCOM_CREATE_TRIGGER;
|
lex->sql_command= SQLCOM_CREATE_TRIGGER;
|
||||||
sp->init_strings(YYTHD, lex);
|
sp->init_strings(YYTHD, lex);
|
||||||
/* Restore flag if it was cleared above */
|
|
||||||
if (sp->m_old_cmq)
|
|
||||||
YYTHD->client_capabilities |= CLIENT_MULTI_QUERIES;
|
|
||||||
sp->restore_thd_mem_root(YYTHD);
|
sp->restore_thd_mem_root(YYTHD);
|
||||||
|
|
||||||
if (sp->is_not_allowed_in_function("trigger"))
|
if (sp->is_not_allowed_in_function("trigger"))
|
||||||
@ -9968,13 +9991,6 @@ sf_tail:
|
|||||||
|
|
||||||
sp->m_type= TYPE_ENUM_FUNCTION;
|
sp->m_type= TYPE_ENUM_FUNCTION;
|
||||||
lex->sphead= sp;
|
lex->sphead= sp;
|
||||||
/*
|
|
||||||
* We have to turn of CLIENT_MULTI_QUERIES while parsing a
|
|
||||||
* stored procedure, otherwise yylex will chop it into pieces
|
|
||||||
* at each ';'.
|
|
||||||
*/
|
|
||||||
sp->m_old_cmq= thd->client_capabilities & CLIENT_MULTI_QUERIES;
|
|
||||||
thd->client_capabilities &= ~CLIENT_MULTI_QUERIES;
|
|
||||||
lex->sphead->m_param_begin= lip->tok_start+1;
|
lex->sphead->m_param_begin= lip->tok_start+1;
|
||||||
}
|
}
|
||||||
sp_fdparam_list /* $6 */
|
sp_fdparam_list /* $6 */
|
||||||
@ -10030,9 +10046,6 @@ sf_tail:
|
|||||||
my_error(ER_SP_NORETURN, MYF(0), sp->m_qname.str);
|
my_error(ER_SP_NORETURN, MYF(0), sp->m_qname.str);
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
/* Restore flag if it was cleared above */
|
|
||||||
if (sp->m_old_cmq)
|
|
||||||
YYTHD->client_capabilities |= CLIENT_MULTI_QUERIES;
|
|
||||||
sp->restore_thd_mem_root(YYTHD);
|
sp->restore_thd_mem_root(YYTHD);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -10062,13 +10075,6 @@ sp_tail:
|
|||||||
sp->init_sp_name(YYTHD, $3);
|
sp->init_sp_name(YYTHD, $3);
|
||||||
|
|
||||||
lex->sphead= sp;
|
lex->sphead= sp;
|
||||||
/*
|
|
||||||
* We have to turn of CLIENT_MULTI_QUERIES while parsing a
|
|
||||||
* stored procedure, otherwise yylex will chop it into pieces
|
|
||||||
* at each ';'.
|
|
||||||
*/
|
|
||||||
sp->m_old_cmq= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES;
|
|
||||||
YYTHD->client_capabilities &= (~CLIENT_MULTI_QUERIES);
|
|
||||||
}
|
}
|
||||||
'('
|
'('
|
||||||
{
|
{
|
||||||
@ -10104,9 +10110,6 @@ sp_tail:
|
|||||||
|
|
||||||
sp->init_strings(YYTHD, lex);
|
sp->init_strings(YYTHD, lex);
|
||||||
lex->sql_command= SQLCOM_CREATE_PROCEDURE;
|
lex->sql_command= SQLCOM_CREATE_PROCEDURE;
|
||||||
/* Restore flag if it was cleared above */
|
|
||||||
if (sp->m_old_cmq)
|
|
||||||
YYTHD->client_capabilities |= CLIENT_MULTI_QUERIES;
|
|
||||||
sp->restore_thd_mem_root(YYTHD);
|
sp->restore_thd_mem_root(YYTHD);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user