[BUGFIX] fix lob delete with MINIMAL mode

This commit is contained in:
obdev
2023-04-24 04:41:24 +00:00
committed by ob-robot
parent 16b713759f
commit 87ad8877d4
6 changed files with 63 additions and 15 deletions

View File

@ -1726,6 +1726,41 @@ int ObDelUpdResolver::add_all_columns_to_stmt(const TableItem &table_item,
return ret;
}
int ObDelUpdResolver::add_all_lob_columns_to_stmt(const TableItem &table_item,
ObIArray<ObColumnRefRawExpr*> &column_exprs)
{
int ret = OB_SUCCESS;
const ObTableSchema *table_schema = NULL;
const TableItem& base_table_item = table_item.get_base_table_item();
if (OB_ISNULL(params_.session_info_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("params_.session_info_ is null", K(ret));
} else if (OB_FAIL(schema_checker_->get_table_schema(params_.session_info_->get_effective_tenant_id(),
base_table_item.ref_id_,
table_schema,
base_table_item.is_link_table()))) {
LOG_WARN("not find table schema", K(ret), K(base_table_item));
} else if (OB_ISNULL(table_schema)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(table_schema), K(ret));
} else {
ObTableSchema::const_column_iterator iter = table_schema->column_begin();
ObTableSchema::const_column_iterator end = table_schema->column_end();
for (; OB_SUCC(ret) && iter != end; ++iter) {
const ObColumnSchemaV2 *column = *iter;
if (OB_ISNULL(column)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid column schema", K(column));
} else if (!column->get_meta_type().is_lob_storage()) {
// do nothing
} else if (OB_FAIL(add_column_to_stmt(table_item, *column, column_exprs))) {
LOG_WARN("add column item to stmt failed", K(ret));
}
} //end for
}
return ret;
}
int ObDelUpdResolver::add_all_columns_to_stmt_for_trigger(const TableItem &table_item,
ObIArray<ObColumnRefRawExpr*> &column_exprs)
{

View File

@ -220,6 +220,7 @@ protected:
int create_session_row_label_expr(ObDmlTableInfo& table_info, uint64_t column_id, ObRawExpr *&expr);
int add_select_items(ObSelectStmt &select_stmt, const ObIArray<SelectItem>& select_items);
int add_select_list_for_set_stmt(ObSelectStmt &select_stmt);
int add_all_lob_columns_to_stmt(const TableItem &table_item, ObIArray<ObColumnRefRawExpr*> &column_exprs);
protected:
int generate_insert_table_info(const TableItem &table_item,
ObInsertTableInfo &table_info,

View File

@ -419,6 +419,8 @@ int ObDeleteResolver::generate_delete_table_info(const TableItem &table_item)
} else if (OB_FAIL(add_all_index_rowkey_to_stmt(table_item,
table_info->column_exprs_))) {
LOG_WARN("fail to add relate column to stmt", K(ret), K(table_item));
} else if (OB_FAIL(add_all_lob_columns_to_stmt(table_item, table_info->column_exprs_))) {
LOG_WARN("fail to add lob column to stmt", K(ret), K(table_item));
}
if (OB_SUCC(ret)) {
table_info->table_id_ = table_item.table_id_;