提交 5ce60b8a 编写于 作者: O obdev 提交者: ob-robot

[CP] fix insert stmt deep copy bug

上级 e4fffb14
......@@ -8880,7 +8880,7 @@ int ObDMLResolver::add_cte_table_to_children(ObChildStmtResolver& child_resolver
}
int ObDMLResolver::resolve_index_rowkey_exprs(uint64_t table_id, const ObTableSchema& index_schema,
ObIArray<ObColumnRefRawExpr*>& column_exprs, bool use_shared_spk /*= true*/)
ObIArray<ObColumnRefRawExpr*>& column_exprs, bool use_shared_spk /*= false*/)
{
int ret = OB_SUCCESS;
ObDMLStmt* dml_stmt = get_stmt();
......
......@@ -2074,7 +2074,7 @@ int ObInsertResolver::resolve_dupkey_scan_info(const ObTableSchema& index_schema
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret), K(table_columns), K(table_offset));
} else if (OB_FAIL(resolve_index_rowkey_exprs(
insert_stmt->get_insert_table_id(table_offset), index_schema, index_rowkey_exprs))) {
insert_stmt->get_insert_table_id(table_offset), index_schema, index_rowkey_exprs, true))) {
LOG_WARN("resolve index rowkey exprs failed", K(ret), KPC(insert_stmt), K(index_schema));
} else if (index_schema.is_global_index_table()) {
// For global unique index,
......
......@@ -806,5 +806,21 @@ int ObInsertTableInfo::assign(const ObInsertTableInfo& other)
return ret;
}
int ObInsertStmt::inner_get_share_exprs(ObIArray<ObRawExpr*> &candi_share_exprs) const
{
int ret = OB_SUCCESS;
if (OB_FAIL(ObDelUpdStmt::inner_get_share_exprs(candi_share_exprs))) {
LOG_WARN("failed to mark share exprs", K(ret));
}
// shadow pk in constraint_infos are not shared with shadow pk in all_table_column.
// Place refer to ObInsertResolver::resolve_unique_index_constraint_info for more information.
for (int64_t i = 0; OB_SUCC(ret) && i < constraint_check_stmt_.constraint_infos_.count(); ++i) {
if (OB_FAIL(append(candi_share_exprs, constraint_check_stmt_.constraint_infos_.at(i).constraint_columns_))) {
LOG_WARN("failed to append exprs", K(ret));
}
}
return ret;
}
} // namespace sql
} // namespace oceanbase
......@@ -290,6 +290,7 @@ public:
return multi_insert_table_info_;
}
DECLARE_VIRTUAL_TO_STRING;
virtual int inner_get_share_exprs(ObIArray<ObRawExpr*> &share_exprs) const;
protected:
// Get the root expr of all query-related expressions in
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册