4 CREATE OR REPLACE FUNCTION oils_xml_transform ( TEXT, TEXT ) RETURNS TEXT AS $_$
5 SELECT CASE WHEN (SELECT COUNT(*) FROM config.xml_transform WHERE name = $2 AND xslt = '---') > 0 THEN $1
6 ELSE xslt_process($1, (SELECT xslt FROM config.xml_transform WHERE name = $2))
8 $_$ LANGUAGE SQL STRICT IMMUTABLE;
12 CREATE TYPE biblio_field_vtype AS ( record BIGINT, field INT, content TEXT );
13 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field_list INT[] ) RETURNS SETOF biblio_field_vtype AS $_$
16 rec biblio_field_vtype%ROWTYPE;
18 FOR i IN ARRAY_LOWER(field_list,1) .. ARRAY_UPPER(field_list,1) LOOP
19 FOR rec IN SELECT DISTINCT r, field_list[i], BTRIM(REGEXP_REPLACE(REGEXP_REPLACE(f, E'\n', ' ', 'g'), '[ ]+', ' ', 'g'))
22 $$oils_xml_transform(marc,'$$ || (SELECT format FROM config.metabib_field WHERE id = field_list[i]) || $$')$$,
23 'biblio.record_entry',
24 (SELECT xpath FROM config.metabib_field WHERE id = field_list[i]),
26 (SELECT x.prefix FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i]),
27 (SELECT x.namespace_uri FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i])
28 ) AS t( r bigint, f text)
29 WHERE f IS NOT NULL LOOP
37 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field INT ) RETURNS SETOF biblio_field_vtype AS $_$
38 SELECT * FROM biblio_field_table( $1, ARRAY[$2] )
43 CREATE OR REPLACE FUNCTION oils_i18n_xlate ( keytable TEXT, keycol TEXT, identcol TEXT, keyvalue TEXT, raw_locale TEXT ) RETURNS TEXT AS $func$
45 locale TEXT := LOWER( REGEXP_REPLACE( REGEXP_REPLACE( raw_locale, E'[;, ].+$', '' ), E'-', '_', 'g' ) );
46 language TEXT := REGEXP_REPLACE( locale, E'_.+$', '' );
47 result config.i18n_core%ROWTYPE;
49 keyfield TEXT := keytable || '.' || keycol;
52 -- Try the full locale
55 WHERE fq_field = keyfield
56 AND identity_value = keyvalue
57 AND translation = locale;
59 -- Try just the language
63 WHERE fq_field = keyfield
64 AND identity_value = keyvalue
65 AND translation = language;
68 -- Fall back to the string we passed in in the first place
73 ' FROM ' || keytable ||
74 ' WHERE ' || identcol || ' = ' || quote_literal(keyvalue)
81 $func$ LANGUAGE PLPGSQL;
83 -- Function for marking translatable strings in SQL statements
84 CREATE OR REPLACE FUNCTION oils_i18n_gettext( TEXT ) RETURNS TEXT AS $$