[FEAT MERGE][CP]optimizer stats enhancement

This commit is contained in:
wangt1xiuyi
2024-02-07 16:56:28 +00:00
committed by ob-robot
parent 540f23b2d3
commit 15307ef94e
92 changed files with 7450 additions and 3026 deletions

View File

@ -1849,7 +1849,7 @@ int ObRawExprDeduceType::visit(ObAggFunRawExpr &expr)
if (OB_ISNULL(param_expr = expr.get_param_expr(i))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(param_expr), K(expr.get_param_count()));
} else if (i == 0 || i == 2) {
} else if (i == 0 || i == 2 || i == 3) {
if (lib::is_oracle_mode()) {
const_cast<ObExprResType&>(param_expr->get_result_type()).set_calc_type(ObNumberType);
} else {

View File

@ -4146,10 +4146,11 @@ int ObRawExprResolverImpl::process_agg_node(const ParseNode *node, ObRawExpr *&e
ObSysFunRawExpr *window_size_expr = NULL;
ObRawExpr *div_expr = NULL;
ObConstRawExpr *one_expr = NULL;
ObRawExpr *max_disuse_expr = NULL;
if (OB_ISNULL(ctx_.session_info_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret), K(ctx_.session_info_));
} else if (OB_UNLIKELY(3 != node->num_child_)) {
} else if (OB_UNLIKELY(4 != node->num_child_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected error", K(ret), K(node->num_child_));
} else if (OB_FAIL(SMART_CALL(recursive_resolve(node->children_[0], error_expr)))) {
@ -4193,6 +4194,14 @@ int ObRawExprResolverImpl::process_agg_node(const ParseNode *node, ObRawExpr *&e
LOG_WARN("get invalid item_size_expr", K(ret), K(item_size_expr));
} else if (OB_FAIL(agg_expr->add_real_param_expr(item_size_expr))) {
LOG_WARN("fail to add param expr to agg expr", K(ret));
} else if (OB_FAIL(SMART_CALL(recursive_resolve(node->children_[3], max_disuse_expr)))) {
LOG_WARN("fail to recursive resolve expr item", K(ret));
} else if (OB_ISNULL(max_disuse_expr) ||
OB_UNLIKELY(ObRawExpr::EXPR_CONST != max_disuse_expr->get_expr_class())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("get invalid item_size_expr", K(ret), K(max_disuse_expr));
} else if (OB_FAIL(agg_expr->add_real_param_expr(max_disuse_expr))) {
LOG_WARN("fail to add param expr to agg expr", K(ret));
} else {/*do nothing*/}
} else if (T_FUN_HYBRID_HIST == node->type_ || T_FUN_JSON_OBJECTAGG == node->type_) {
if (OB_UNLIKELY(2 != node->num_child_)) {