/** 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 */
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,