cp bug fix to open source branch
This commit is contained in:
@ -975,7 +975,7 @@ int ObTransformUtils::replace_expr(
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (OB_FAIL(expr->replace_expr(other_exprs, new_exprs))) {
|
||||
if (OB_FAIL(SMART_CALL(expr->replace_expr(other_exprs, new_exprs)))) {
|
||||
LOG_WARN("failed to replace expr", K(ret));
|
||||
} else if (NULL != temp_old_expr) {
|
||||
const_cast<ObIArray<ObRawExpr*>&>(other_exprs).at(idx) = temp_old_expr;
|
||||
@ -1700,8 +1700,8 @@ int ObTransformUtils::check_stmt_output_nullable(const ObSelectStmt* stmt, const
|
||||
int ObTransformUtils::find_not_null_expr(ObDMLStmt& stmt, ObRawExpr*& not_null_expr, bool& is_valid)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObRelIds from_tables;
|
||||
if (OB_FAIL(get_from_tables(stmt, from_tables))) {
|
||||
ObSqlBitSet<> from_tables;
|
||||
if (OB_FAIL(stmt.get_from_tables(from_tables))) {
|
||||
LOG_WARN("failed to get from tables", K(ret));
|
||||
}
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < stmt.get_column_size(); ++i) {
|
||||
@ -2977,7 +2977,7 @@ int ObTransformUtils::check_stmt_unique(ObSelectStmt* stmt, ObSQLSessionInfo* se
|
||||
ObRelIds all_tables;
|
||||
if (OB_FAIL(compute_stmt_property(stmt, check_helper, res_info, extra_flags))) {
|
||||
LOG_WARN("failed to compute stmt property", K(ret));
|
||||
} else if (OB_FAIL(get_from_tables(*stmt, all_tables))) {
|
||||
} else if (OB_FAIL(stmt->get_from_tables(all_tables))) {
|
||||
LOG_WARN("failed to get from tables", K(ret));
|
||||
} else if (!is_strict && OB_FAIL(append(res_info.fd_sets_, res_info.candi_fd_sets_))) {
|
||||
// is strict, use fd_item_set & candi_fd_set check unique
|
||||
@ -3019,7 +3019,7 @@ int ObTransformUtils::compute_stmt_property(ObSelectStmt* stmt, UniqueCheckHelpe
|
||||
ObTableFdItem* group_unique_fd = NULL;
|
||||
ObRelIds table_set;
|
||||
ObSEArray<ObRawExpr*, 4> select_exprs;
|
||||
if (OB_FAIL(get_from_tables(*stmt, table_set))) {
|
||||
if (OB_FAIL(stmt->get_from_tables(table_set))) {
|
||||
LOG_WARN("failed to get from tables", K(ret));
|
||||
} else if (OB_FAIL(stmt->get_select_exprs(select_exprs))) {
|
||||
LOG_WARN("failed to get select exprs", K(ret));
|
||||
@ -3266,7 +3266,7 @@ int ObTransformUtils::compute_path_property(ObDMLStmt* stmt, UniqueCheckHelper&
|
||||
} else if (OB_ISNULL(table)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected from item", K(ret), K(from_item));
|
||||
} else if (OB_FAIL(get_table_rel_ids(*stmt, *table, rel_ids))) {
|
||||
} else if (OB_FAIL(stmt->get_table_rel_ids(*table, rel_ids))) {
|
||||
LOG_WARN("failed to get table relids", K(ret));
|
||||
} else if (OB_FAIL(compute_table_property(stmt, check_helper, table, cond_exprs, right_info))) {
|
||||
LOG_WARN("failed to compute table property", K(ret));
|
||||
@ -3421,8 +3421,8 @@ int ObTransformUtils::compute_basic_table_property(ObDMLStmt* stmt, UniqueCheckH
|
||||
} else if (!table->is_basic_table()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get unexpected table", K(ret), K(*table));
|
||||
} else if (OB_FAIL(get_table_rel_ids(*stmt, *table, table_set)) ||
|
||||
OB_FAIL(res_info.table_set_.add_members(table_set))) {
|
||||
} else if (OB_FAIL(stmt->get_table_rel_ids(*table, table_set))
|
||||
|| OB_FAIL(res_info.table_set_.add_members(table_set))) {
|
||||
LOG_WARN("failed to get table relids", K(ret));
|
||||
} else if (OB_FAIL(extract_table_exprs(*stmt, cond_exprs, *table, cur_cond_exprs))) {
|
||||
LOG_WARN("failed to extract table exprs", K(ret));
|
||||
@ -3492,8 +3492,8 @@ int ObTransformUtils::compute_generate_table_property(ObDMLStmt* stmt, UniqueChe
|
||||
LOG_WARN("get unexpected table", K(ret), K(*table));
|
||||
} else if (OB_FAIL(SMART_CALL(compute_stmt_property(ref_query, check_helper, child_info)))) {
|
||||
LOG_WARN("failed to compute stmt property", K(ret));
|
||||
} else if (OB_FAIL(get_table_rel_ids(*stmt, *table, table_set)) ||
|
||||
OB_FAIL(res_info.table_set_.add_members(table_set))) {
|
||||
} else if (OB_FAIL(stmt->get_table_rel_ids(*table, table_set))
|
||||
|| OB_FAIL(res_info.table_set_.add_members(table_set))) {
|
||||
LOG_WARN("failed to get table relids", K(ret));
|
||||
} else if (OB_FAIL(ObOptimizerUtil::convert_subplan_scan_expr(*check_helper.expr_factory_,
|
||||
child_info.equal_sets_,
|
||||
@ -3768,7 +3768,7 @@ int ObTransformUtils::extract_table_exprs(const ObDMLStmt& stmt, const ObIArray<
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObSqlBitSet<> table_set;
|
||||
if (OB_FAIL(get_table_rel_ids(stmt, target, table_set))) {
|
||||
if (OB_FAIL(stmt.get_table_rel_ids(target, table_set))) {
|
||||
LOG_WARN("failed to get table rel ids", K(ret));
|
||||
} else if (OB_FAIL(extract_table_exprs(stmt, source_exprs, table_set, exprs))) {
|
||||
LOG_WARN("failed to extract table exprs", K(ret));
|
||||
@ -3781,7 +3781,7 @@ int ObTransformUtils::extract_table_exprs(const ObDMLStmt& stmt, const ObIArray<
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObSqlBitSet<> table_set;
|
||||
if (OB_FAIL(get_table_rel_ids(stmt, tables, table_set))) {
|
||||
if (OB_FAIL(stmt.get_table_rel_ids(tables, table_set))) {
|
||||
LOG_WARN("failed to get table rel ids", K(ret));
|
||||
} else if (OB_FAIL(extract_table_exprs(stmt, source_exprs, table_set, exprs))) {
|
||||
LOG_WARN("failed to extract table exprs", K(ret));
|
||||
@ -3816,9 +3816,9 @@ int ObTransformUtils::get_table_joined_exprs(const ObDMLStmt& stmt, const TableI
|
||||
int ret = OB_SUCCESS;
|
||||
ObSqlBitSet<> source_table_ids;
|
||||
ObSqlBitSet<> target_table_ids;
|
||||
if (OB_FAIL(get_table_rel_ids(stmt, source, source_table_ids))) {
|
||||
if (OB_FAIL(stmt.get_table_rel_ids(source, source_table_ids))) {
|
||||
LOG_WARN("failed to get source table rel ids", K(ret));
|
||||
} else if (OB_FAIL(get_table_rel_ids(stmt, target, target_table_ids))) {
|
||||
} else if (OB_FAIL(stmt.get_table_rel_ids(target, target_table_ids))) {
|
||||
LOG_WARN("failed to get target table rel ids", K(ret));
|
||||
} else if (OB_FAIL(get_table_joined_exprs(
|
||||
source_table_ids, target_table_ids, conditions, target_exprs, join_source_ids, join_target_ids))) {
|
||||
@ -3840,14 +3840,14 @@ int ObTransformUtils::get_table_joined_exprs(const ObDMLStmt& stmt, const ObIArr
|
||||
if (OB_ISNULL(table)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table item is null", K(ret));
|
||||
} else if (OB_FAIL(get_table_rel_ids(stmt, *table, source_table_ids))) {
|
||||
} else if (OB_FAIL(stmt.get_table_rel_ids(*table, source_table_ids))) {
|
||||
LOG_WARN("failed to get source table rel ids", K(ret));
|
||||
} else { /*do nothing*/
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
/*do nothing*/
|
||||
} else if (OB_FAIL(get_table_rel_ids(stmt, target, target_table_ids))) {
|
||||
} else if (OB_FAIL(stmt.get_table_rel_ids(target, target_table_ids))) {
|
||||
LOG_WARN("failed to get target table rel ids", K(ret));
|
||||
} else if (OB_FAIL(get_table_joined_exprs(
|
||||
source_table_ids, target_table_ids, conditions, target_exprs, join_source_ids, join_target_ids))) {
|
||||
@ -3944,117 +3944,7 @@ int ObTransformUtils::get_table_joined_exprs(const ObSqlBitSet<>& source_ids, co
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::relids_to_table_items(ObDMLStmt* stmt, const ObRelIds& rel_ids, ObIArray<TableItem*>& rel_array)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_ISNULL(stmt)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("stmt is null", K(ret));
|
||||
} else {
|
||||
TableItem* table = NULL;
|
||||
int64_t idx = OB_INVALID_INDEX;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_table_items().count(); ++i) {
|
||||
if (OB_ISNULL(table = stmt->get_table_items().at(i))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table item is null", K(ret));
|
||||
} else if (OB_UNLIKELY((idx = stmt->get_table_bit_index(table->table_id_)) == OB_INVALID_INDEX)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get table item invalid idx", K(idx), K(table->table_id_));
|
||||
} else if (rel_ids.has_member(idx)) {
|
||||
ret = rel_array.push_back(table);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::relids_to_table_ids(
|
||||
ObDMLStmt* stmt, const ObSqlBitSet<>& table_set, ObIArray<uint64_t>& table_ids)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_ISNULL(stmt)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("stmt is null", K(ret));
|
||||
} else {
|
||||
TableItem* table = NULL;
|
||||
int64_t idx = OB_INVALID_INDEX;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_table_items().count(); ++i) {
|
||||
if (OB_ISNULL(table = stmt->get_table_items().at(i))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("table item is null", K(ret));
|
||||
} else if (OB_UNLIKELY((idx = stmt->get_table_bit_index(table->table_id_)) == OB_INVALID_INDEX)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get table item invalid idx", K(idx), K(table->table_id_));
|
||||
} else if (table_set.has_member(idx)) {
|
||||
ret = table_ids.push_back(table->table_id_);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::get_table_rel_ids(const ObDMLStmt& stmt, const TableItem& target, ObSqlBitSet<>& table_set)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (target.is_joined_table()) {
|
||||
const JoinedTable& joined_table = static_cast<const JoinedTable&>(target);
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < joined_table.single_table_ids_.count(); ++i) {
|
||||
if (OB_FAIL(table_set.add_member(stmt.get_table_bit_index(joined_table.single_table_ids_.at(i))))) {
|
||||
LOG_WARN("failed to add member", K(ret), K(joined_table.single_table_ids_.at(i)));
|
||||
}
|
||||
}
|
||||
} else if (OB_FAIL(table_set.add_member(stmt.get_table_bit_index(target.table_id_)))) {
|
||||
LOG_WARN("failed to add member", K(ret), K(target.table_id_));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::get_table_rel_ids(
|
||||
const ObDMLStmt& stmt, const ObIArray<uint64_t>& table_ids, ObSqlBitSet<>& table_set)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int32_t idx = OB_INVALID_INDEX;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < table_ids.count(); ++i) {
|
||||
idx = stmt.get_table_bit_index(table_ids.at(i));
|
||||
if (OB_UNLIKELY(OB_INVALID_INDEX == idx)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpect idx", K(ret));
|
||||
} else if (OB_FAIL(table_set.add_member(idx))) {
|
||||
LOG_WARN("failed to add members", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::get_table_rel_ids(const ObDMLStmt& stmt, const uint64_t table_id, ObSqlBitSet<>& table_set)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int32_t idx = stmt.get_table_bit_index(table_id);
|
||||
if (OB_UNLIKELY(OB_INVALID_INDEX == idx)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpect idx", K(ret));
|
||||
} else if (OB_FAIL(table_set.add_member(idx))) {
|
||||
LOG_WARN("failed to add members", K(ret));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::get_table_rel_ids(
|
||||
const ObDMLStmt& stmt, const ObIArray<TableItem*>& tables, ObSqlBitSet<>& table_set)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < tables.count(); ++i) {
|
||||
if (OB_ISNULL(tables.at(i))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpect null", K(ret));
|
||||
} else if (OB_FAIL(get_table_rel_ids(stmt, *tables.at(i), table_set))) {
|
||||
LOG_WARN("failed to get table rel ids", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::get_from_item(ObDMLStmt* stmt, TableItem* table, FromItem& from)
|
||||
int ObTransformUtils::get_from_item(ObDMLStmt *stmt, TableItem *table, FromItem &from)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
bool found = false;
|
||||
@ -4586,11 +4476,11 @@ int ObTransformUtils::generate_unique_key(
|
||||
ObTransformerCtx* ctx, ObDMLStmt* stmt, ObSqlBitSet<>& ignore_tables, ObIArray<ObRawExpr*>& unique_keys)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObRelIds from_rel_ids;
|
||||
ObSqlBitSet<> from_rel_ids;
|
||||
if (OB_ISNULL(stmt) || OB_ISNULL(ctx)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("param is null", K(stmt), K(ctx), K(ret));
|
||||
} else if (OB_FAIL(get_from_tables(*stmt, from_rel_ids))) {
|
||||
} else if (OB_FAIL(stmt->get_from_tables(from_rel_ids))) {
|
||||
LOG_WARN("failed to get output rel ids", K(ret));
|
||||
} else {
|
||||
ObIArray<TableItem*>& table_items = stmt->get_table_items();
|
||||
@ -5413,15 +5303,12 @@ int ObTransformUtils::create_simple_view(
|
||||
// 5. finish creating the child stmts
|
||||
if (OB_SUCC(ret)) {
|
||||
// create select list
|
||||
ObSEArray<ObRawExpr*, 4> columns;
|
||||
ObSEArray<ObQueryRefRawExpr*, 4> query_refs;
|
||||
ObRelIds rel_ids;
|
||||
ObSEArray<ObRawExpr *, 4> columns;
|
||||
ObSEArray<ObQueryRefRawExpr *, 4> query_refs;
|
||||
ObSqlBitSet<> from_tables;
|
||||
ObSEArray<ObRawExpr*, 16> shared_exprs;
|
||||
if (OB_FAIL(get_from_tables(*view_stmt, rel_ids))) {
|
||||
if (OB_FAIL(view_stmt->get_from_tables(from_tables))) {
|
||||
LOG_WARN("failed to get from tables", K(ret));
|
||||
} else if (OB_FAIL(from_tables.add_members2(rel_ids))) {
|
||||
LOG_WARN("failed to add members", K(ret));
|
||||
} else if (OB_FAIL(view_stmt->get_column_exprs(columns))) {
|
||||
LOG_WARN("failed to get column exprs", K(ret));
|
||||
} else if (OB_FAIL(extract_table_exprs(*view_stmt, columns, from_tables, select_list))) {
|
||||
@ -5849,6 +5736,10 @@ int ObTransformUtils::create_view_with_table(
|
||||
LOG_WARN("failed to adjust subquery list", K(ret));
|
||||
} else if (OB_FAIL(view_stmt->adjust_subquery_stmt_parent(stmt, view_stmt))) {
|
||||
LOG_WARN("failed to adjust subquery stmt parent", K(ret));
|
||||
} else if ((stmt->is_delete_stmt() || stmt->is_update_stmt() || stmt->is_merge_stmt()) &&
|
||||
OB_FAIL(adjust_updatable_view(*ctx->expr_factory_, static_cast<ObDelUpdStmt*>(stmt),
|
||||
*new_table))) {
|
||||
LOG_WARN("failed to adjust updatable view", K(ret));
|
||||
} else if (OB_FAIL(stmt->remove_table_item(new_table))) {
|
||||
LOG_WARN("failed to remove table item", K(ret));
|
||||
} else if (OB_FAIL(stmt->replace_inner_stmt_expr(old_column_exprs, new_column_exprs))) {
|
||||
@ -5913,18 +5804,22 @@ int ObTransformUtils::pushdown_semi_info_right_filter(ObDMLStmt* stmt, ObTransfo
|
||||
// pushdown right table filter in semi condition:
|
||||
// 1. if right table is a basic table, create a generate table.
|
||||
// 2. pushdown the right table filters into the generate table.
|
||||
int ObTransformUtils::pushdown_semi_info_right_filter(
|
||||
ObDMLStmt* stmt, ObTransformerCtx* ctx, SemiInfo* semi_info, ObIArray<ObRawExpr*>& right_filters)
|
||||
// subquery in right filter can not be a shared subquery
|
||||
int ObTransformUtils::pushdown_semi_info_right_filter(ObDMLStmt *stmt,
|
||||
ObTransformerCtx *ctx,
|
||||
SemiInfo *semi_info,
|
||||
ObIArray<ObRawExpr*> &right_filters)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
TableItem* right_table = NULL;
|
||||
ObSelectStmt* child_stmt = NULL;
|
||||
bool can_push = false;
|
||||
ObSEArray<ObRawExpr*, 16> new_right_filters;
|
||||
ObSEArray<ObRawExpr*, 16> old_column_exprs;
|
||||
ObSEArray<ObRawExpr*, 16> new_column_exprs;
|
||||
if (OB_ISNULL(stmt) || OB_ISNULL(ctx) || OB_ISNULL(semi_info)) {
|
||||
if (OB_ISNULL(stmt) || OB_ISNULL(ctx) || OB_ISNULL(semi_info) || OB_ISNULL(ctx->expr_factory_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected null", K(ret), K(stmt), K(ctx), K(semi_info));
|
||||
LOG_WARN("unexpected null", K(ret), K(stmt), K(ctx), K(semi_info), K(ctx->expr_factory_));
|
||||
} else if (right_filters.empty()) {
|
||||
/* do nothing */
|
||||
} else if (OB_ISNULL(right_table = stmt->get_table_item_by_id(semi_info->right_table_id_))) {
|
||||
@ -5940,9 +5835,12 @@ int ObTransformUtils::pushdown_semi_info_right_filter(
|
||||
LOG_WARN("unexpected right table", K(ret), K(right_table), K(child_stmt));
|
||||
} else if (OB_FAIL(ObOptimizerUtil::remove_item(semi_info->semi_conditions_, right_filters))) {
|
||||
LOG_WARN("failed to remove item", K(ret));
|
||||
} else if (OB_FAIL(child_stmt->add_condition_exprs(right_filters))) {
|
||||
} else if (OB_FAIL(ObRawExprUtils::copy_exprs(*ctx->expr_factory_, right_filters,
|
||||
new_right_filters, COPY_REF_DEFAULT))) {
|
||||
LOG_WARN("failed to copy exprs", K(ret));
|
||||
} else if (OB_FAIL(child_stmt->add_condition_exprs(new_right_filters))) {
|
||||
LOG_WARN("failed to add condotion exprs", K(ret));
|
||||
} else if (OB_FAIL(extract_query_ref_expr(right_filters, child_stmt->get_subquery_exprs()))) {
|
||||
} else if (OB_FAIL(extract_query_ref_expr(new_right_filters, child_stmt->get_subquery_exprs()))) {
|
||||
LOG_WARN("failed to adjust subquery list", K(ret));
|
||||
} else if (OB_FAIL(stmt->adjust_subquery_list())) {
|
||||
LOG_WARN("failed to adjust subquery list", K(ret));
|
||||
@ -6119,43 +6017,9 @@ int ObTransformUtils::replace_table_in_joined_tables(TableItem* table, TableItem
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get_output_rel_ids
|
||||
* get ObRelIds for all tables in from items
|
||||
*/
|
||||
int ObTransformUtils::get_from_tables(const ObDMLStmt& stmt, ObRelIds& output_rel_ids)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int32_t bit_id = OB_INVALID_INDEX;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < stmt.get_from_item_size(); ++i) {
|
||||
const FromItem& from = stmt.get_from_item(i);
|
||||
if (from.is_joined_) {
|
||||
const JoinedTable* table = stmt.get_joined_table(from.table_id_);
|
||||
if (OB_ISNULL(table)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("failed to get joined table", K(ret));
|
||||
}
|
||||
for (int64_t j = 0; OB_SUCC(ret) && j < table->single_table_ids_.count(); ++j) {
|
||||
uint64_t table_id = table->single_table_ids_.at(j);
|
||||
if (OB_UNLIKELY(OB_INVALID_INDEX == (bit_id = stmt.get_table_bit_index(table_id)))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("invalid table bit index", K(ret), K(table_id), K(bit_id));
|
||||
} else if (OB_FAIL(output_rel_ids.add_member(bit_id))) {
|
||||
LOG_WARN("failed to add member", K(ret));
|
||||
}
|
||||
}
|
||||
} else if (OB_UNLIKELY(OB_INVALID_INDEX == (bit_id = stmt.get_table_bit_index(from.table_id_)))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("invalid table bit index", K(ret), K(from.table_id_), K(bit_id));
|
||||
} else if (OB_FAIL(output_rel_ids.add_member(bit_id))) {
|
||||
LOG_WARN("failed to add member", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransformUtils::classify_rownum_conds(
|
||||
ObDMLStmt& stmt, ObIArray<ObRawExpr*>& spj_conds, ObIArray<ObRawExpr*>& other_conds)
|
||||
int ObTransformUtils::classify_rownum_conds(ObDMLStmt &stmt,
|
||||
ObIArray<ObRawExpr *> &spj_conds,
|
||||
ObIArray<ObRawExpr *> &other_conds)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (stmt.is_select_stmt()) {
|
||||
@ -6777,7 +6641,7 @@ int ObTransformUtils::recursive_set_stmt_unique(ObSelectStmt* select_stmt, ObTra
|
||||
int ret = OB_SUCCESS;
|
||||
bool is_unique = false;
|
||||
bool is_stack_overflow = false;
|
||||
ObRelIds origin_output_rel_ids;
|
||||
ObSqlBitSet<> origin_output_rel_ids;
|
||||
ObSEArray<ObRawExpr*, 4> pkeys;
|
||||
ObSEArray<ObRawExpr*, 4> select_exprs;
|
||||
if (OB_ISNULL(select_stmt) || OB_ISNULL(ctx) || OB_ISNULL(ctx->session_info_) || OB_ISNULL(ctx->schema_checker_) ||
|
||||
@ -6801,7 +6665,7 @@ int ObTransformUtils::recursive_set_stmt_unique(ObSelectStmt* select_stmt, ObTra
|
||||
}
|
||||
} else if (OB_FAIL(select_stmt->get_select_exprs(select_exprs))) {
|
||||
LOG_WARN("failed to get select exprs", K(ret));
|
||||
} else if (OB_FAIL(get_from_tables(*select_stmt, origin_output_rel_ids))) {
|
||||
} else if (OB_FAIL(select_stmt->get_from_tables(origin_output_rel_ids))) {
|
||||
LOG_WARN("failed to get output rel ids", K(ret));
|
||||
} else {
|
||||
ObIArray<TableItem*>& table_items = select_stmt->get_table_items();
|
||||
@ -6870,11 +6734,11 @@ int ObTransformUtils::check_can_set_stmt_unique(ObDMLStmt* stmt, bool& can_set_u
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
can_set_unique = false;
|
||||
ObRelIds output_rel_ids;
|
||||
ObSqlBitSet<> output_rel_ids;
|
||||
if (OB_ISNULL(stmt)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get unexpected null ptr", K(stmt), K(ret));
|
||||
} else if (OB_FAIL(get_from_tables(*stmt, output_rel_ids))) {
|
||||
} else if (OB_FAIL(stmt->get_from_tables(output_rel_ids))) {
|
||||
LOG_WARN("failed to get output rel ids", K(ret));
|
||||
} else {
|
||||
ObSelectStmt* view_stmt = NULL;
|
||||
|
||||
Reference in New Issue
Block a user