From: Mike Rylander Date: Tue, 3 May 2011 23:54:59 +0000 (-0400) Subject: Munged trunk merge X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=cbfda89b089210c6f49a5c33e93b3a31bb156993;p=evergreen%2Fequinox.git Munged trunk merge --- cbfda89b089210c6f49a5c33e93b3a31bb156993 diff --cc Open-ILS/src/sql/Pg/030.schema.metabib.sql index ba5a28fa38,5dc4761691..9884f45af4 --- a/Open-ILS/src/sql/Pg/030.schema.metabib.sql +++ b/Open-ILS/src/sql/Pg/030.schema.metabib.sql @@@ -420,6 -426,86 +420,7 @@@ $func$ LANGUAGE PLPGSQL -- )x(record int, tag text, ind1 text, ind2 text, subfield text, value text); -- $func$ LANGUAGE SQL; -CREATE OR REPLACE FUNCTION biblio.flatten_marc ( TEXT ) RETURNS SETOF metabib.full_rec AS $func$ - -use MARC::Record; -use MARC::File::XML (BinaryEncoding => 'UTF-8'); -use MARC::Charset; - -MARC::Charset->assume_unicode(1); - -my $xml = shift; -my $r = MARC::Record->new_from_xml( $xml ); - -return_next( { tag => 'LDR', value => $r->leader } ); - -for my $f ( $r->fields ) { - if ($f->is_control_field) { - return_next({ tag => $f->tag, value => $f->data }); - } else { - for my $s ($f->subfields) { - return_next({ - tag => $f->tag, - ind1 => $f->indicator(1), - ind2 => $f->indicator(2), - subfield => $s->[0], - value => $s->[1] - }); - - if ( $f->tag eq '245' and $s->[0] eq 'a' ) { - my $trim = $f->indicator(2) || 0; - return_next({ - tag => 'tnf', - ind1 => $f->indicator(1), - ind2 => $f->indicator(2), - subfield => 'a', - value => substr( $s->[1], $trim ) - }); - } - } - } -} - -return undef; - -$func$ LANGUAGE PLPERLU; - -CREATE OR REPLACE FUNCTION vandelay.marc21_record_type( marc TEXT ) RETURNS config.marc21_rec_type_map AS $func$ -DECLARE - ldr TEXT; - tval TEXT; - tval_rec RECORD; - bval TEXT; - bval_rec RECORD; - retval config.marc21_rec_type_map%ROWTYPE; -BEGIN - ldr := oils_xpath_string( '//*[local-name()="leader"]', marc ); - - IF ldr IS NULL OR ldr = '' THEN - SELECT * INTO retval FROM config.marc21_rec_type_map WHERE code = 'BKS'; - RETURN retval; - END IF; - - SELECT * INTO tval_rec FROM config.marc21_ff_pos_map WHERE fixed_field = 'Type' LIMIT 1; -- They're all the same - SELECT * INTO bval_rec FROM config.marc21_ff_pos_map WHERE fixed_field = 'BLvl' LIMIT 1; -- They're all the same - - - tval := SUBSTRING( ldr, tval_rec.start_pos + 1, tval_rec.length ); - bval := SUBSTRING( ldr, bval_rec.start_pos + 1, bval_rec.length ); - - -- RAISE NOTICE 'type %, blvl %, ldr %', tval, bval, ldr; - - SELECT * INTO retval FROM config.marc21_rec_type_map WHERE type_val LIKE '%' || tval || '%' AND blvl_val LIKE '%' || bval || '%'; - - - IF retval.code IS NULL THEN - SELECT * INTO retval FROM config.marc21_rec_type_map WHERE code = 'BKS'; - END IF; - - RETURN retval; -END; -$func$ LANGUAGE PLPGSQL; + CREATE OR REPLACE FUNCTION biblio.marc21_record_type( rid BIGINT ) RETURNS config.marc21_rec_type_map AS $func$ SELECT * FROM vandelay.marc21_record_type( (SELECT marc FROM biblio.record_entry WHERE id = $1) ); $func$ LANGUAGE SQL;