bugfix: remove semicolon in mysql mode

This commit is contained in:
dontknow9179
2024-02-05 02:12:52 +00:00
committed by ob-robot
parent 70aa6d5461
commit 3bf89ff66b

View File

@ -630,6 +630,7 @@ int ObParser::split_multiple_stmt(const ObString &stmt,
ParseMode parse_mode = MULTI_MODE;
int64_t offset = 0;
int64_t remain = stmt.length();
int64_t semicolon_offset = INT64_MIN;
parse_stat.reset();
// 绕过parser对空查询处理不友好的方法:自己把末尾空格去掉
@ -640,12 +641,16 @@ int ObParser::split_multiple_stmt(const ObString &stmt,
if (remain > 0 && '\0' == stmt[remain - 1]) {
--remain;
}
//再删除末尾空格
//再删除末尾空格和分号
while (remain > 0 && ((ISSPACE(stmt[remain - 1])) ||
(lib::is_mysql_mode() && is_prepare && stmt[remain - 1] == ';'))) {
(lib::is_mysql_mode() && stmt[remain - 1] == ';'))) {
if (stmt[remain - 1] == ';') {
semicolon_offset = remain - 1;
}
--remain;
}
//留下最多一个分号
remain = max(remain, semicolon_offset + 1);
// 对于空语句的特殊处理
if (OB_UNLIKELY(0 >= remain)) {
ObString part; // 空串