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 9ab9d002387e0fb06be57ee66ce12d317ca80f79..f74262b1005265b68555d9078083a9e179739efc 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 f7edd516dc0a37a5f31b14a5ed7d1e96c0fb1aee..f4813b3ad1c8687604bb6e4e4439a1103ba6f71b 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 7c00499dcdc0b9d82059ef85d6b3dbf439f6fcf0..fef719ef47f5b0e5cd908d873aaa42f300fc9ec4 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;