From 80a6b1d58ecf66dba64a1dd8d08633a94c4acffe Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 14 Sep 2023 11:14:09 +0000 Subject: [PATCH] fix align_date4cmp get_double problem --- .../engine/expr/ob_expr_align_date4cmp.cpp | 40 +++++++++---------- src/sql/engine/expr/ob_expr_align_date4cmp.h | 4 -- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/sql/engine/expr/ob_expr_align_date4cmp.cpp b/src/sql/engine/expr/ob_expr_align_date4cmp.cpp index e9fb1396c1..7e81c7923c 100644 --- a/src/sql/engine/expr/ob_expr_align_date4cmp.cpp +++ b/src/sql/engine/expr/ob_expr_align_date4cmp.cpp @@ -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(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(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; diff --git a/src/sql/engine/expr/ob_expr_align_date4cmp.h b/src/sql/engine/expr/ob_expr_align_date4cmp.h index d15ce46da0..9a86b435ca 100644 --- a/src/sql/engine/expr/ob_expr_align_date4cmp.h +++ b/src/sql/engine/expr/ob_expr_align_date4cmp.h @@ -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,