fix handling invalid character in identifier
This commit is contained in:
		| @ -26,11 +26,11 @@ using namespace oceanbase::common; | ||||
|  | ||||
| ObParser::ObParser(common::ObIAllocator &allocator, | ||||
|                    ObSQLMode mode, | ||||
|                    ObCollationType conn_collation, | ||||
|                    ObCharsets4Parser charsets4parser, | ||||
|                    QuestionMarkDefNameCtx *ctx) | ||||
|     :allocator_(&allocator), | ||||
|      sql_mode_(mode), | ||||
|      connection_collation_(conn_collation), | ||||
|      charsets4parser_(charsets4parser), | ||||
|      def_name_ctx_(ctx) | ||||
| {} | ||||
|  | ||||
| @ -1026,8 +1026,8 @@ int ObParser::parse(const ObString &query, | ||||
|   parse_result.is_dbms_sql_ = (DBMS_SQL_MODE == parse_mode); | ||||
|   parse_result.is_for_udr_ = (UDR_SQL_MODE == parse_mode); | ||||
|   parse_result.is_batched_multi_enabled_split_ = is_batched_multi_stmt_split_on; | ||||
|   parse_result.is_not_utf8_connection_ = ObCharset::is_valid_collation(connection_collation_) ? | ||||
|         (ObCharset::charset_type_by_coll(connection_collation_) != CHARSET_UTF8MB4) : false; | ||||
|   parse_result.is_not_utf8_connection_ = ObCharset::is_valid_collation(charsets4parser_.string_collation_) ? | ||||
|         (ObCharset::charset_type_by_coll(charsets4parser_.string_collation_) != CHARSET_UTF8MB4) : false; | ||||
|   parse_result.malloc_pool_ = allocator_; | ||||
|   if (lib::is_oracle_mode()) { | ||||
|     parse_result.sql_mode_ = sql_mode_ | SMO_ORACLE; | ||||
| @ -1038,8 +1038,10 @@ int ObParser::parse(const ObString &query, | ||||
|                          || FP_PARAMERIZE_AND_FILTER_HINT_MODE == parse_mode); | ||||
|   parse_result.minus_ctx_.pos_ = -1; | ||||
|   parse_result.minus_ctx_.raw_sql_offset_ = -1; | ||||
|   parse_result.charset_info_ = ObCharset::get_charset(connection_collation_); | ||||
|   parse_result.connection_collation_ = connection_collation_; | ||||
|   parse_result.charset_info_ = ObCharset::get_charset(charsets4parser_.string_collation_); | ||||
|   parse_result.charset_info_oracle_db_ = ObCharset::is_valid_collation(charsets4parser_.nls_collation_) ? | ||||
|         ObCharset::get_charset(charsets4parser_.nls_collation_) : NULL; | ||||
|   parse_result.connection_collation_ = charsets4parser_.string_collation_; | ||||
|   parse_result.mysql_compatible_comment_ = false; | ||||
|   parse_result.enable_compatible_comment_ = true; | ||||
|   if (nullptr != def_name_ctx_) { | ||||
| @ -1086,10 +1088,10 @@ int ObParser::parse(const ObString &query, | ||||
|   if (OB_SUCC(ret) && OB_ISNULL(parse_result.charset_info_)) { | ||||
|     ret = OB_ERR_UNEXPECTED; | ||||
|     LOG_WARN("charset info is null", K(ret), | ||||
|              "connection charset", ObCharset::charset_name(connection_collation_)); | ||||
|              "connection charset", ObCharset::charset_name(charsets4parser_.string_collation_)); | ||||
|   } else { | ||||
|     LOG_DEBUG("check parse_result param", | ||||
|               "connection charset", ObCharset::charset_name(connection_collation_)); | ||||
|               "connection charset", ObCharset::charset_name(charsets4parser_.string_collation_)); | ||||
|   } | ||||
|   if (OB_SUCC(ret)) { | ||||
|     bool is_create_func = false; | ||||
| @ -1122,7 +1124,7 @@ int ObParser::parse(const ObString &query, | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       ObPLParser pl_parser(*(ObIAllocator*)(parse_result.malloc_pool_), connection_collation_, sql_mode_); | ||||
|       ObPLParser pl_parser(*(ObIAllocator*)(parse_result.malloc_pool_), charsets4parser_, sql_mode_); | ||||
|       if (OB_FAIL(pl_parser.parse(stmt, stmt, parse_result, is_pl_inner_parse))) { | ||||
|         LOG_WARN("failed to parse stmt as pl", K(stmt), K(ret)); | ||||
|         // may create ddl func, try it. | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 wjhh2008
					wjhh2008