50 lines
894 B
PL/PgSQL
50 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;
|