Fix an order by udt bug
This commit is contained in:
		| @ -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<ObRawExpr*> order_item_exprs; | ||||
|       common::ObIArray<OrderItem> &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)); | ||||
|           } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 xianyu-w
					xianyu-w