fix bug: outline&create_table_as

This commit is contained in:
akaError
2023-06-21 13:42:25 +00:00
committed by ob-robot
parent bd822c5291
commit 769236241b
3 changed files with 34 additions and 5 deletions

View File

@ -263,6 +263,7 @@ int ObDelUpdLogPlan::check_table_rowkey_distinct(
} else if (OB_FAIL(index_dml_info->get_rowkey_exprs(rowkey_exprs))) {
LOG_WARN("failed to get rowkey exprs", K(ret));
} else if (OB_FAIL(ObOptimizerUtil::is_exprs_unique(rowkey_exprs,
best_plan->get_table_set(),
best_plan->get_fd_item_set(),
best_plan->get_output_equal_sets(),
best_plan->get_output_const_exprs(),

View File

@ -1695,6 +1695,7 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p
{
int ret = OB_SUCCESS;
ObCreateTableStmt *create_table_stmt = static_cast<ObCreateTableStmt *>(stmt_);
const ObTableSchema *base_table_schema = NULL;
ParseNode *sub_sel_node = parse_tree.children_[CREATE_TABLE_AS_SEL_NUM_CHILD - 1];
ObSelectStmt *select_stmt = NULL;
ObSelectResolver select_resolver(params_);
@ -1806,7 +1807,9 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p
}
for (int64_t i = 0; OB_SUCC(ret) && i < select_items.count(); ++i) {
const SelectItem &select_item = select_items.at(i);
const ObRawExpr *expr = select_item.expr_;
ObRawExpr *expr = select_item.expr_;
ObColumnRefRawExpr *new_col_ref = static_cast<ObColumnRefRawExpr *>(expr);
TableItem *new_table_item = select_stmt->get_table_item_by_id(new_col_ref->get_table_id());
if (OB_UNLIKELY(NULL == expr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("select item expr is null", K(ret), K(i));
@ -1817,6 +1820,25 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p
} else {
column.set_column_name(select_item.expr_name_);
}
if (OB_SUCC(ret) && is_mysql_mode() &&
new_table_item != NULL &&
new_table_item->is_basic_table()) {
if (base_table_schema == NULL &&
OB_FAIL(schema_checker_->get_table_schema(session_info_->get_effective_tenant_id(),
new_table_item->ref_id_, base_table_schema))) {
LOG_WARN("get table schema failed", K(ret));
} else if (OB_ISNULL(base_table_schema)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("NULL table schema", K(ret));
} else {
const ObColumnSchemaV2 *org_column = base_table_schema->get_column_schema(select_item.expr_name_);
if (NULL != org_column &&
!org_column->is_generated_column() &&
!org_column->get_cur_default_value().is_null()) {
column.set_cur_default_value(org_column->get_cur_default_value());
}
}
}
if (ObResolverUtils::is_restore_user(*session_info_)
&& ObCharset::case_insensitive_equal(column.get_column_name_str(), OB_HIDDEN_PK_INCREMENT_COLUMN_NAME)) {
continue;

View File

@ -629,9 +629,15 @@ int ObTransformSimplifyGroupby::remove_group_by_duplicates(ObDMLStmt *&stmt, boo
}
}
if (OB_SUCC(ret)) {
if (new_group_exprs.count() == group_exprs.count()) {
//do nothing
} else {
select_stmt->get_group_exprs().reset();
if (OB_FAIL(select_stmt->get_group_exprs().assign(new_group_exprs))) {
LOG_WARN("failed to assign a new group exprs", K(ret));
} else {
trans_happened = true;
}
}
}
}