fix create outline with error -4016
This commit is contained in:
		 yishenglanlingzui
					yishenglanlingzui
				
			
				
					committed by
					
						 ob-robot
						ob-robot
					
				
			
			
				
	
			
			
			 ob-robot
						ob-robot
					
				
			
						parent
						
							dcedfcf34b
						
					
				
				
					commit
					a12d26b9d6
				
			| @ -105,7 +105,7 @@ ObFastParserBase::ObFastParserBase( | |||||||
|   tmp_buf_(nullptr), tmp_buf_len_(0), last_escape_check_pos_(0), |   tmp_buf_(nullptr), tmp_buf_len_(0), last_escape_check_pos_(0), | ||||||
|   param_node_list_(nullptr), tail_param_node_(nullptr), |   param_node_list_(nullptr), tail_param_node_(nullptr), | ||||||
|   cur_token_type_(INVALID_TOKEN), allocator_(allocator), |   cur_token_type_(INVALID_TOKEN), allocator_(allocator), | ||||||
|   get_insert_(false), values_token_pos_(0), |   found_insert_status_(NOT_FOUND_INSERT_TOKEN), values_token_pos_(0), | ||||||
|   parse_next_token_func_(nullptr), process_idf_func_(nullptr) |   parse_next_token_func_(nullptr), process_idf_func_(nullptr) | ||||||
| { | { | ||||||
| 	question_mark_ctx_.count_ = 0; | 	question_mark_ctx_.count_ = 0; | ||||||
| @ -154,7 +154,9 @@ int ObFastParserBase::parse(const ObString &stmt, | |||||||
|     no_param_sql_len = no_param_sql_len_; |     no_param_sql_len = no_param_sql_len_; | ||||||
|     param_list = param_node_list_; |     param_list = param_node_list_; | ||||||
|     param_num = param_num_; |     param_num = param_num_; | ||||||
|     values_token_pos = values_token_pos_; |     if (found_insert_status_ == FOUND_INSERT_TOKEN_ONCE) { | ||||||
|  |       values_token_pos = values_token_pos_; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| @ -772,9 +774,11 @@ int ObFastParserBase::process_insert_or_replace(const char *str, const int64_t s | |||||||
|     raw_sql_.scan(size); |     raw_sql_.scan(size); | ||||||
|     if (OB_FAIL(process_hint())) { |     if (OB_FAIL(process_hint())) { | ||||||
|       LOG_WARN("failed to process hint", K(ret), K(raw_sql_.to_string()), K_(raw_sql_.cur_pos)); |       LOG_WARN("failed to process hint", K(ret), K(raw_sql_.to_string()), K_(raw_sql_.cur_pos)); | ||||||
|     } else { |     } else if (found_insert_status_ == NOT_FOUND_INSERT_TOKEN) { | ||||||
|       // 说明是insert token |       // 说明是insert token | ||||||
|       get_insert_ = true; |       found_insert_status_ = FOUND_INSERT_TOKEN_ONCE; | ||||||
|  |     } else if (found_insert_status_ == FOUND_INSERT_TOKEN_ONCE) { | ||||||
|  |       found_insert_status_ = INVALID_TOKEN_STATUS; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   return ret; |   return ret; | ||||||
| @ -2517,7 +2521,7 @@ int ObFastParserMysql::process_identifier_begin_with_n() | |||||||
| int ObFastParserMysql::process_values(const char *str) | int ObFastParserMysql::process_values(const char *str) | ||||||
| { | { | ||||||
|   int ret = OB_SUCCESS; |   int ret = OB_SUCCESS; | ||||||
|   if (get_insert_) { |   if (found_insert_status_ == FOUND_INSERT_TOKEN_ONCE) { | ||||||
|     if (!is_oracle_mode_) { |     if (!is_oracle_mode_) { | ||||||
|       // mysql support: insert ... values / value (xx, ...); |       // mysql support: insert ... values / value (xx, ...); | ||||||
|       if (CHECK_EQ_STRNCASECMP("alues", 5)) { |       if (CHECK_EQ_STRNCASECMP("alues", 5)) { | ||||||
| @ -2977,7 +2981,7 @@ int ObFastParserOracle::process_identifier_begin_with_n() | |||||||
| int ObFastParserOracle::process_values(const char *str) | int ObFastParserOracle::process_values(const char *str) | ||||||
| { | { | ||||||
|   int ret = OB_SUCCESS; |   int ret = OB_SUCCESS; | ||||||
|   if (get_insert_) { |   if (found_insert_status_ == FOUND_INSERT_TOKEN_ONCE) { | ||||||
|     if (is_oracle_mode_) { |     if (is_oracle_mode_) { | ||||||
|       if (CHECK_EQ_STRNCASECMP("alues", 5)) { |       if (CHECK_EQ_STRNCASECMP("alues", 5)) { | ||||||
|         values_token_pos_ = raw_sql_.cur_pos_; |         values_token_pos_ = raw_sql_.cur_pos_; | ||||||
|  | |||||||
| @ -618,6 +618,12 @@ protected: | |||||||
| 	bool skip_space(ObRawSql &raw_sql); | 	bool skip_space(ObRawSql &raw_sql); | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|  |   enum FoundInsertTokenStatus | ||||||
|  |   { | ||||||
|  |     NOT_FOUND_INSERT_TOKEN, | ||||||
|  |     FOUND_INSERT_TOKEN_ONCE, // find one insert token | ||||||
|  |     INVALID_TOKEN_STATUS,  // find insert token more than one time | ||||||
|  |   }; | ||||||
| 	ObRawSql raw_sql_; | 	ObRawSql raw_sql_; | ||||||
| 	char *no_param_sql_; | 	char *no_param_sql_; | ||||||
| 	int64_t no_param_sql_len_; | 	int64_t no_param_sql_len_; | ||||||
| @ -639,7 +645,7 @@ protected: | |||||||
| 	common::ObIAllocator &allocator_; | 	common::ObIAllocator &allocator_; | ||||||
| 	common::ObCharsetType charset_type_; | 	common::ObCharsetType charset_type_; | ||||||
| 	const ObCharsetInfo *charset_info_; | 	const ObCharsetInfo *charset_info_; | ||||||
| 	bool get_insert_; | 	FoundInsertTokenStatus found_insert_status_; | ||||||
| 	int64_t values_token_pos_; | 	int64_t values_token_pos_; | ||||||
| 	ParseNextTokenFunc parse_next_token_func_; | 	ParseNextTokenFunc parse_next_token_func_; | ||||||
| 	ProcessIdfFunc process_idf_func_; | 	ProcessIdfFunc process_idf_func_; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user