[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SF.net SVN: ledger-smb: [2059] branches/1.2/sql/fixes/ transactions_foreign_key_fix.sql



Revision: 2059
          http://ledger-smb.svn.sourceforge.net/ledger-smb/?rev=2059&view=rev
Author:   einhverfr
Date:     2008-01-20 20:25:05 -0800 (Sun, 20 Jan 2008)

Log Message:
-----------
Adding fix for double-incrementing id sequence

Added Paths:
-----------
    branches/1.2/sql/fixes/transactions_foreign_key_fix.sql

Added: branches/1.2/sql/fixes/transactions_foreign_key_fix.sql
===================================================================
--- branches/1.2/sql/fixes/transactions_foreign_key_fix.sql	                        (rev 0)
+++ branches/1.2/sql/fixes/transactions_foreign_key_fix.sql	2008-01-21 04:25:05 UTC (rev 2059)
@@ -0,0 +1,178 @@
+DELETE FROM transactions;
+
+CREATE OR REPLACE FUNCTION track_global_sequence() RETURNS TRIGGER AS
+$$
+BEGIN
+	IF tg_op = 'INSERT' THEN
+		INSERT INTO transactions (id, table_name) 
+		VALUES (new.id, TG_RELNAME);
+	ELSEIF tg_op = 'UPDATE' THEN
+		IF new.id = old.id THEN
+			return new;
+		ELSE
+			UPDATE transactions SET id = new.id WHERE id = old.id;
+		END IF;
+	ELSE 
+		DELETE FROM transactions WHERE id = old.id;
+	END IF;
+	RETURN new;
+END;
+$$ LANGUAGE PLPGSQL;
+
+insert into transactions (id, table_name) SELECT id, 'ap' FROM ap;
+DROP RULE ap_id_track_i ON ap; 
+DROP RULE ap_id_track_u ON update TO ap; 
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON ap
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON ap
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+insert into transactions (id, table_name) SELECT id, 'ar' FROM ar;
+
+DROP RULE ar_id_track_i ON insert TO ar;
+DROP RULE ar_id_track_u ON update TO ar;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON ar
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON ar
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'business' FROM business;
+
+DROP RULE business_id_track_i ON insert TO business;
+DROP RULE business_id_track_u ON update TO business 
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON business
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON business
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'chart' FROM chart;
+
+DROP RULE chart_id_track_i ON insert TO chart;
+DROP RULE chart_id_track_u ON update TO chart;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON chart
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON chart
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'customer' FROM customer;
+
+DROP RULE customer_id_track_i ON insert TO customer;
+DROP RULE customer_id_track_u ON update TO customer;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON customer
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON customer
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'department' FROM department;
+
+DROP RULE department_id_track_i ON insert TO department;
+DROP RULE department_id_track_u ON update TO department;
+
+INSERT INTO transactions (id, table_name) SELECT id, 'employee' FROM employee;
+
+DROP RULE employee_id_track_i ON insert TO employee;
+DROP RULE employee_id_track_u ON update TO employee;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON employee
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON employee
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'gl' FROM gl;
+
+DROP RULE gl_id_track_i ON insert TO gl;
+DROP RULE gl_id_track_u ON update TO gl;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON gl
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON gl
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'oe' FROM oe;
+
+DROP RULE oe_id_track_i ON insert TO oe;
+DROP RULE oe_id_track_u ON update TO oe;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON oe
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON oe
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'parts' FROM parts;
+
+DROP RULE parts_id_track_i ON insert TO parts;
+DROP RULE parts_id_track_u ON update TO parts;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON parts
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON parts
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'partsgroup' FROM partsgroup;
+
+DROP RULE partsgroup_id_track_i ON insert TO partsgroup;
+DROP RULE partsgroup_id_track_u ON update TO partsgroup;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON partsgroup
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON partsgroup
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'pricegroup' FROM pricegroup;
+
+DROP RULE pricegroup_id_track_i ON insert TO pricegroup;
+DROP RULE pricegroup_id_track_u ON update TO pricegroup; 
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON pricegroup
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON pricegroup
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'project' FROM project;
+
+DROP RULE project_id_track_i ON insert TO project;
+DROP RULE project_id_track_u ON update TO project; 
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON project
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON project
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'vendor' FROM vendor;
+
+DROP RULE vendor_id_track_i ON insert TO vendor;
+DROP RULE employee_id_track_u ON update TO vendor; 
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON vendor
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON vendor
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+INSERT INTO transactions (id, table_name) SELECT id, 'warehouse' FROM warehouse;
+
+DROP RULE warehouse_id_track_i ON insert TO warehouse;
+DROP RULE warehouse_id_track_u ON update TO warehouse;
+
+CREATE TRIGGER track_global_inserts BEFORE INSERT OR UPDATE ON warehouse
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();
+
+CREATE TRIGGER track_global_inserts AFTER DELETE ON warehouse
+FOR EACH ROW EXECUTE PROCEDURE track_global_sequence();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.