xssbook2/db/rest/util/_api_raise.sql

51 lines
894 B
PL/PgSQL

CREATE TABLE _api.err_map (
err INTEGER,
pg_err TEXT
);
ALTER TABLE _api.err_map OWNER TO xssbook;
ALTER TABLE ONLY _api.err_map
ADD CONSTRAINT err_map_pkey PRIMARY KEY (err);
INSERT INTO _api.err_map (err, pg_err)
VALUES
(400, 'P0001'),
(401, '42501'),
(403, '42501'),
(404, '42883'),
(409, '23505'),
(500, 'XX001');
CREATE FUNCTION _api.raise(
_msg TEXT DEFAULT '',
_detail TEXT DEFAULT '',
_hint TEXT DEFAULT '',
_err INTEGER DEFAULT 400
)
RETURNS BOOLEAN
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
_pg_err TEXT;
BEGIN
SELECT pg_err INTO _pg_err
FROM _api.err_map
WHERE err = _err;
RAISE EXCEPTION USING
MESSAGE := _msg,
DETAIL := _detail,
HINT := _hint,
ERRCODE := _pg_err;
RETURN FALSE;
END
$BODY$;
GRANT SELECT ON TABLE _api.err_map
TO rest_anon, rest_user;
GRANT EXECUTE ON FUNCTION _api.raise(TEXT, TEXT, TEXT, INTEGER)
TO rest_anon, rest_user;