[open-ils-commits] r14742 - in trunk/Open-ILS/src/sql/Pg: . upgrade (miker)

svn at svn.open-ils.org svn at svn.open-ils.org
Tue Nov 3 12:46:20 EST 2009


Author: miker
Date: 2009-11-03 12:46:17 -0500 (Tue, 03 Nov 2009)
New Revision: 14742

Modified:
   trunk/Open-ILS/src/sql/Pg/999.functions.global.sql
   trunk/Open-ILS/src/sql/Pg/upgrade/0067.schema.hold-copy-ratios.sql
Log:
moving the hold ratio stats function, and fixing a div-by-0 thinko

Modified: trunk/Open-ILS/src/sql/Pg/999.functions.global.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/999.functions.global.sql	2009-11-03 17:05:10 UTC (rev 14741)
+++ trunk/Open-ILS/src/sql/Pg/999.functions.global.sql	2009-11-03 17:46:17 UTC (rev 14742)
@@ -1108,54 +1108,3 @@
 END;
 $func$ LANGUAGE plpgsql;
 
-CREATE TYPE action.hold_stats AS (
-    hold_count              INT,
-    copy_count              INT,
-    available_count         INT,
-    total_copy_ratio        FLOAT,
-    available_copy_ratio    FLOAT
-);
-
-CREATE OR REPLACE FUNCTION action.copy_related_hold_stats (copy_id INT) RETURNS action.hold_stats AS $func$
-DECLARE
-    output          action.hold_stats%ROWTYPE;
-    hold_count      INT := 0;
-    copy_count      INT := 0;
-    available_count INT := 0;
-    hold_map_data   RECORD;
-BEGIN
-
-    output.hold_count := 0;
-    output.copy_count := 0;
-    output.available_count := 0;
-
-    SELECT  COUNT( DISTINCT m.hold ) INTO hold_count
-      FROM  action.hold_copy_map m
-            JOIN action.hold_request h ON (m.hold = h.id)
-      WHERE m.target_copy = copy_id
-            AND NOT h.frozen;
-
-    output.hold_count := hold_count;
-
-    FOR hold_map_data IN
-        SELECT  DISTINCT m.target_copy,
-                acp.status
-          FROM  action.hold_copy_map m
-                JOIN asset.copy acp ON (m.target_copy = acp.id)
-                JOIN action.hold_request h ON (m.hold = h.id)
-          WHERE m.hold IN ( SELECT DISTINCT hold FROM action.hold_copy_map WHERE target_copy = copy_id ) AND NOT h.frozen
-    LOOP
-        output.copy_count := output.copy_count + 1;
-        IF hold_map_data.status IN (0,7,12) THEN
-            output.available_count := output.available_count + 1;
-        END IF;
-    END LOOP;
-
-    output.total_copy_ratio = output.copy_count::FLOAT / output.hold_count::FLOAT;
-    output.available_copy_ratio = output.available_count::FLOAT / output.hold_count::FLOAT;
-
-    RETURN output;
-
-END;
-$func$ LANGUAGE PLPGSQL;
-

Modified: trunk/Open-ILS/src/sql/Pg/upgrade/0067.schema.hold-copy-ratios.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0067.schema.hold-copy-ratios.sql	2009-11-03 17:05:10 UTC (rev 14741)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0067.schema.hold-copy-ratios.sql	2009-11-03 17:46:17 UTC (rev 14742)
@@ -31,22 +31,24 @@
 
     output.hold_count := hold_count;
 
-    FOR hold_map_data IN
-        SELECT  DISTINCT m.target_copy,
-                acp.status
-          FROM  action.hold_copy_map m
-                JOIN asset.copy acp ON (m.target_copy = acp.id)
-                JOIN action.hold_request h ON (m.hold = h.id)
-          WHERE m.hold IN ( SELECT DISTINCT hold FROM action.hold_copy_map WHERE target_copy = copy_id ) AND NOT h.frozen
-    LOOP
-        output.copy_count := output.copy_count + 1;
-        IF hold_map_data.status IN (0,7,12) THEN
-            output.available_count := output.available_count + 1;
-        END IF;
-    END LOOP;
+    IF output.hold_count > 0 THEN
+        FOR hold_map_data IN
+            SELECT  DISTINCT m.target_copy,
+                    acp.status
+              FROM  action.hold_copy_map m
+                    JOIN asset.copy acp ON (m.target_copy = acp.id)
+                    JOIN action.hold_request h ON (m.hold = h.id)
+              WHERE m.hold IN ( SELECT DISTINCT hold FROM action.hold_copy_map WHERE target_copy = copy_id ) AND NOT h.frozen
+        LOOP
+            output.copy_count := output.copy_count + 1;
+            IF hold_map_data.status IN (0,7,12) THEN
+                output.available_count := output.available_count + 1;
+            END IF;
+        END LOOP;
+        output.total_copy_ratio = output.copy_count::FLOAT / output.hold_count::FLOAT;
+        output.available_copy_ratio = output.available_count::FLOAT / output.hold_count::FLOAT;
 
-    output.total_copy_ratio = output.copy_count::FLOAT / output.hold_count::FLOAT;
-    output.available_copy_ratio = output.available_count::FLOAT / output.hold_count::FLOAT;
+    END IF;
 
     RETURN output;
 



More information about the open-ils-commits mailing list