]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/000.functions.general.sql
Merge branch 'opac-tt-poc' of git+ssh://yeti.esilibrary.com/home/evergreen/evergreen...
[working/Evergreen.git] / Open-ILS / src / sql / Pg / 000.functions.general.sql
1 -- Rather than polluting the public schema with general Evergreen
2 -- functions, carve out a dedicated schema
3
4 DROP SCHEMA IF EXISTS evergreen CASCADE;
5
6 BEGIN;
7
8 CREATE SCHEMA evergreen;
9
10 CREATE OR REPLACE FUNCTION evergreen.lowercase( TEXT ) RETURNS TEXT AS $$
11     return lc(shift);
12 $$ LANGUAGE PLPERLU STRICT IMMUTABLE;
13
14 CREATE OR REPLACE FUNCTION evergreen.xml_escape(str TEXT) RETURNS text AS $$
15     SELECT REPLACE(REPLACE(REPLACE($1,
16        '&', '&'),
17        '<', '&lt;'),
18        '>', '&gt;');
19 $$ LANGUAGE SQL IMMUTABLE;
20
21 CREATE OR REPLACE FUNCTION evergreen.change_db_setting(setting_name TEXT, settings TEXT[]) RETURNS VOID AS $$
22 BEGIN
23 EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET ' || quote_ident(setting_name) || ' = ' || array_to_string(settings, ',');
24 END;
25 $$ LANGUAGE plpgsql;
26
27 CREATE OR REPLACE FUNCTION evergreen.fake_fkey_tgr () RETURNS TRIGGER AS $F$
28 DECLARE
29     copy_id BIGINT;
30 BEGIN
31     EXECUTE 'SELECT ($1).' || quote_ident(TG_ARGV[0]) INTO copy_id USING NEW;
32     PERFORM * FROM asset.copy WHERE id = copy_id;
33     IF NOT FOUND THEN
34         RAISE EXCEPTION 'Key (%.%=%) does not exist in asset.copy', TG_TABLE_SCHEMA, TG_TABLE_NAME, copy_id;
35     END IF;
36     RETURN NULL;
37 END;
38 $F$ LANGUAGE PLPGSQL;
39
40 SELECT evergreen.change_db_setting('search_path', ARRAY['evergreen','public','pg_catalog']);
41
42 COMMIT;