fix bug: outline&create_table_as
This commit is contained in:
@ -263,11 +263,12 @@ 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(),
|
||||
is_unique))) {
|
||||
LOG_WARN("check dml is order unique failed", K(ret));
|
||||
LOG_WARN("check dml is order unique failed", K(ret));
|
||||
} else if (!is_unique) {
|
||||
index_dml_info->distinct_algo_ = T_HASH_DISTINCT;
|
||||
} else {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -629,9 +629,15 @@ int ObTransformSimplifyGroupby::remove_group_by_duplicates(ObDMLStmt *&stmt, boo
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
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));
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user