d48c4a0cda0ac693aedc35a7b2c19107b5c1957d
[Evergreen.git] / Open-ILS / src / sql / Pg / t / regress / lp1272074_0858_fixed_field_enhancements.pg
1 \set ECHO
2 \set QUIET 1
3 -- Turn off echo and keep things quiet.
4
5 -- Format the output for nice TAP.
6 \pset format unaligned
7 \pset tuples_only true
8 \pset pager
9
10 -- Revert all changes on failure.
11 \set ON_ERROR_ROLLBACK 1
12 \set ON_ERROR_STOP true
13 \set QUIET 1
14
15 -- let's do this thing
16 BEGIN;
17
18 SELECT plan(1);
19
20 CREATE OR REPLACE FUNCTION pg_temp.test_phys_char_no_overlaps() RETURNS BOOL AS $$
21 DECLARE
22     ptype   TEXT;
23     str     TEXT;
24     subf    RECORD;
25     gap     INT;
26 BEGIN
27     FOR ptype IN
28         SELECT ptype_key FROM config.marc21_physical_characteristic_type_map
29     LOOP
30         str := ptype;
31
32         FOR subf IN
33             SELECT subfield, start_pos, length
34             FROM config.marc21_physical_characteristic_subfield_map
35             WHERE ptype_key = ptype
36             ORDER BY subfield
37         LOOP
38             gap := subf.start_pos - LENGTH(str);
39             IF gap > 0 THEN
40                 str := str || REPEAT(' ', gap);
41             ELSIF gap < 0 THEN
42                 -- This is a WARNING instead of an ERROR just so we can
43                 -- fail the test nicely. But it really is an error.
44                 RAISE WARNING 'subfield % for ptype % backs up!',
45                     ptype, subf.subfield;
46                 RETURN FALSE;
47             END IF;
48             str := str || REPEAT('|', subf.length);
49         END LOOP;
50         -- RAISE DEBUG '%', str;
51     END LOOP;
52
53     RETURN TRUE;
54 END;
55 $$ LANGUAGE PLPGSQL;
56
57 SELECT is(
58     pg_temp.test_phys_char_no_overlaps(),
59     TRUE,
60     'Ensure that no set of subfields for a given Physical Characteristics ''type'' (00/a) contains any overlaps.'
61 );
62
63 SELECT * FROM finish();
64 ROLLBACK;
65