51 lines
894 B
MySQL
51 lines
894 B
MySQL
|
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;
|