[xml bugfix] xmlattributes evalname input fix
This commit is contained in:
@ -58,6 +58,9 @@ int ObExprXmlAttributes::calc_result_typeN(ObExprResType &type,
|
|||||||
ret = OB_ERR_INVALID_XML_DATATYPE;
|
ret = OB_ERR_INVALID_XML_DATATYPE;
|
||||||
LOG_USER_ERROR(OB_ERR_INVALID_XML_DATATYPE, "-", ob_obj_type_str(types_stack[i].get_type()));
|
LOG_USER_ERROR(OB_ERR_INVALID_XML_DATATYPE, "-", ob_obj_type_str(types_stack[i].get_type()));
|
||||||
LOG_WARN("invalid type, expect char", K(ret), K(types_stack[i].get_type()));
|
LOG_WARN("invalid type, expect char", K(ret), K(types_stack[i].get_type()));
|
||||||
|
} else if (ob_is_nstring(types_stack[i].get_type())) {
|
||||||
|
types_stack[i].set_calc_type(ObVarcharType);
|
||||||
|
types_stack[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||||
} else if (types_stack[i].get_charset_type() != CHARSET_UTF8MB4) {
|
} else if (types_stack[i].get_charset_type() != CHARSET_UTF8MB4) {
|
||||||
types_stack[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
types_stack[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4623,8 +4623,7 @@ int ObRawExprPrinter::print_xml_attributes_expr(ObSysFunRawExpr *expr)
|
|||||||
PRINT_EXPR(expr->get_param_expr(i));
|
PRINT_EXPR(expr->get_param_expr(i));
|
||||||
ObObj attr_key_obj = static_cast<ObConstRawExpr*>(expr->get_param_expr(i + 1))->get_value();
|
ObObj attr_key_obj = static_cast<ObConstRawExpr*>(expr->get_param_expr(i + 1))->get_value();
|
||||||
ObItemType expr_type = expr->get_param_expr(i + 1)->get_expr_type();
|
ObItemType expr_type = expr->get_param_expr(i + 1)->get_expr_type();
|
||||||
if (expr_type == T_REF_COLUMN ||
|
if ((T_VARCHAR != expr_type && T_CHAR != expr_type) ||
|
||||||
expr_type == T_FUN_SYS_CAST ||
|
|
||||||
attr_key_obj.get_type() == ObObjType::ObUnknownType) {
|
attr_key_obj.get_type() == ObObjType::ObUnknownType) {
|
||||||
DATA_PRINTF(" as evalname ");
|
DATA_PRINTF(" as evalname ");
|
||||||
PRINT_EXPR(expr->get_param_expr(i + 1));
|
PRINT_EXPR(expr->get_param_expr(i + 1));
|
||||||
|
|||||||
Reference in New Issue
Block a user