bugfix: remove semicolon in mysql mode
This commit is contained in:
		| @ -630,6 +630,7 @@ int ObParser::split_multiple_stmt(const ObString &stmt, | |||||||
|     ParseMode parse_mode = MULTI_MODE; |     ParseMode parse_mode = MULTI_MODE; | ||||||
|     int64_t offset = 0; |     int64_t offset = 0; | ||||||
|     int64_t remain = stmt.length(); |     int64_t remain = stmt.length(); | ||||||
|  |     int64_t semicolon_offset = INT64_MIN; | ||||||
|  |  | ||||||
|     parse_stat.reset(); |     parse_stat.reset(); | ||||||
|     // 绕过parser对空查询处理不友好的方法:自己把末尾空格去掉 |     // 绕过parser对空查询处理不友好的方法:自己把末尾空格去掉 | ||||||
| @ -640,12 +641,16 @@ int ObParser::split_multiple_stmt(const ObString &stmt, | |||||||
|     if (remain > 0 && '\0' == stmt[remain - 1]) { |     if (remain > 0 && '\0' == stmt[remain - 1]) { | ||||||
|       --remain; |       --remain; | ||||||
|     } |     } | ||||||
|     //再删除末尾空格 |     //再删除末尾空格和分号 | ||||||
|     while (remain > 0 && ((ISSPACE(stmt[remain - 1])) || |     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; | ||||||
|     } |     } | ||||||
|  |     //留下最多一个分号 | ||||||
|  |     remain = max(remain, semicolon_offset + 1); | ||||||
|     // 对于空语句的特殊处理 |     // 对于空语句的特殊处理 | ||||||
|     if (OB_UNLIKELY(0 >= remain)) { |     if (OB_UNLIKELY(0 >= remain)) { | ||||||
|       ObString part; // 空串 |       ObString part; // 空串 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 dontknow9179
					dontknow9179