3 SELECT evergreen.upgrade_deps_block_check('0887', :eg_version);
5 DROP FUNCTION IF EXISTS vandelay.marc21_extract_fixed_field_list( text, text );
7 CREATE OR REPLACE FUNCTION vandelay.marc21_extract_fixed_field_list( marc TEXT, ff TEXT, use_default BOOL DEFAULT FALSE ) RETURNS TEXT[] AS $func$
13 collection TEXT[] := '{}'::TEXT[];
15 rtype := (vandelay.marc21_record_type( marc )).code;
16 FOR ff_pos IN SELECT * FROM config.marc21_ff_pos_map WHERE fixed_field = ff AND rec_type = rtype ORDER BY tag DESC LOOP
17 IF ff_pos.tag = 'ldr' THEN
18 val := oils_xpath_string('//*[local-name()="leader"]', marc);
19 IF val IS NOT NULL THEN
20 val := SUBSTRING( val, ff_pos.start_pos + 1, ff_pos.length );
21 collection := collection || val;
24 FOR tag_data IN SELECT value FROM UNNEST( oils_xpath( '//*[@tag="' || UPPER(ff_pos.tag) || '"]/text()', marc ) ) x(value) LOOP
25 val := SUBSTRING( tag_data.value, ff_pos.start_pos + 1, ff_pos.length );
26 collection := collection || val;
29 CONTINUE WHEN NOT use_default;
30 CONTINUE WHEN ARRAY_UPPER(collection, 1) > 0;
31 val := REPEAT( ff_pos.default_val, ff_pos.length );
32 collection := collection || val;
37 $func$ LANGUAGE PLPGSQL;
39 DROP FUNCTION IF EXISTS vandelay.marc21_extract_fixed_field( text, text );
41 CREATE OR REPLACE FUNCTION vandelay.marc21_extract_fixed_field( marc TEXT, ff TEXT, use_default BOOL DEFAULT FALSE ) RETURNS TEXT AS $func$
48 rtype := (vandelay.marc21_record_type( marc )).code;
49 FOR ff_pos IN SELECT * FROM config.marc21_ff_pos_map WHERE fixed_field = ff AND rec_type = rtype ORDER BY tag DESC LOOP
50 IF ff_pos.tag = 'ldr' THEN
51 val := oils_xpath_string('//*[local-name()="leader"]', marc);
52 IF val IS NOT NULL THEN
53 val := SUBSTRING( val, ff_pos.start_pos + 1, ff_pos.length );
57 FOR tag_data IN SELECT value FROM UNNEST( oils_xpath( '//*[@tag="' || UPPER(ff_pos.tag) || '"]/text()', marc ) ) x(value) LOOP
58 val := SUBSTRING( tag_data.value, ff_pos.start_pos + 1, ff_pos.length );
62 CONTINUE WHEN NOT use_default;
63 val := REPEAT( ff_pos.default_val, ff_pos.length );
69 $func$ LANGUAGE PLPGSQL;
71 DROP FUNCTION IF EXISTS vandelay.marc21_extract_all_fixed_fields( text );
73 CREATE OR REPLACE FUNCTION vandelay.marc21_extract_all_fixed_fields( marc TEXT, use_default BOOL DEFAULT FALSE ) RETURNS SETOF biblio.record_ff_map AS $func$
78 output biblio.record_ff_map%ROWTYPE;
80 rtype := (vandelay.marc21_record_type( marc )).code;
82 FOR ff_pos IN SELECT * FROM config.marc21_ff_pos_map WHERE rec_type = rtype ORDER BY tag DESC LOOP
83 output.ff_name := ff_pos.fixed_field;
84 output.ff_value := NULL;
86 IF ff_pos.tag = 'ldr' THEN
87 output.ff_value := oils_xpath_string('//*[local-name()="leader"]', marc);
88 IF output.ff_value IS NOT NULL THEN
89 output.ff_value := SUBSTRING( output.ff_value, ff_pos.start_pos + 1, ff_pos.length );
91 output.ff_value := NULL;
94 FOR tag_data IN SELECT value FROM UNNEST( oils_xpath( '//*[@tag="' || UPPER(ff_pos.tag) || '"]/text()', marc ) ) x(value) LOOP
95 output.ff_value := SUBSTRING( tag_data, ff_pos.start_pos + 1, ff_pos.length );
96 CONTINUE WHEN output.ff_value IS NULL AND NOT use_default;
97 IF output.ff_value IS NULL THEN output.ff_value := REPEAT( ff_pos.default_val, ff_pos.length ); END IF;
99 output.ff_value := NULL;
107 $func$ LANGUAGE PLPGSQL;
109 CREATE OR REPLACE FUNCTION biblio.marc21_extract_fixed_field_list( rid BIGINT, ff TEXT ) RETURNS TEXT[] AS $func$
110 SELECT * FROM vandelay.marc21_extract_fixed_field_list( (SELECT marc FROM biblio.record_entry WHERE id = $1), $2, TRUE );
113 CREATE OR REPLACE FUNCTION biblio.marc21_extract_fixed_field( rid BIGINT, ff TEXT ) RETURNS TEXT AS $func$
114 SELECT * FROM vandelay.marc21_extract_fixed_field( (SELECT marc FROM biblio.record_entry WHERE id = $1), $2, TRUE );
117 CREATE OR REPLACE FUNCTION biblio.marc21_extract_all_fixed_fields( rid BIGINT ) RETURNS SETOF biblio.record_ff_map AS $func$
118 SELECT $1 AS record, ff_name, ff_value FROM vandelay.marc21_extract_all_fixed_fields( (SELECT marc FROM biblio.record_entry WHERE id = $1), TRUE );