diff --git a/src/sql/resolver/dml/ob_select_resolver.cpp b/src/sql/resolver/dml/ob_select_resolver.cpp index 35268d6c7f..a0ad2da4d7 100644 --- a/src/sql/resolver/dml/ob_select_resolver.cpp +++ b/src/sql/resolver/dml/ob_select_resolver.cpp @@ -753,9 +753,10 @@ int ObSelectResolver::check_group_by() } else if (ObLongTextType == group_by_expr->get_data_type() || ObLobType == group_by_expr->get_data_type() || ObJsonType == group_by_expr->get_data_type() - || ObGeometryType == group_by_expr->get_data_type()) { + || ObGeometryType == group_by_expr->get_data_type() + || ObExtendType == group_by_expr->get_data_type()) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - LOG_WARN("group by lob expr is not allowed", K(ret)); + LOG_WARN("group by lob or udt expr is not allowed", K(ret)); } } for (int64_t i = 0; OB_SUCC(ret) && i < select_stmt->get_rollup_expr_size(); i++) { @@ -764,9 +765,10 @@ int ObSelectResolver::check_group_by() ret = OB_ERR_UNEXPECTED; LOG_WARN("rollup expr is null", K(ret)); } else if (ObLongTextType == rollup_expr->get_data_type() - || ObLobType == rollup_expr->get_data_type()) { + || ObLobType == rollup_expr->get_data_type() + || ObExtendType == rollup_expr->get_data_type()) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - LOG_WARN("group by lob expr is not allowed", K(ret)); + LOG_WARN("group by lob or udt expr is not allowed", K(ret)); } } for (int64_t i = 0; OB_SUCC(ret) && i < select_stmt->get_grouping_sets_items_size(); i++) { @@ -786,9 +788,10 @@ int ObSelectResolver::check_group_by() } else if (ObLongTextType == groupby_expr->get_data_type() || ObLobType == groupby_expr->get_data_type() || ObJsonType == groupby_expr->get_data_type() - || ObGeometryType == groupby_expr->get_data_type()) { + || ObGeometryType == groupby_expr->get_data_type() + || ObExtendType == groupby_expr->get_data_type()) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - LOG_WARN("group by lob expr is not allowed", K(ret)); + LOG_WARN("group by lob or udt expr is not allowed", K(ret)); } } } @@ -867,7 +870,7 @@ int ObSelectResolver::check_group_by() return ret; } -// 1. lob type can't be ordered +// 1. lob or udt type can't be ordered // 2. the order item should be exists in select items if has distinct int ObSelectResolver::check_order_by() { @@ -882,7 +885,7 @@ int ObSelectResolver::check_order_by() // eg: select distinct count(*) from t1 order by c1; -- return single row,then don't check bool need_check = !select_stmt->is_single_set_query(); if (need_check) { - // 1. check lob type + // 1. check lob type or udt common::ObArray order_item_exprs; common::ObIArray &order_items = select_stmt->get_order_items(); // special case: select count(*) from t1 order by c1; --c1 is blob, but optimized to be remove @@ -890,9 +893,10 @@ int ObSelectResolver::check_order_by() if (ob_is_text_tc(order_items.at(i).expr_->get_data_type()) || ob_is_lob_tc(order_items.at(i).expr_->get_data_type()) || ob_is_json_tc(order_items.at(i).expr_->get_data_type()) - || ob_is_geometry_tc(order_items.at(i).expr_->get_data_type())) { + || ob_is_geometry_tc(order_items.at(i).expr_->get_data_type()) + || ob_is_extend(order_items.at(i).expr_->get_data_type())) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - LOG_WARN("lob expr can't order", K(ret), K(*order_items.at(i).expr_)); + LOG_WARN("lob expr or udt can't order", K(ret), K(*order_items.at(i).expr_)); } else if (has_distinct) { if (OB_FAIL(order_item_exprs.push_back(order_items.at(i).expr_))) { LOG_WARN("fail to push back expr", K(ret)); @@ -6431,9 +6435,10 @@ int ObSelectResolver::check_window_exprs() if (ob_is_text_tc(order_items.at(i).expr_->get_data_type()) || ob_is_lob_tc(order_items.at(i).expr_->get_data_type()) || ob_is_json_tc(order_items.at(i).expr_->get_data_type()) - || ob_is_geometry_tc(order_items.at(i).expr_->get_data_type())) { + || ob_is_geometry_tc(order_items.at(i).expr_->get_data_type()) + || ob_is_extend(order_items.at(i).expr_->get_data_type())) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - LOG_WARN("lob expr can't order", K(ret), K(*order_items.at(i).expr_)); + LOG_WARN("lob or udt expr can't order", K(ret), K(*order_items.at(i).expr_)); } } } @@ -6444,7 +6449,8 @@ int ObSelectResolver::check_window_exprs() ret = OB_ERR_UNEXPECTED; LOG_WARN("param is null", K(ret)); } else if (ob_is_lob_locator(param_expr->get_data_type()) - || ob_is_text_tc(param_expr->get_data_type())) { + || ob_is_text_tc(param_expr->get_data_type()) + || ob_is_extend(param_expr->get_data_type())) { ret = OB_ERR_INVALID_TYPE_FOR_OP; LOG_WARN("invalid partition by expr", K(ret), K(i), KPC(param_expr)); }