bugfix: 1. xml_expr: generated_column_expr; 2. extract, extract_value, update_xml: xpath or ns arg not literal
This commit is contained in:
@ -65,8 +65,7 @@ int ObExprExtractValue::calc_result_typeN(ObExprResType &type,
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
} else {
|
||||
types[i].set_calc_type(ObVarcharType);
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
ret = OB_ERR_INVALID_XPATH_EXPRESSION;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -76,7 +75,8 @@ int ObExprExtractValue::calc_result_typeN(ObExprResType &type,
|
||||
type.set_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
type.set_collation_level(CS_LEVEL_IMPLICIT);
|
||||
// length == OB_MAX_ORACLE_VARCHAR_LENGTH is not supported by generated key, use OB_MAX_VARCHAR_LENGTH_KEY instead
|
||||
type.set_length(OB_MAX_VARCHAR_LENGTH_KEY);
|
||||
// length == OB_MAX_VARCHAR_LENGTH_KEY is not supported by generated column length check , use MAX_ORACLE_COMMENT_LENGTH instead
|
||||
type.set_length(MAX_ORACLE_COMMENT_LENGTH);
|
||||
type.set_length_semantics(LS_BYTE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ namespace sql
|
||||
{
|
||||
|
||||
ObExprExtractXml::ObExprExtractXml(common::ObIAllocator &alloc)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_EXTRACT, N_EXTRACT_XML, MORE_THAN_ONE, NOT_VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
: ObFuncExprOperator(alloc, T_FUN_SYS_XML_EXTRACT, N_EXTRACT_XML, MORE_THAN_ONE, VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION)
|
||||
{
|
||||
}
|
||||
|
||||
@ -64,8 +64,7 @@ int ObExprExtractXml::calc_result_typeN(ObExprResType &type,
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
} else {
|
||||
types[i].set_calc_type(ObVarcharType);
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
ret = OB_ERR_INVALID_XPATH_EXPRESSION;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,9 +62,6 @@ int ObExprUpdateXml::calc_result_typeN(ObExprResType &type,
|
||||
if (types[i].get_charset_type() != CHARSET_UTF8MB4) {
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
} else {
|
||||
types[i].set_calc_type(ObVarcharType);
|
||||
types[i].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
} else {
|
||||
// value expr
|
||||
@ -86,9 +83,6 @@ int ObExprUpdateXml::calc_result_typeN(ObExprResType &type,
|
||||
if (types[param_num - 1].get_charset_type() != CHARSET_UTF8MB4) {
|
||||
types[param_num - 1].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
} else {
|
||||
types[param_num - 1].set_calc_type(ObVarcharType);
|
||||
types[param_num - 1].set_calc_collation_type(CS_TYPE_UTF8MB4_BIN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4441,11 +4441,6 @@ int ObResolverUtils::resolve_generated_column_expr(ObResolverParams ¶ms,
|
||||
const ObCollationType expr_cs_type = expr->get_result_type().get_collation_type();
|
||||
const ObObjType dst_datatype = generated_column.get_data_type();
|
||||
const ObCollationType dst_cs_type = generated_column.get_collation_type();
|
||||
if (OB_SUCC(ret) && ObUserDefinedSQLType == expr_datatype) {
|
||||
ret = OB_ERR_RESULTANT_DATA_TYPE_OF_VIRTUAL_COLUMN_IS_NOT_SUPPORTED;
|
||||
LOG_WARN("Define a xmltype column in generated column def is not supported", K(ret));
|
||||
LOG_USER_ERROR(OB_ERR_RESULTANT_DATA_TYPE_OF_VIRTUAL_COLUMN_IS_NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
/* implicit data conversion judgement */
|
||||
if (OB_SUCC(ret) && lib::is_oracle_mode()) {
|
||||
@ -4477,6 +4472,7 @@ int ObResolverUtils::resolve_generated_column_expr(ObResolverParams ¶ms,
|
||||
break;
|
||||
case ObLobType:
|
||||
case ObLongTextType:
|
||||
case ObUserDefinedSQLType:
|
||||
ret = OB_ERR_RESULTANT_DATA_TYPE_OF_VIRTUAL_COLUMN_IS_NOT_SUPPORTED;
|
||||
LOG_WARN("lob data type in generated column definition", K(ret));
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user