2 * Copyright (C) 2004-2008 Georgia Public Library Service
3 * Copyright (C) 2008 Equinox Software, Inc.
4 * Mike Rylander <miker@esilibrary.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
22 CREATE OR REPLACE FUNCTION oils_xml_transform ( TEXT, TEXT ) RETURNS TEXT AS $_$
23 SELECT CASE WHEN (SELECT COUNT(*) FROM config.xml_transform WHERE name = $2 AND xslt = '---') > 0 THEN $1
24 ELSE xslt_process($1, (SELECT xslt FROM config.xml_transform WHERE name = $2))
26 $_$ LANGUAGE SQL STRICT IMMUTABLE;
30 CREATE TYPE biblio_field_vtype AS ( record BIGINT, field INT, content TEXT );
31 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field_list INT[] ) RETURNS SETOF biblio_field_vtype AS $_$
34 rec biblio_field_vtype%ROWTYPE;
36 FOR i IN ARRAY_LOWER(field_list,1) .. ARRAY_UPPER(field_list,1) LOOP
37 FOR rec IN SELECT DISTINCT r, field_list[i], BTRIM(REGEXP_REPLACE(REGEXP_REPLACE(f, E'\n', ' ', 'g'), '[ ]+', ' ', 'g'))
40 $$oils_xml_transform(marc,'$$ || (SELECT format FROM config.metabib_field WHERE id = field_list[i]) || $$')$$,
41 'biblio.record_entry',
42 (SELECT xpath FROM config.metabib_field WHERE id = field_list[i]),
44 (SELECT x.prefix FROM config.xml_transform x JOIN config.metabib_field m ON (m.format = x.name) WHERE m.id = field_list[i]),
45 (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])
46 ) AS t( r bigint, f text)
47 WHERE f IS NOT NULL LOOP
55 CREATE OR REPLACE FUNCTION biblio_field_table ( record BIGINT, field INT ) RETURNS SETOF biblio_field_vtype AS $_$
56 SELECT * FROM biblio_field_table( $1, ARRAY[$2] )
61 CREATE OR REPLACE FUNCTION public.extract_marc_field ( TEXT, BIGINT, TEXT, TEXT ) RETURNS TEXT AS $$
62 SELECT regexp_replace(array_to_string( array_accum( output ),' ' ),$4,'','g') FROM xpath_table('id', 'marc', $1, $3, 'id='||$2)x(id INT, output TEXT);
65 CREATE OR REPLACE FUNCTION public.extract_marc_field ( TEXT, BIGINT, TEXT ) RETURNS TEXT AS $$
66 SELECT public.extract_marc_field($1,$2,$3,'');
69 CREATE OR REPLACE FUNCTION oils_i18n_xlate ( keytable TEXT, keyclass TEXT, keycol TEXT, identcol TEXT, keyvalue TEXT, raw_locale TEXT ) RETURNS TEXT AS $func$
71 locale TEXT := REGEXP_REPLACE( REGEXP_REPLACE( raw_locale, E'[;, ].+$', '' ), E'_', '-', 'g' );
72 language TEXT := REGEXP_REPLACE( locale, E'-.+$', '' );
73 result config.i18n_core%ROWTYPE;
75 keyfield TEXT := keyclass || '.' || keycol;
78 -- Try the full locale
81 WHERE fq_field = keyfield
82 AND identity_value = keyvalue
83 AND translation = locale;
85 -- Try just the language
89 WHERE fq_field = keyfield
90 AND identity_value = keyvalue
91 AND translation = language;
94 -- Fall back to the string we passed in in the first place
99 ' FROM ' || keytable ||
100 ' WHERE ' || identcol || ' = ' || quote_literal(keyvalue)
105 RETURN result.string;
107 $func$ LANGUAGE PLPGSQL;
109 -- Functions for marking translatable strings in SQL statements
110 -- Parameters are: primary key, string, class hint, property
111 CREATE OR REPLACE FUNCTION oils_i18n_gettext( INT, TEXT, TEXT, TEXT ) RETURNS TEXT AS $$
115 CREATE OR REPLACE FUNCTION oils_i18n_gettext( TEXT, TEXT, TEXT, TEXT ) RETURNS TEXT AS $$
119 CREATE OR REPLACE FUNCTION public.first_word ( TEXT ) RETURNS TEXT AS $$
120 SELECT SUBSTRING( $1 FROM $_$^\S+$_$);