[open-ils-commits] r16506 - trunk/Open-ILS/src/sql/Pg/upgrade (miker)

svn at svn.open-ils.org svn at svn.open-ils.org
Wed May 26 14:07:08 EDT 2010


Author: miker
Date: 2010-05-26 14:07:04 -0400 (Wed, 26 May 2010)
New Revision: 16506

Added:
   trunk/Open-ILS/src/sql/Pg/upgrade/0277.schema.address_schema_drift.sql
Removed:
   trunk/Open-ILS/src/sql/Pg/upgrade/0227.schema.address_schema_drift.sql
Log:
arg ... typo in filename. moved

Deleted: trunk/Open-ILS/src/sql/Pg/upgrade/0227.schema.address_schema_drift.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0227.schema.address_schema_drift.sql	2010-05-26 15:08:33 UTC (rev 16505)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0227.schema.address_schema_drift.sql	2010-05-26 18:07:04 UTC (rev 16506)
@@ -1,222 +0,0 @@
-BEGIN;
-
-INSERT INTO config.upgrade_log (version) VALUES ('0227'); -- miker
-
--- Use oils_xpath_table instead of pgxml's xpath_table
-CREATE OR REPLACE FUNCTION acq.extract_holding_attr_table (lineitem int, tag text) RETURNS SETOF acq.flat_lineitem_holding_subfield AS $$
-DECLARE
-    counter INT;
-    lida    acq.flat_lineitem_holding_subfield%ROWTYPE;
-BEGIN
-
-    SELECT  COUNT(*) INTO counter
-      FROM  oils_xpath_table(
-                'id',
-                'marc',
-                'acq.lineitem',
-                '//*[@tag="' || tag || '"]',
-                'id=' || lineitem
-            ) as t(i int,c text);
-
-    FOR i IN 1 .. counter LOOP
-        FOR lida IN
-            SELECT  *
-              FROM  (   SELECT  id,i,t,v
-                          FROM  oils_xpath_table(
-                                    'id',
-                                    'marc',
-                                    'acq.lineitem',
-                                    '//*[@tag="' || tag || '"][position()=' || i || ']/*/@code|' ||
-                                        '//*[@tag="' || tag || '"][position()=' || i || ']/*[@code]',
-                                    'id=' || lineitem
-                                ) as t(id int,t text,v text)
-                    )x
-        LOOP
-            RETURN NEXT lida;
-        END LOOP;
-    END LOOP;
-
-    RETURN;
-END;
-$$ LANGUAGE PLPGSQL;
-
--- Use the identifier search class tsconfig
-DROP TRIGGER metabib_identifier_field_entry_fti_trigger ON identifier_field_entry;
-CREATE TRIGGER metabib_identifier_field_entry_fti_trigger
-    BEFORE INSERT OR UPDATE ON identifier_field_entry
-    FOR EACH ROW
-    EXECUTE PROCEDURE public.oils_tsearch2('identifier');
-
--- Return the correct fail_part when the item can't be found
-CREATE OR REPLACE FUNCTION action.item_user_circ_test( circ_ou INT, match_item BIGINT, match_user INT, renewal BOOL ) RETURNS SETOF action.matrix_test_result AS $func$
-DECLARE
-    user_object        actor.usr%ROWTYPE;
-    standing_penalty    config.standing_penalty%ROWTYPE;
-    item_object        asset.copy%ROWTYPE;
-    item_status_object    config.copy_status%ROWTYPE;
-    item_location_object    asset.copy_location%ROWTYPE;
-    result            action.matrix_test_result;
-    circ_test        config.circ_matrix_matchpoint%ROWTYPE;
-    out_by_circ_mod        config.circ_matrix_circ_mod_test%ROWTYPE;
-    circ_mod_map        config.circ_matrix_circ_mod_test_map%ROWTYPE;
-    hold_ratio          action.hold_stats%ROWTYPE;
-    penalty_type         TEXT;
-    tmp_grp         INT;
-    items_out        INT;
-    context_org_list        INT[];
-    done            BOOL := FALSE;
-BEGIN
-    result.success := TRUE;
-
-    -- Fail if the user is BARRED
-    SELECT INTO user_object * FROM actor.usr WHERE id = match_user;
-
-    -- Fail if we couldn't find the user 
-    IF user_object.id IS NULL THEN
-        result.fail_part := 'no_user';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-        RETURN;
-    END IF;
-
-    SELECT INTO item_object * FROM asset.copy WHERE id = match_item;
-
-    -- Fail if we couldn't find the item 
-    IF item_object.id IS NULL THEN
-        result.fail_part := 'no_item';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-        RETURN;
-    END IF;
-
-    SELECT INTO circ_test * FROM action.find_circ_matrix_matchpoint(circ_ou, match_item, match_user, renewal);
-    result.matchpoint := circ_test.id;
-
-    -- Fail if we couldn't find a matchpoint
-    IF result.matchpoint IS NULL THEN
-        result.fail_part := 'no_matchpoint';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    IF user_object.barred IS TRUE THEN
-        result.fail_part := 'actor.usr.barred';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    -- Fail if the item can't circulate
-    IF item_object.circulate IS FALSE THEN
-        result.fail_part := 'asset.copy.circulate';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    -- Fail if the item isn't in a circulateable status on a non-renewal
-    IF NOT renewal AND item_object.status NOT IN ( 0, 7, 8 ) THEN
-        result.fail_part := 'asset.copy.status';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    ELSIF renewal AND item_object.status <> 1 THEN
-        result.fail_part := 'asset.copy.status';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    -- Fail if the item can't circulate because of the shelving location
-    SELECT INTO item_location_object * FROM asset.copy_location WHERE id = item_object.location;
-    IF item_location_object.circulate IS FALSE THEN
-        result.fail_part := 'asset.copy_location.circulate';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    SELECT INTO context_org_list ARRAY_ACCUM(id) FROM actor.org_unit_full_path( circ_test.org_unit );
-
-    -- Fail if the test is set to hard non-circulating
-    IF circ_test.circulate IS FALSE THEN
-        result.fail_part := 'config.circ_matrix_test.circulate';
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END IF;
-
-    -- Fail if the total copy-hold ratio is too low
-    IF circ_test.total_copy_hold_ratio IS NOT NULL THEN
-        SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
-        IF hold_ratio.total_copy_ratio IS NOT NULL AND hold_ratio.total_copy_ratio < circ_test.total_copy_hold_ratio THEN
-            result.fail_part := 'config.circ_matrix_test.total_copy_hold_ratio';
-            result.success := FALSE;
-            done := TRUE;
-            RETURN NEXT result;
-        END IF;
-    END IF;
-
-    -- Fail if the available copy-hold ratio is too low
-    IF circ_test.available_copy_hold_ratio IS NOT NULL THEN
-        SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
-        IF hold_ratio.available_copy_ratio IS NOT NULL AND hold_ratio.available_copy_ratio < circ_test.available_copy_hold_ratio THEN
-            result.fail_part := 'config.circ_matrix_test.available_copy_hold_ratio';
-            result.success := FALSE;
-            done := TRUE;
-            RETURN NEXT result;
-        END IF;
-    END IF;
-
-    IF renewal THEN
-        penalty_type = '%RENEW%';
-    ELSE
-        penalty_type = '%CIRC%';
-    END IF;
-
-    FOR standing_penalty IN
-        SELECT  DISTINCT csp.*
-          FROM  actor.usr_standing_penalty usp
-                JOIN config.standing_penalty csp ON (csp.id = usp.standing_penalty)
-          WHERE usr = match_user
-                AND usp.org_unit IN ( SELECT * FROM explode_array(context_org_list) )
-                AND (usp.stop_date IS NULL or usp.stop_date > NOW())
-                AND csp.block_list LIKE penalty_type LOOP
-
-        result.fail_part := standing_penalty.name;
-        result.success := FALSE;
-        done := TRUE;
-        RETURN NEXT result;
-    END LOOP;
-
-    -- Fail if the user has too many items with specific circ_modifiers checked out
-    FOR out_by_circ_mod IN SELECT * FROM config.circ_matrix_circ_mod_test WHERE matchpoint = circ_test.id LOOP
-        SELECT  INTO items_out COUNT(*)
-          FROM  action.circulation circ
-            JOIN asset.copy cp ON (cp.id = circ.target_copy)
-          WHERE circ.usr = match_user
-               AND circ.circ_lib IN ( SELECT * FROM explode_array(context_org_list) )
-            AND circ.checkin_time IS NULL
-            AND (circ.stop_fines IN ('MAXFINES','LONGOVERDUE') OR circ.stop_fines IS NULL)
-            AND cp.circ_modifier IN (SELECT circ_mod FROM config.circ_matrix_circ_mod_test_map WHERE circ_mod_test = out_by_circ_mod.id);
-        IF items_out >= out_by_circ_mod.items_out THEN
-            result.fail_part := 'config.circ_matrix_circ_mod_test';
-            result.success := FALSE;
-            done := TRUE;
-            RETURN NEXT result;
-        END IF;
-    END LOOP;
-
-    -- If we passed everything, return the successful matchpoint id
-    IF NOT done THEN
-        RETURN NEXT result;
-    END IF;
-
-    RETURN;
-END;
-$func$ LANGUAGE plpgsql;
-
-COMMIT;

