[CP] fix set wrong column flag for value desc
This commit is contained in:
@ -954,6 +954,7 @@ int ObInsertResolver::mock_values_column_ref(const ObColumnRefRawExpr *column_re
|
|||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObInsertStmt *stmt = get_insert_stmt();
|
ObInsertStmt *stmt = get_insert_stmt();
|
||||||
ObColumnRefRawExpr *value_desc = NULL;
|
ObColumnRefRawExpr *value_desc = NULL;
|
||||||
|
ObColumnRefRawExpr *base_column_ref = const_cast<ObColumnRefRawExpr*>(column_ref);
|
||||||
if (OB_ISNULL(column_ref) || OB_ISNULL(stmt) || OB_ISNULL(params_.expr_factory_)) {
|
if (OB_ISNULL(column_ref) || OB_ISNULL(stmt) || OB_ISNULL(params_.expr_factory_)) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid argument", K(column_ref), K(stmt), KP_(params_.expr_factory));
|
LOG_WARN("invalid argument", K(column_ref), K(stmt), KP_(params_.expr_factory));
|
||||||
@ -976,9 +977,23 @@ int ObInsertResolver::mock_values_column_ref(const ObColumnRefRawExpr *column_re
|
|||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN(("value desc is null"));
|
LOG_WARN(("value desc is null"));
|
||||||
} else {
|
} else {
|
||||||
|
if (OB_FAIL(ObTransformUtils::get_base_column(stmt, base_column_ref))) {
|
||||||
|
// may be invalid updatable view, will be handled later.
|
||||||
|
ret = OB_SUCCESS;
|
||||||
|
base_column_ref = const_cast<ObColumnRefRawExpr*>(column_ref);
|
||||||
|
LOG_WARN("failed to get base column", K(ret));
|
||||||
|
}
|
||||||
value_desc->set_result_type(column_ref->get_result_type());
|
value_desc->set_result_type(column_ref->get_result_type());
|
||||||
value_desc->set_result_flag(column_ref->get_result_flag());
|
value_desc->set_result_flag(column_ref->get_result_flag());
|
||||||
value_desc->set_column_flags(column_ref->get_column_flags());
|
value_desc->set_column_flags(column_ref->get_column_flags());
|
||||||
|
if (base_column_ref != column_ref) {
|
||||||
|
if (base_column_ref->is_table_part_key_column()) {
|
||||||
|
value_desc->set_table_part_key_column();
|
||||||
|
}
|
||||||
|
if (base_column_ref->is_table_part_key_org_column()) {
|
||||||
|
value_desc->set_table_part_key_org_column();
|
||||||
|
}
|
||||||
|
}
|
||||||
value_desc->set_dependant_expr(const_cast<ObRawExpr *>(column_ref->get_dependant_expr()));
|
value_desc->set_dependant_expr(const_cast<ObRawExpr *>(column_ref->get_dependant_expr()));
|
||||||
value_desc->set_ref_id(stmt->get_insert_table_info().table_id_, column_ref->get_column_id());
|
value_desc->set_ref_id(stmt->get_insert_table_info().table_id_, column_ref->get_column_id());
|
||||||
value_desc->set_column_attr(ObString::make_string(OB_VALUES), column_ref->get_column_name());
|
value_desc->set_column_attr(ObString::make_string(OB_VALUES), column_ref->get_column_name());
|
||||||
|
|||||||
@ -2631,6 +2631,8 @@ public:
|
|||||||
inline bool has_table_alias_name() const { return column_flags_ & TABLE_ALIAS_NAME_FLAG; }
|
inline bool has_table_alias_name() const { return column_flags_ & TABLE_ALIAS_NAME_FLAG; }
|
||||||
void set_column_flags(uint64_t column_flags) { column_flags_ = column_flags; }
|
void set_column_flags(uint64_t column_flags) { column_flags_ = column_flags; }
|
||||||
void set_table_alias_name() { column_flags_ |= TABLE_ALIAS_NAME_FLAG; }
|
void set_table_alias_name() { column_flags_ |= TABLE_ALIAS_NAME_FLAG; }
|
||||||
|
void set_table_part_key_column() { column_flags_ |= TABLE_PART_KEY_COLUMN_FLAG; }
|
||||||
|
void set_table_part_key_org_column() { column_flags_ |= TABLE_PART_KEY_COLUMN_ORG_FLAG; }
|
||||||
inline uint64_t get_column_flags() const { return column_flags_; }
|
inline uint64_t get_column_flags() const { return column_flags_; }
|
||||||
inline const ObRawExpr *get_dependant_expr() const { return dependant_expr_; }
|
inline const ObRawExpr *get_dependant_expr() const { return dependant_expr_; }
|
||||||
inline ObRawExpr *&get_dependant_expr() { return dependant_expr_; }
|
inline ObRawExpr *&get_dependant_expr() { return dependant_expr_; }
|
||||||
|
|||||||
Reference in New Issue
Block a user