fix core caused by missing const flag

This commit is contained in:
yinyj17
2024-02-20 09:46:17 +00:00
committed by ob-robot
parent 661031247f
commit 86b8b822b9
8 changed files with 155 additions and 27 deletions

View File

@ -789,6 +789,17 @@ int ObRawExpr::is_const_inherit_expr(bool &is_const_inherit,
|| T_FUN_NORMAL_UDF == type_
|| T_FUN_SYS_REMOVE_CONST == type_
|| T_FUN_SYS_WRAPPER_INNER == type_
|| T_FUN_SYS_VALUES == type_
|| T_OP_GET_PACKAGE_VAR == type_
|| T_OP_GET_SUBPROGRAM_VAR == type_
|| T_FUN_SYS_JSON_VALUE == type_
|| T_FUN_SYS_JSON_QUERY == type_
|| (T_FUN_SYS_JSON_EXISTS == type_ && lib::is_oracle_mode())
|| T_FUN_SYS_JSON_EQUAL == type_
|| T_FUN_SYS_IS_JSON == type_
|| (T_FUN_SYS_JSON_MERGE_PATCH == type_ && lib::is_oracle_mode())
|| T_FUN_SYS_JSON_OBJECT == type_
|| IS_LABEL_SE_POLICY_FUNC(type_)
|| (T_FUN_SYS_LAST_INSERT_ID == type_ && get_param_count() > 0)
|| T_FUN_SYS_TO_BLOB == type_
|| (T_FUN_SYS_SYSDATE == type_ && lib::is_mysql_mode())

View File

@ -567,32 +567,6 @@ int ObRawExprInfoExtractor::visit(ObSysFunRawExpr &expr)
}
} else {}
}
if (OB_SUCC(ret)
&& (T_FUN_SYS_JSON_VALUE == expr.get_expr_type()
|| T_FUN_SYS_JSON_QUERY == expr.get_expr_type()
|| (T_FUN_SYS_JSON_EXISTS == expr.get_expr_type() && lib::is_oracle_mode())
|| T_FUN_SYS_JSON_EQUAL == expr.get_expr_type()
|| T_FUN_SYS_IS_JSON == expr.get_expr_type()
|| (T_FUN_SYS_JSON_MERGE_PATCH == expr.get_expr_type() && lib::is_oracle_mode())
|| T_FUN_SYS_JSON_OBJECT == expr.get_expr_type()
|| IS_LABEL_SE_POLICY_FUNC(expr.get_expr_type()))
&& OB_FAIL(expr.clear_flag(IS_CONST_EXPR))) {
LOG_WARN("failed to clear flag", K(ret));
}
if (OB_SUCC(ret) && T_FUN_SYS_JSON_VALUE == expr.get_expr_type()) {
if (expr.get_param_count() >= 12) {
ObRawExpr * sub_expr = expr.get_param_expr(7);
if (OB_NOT_NULL(sub_expr)
&& OB_FAIL(sub_expr->clear_flag(IS_CONST_EXPR))) {
LOG_WARN("failed to clear flag", K(ret));
} else if (OB_NOT_NULL(sub_expr = expr.get_param_expr(4))
&& OB_FAIL(sub_expr->clear_flag(IS_CONST_EXPR))) {
LOG_WARN("failed to clear flag", K(ret));
}
}
}
}
return ret;
}