diff --git a/src/sql/optimizer/ob_del_upd_log_plan.cpp b/src/sql/optimizer/ob_del_upd_log_plan.cpp index 30cba06912..8e19af2014 100644 --- a/src/sql/optimizer/ob_del_upd_log_plan.cpp +++ b/src/sql/optimizer/ob_del_upd_log_plan.cpp @@ -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 { diff --git a/src/sql/resolver/ddl/ob_create_table_resolver.cpp b/src/sql/resolver/ddl/ob_create_table_resolver.cpp index 50ea3b06af..e665b2069e 100644 --- a/src/sql/resolver/ddl/ob_create_table_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_table_resolver.cpp @@ -1695,6 +1695,7 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p { int ret = OB_SUCCESS; ObCreateTableStmt *create_table_stmt = static_cast(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(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; diff --git a/src/sql/rewrite/ob_transform_simplify_groupby.cpp b/src/sql/rewrite/ob_transform_simplify_groupby.cpp index ffcc1dab06..fc3b132184 100644 --- a/src/sql/rewrite/ob_transform_simplify_groupby.cpp +++ b/src/sql/rewrite/ob_transform_simplify_groupby.cpp @@ -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; + } } } }