Fix dayname func when deduce type without setting length

This commit is contained in:
obdev
2022-11-11 11:42:38 +00:00
committed by wangzelin.wzl
parent c9e4c535fc
commit 85d97abb91
3 changed files with 8 additions and 2 deletions

View File

@ -140,6 +140,8 @@ extern const int64_t USECS_PER_MIN;
#define DATETIME_MAX_LENGTH 26
#define TIME_MIN_LENGTH 10
#define DATE_MIN_LENGTH 10
#define DAYNAME_MAX_LENGTH 9 //Wednesday is longest
#define MONTHNAME_MAX_LENGTH 9 //September is longest
//max timestamp最大值为253402272000 12位
#define TIMESTAMP_VALUE_LENGTH 12
#define SEC_TO_USEC(secs) ((secs) * USECS_PER_SEC)

View File

@ -635,11 +635,14 @@ int ObExprDayName::calc_result_type1(ObExprResType &type,
{
ObCollationType cs_type = type_ctx.get_coll_type();
type.set_varchar();
type.set_full_length(DAYNAME_MAX_LENGTH, type1.get_length_semantics());
type.set_collation_type(cs_type);
type.set_collation_level(CS_LEVEL_IMPLICIT);
common::ObObjTypeClass tc1 = ob_obj_type_class(type1.get_type());
if (ob_is_enumset_tc(type1.get_type())) {
type1.set_calc_type(common::ObVarcharType);
type1.set_collation_type(cs_type);
type1.set_collation_level(CS_LEVEL_IMPLICIT);
} else if ((common::ObFloatTC == tc1) || (common::ObDoubleTC == tc1)) {
type1.set_calc_type(common::ObIntType);
}

View File

@ -335,11 +335,12 @@ int ObExprMonthName::calc_result_type1(ObExprResType &type,
type.set_varchar();
type.set_collation_type(cs_type);
type.set_collation_level(CS_LEVEL_IMPLICIT);
type.set_full_length(MONTHNAME_MAX_LENGTH, type1.get_length_semantics());
common::ObObjTypeClass tc1 = ob_obj_type_class(type1.get_type());
if (common::ObEnumSetTC == tc1) {
type1.set_calc_type(common::ObVarcharType);
type1.set_calc_collation_type(cs_type);
type1.set_collation_type(cs_type);
type1.set_collation_level(CS_LEVEL_IMPLICIT);
} else if ((common::ObFloatTC == tc1) || (common::ObDoubleTC == tc1)) {
type1.set_calc_type(common::ObIntType);
}