simpler next_copy implementation
authorBill Erickson <berick@esilibrary.com>
Thu, 18 Oct 2012 20:16:19 +0000 (16:16 -0400)
committerBill Erickson <berick@esilibrary.com>
Thu, 18 Oct 2012 20:16:19 +0000 (16:16 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/tests/datasets/sql/env_create.sql

index a974762..218c028 100644 (file)
@@ -36,23 +36,10 @@ $$ LANGUAGE SQL;
 
 /** Returns the next (by ID) non-deleted asset.copy */
 CREATE FUNCTION evergreen.next_copy (copy_id BIGINT) RETURNS asset.copy AS $$
-    DECLARE copy asset.copy%ROWTYPE;
-    DECLARE max_id BIGINT;
-BEGIN
-    SELECT INTO max_id max(id) FROM asset.copy;
-    WHILE TRUE LOOP
-        copy_id := copy_id + 1;
-        IF copy_id > max_id THEN
-            RETURN NULL;
-        END IF;
-        SELECT INTO copy * FROM asset.copy WHERE id = copy_id;
-        IF NOT copy.deleted THEN
-            RETURN copy;
-        END IF;
-    END LOOP;
-    RETURN NULL;
-END;
-$$ LANGUAGE PLPGSQL;                                                        
+    SELECT * FROM asset.copy 
+    WHERE id > $1 AND NOT deleted
+    ORDER BY id LIMIT 1;
+$$ LANGUAGE SQL;
 
 
 /** Create one circulation */
@@ -92,8 +79,6 @@ BEGIN
         due_date := (DATE(due_date) || ' 23:59:59')::TIMESTAMP;
     END IF;
 
-
-
     INSERT INTO action.circulation (
         xact_start, usr, target_copy, circ_lib, circ_staff, renewal_remaining,
         grace_period, duration, recurring_fine, max_fine, duration_rule,