From e54cab6c455a59982442225de65d94362b8276b8 Mon Sep 17 00:00:00 2001 From: br0 Date: Tue, 19 Oct 2021 20:00:48 +0800 Subject: [PATCH] Fix varchar cast to set in non strict mode --- src/share/object/ob_obj_cast.cpp | 2 +- src/sql/engine/expr/ob_datum_cast.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/share/object/ob_obj_cast.cpp b/src/share/object/ob_obj_cast.cpp index 3d62652d6..03a55f047 100644 --- a/src/share/object/ob_obj_cast.cpp +++ b/src/share/object/ob_obj_cast.cpp @@ -4151,7 +4151,7 @@ static int string_set(const ObExpectType& expect_type, ObObjCastParams& params, LOG_WARN("unexpect val_cnt", K(in), K(out), K(expect_type), K(ret)); } else if (val_cnt >= 64) { // do nothing } else if (val_cnt < 64 && value > ((1ULL << val_cnt) - 1)) { - value = value & ((1ULL << val_cnt) - 1); + value = 0; ret = OB_ERR_DATA_TRUNCATED; LOG_WARN("input value out of range", K(in), K(val_cnt), K(ret)); } diff --git a/src/sql/engine/expr/ob_datum_cast.cpp b/src/sql/engine/expr/ob_datum_cast.cpp index 9d6e04eaa..c31c552e1 100644 --- a/src/sql/engine/expr/ob_datum_cast.cpp +++ b/src/sql/engine/expr/ob_datum_cast.cpp @@ -4783,9 +4783,9 @@ int string_to_set(ObIAllocator& alloc, const ObString& orig_in_str, const ObColl LOG_WARN("unexpect val_cnt", K(val_cnt), K(ret)); } else if (val_cnt >= 64) { // do nothing } else if (val_cnt < 64 && value > ((1ULL << val_cnt) - 1)) { - value = value & ((1ULL << val_cnt) - 1); + value = 0; ret = OB_ERR_DATA_TRUNCATED; - LOG_WARN("input value out of range", K(value), K(val_cnt), K(ret)); + LOG_WARN("input value out of range", K(val_cnt), K(ret)); } if (OB_FAIL(ret) && CM_IS_WARN_ON_FAIL(cast_mode)) { warning = OB_ERR_DATA_TRUNCATED; -- GitLab