From deff39c1fead205e6a9effac652fab189a24bb33 Mon Sep 17 00:00:00 2001 From: zhubin79 <18784715772@163.com> Date: Tue, 22 Apr 2025 15:17:41 +0800 Subject: [PATCH] fix lpad core with encoding sql_ascii --- .../b_compatibility_substr_func.out | 54 +++++++++++++++++++ contrib/dolphin/plugin_utils/adt/a_compat.cpp | 1 + .../b_compatibility_substr_func.sql | 17 ++++++ 3 files changed, 72 insertions(+) diff --git a/contrib/dolphin/expected/builtin_funcs/b_compatibility_substr_func.out b/contrib/dolphin/expected/builtin_funcs/b_compatibility_substr_func.out index 9ab9d0023..f74262b10 100644 --- a/contrib/dolphin/expected/builtin_funcs/b_compatibility_substr_func.out +++ b/contrib/dolphin/expected/builtin_funcs/b_compatibility_substr_func.out @@ -588,3 +588,57 @@ reset bytea_output; reset dolphin.sql_mode; reset dolphin.b_compatibility_mode; reset current_schema; +set dolphin.b_compatibility_mode = off; +create database db_sqlascii dbcompatibility 'B' encoding='SQL_ASCII' lc_collate='C' lc_ctype='C'; +\c db_sqlascii +set dolphin.b_compatibility_mode = on; +select LPAD('abc',2147483647,'abc'); +WARNING: requested length too large +CONTEXT: referenced column: lpad + lpad +------ + +(1 row) + +select LPAD(repeat('abc',1000),2147483647,'abc'); +WARNING: requested length too large +CONTEXT: referenced column: lpad + lpad +------ + +(1 row) + +select LPAD(NULL,2147483647,repeat('abc',1000)); + lpad +------ + +(1 row) + +select LPAD('',2147483647,repeat('abc',1000)); +WARNING: requested length too large +CONTEXT: referenced column: lpad + lpad +------ + +(1 row) + +select LPAD('abc',2147483647,repeat('abc',1000)); +WARNING: requested length too large +CONTEXT: referenced column: lpad + lpad +------ + +(1 row) + +select LPAD(repeat('abc',1000),2147483647,repeat('abc',1000)); +WARNING: requested length too large +CONTEXT: referenced column: lpad + lpad +------ + +(1 row) + +\c contrib_regression +set dolphin.b_compatibility_mode = off; +drop database db_sqlascii; +reset dolphin.b_compatibility_mode; diff --git a/contrib/dolphin/plugin_utils/adt/a_compat.cpp b/contrib/dolphin/plugin_utils/adt/a_compat.cpp index f7edd516d..f4813b3ad 100644 --- a/contrib/dolphin/plugin_utils/adt/a_compat.cpp +++ b/contrib/dolphin/plugin_utils/adt/a_compat.cpp @@ -353,6 +353,7 @@ Datum lpad(PG_FUNCTION_ARGS) } PG_CATCH(); { + FlushErrorState(); ereport(level, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("requested length too large"))); PG_RETURN_NULL(); } diff --git a/contrib/dolphin/sql/builtin_funcs/b_compatibility_substr_func.sql b/contrib/dolphin/sql/builtin_funcs/b_compatibility_substr_func.sql index 7c00499dc..fef719ef4 100644 --- a/contrib/dolphin/sql/builtin_funcs/b_compatibility_substr_func.sql +++ b/contrib/dolphin/sql/builtin_funcs/b_compatibility_substr_func.sql @@ -272,3 +272,20 @@ reset bytea_output; reset dolphin.sql_mode; reset dolphin.b_compatibility_mode; reset current_schema; + +set dolphin.b_compatibility_mode = off; +create database db_sqlascii dbcompatibility 'B' encoding='SQL_ASCII' lc_collate='C' lc_ctype='C'; +\c db_sqlascii +set dolphin.b_compatibility_mode = on; + +select LPAD('abc',2147483647,'abc'); +select LPAD(repeat('abc',1000),2147483647,'abc'); +select LPAD(NULL,2147483647,repeat('abc',1000)); +select LPAD('',2147483647,repeat('abc',1000)); +select LPAD('abc',2147483647,repeat('abc',1000)); +select LPAD(repeat('abc',1000),2147483647,repeat('abc',1000)); + +\c contrib_regression +set dolphin.b_compatibility_mode = off; +drop database db_sqlascii; +reset dolphin.b_compatibility_mode; -- Gitee