diff options
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r-- | src/backend/utils/adt/cash.c | 11 | ||||
-rw-r--r-- | src/backend/utils/adt/uuid.c | 8 |
2 files changed, 10 insertions, 9 deletions
diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index f7e78fa1056..32fbad2f57d 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -96,6 +96,7 @@ Datum cash_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); + Node *escontext = fcinfo->context; Cash result; Cash value = 0; Cash dec = 0; @@ -209,7 +210,7 @@ cash_in(PG_FUNCTION_ARGS) if (pg_mul_s64_overflow(value, 10, &value) || pg_sub_s64_overflow(value, digit, &value)) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("value \"%s\" is out of range for type %s", str, "money"))); @@ -234,7 +235,7 @@ cash_in(PG_FUNCTION_ARGS) { /* remember we build the value in the negative */ if (pg_sub_s64_overflow(value, 1, &value)) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("value \"%s\" is out of range for type %s", str, "money"))); @@ -244,7 +245,7 @@ cash_in(PG_FUNCTION_ARGS) for (; dec < fpoint; dec++) { if (pg_mul_s64_overflow(value, 10, &value)) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("value \"%s\" is out of range for type %s", str, "money"))); @@ -271,7 +272,7 @@ cash_in(PG_FUNCTION_ARGS) else if (strncmp(s, csymbol, strlen(csymbol)) == 0) s += strlen(csymbol); else - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s: \"%s\"", "money", str))); @@ -284,7 +285,7 @@ cash_in(PG_FUNCTION_ARGS) if (sgn > 0) { if (value == PG_INT64_MIN) - ereport(ERROR, + ereturn(escontext, (Datum) 0, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("value \"%s\" is out of range for type %s", str, "money"))); diff --git a/src/backend/utils/adt/uuid.c b/src/backend/utils/adt/uuid.c index 7cec9372485..e86635a4ac3 100644 --- a/src/backend/utils/adt/uuid.c +++ b/src/backend/utils/adt/uuid.c @@ -31,7 +31,7 @@ typedef struct hyperLogLogState abbr_card; /* cardinality estimator */ } uuid_sortsupport_state; -static void string_to_uuid(const char *source, pg_uuid_t *uuid); +static void string_to_uuid(const char *source, pg_uuid_t *uuid, Node *escontext); static int uuid_internal_cmp(const pg_uuid_t *arg1, const pg_uuid_t *arg2); static int uuid_fast_cmp(Datum x, Datum y, SortSupport ssup); static bool uuid_abbrev_abort(int memtupcount, SortSupport ssup); @@ -44,7 +44,7 @@ uuid_in(PG_FUNCTION_ARGS) pg_uuid_t *uuid; uuid = (pg_uuid_t *) palloc(sizeof(*uuid)); - string_to_uuid(uuid_str, uuid); + string_to_uuid(uuid_str, uuid, fcinfo->context); PG_RETURN_UUID_P(uuid); } @@ -87,7 +87,7 @@ uuid_out(PG_FUNCTION_ARGS) * digits, is the only one used for output.) */ static void -string_to_uuid(const char *source, pg_uuid_t *uuid) +string_to_uuid(const char *source, pg_uuid_t *uuid, Node *escontext) { const char *src = source; bool braces = false; @@ -130,7 +130,7 @@ string_to_uuid(const char *source, pg_uuid_t *uuid) return; syntax_error: - ereport(ERROR, + ereturn(escontext,, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s: \"%s\"", "uuid", source))); |