Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc(text, integer)
- RETURNS text AS $BODY$
- use strict;
- use warnings;
- my $callnum = uc(shift); # All uppercase
- my $mode = shift;
- if ($mode) { # Dewey number expansion (second group(s) are left-aligned)
- $callnum =~ s/([0-9]+)((\.|\s+)([0-9]+))?/sprintf(" %015.15s", $1) . ($2 ? $3 . do {my $tmp = sprintf("%-15.15s", $4); $tmp =~ tr! !0!; $tmp . ' '; }: '.000000000000000 ')/eg;
- } else { # Normal number expansion (everything is right-aligned)
- $callnum =~ s/([0-9]+)/sprintf("%015.15s", $1)/eg;
- }
- $callnum =~ s/([0-9.]+)/ $1 /g; # Add spaces before/after numbers
- # This does *not* preserve . or _ intentionally
- $callnum =~ s/[^A-Z0-9]/ /g; # Replace special characters with spaces
- $callnum =~ s/ {2,}/ /g; # Collapse multiple spaces to 1
- $callnum =~ s/^\s//g; # Remove leading spaces
- $callnum =~ s/\s$//g; # Remove trailing spaces
- return $callnum;
- $BODY$ LANGUAGE plperlu;
- CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc_generic(text)
- RETURNS text AS $BODY$
- SELECT asset.label_normalizer_mvlc($1, 0);
- $BODY$ LANGUAGE sql;
- CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc_dewey(text)
- RETURNS text AS $BODY$
- SELECT asset.label_normalizer_mvlc($1, 1);
- $BODY$ LANGUAGE sql;
- UPDATE asset.call_number_class SET normalizer = 'asset.label_normalizer_mvlc_generic' WHERE id = 1;
- UPDATE asset.call_number_class SET normalizer = 'asset.label_normalizer_mvlc_dewey' WHERE id = 2;
- UPDATE asset.call_number SET label = label WHERE label_class IN (1,2);
- Example output:
- 200.5 Dan
- Orig Generic: 200.5 DAN
- Orig Dewey: 200_500000000000000_DAN
- New Generic: 000000000000200 000000000000005 DAN
- New Dewey: 000000000000200 500000000000000 DAN
- 200.6 Dan
- Orig Generic: 200.6 DAN
- Orig Dewey: 200_600000000000000_DAN
- New Generic: 000000000000200 000000000000006 DAN
- New Dewey: 000000000000200 600000000000000 DAN
- 200.52 Dan
- Orig Generic: 200.52 DAN
- Orig Dewey: 200_520000000000000_DAN
- New Generic: 000000000000200 000000000000052 DAN
- New Dewey: 000000000000200 520000000000000 DAN
- Disc 1-3
- Orig Generic: DISC 1 3
- Orig Dewey: DISC_13
- New Generic: DISC 000000000000001 000000000000003
- New Dewey: DISC 000000000000001 000000000000000 000000000000003 000000000000000
- Disc 10-12
- Orig Generic: DISC 10 12
- Orig Dewey: DISC_1012
- New Generic: DISC 000000000000010 000000000000012
- New Dewey: DISC 000000000000010 000000000000000 000000000000012 000000000000000
- Fic/King
- Orig Generic: FIC KING
- Orig Dewey: FICKING
- New Generic: FIC KING
- New Dewey: FIC KING
- REF 973.2 AME v.1
- Orig Generic: REF 973.2 AME V.1
- Orig Dewey: REF_973_200000000000000_AME_V_1
- New Generic: REF 000000000000973 000000000000002 AME V 000000000000001
- New Dewey: REF 000000000000973 200000000000000 AME V 000000000000001 000000000000000
- REF 973.2 AME v.2
- Orig Generic: REF 973.2 AME V.2
- Orig Dewey: REF_973_200000000000000_AME_V_2
- New Generic: REF 000000000000973 000000000000002 AME V 000000000000002
- New Dewey: REF 000000000000973 200000000000000 AME V 000000000000002 000000000000000
- REF 973.2 AME v.10
- Orig Generic: REF 973.2 AME V.10
- Orig Dewey: REF_973_200000000000000_AME_V_10
- New Generic: REF 000000000000973 000000000000002 AME V 000000000000010
- New Dewey: REF 000000000000973 200000000000000 AME V 000000000000010 000000000000000
- Season 1 Disc 1
- Orig Generic: SEASON 1 DISC 1
- Orig Dewey: SEASON_1_DISC_100000000000000
- New Generic: SEASON 000000000000001 DISC 000000000000001
- New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000001 000000000000000
- Season 1 Disc 2
- Orig Generic: SEASON 1 DISC 2
- Orig Dewey: SEASON_1_DISC_200000000000000
- New Generic: SEASON 000000000000001 DISC 000000000000002
- New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000002 000000000000000
- Season 1 Disc 10
- Orig Generic: SEASON 1 DISC 10
- Orig Dewey: SEASON_1_DISC_100000000000000
- New Generic: SEASON 000000000000001 DISC 000000000000010
- New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000010 000000000000000
- Example call numbers ordered by:
- Orig Generic:
- 200.5 Dan
- 200.52 Dan
- 200.6 Dan
- Disc 1-3
- Disc 10-12
- Fic/King
- REF 973.2 AME v.1
- REF 973.2 AME v.10
- REF 973.2 AME v.2
- Season 1 Disc 1
- Season 1 Disc 10
- Season 1 Disc 2
- Orig Dewey:
- 200.5 Dan
- 200.52 Dan
- 200.6 Dan
- Disc 10-12
- Disc 1-3
- Fic/King
- REF 973.2 AME v.1
- REF 973.2 AME v.10
- REF 973.2 AME v.2
- Season 1 Disc 1
- Season 1 Disc 10
- Season 1 Disc 2
- New Generic:
- 200.5 Dan
- 200.6 Dan
- 200.52 Dan
- Disc 1-3
- Disc 10-12
- Fic/King
- REF 973.2 AME v.1
- REF 973.2 AME v.2
- REF 973.2 AME v.10
- Season 1 Disc 1
- Season 1 Disc 2
- Season 1 Disc 10
- New Dewey:
- 200.5 Dan
- 200.52 Dan
- 200.6 Dan
- Disc 1-3
- Disc 10-12
- Fic/King
- REF 973.2 AME v.1
- REF 973.2 AME v.2
- REF 973.2 AME v.10
- Season 1 Disc 1
- Season 1 Disc 2
- Season 1 Disc 10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement