1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Rework pg_input_error_message(), now renamed pg_input_error_info()

pg_input_error_info() is now a SQL function able to return a row with
more than just the error message generated for incorrect data type
inputs when these are able to handle soft failures, returning more
contents of ErrorData, as of:
- The error message (same as before).
- The error detail, if set.
- The error hint, if set.
- SQL error code.

All the regression tests that relied on pg_input_error_message() are
updated to reflect the effects of the rename.

Per discussion with Tom Lane and Andrew Dunstan.

Author: Nathan Bossart
Discussion: https://postgr.es/m/139a68e1-bd1f-a9a7-b5fe-0be9845c6311@dunslane.net
This commit is contained in:
Michael Paquier
2023-02-28 08:04:13 +09:00
parent 728560db7d
commit b8da37b3ad
117 changed files with 768 additions and 682 deletions

View File

@ -401,16 +401,20 @@ SELECT '1&(2&(4&(5|!6)))'::query_int;
-- test non-error-throwing input
SELECT str as "query_int",
pg_input_is_valid(str,'query_int') as ok,
pg_input_error_message(str,'query_int') as errmsg
errinfo.sql_error_code,
errinfo.message,
errinfo.detail,
errinfo.hint
FROM (VALUES ('1&(2&(4&(5|6)))'),
('1#(2&(4&(5&6)))'),
('foo'))
AS a(str);
query_int | ok | errmsg
-----------------+----+--------------
1&(2&(4&(5|6))) | t |
1#(2&(4&(5&6))) | f | syntax error
foo | f | syntax error
AS a(str),
LATERAL pg_input_error_info(a.str, 'query_int') as errinfo;
query_int | ok | sql_error_code | message | detail | hint
-----------------+----+----------------+--------------+--------+------
1&(2&(4&(5|6))) | t | | | |
1#(2&(4&(5&6))) | f | 42601 | syntax error | |
foo | f | 42601 | syntax error | |
(3 rows)
CREATE TABLE test__int( a int[] );

View File

@ -79,11 +79,15 @@ SELECT '1&(2&(4&(5|!6)))'::query_int;
SELECT str as "query_int",
pg_input_is_valid(str,'query_int') as ok,
pg_input_error_message(str,'query_int') as errmsg
errinfo.sql_error_code,
errinfo.message,
errinfo.detail,
errinfo.hint
FROM (VALUES ('1&(2&(4&(5|6)))'),
('1#(2&(4&(5&6)))'),
('foo'))
AS a(str);
AS a(str),
LATERAL pg_input_error_info(a.str, 'query_int') as errinfo;