From ba071042d08f9dd55de1800ac1c04ffafceecff4 Mon Sep 17 00:00:00 2001 From: Amul Sul Date: Tue, 13 Dec 2022 14:41:05 +0530 Subject: [PATCH v1 10/14] Change int2vectorin to allow non-throw error reporting --- src/backend/utils/adt/int.c | 9 +++++---- src/test/regress/expected/type_sanity.out | 24 +++++++++++++++++++++++ src/test/regress/sql/type_sanity.sql | 5 +++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index 8de38abd11d..2c90e526a60 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -141,6 +141,7 @@ Datum int2vectorin(PG_FUNCTION_ARGS) { char *intString = PG_GETARG_CSTRING(0); + Node *escontext = fcinfo->context; int2vector *result; int n; @@ -160,19 +161,19 @@ int2vectorin(PG_FUNCTION_ARGS) l = strtol(intString, &endp, 10); if (intString == endp) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s: \"%s\"", "smallint", intString))); if (errno == ERANGE || l < SHRT_MIN || l > SHRT_MAX) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("value \"%s\" is out of range for type %s", intString, "smallint"))); if (*endp && *endp != ' ') - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s: \"%s\"", "integer", intString))); @@ -183,7 +184,7 @@ int2vectorin(PG_FUNCTION_ARGS) while (*intString && isspace((unsigned char) *intString)) intString++; if (*intString) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("int2vector has too many elements"))); diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out index 0b015b424f1..241b628fb07 100644 --- a/src/test/regress/expected/type_sanity.out +++ b/src/test/regress/expected/type_sanity.out @@ -832,3 +832,27 @@ SELECT pg_input_error_message('1', 'gtsvector'); cannot accept a value of type gtsvector (1 row) +SELECT pg_input_is_valid('1 XYZ', 'int2vector'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('1 XYZ', 'int2vector'); + pg_input_error_message +----------------------------------------------- + invalid input syntax for type smallint: "XYZ" +(1 row) + +SELECT pg_input_is_valid('1 99999', 'int2vector'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('1 99999', 'int2vector'); + pg_input_error_message +------------------------------------------------- + value "99999" is out of range for type smallint +(1 row) + diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql index d024d950b3e..b59ebf9490c 100644 --- a/src/test/regress/sql/type_sanity.sql +++ b/src/test/regress/sql/type_sanity.sql @@ -605,3 +605,8 @@ SELECT pg_input_error_message('1', 'pg_brin_minmax_multi_summary'); SELECT pg_input_is_valid('1', 'gtsvector'); SELECT pg_input_error_message('1', 'gtsvector'); + +SELECT pg_input_is_valid('1 XYZ', 'int2vector'); +SELECT pg_input_error_message('1 XYZ', 'int2vector'); +SELECT pg_input_is_valid('1 99999', 'int2vector'); +SELECT pg_input_error_message('1 99999', 'int2vector'); -- 2.18.0