fix align_date4cmp get_double problem

This commit is contained in:
obdev
2023-09-14 11:14:09 +00:00
committed by ob-robot
parent fdd61a18d7
commit 80a6b1d58e
2 changed files with 18 additions and 26 deletions

View File

@ -243,18 +243,10 @@ int ObExprAlignDate4Cmp::integer_to_ob_time(const int64_t& date,
return ret;
}
int ObExprAlignDate4Cmp::integer_to_ob_time(const ObDatum* date_datum, DateArgType& date_arg_type, ObTime& ob_time) {
return integer_to_ob_time(date_datum->get_int(), date_arg_type, ob_time);
}
int ObExprAlignDate4Cmp::double_to_ob_time(const double& date, DateArgType& date_arg_type, ObTime& ob_time) {
return integer_to_ob_time((int64_t)date, date_arg_type, ob_time);
}
int ObExprAlignDate4Cmp::double_to_ob_time(const ObDatum* date_datum, DateArgType& date_arg_type, ObTime& ob_time) {
return double_to_ob_time(date_datum->get_double(), date_arg_type, ob_time);
}
int ObExprAlignDate4Cmp::number_to_ob_time(const number::ObNumber& date, DateArgType& date_arg_type, ObTime& ob_time) {
int ret = OB_SUCCESS;
int64_t date_int = 0;
@ -266,10 +258,6 @@ int ObExprAlignDate4Cmp::number_to_ob_time(const number::ObNumber& date, DateArg
return ret;
}
int ObExprAlignDate4Cmp::number_to_ob_time(const ObDatum* date_datum, DateArgType& date_arg_type, ObTime& ob_time) {
return number_to_ob_time(date_datum->get_number(), date_arg_type, ob_time);
}
int ObExprAlignDate4Cmp::str_to_ob_time(const ObString& date, DateArgType& date_arg_type, ObTime& ob_time) {
int ret = OB_SUCCESS;
ObDateSqlMode date_sql_mode;
@ -291,17 +279,13 @@ int ObExprAlignDate4Cmp::str_to_ob_time(const ObString& date, DateArgType& date_
return ret;
}
int ObExprAlignDate4Cmp::str_to_ob_time(const ObDatum* date_datum, DateArgType& date_arg_type, ObTime& ob_time) {
return str_to_ob_time(date_datum->get_string(), date_arg_type, ob_time);
}
int ObExprAlignDate4Cmp::datum_to_ob_time(const ObDatum* date_datum, const ObObjType& date_arg_obj_type, DateArgType& date_arg_type, ObTime& ob_time)
{
int ret = OB_SUCCESS;
if (date_datum->is_null()) {
date_arg_type = NULL_DATE;
} else if (ob_is_string_type(date_arg_obj_type)) {
if (OB_FAIL(str_to_ob_time(date_datum, date_arg_type, ob_time))) {
if (OB_FAIL(str_to_ob_time(date_datum->get_string(), date_arg_type, ob_time))) {
LOG_WARN("str_to_ob_time fail.", K(ret), K(date_datum));
}
} else {
@ -314,29 +298,41 @@ int ObExprAlignDate4Cmp::datum_to_ob_time(const ObDatum* date_datum, const ObObj
case ObSmallIntType:
case ObMediumIntType:
case ObInt32Type:
case ObIntType:
case ObIntType: {
if (OB_FAIL(integer_to_ob_time(static_cast<int64_t>(date_datum->get_uint()),
date_arg_type, ob_time))) {
LOG_WARN("integer_to_ob_time fail.", K(ret), K(date_datum));
}
break;
}
case ObUTinyIntType:
case ObUSmallIntType:
case ObUMediumIntType:
case ObUInt32Type:
case ObUInt64Type: {
if (OB_FAIL(integer_to_ob_time(date_datum, date_arg_type, ob_time))) {
if (OB_FAIL(integer_to_ob_time(date_datum->get_int(), date_arg_type, ob_time))) {
LOG_WARN("integer_to_ob_time fail.", K(ret), K(date_datum));
}
break;
}
case ObFloatType:
case ObUFloatType: {
if (OB_FAIL(double_to_ob_time(static_cast<double>(date_datum->get_float()),
date_arg_type, ob_time))) {
LOG_WARN("integer_to_ob_time fail.", K(ret), K(date_datum));
}
break;
}
case ObDoubleType:
case ObUFloatType:
case ObUDoubleType: {
if (OB_FAIL(double_to_ob_time(date_datum, date_arg_type, ob_time))) {
if (OB_FAIL(double_to_ob_time(date_datum->get_double(), date_arg_type, ob_time))) {
LOG_WARN("double_to_ob_time fail.", K(ret), K(date_datum));
}
break;
}
case ObNumberType:
case ObUNumberType: {
if (OB_FAIL(number_to_ob_time(date_datum, date_arg_type, ob_time))) {
if (OB_FAIL(number_to_ob_time(date_datum->get_number(), date_arg_type, ob_time))) {
LOG_WARN("number_to_ob_time fail.", K(ret), K(date_datum));
}
break;

View File

@ -61,13 +61,9 @@ private:
static bool day_over_limit(const ObTime &ob_time);
static void set_valid_time_floor(ObTime &ob_time);
static int integer_to_ob_time(const int64_t &date, DateArgType &date_arg_type, ObTime &ob_time);
static int integer_to_ob_time(const ObDatum *date_datum, DateArgType &date_arg_type, ObTime &ob_time);
static int double_to_ob_time(const double &date, DateArgType &date_arg_type, ObTime &ob_time);
static int double_to_ob_time(const ObDatum *date_datum, DateArgType &date_arg_type, ObTime &ob_time);
static int number_to_ob_time(const number::ObNumber &date, DateArgType &date_arg_type, ObTime &ob_time);
static int number_to_ob_time(const ObDatum *date_datum, DateArgType &date_arg_type, ObTime &ob_time);
static int str_to_ob_time(const ObString &date, DateArgType &date_arg_type, ObTime &ob_time);
static int str_to_ob_time(const ObDatum *date_datum, DateArgType &date_arg_type, ObTime &ob_time);
static int datum_to_ob_time(const ObDatum *date_datum,
const ObObjType &date_arg_obj_type,
DateArgType &date_arg_type,