[CP] [OBCDC] fix udt main column not found when xml column is fast deleted
This commit is contained in:
@ -304,7 +304,6 @@ public:
|
|||||||
OB_INLINE uint64_t get_udt_set_id() const { return udt_set_id_; }
|
OB_INLINE uint64_t get_udt_set_id() const { return udt_set_id_; }
|
||||||
OB_INLINE uint64_t get_sub_data_type() const { return sub_type_; }
|
OB_INLINE uint64_t get_sub_data_type() const { return sub_type_; }
|
||||||
OB_INLINE bool is_udt_column() const { return udt_set_id_ > 0 && OB_INVALID_ID != udt_set_id_; }
|
OB_INLINE bool is_udt_column() const { return udt_set_id_ > 0 && OB_INVALID_ID != udt_set_id_; }
|
||||||
OB_INLINE bool is_udt_hidden_column() const { return is_udt_column() && is_hidden(); }
|
|
||||||
OB_INLINE bool is_xmltype() const {
|
OB_INLINE bool is_xmltype() const {
|
||||||
return is_udt_column()
|
return is_udt_column()
|
||||||
&& (((meta_type_.is_ext() || meta_type_.is_user_defined_sql_type()) && sub_type_ == T_OBJ_XML)
|
&& (((meta_type_.is_ext() || meta_type_.is_user_defined_sql_type()) && sub_type_ == T_OBJ_XML)
|
||||||
|
@ -181,7 +181,7 @@ int MutatorRow::parse_columns_(
|
|||||||
bool ignore_column = false;
|
bool ignore_column = false;
|
||||||
if (OB_NOT_NULL(tb_schema_info)) {
|
if (OB_NOT_NULL(tb_schema_info)) {
|
||||||
// for normal column which is not belong to some udt, is_usr_column is true and is_udt_column is false
|
// for normal column which is not belong to some udt, is_usr_column is true and is_udt_column is false
|
||||||
// for udt column
|
// for udt column that is not deleted
|
||||||
// if is main column of group, is_usr_column is true , is_udt_column is also true.
|
// if is main column of group, is_usr_column is true , is_udt_column is also true.
|
||||||
// if is hidden column of udt, is_usr_column is false, is_udt_column is true.
|
// if is hidden column of udt, is_usr_column is false, is_udt_column is true.
|
||||||
if (! (column_schema_info->is_usr_column() || column_schema_info->is_udt_column())) {
|
if (! (column_schema_info->is_usr_column() || column_schema_info->is_udt_column())) {
|
||||||
@ -190,6 +190,20 @@ int MutatorRow::parse_columns_(
|
|||||||
K(tenant_id), K(table_id), K(column_stored_idx), K(is_parse_new_col), K(column_schema_info));
|
K(tenant_id), K(table_id), K(column_stored_idx), K(is_parse_new_col), K(column_schema_info));
|
||||||
|
|
||||||
ignore_column = true;
|
ignore_column = true;
|
||||||
|
// when udt is fast deleted, main column is marked as hidden and is_usr_column is false, but not real delete.
|
||||||
|
// so need ignore all column of udt when main column of udt is_usr_column is false
|
||||||
|
} else if (column_schema_info->is_udt_column()) {
|
||||||
|
ColumnSchemaInfo *udt_main_column_schema_info = nullptr;
|
||||||
|
if (OB_FAIL(tb_schema_info->get_main_column_of_udt(column_schema_info->get_udt_set_id(), udt_main_column_schema_info))) {
|
||||||
|
LOG_ERROR("get udt main column schema fail", KR(ret), K(tenant_id), K(table_id), K(column_stored_idx),
|
||||||
|
KPC(column_schema_info), KPC(tb_schema_info));
|
||||||
|
} else if (! udt_main_column_schema_info->is_usr_column()) {
|
||||||
|
ignore_column = true;
|
||||||
|
LOG_DEBUG("ignore udt column", K(tenant_id), K(table_id), K(column_stored_idx), KPC(column_schema_info));
|
||||||
|
} else {
|
||||||
|
ignore_column = false;
|
||||||
|
LOG_DEBUG("not ignore udt column", K(tenant_id), K(table_id), K(column_stored_idx), KPC(column_schema_info));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ignore_column = false;
|
ignore_column = false;
|
||||||
}
|
}
|
||||||
|
@ -878,7 +878,7 @@ int TableSchemaInfo::add_udt_column_(ColumnSchemaInfo *column_info)
|
|||||||
|
|
||||||
// add
|
// add
|
||||||
if (OB_SUCC(ret) && OB_NOT_NULL(udt_schema_info)) {
|
if (OB_SUCC(ret) && OB_NOT_NULL(udt_schema_info)) {
|
||||||
if (column_info->is_hidden()) {
|
if (! column_info->is_udt_main_column()) {
|
||||||
if (OB_FAIL(udt_schema_info->add_hidden_column(column_info))) {
|
if (OB_FAIL(udt_schema_info->add_hidden_column(column_info))) {
|
||||||
LOG_ERROR("add hidden column info fail", KR(ret), K(column_info));
|
LOG_ERROR("add hidden column info fail", KR(ret), K(column_info));
|
||||||
}
|
}
|
||||||
@ -938,6 +938,9 @@ int TableSchemaInfo::get_main_column_of_udt(
|
|||||||
LOG_ERROR("get udt column schema fail", KR(ret), K(udt_set_id));
|
LOG_ERROR("get udt column schema fail", KR(ret), K(udt_set_id));
|
||||||
} else if (OB_FAIL(udt_schema_info->get_main_column(column_schema_info))) {
|
} else if (OB_FAIL(udt_schema_info->get_main_column(column_schema_info))) {
|
||||||
LOG_ERROR("get main column of udt fail", KR(ret), K(udt_set_id));
|
LOG_ERROR("get main column of udt fail", KR(ret), K(udt_set_id));
|
||||||
|
} else if (OB_ISNULL(column_schema_info)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_ERROR("main column is null", KR(ret), K(udt_set_id));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -116,8 +116,13 @@ public:
|
|||||||
|
|
||||||
inline void set_sub_data_type(const uint64_t sub_data_type) { sub_type_ = sub_data_type; }
|
inline void set_sub_data_type(const uint64_t sub_data_type) { sub_type_ = sub_data_type; }
|
||||||
inline uint64_t get_sub_data_type() const { return sub_type_; }
|
inline uint64_t get_sub_data_type() const { return sub_type_; }
|
||||||
inline bool is_udt_hidden_column() const { return is_udt_column() && is_hidden(); }
|
|
||||||
inline bool is_udt_main_column() const { return is_udt_column() && ! is_hidden(); }
|
// When fast column deletion occurs, the xml is marked as a hidden column instead of a true many deletion,
|
||||||
|
// and it is not possible to determine whether it is a udt main column based on is_hidden
|
||||||
|
// and currently, only xmltype is a udt type
|
||||||
|
// so it must be the udt main column when it is xmltype, whether it's a hidden column or not
|
||||||
|
// and there is no other udt type, so only need to determine whether it is a main column based on xmltype
|
||||||
|
inline bool is_udt_main_column() const { return is_xmltype(); }
|
||||||
inline bool is_xmltype() const {
|
inline bool is_xmltype() const {
|
||||||
return is_udt_column()
|
return is_udt_column()
|
||||||
&& (((meta_type_.is_ext() || meta_type_.is_user_defined_sql_type()) && sub_type_ == T_OBJ_XML)
|
&& (((meta_type_.is_ext() || meta_type_.is_user_defined_sql_type()) && sub_type_ == T_OBJ_XML)
|
||||||
|
Reference in New Issue
Block a user