From 1c9259243e6ac56dd29caae171795dec0468c269 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 4 Jan 2023 11:38:19 +0000 Subject: [PATCH] Fix base64 bug: ob doesn't return null as expected --- src/observer/virtual_table/ob_information_kvcache_table.h | 6 +++--- src/sql/engine/expr/ob_expr_from_base64.cpp | 4 +++- src/sql/engine/expr/ob_expr_to_base64.cpp | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/observer/virtual_table/ob_information_kvcache_table.h b/src/observer/virtual_table/ob_information_kvcache_table.h index 3097933d6..1d4f21e4d 100644 --- a/src/observer/virtual_table/ob_information_kvcache_table.h +++ b/src/observer/virtual_table/ob_information_kvcache_table.h @@ -12,9 +12,9 @@ #ifndef OCEANBASE_OBSERVER_VIRTUAL_TABLE_OB_INFORMATION_KVCACHE_TABLE_ #define OCEANBASE_OBSERVER_VIRTUAL_TABLE_OB_INFORMATION_KVCACHE_TABLE_ - -#include "share/ob_virtual_table_scanner_iterator.h" -#include "share/cache/ob_kv_storecache.h" + +#include "share/ob_virtual_table_scanner_iterator.h" +#include "share/cache/ob_kv_storecache.h" #include "lib/stat/ob_di_cache.h" diff --git a/src/sql/engine/expr/ob_expr_from_base64.cpp b/src/sql/engine/expr/ob_expr_from_base64.cpp index 5b39fa931..992b1bb52 100644 --- a/src/sql/engine/expr/ob_expr_from_base64.cpp +++ b/src/sql/engine/expr/ob_expr_from_base64.cpp @@ -179,7 +179,9 @@ int ObExprFromBase64::eval_from_base64_batch(const ObExpr &expr, ObEvalCtx &ctx, const ObString & in_raw = arg->get_string(); ObLength in_raw_len = in_raw.length(); const char *buf = in_raw.ptr(); - if (NULL == buf) { + if (arg->is_null()) { + res[j].set_null(); + } else if (NULL == buf) { res[j].set_string(nullptr, 0); } else { char *output_buf = nullptr; diff --git a/src/sql/engine/expr/ob_expr_to_base64.cpp b/src/sql/engine/expr/ob_expr_to_base64.cpp index 3cb4a7d7c..07c12306a 100644 --- a/src/sql/engine/expr/ob_expr_to_base64.cpp +++ b/src/sql/engine/expr/ob_expr_to_base64.cpp @@ -172,8 +172,10 @@ int ObExprToBase64::eval_to_base64_batch(const ObExpr &expr, ObLength in_raw_len = in_raw.length(); const char *buf = in_raw.ptr(); char *output_buf = nullptr; - int64_t buf_len = base64_needed_encoded_length(in_raw_len); - if (OB_UNLIKELY(buf_len == 0)) { + int64_t buf_len = 0; + if (arg->is_null()) { + res[j].set_null(); + } else if (OB_UNLIKELY((buf_len = base64_needed_encoded_length(in_raw_len)) == 0)) { res[j].set_string(nullptr, 0); } else { int64_t pos = 0;