Copied: trunk/Open-ILS/src/sql/Pg/upgrade/0277.schema.address_schema_drift.sql (from rev 16505, trunk/Open-ILS/src/sql/Pg/upgrade/0227.schema.address_schema_drift.sql)
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0277.schema.address_schema_drift.sql	                        (rev 0)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0277.schema.address_schema_drift.sql	2010-05-26 18:07:04 UTC (rev 16506)
@@ -0,0 +1,222 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0227'); -- miker
+
+-- Use oils_xpath_table instead of pgxml's xpath_table
+CREATE OR REPLACE FUNCTION acq.extract_holding_attr_table (lineitem int, tag text) RETURNS SETOF acq.flat_lineitem_holding_subfield AS $$
+DECLARE
+    counter INT;
+    lida    acq.flat_lineitem_holding_subfield%ROWTYPE;
+BEGIN
+
+    SELECT  COUNT(*) INTO counter
+      FROM  oils_xpath_table(
+                'id',
+                'marc',
+                'acq.lineitem',
+                '//*[@tag="' || tag || '"]',
+                'id=' || lineitem
+            ) as t(i int,c text);
+
+    FOR i IN 1 .. counter LOOP
+        FOR lida IN
+            SELECT  *
+              FROM  (   SELECT  id,i,t,v
+                          FROM  oils_xpath_table(
+                                    'id',
+                                    'marc',
+                                    'acq.lineitem',
+                                    '//*[@tag="' || tag || '"][position()=' || i || ']/*/@code|' ||
+                                        '//*[@tag="' || tag || '"][position()=' || i || ']/*[@code]',
+                                    'id=' || lineitem
+                                ) as t(id int,t text,v text)
+                    )x
+        LOOP
+            RETURN NEXT lida;
+        END LOOP;
+    END LOOP;
+
+    RETURN;
+END;
+$$ LANGUAGE PLPGSQL;
+
+-- Use the identifier search class tsconfig
+DROP TRIGGER metabib_identifier_field_entry_fti_trigger ON identifier_field_entry;
+CREATE TRIGGER metabib_identifier_field_entry_fti_trigger
+    BEFORE INSERT OR UPDATE ON identifier_field_entry
+    FOR EACH ROW
+    EXECUTE PROCEDURE public.oils_tsearch2('identifier');
+
+-- Return the correct fail_part when the item can't be found
+CREATE OR REPLACE FUNCTION action.item_user_circ_test( circ_ou INT, match_item BIGINT, match_user INT, renewal BOOL ) RETURNS SETOF action.matrix_test_result AS $func$
+DECLARE
+    user_object        actor.usr%ROWTYPE;
+    standing_penalty    config.standing_penalty%ROWTYPE;
+    item_object        asset.copy%ROWTYPE;
+    item_status_object    config.copy_status%ROWTYPE;
+    item_location_object    asset.copy_location%ROWTYPE;
+    result            action.matrix_test_result;
+    circ_test        config.circ_matrix_matchpoint%ROWTYPE;
+    out_by_circ_mod        config.circ_matrix_circ_mod_test%ROWTYPE;
+    circ_mod_map        config.circ_matrix_circ_mod_test_map%ROWTYPE;
+    hold_ratio          action.hold_stats%ROWTYPE;
+    penalty_type         TEXT;
+    tmp_grp         INT;
+    items_out        INT;
+    context_org_list        INT[];
+    done            BOOL := FALSE;
+BEGIN
+    result.success := TRUE;
+
+    -- Fail if the user is BARRED
+    SELECT INTO user_object * FROM actor.usr WHERE id = match_user;
+
+    -- Fail if we couldn't find the user 
+    IF user_object.id IS NULL THEN
+        result.fail_part := 'no_user';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+        RETURN;
+    END IF;
+
+    SELECT INTO item_object * FROM asset.copy WHERE id = match_item;
+
+    -- Fail if we couldn't find the item 
+    IF item_object.id IS NULL THEN
+        result.fail_part := 'no_item';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+        RETURN;
+    END IF;
+
+    SELECT INTO circ_test * FROM action.find_circ_matrix_matchpoint(circ_ou, match_item, match_user, renewal);
+    result.matchpoint := circ_test.id;
+
+    -- Fail if we couldn't find a matchpoint
+    IF result.matchpoint IS NULL THEN
+        result.fail_part := 'no_matchpoint';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    IF user_object.barred IS TRUE THEN
+        result.fail_part := 'actor.usr.barred';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    -- Fail if the item can't circulate
+    IF item_object.circulate IS FALSE THEN
+        result.fail_part := 'asset.copy.circulate';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    -- Fail if the item isn't in a circulateable status on a non-renewal
+    IF NOT renewal AND item_object.status NOT IN ( 0, 7, 8 ) THEN
+        result.fail_part := 'asset.copy.status';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    ELSIF renewal AND item_object.status <> 1 THEN
+        result.fail_part := 'asset.copy.status';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    -- Fail if the item can't circulate because of the shelving location
+    SELECT INTO item_location_object * FROM asset.copy_location WHERE id = item_object.location;
+    IF item_location_object.circulate IS FALSE THEN
+        result.fail_part := 'asset.copy_location.circulate';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    SELECT INTO context_org_list ARRAY_ACCUM(id) FROM actor.org_unit_full_path( circ_test.org_unit );
+
+    -- Fail if the test is set to hard non-circulating
+    IF circ_test.circulate IS FALSE THEN
+        result.fail_part := 'config.circ_matrix_test.circulate';
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END IF;
+
+    -- Fail if the total copy-hold ratio is too low
+    IF circ_test.total_copy_hold_ratio IS NOT NULL THEN
+        SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
+        IF hold_ratio.total_copy_ratio IS NOT NULL AND hold_ratio.total_copy_ratio < circ_test.total_copy_hold_ratio THEN
+            result.fail_part := 'config.circ_matrix_test.total_copy_hold_ratio';
+            result.success := FALSE;
+            done := TRUE;
+            RETURN NEXT result;
+        END IF;
+    END IF;
+
+    -- Fail if the available copy-hold ratio is too low
+    IF circ_test.available_copy_hold_ratio IS NOT NULL THEN
+        SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
+        IF hold_ratio.available_copy_ratio IS NOT NULL AND hold_ratio.available_copy_ratio < circ_test.available_copy_hold_ratio THEN
+            result.fail_part := 'config.circ_matrix_test.available_copy_hold_ratio';
+            result.success := FALSE;
+            done := TRUE;
+            RETURN NEXT result;
+        END IF;
+    END IF;
+
+    IF renewal THEN
+        penalty_type = '%RENEW%';
+    ELSE
+        penalty_type = '%CIRC%';
+    END IF;
+
+    FOR standing_penalty IN
+        SELECT  DISTINCT csp.*
+          FROM  actor.usr_standing_penalty usp
+                JOIN config.standing_penalty csp ON (csp.id = usp.standing_penalty)
+          WHERE usr = match_user
+                AND usp.org_unit IN ( SELECT * FROM explode_array(context_org_list) )
+                AND (usp.stop_date IS NULL or usp.stop_date > NOW())
+                AND csp.block_list LIKE penalty_type LOOP
+
+        result.fail_part := standing_penalty.name;
+        result.success := FALSE;
+        done := TRUE;
+        RETURN NEXT result;
+    END LOOP;
+
+    -- Fail if the user has too many items with specific circ_modifiers checked out
+    FOR out_by_circ_mod IN SELECT * FROM config.circ_matrix_circ_mod_test WHERE matchpoint = circ_test.id LOOP
+        SELECT  INTO items_out COUNT(*)
+          FROM  action.circulation circ
+            JOIN asset.copy cp ON (cp.id = circ.target_copy)
+          WHERE circ.usr = match_user
+               AND circ.circ_lib IN ( SELECT * FROM explode_array(context_org_list) )
+            AND circ.checkin_time IS NULL
+            AND (circ.stop_fines IN ('MAXFINES','LONGOVERDUE') OR circ.stop_fines IS NULL)
+            AND cp.circ_modifier IN (SELECT circ_mod FROM config.circ_matrix_circ_mod_test_map WHERE circ_mod_test = out_by_circ_mod.id);
+        IF items_out >= out_by_circ_mod.items_out THEN
+            result.fail_part := 'config.circ_matrix_circ_mod_test';
+            result.success := FALSE;
+            done := TRUE;
+            RETURN NEXT result;
+        END IF;
+    END LOOP;
+
+    -- If we passed everything, return the successful matchpoint id
+    IF NOT done THEN
+        RETURN NEXT result;
+    END IF;
+
+    RETURN;
+END;
+$func$ LANGUAGE plpgsql;
+
+COMMIT;



More information about the open-ils-commits mailing list