From 0a7564efed07d765af9cdd8fddb417090aff54a0 Mon Sep 17 00:00:00 2001 From: einhverfr Date: Fri, 15 Sep 2006 06:15:24 +0000 Subject: Committing first draft of fixme utility for broken. Will be putting it through more testing. git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@95 4979c152-3d1c-0410-bac9-87ea11338e46 --- utils/fixme/fixme.pgsql | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 utils/fixme/fixme.pgsql (limited to 'utils/fixme/fixme.pgsql') diff --git a/utils/fixme/fixme.pgsql b/utils/fixme/fixme.pgsql new file mode 100644 index 00000000..7ee23b4d --- /dev/null +++ b/utils/fixme/fixme.pgsql @@ -0,0 +1,63 @@ +begin; + +-- handle NULL chart_id's +insert into chart (accno, description, charttype) values ('1000000000', 'Broken SQL-Ledger Data', 'L'); + +--handle duplicate transaction id's. +CREATE TEMPORARY TABLE id_agregator (id INT, table_name text); + +insert into id_agregator (id, table_name) SELECT id, 'ar' from ar; +insert into id_agregator (id, table_name) SELECT id, 'ap' from ap; +insert into id_agregator (id, table_name) SELECT id, 'business' from business; +insert into id_agregator (id, table_name) SELECT id, 'chart' from chart; +insert into id_agregator (id, table_name) SELECT id, 'customer' from customer; +insert into id_agregator (id, table_name) + SELECT id, 'department' from department; +insert into id_agregator (id, table_name) SELECT id, 'employee' from employee; +insert into id_agregator (id, table_name) SELECT id, 'gl' from gl; +insert into id_agregator (id, table_name) SELECT id, 'oe' from oe; +insert into id_agregator (id, table_name) SELECT id, 'parts' from parts; +insert into id_agregator (id, table_name) + SELECT id, 'partsgroup' from partsgroup; +insert into id_agregator (id, table_name) SELECT id, 'project' from project; +insert into id_agregator (id, table_name) SELECT id, 'vendor' from vendor; +insert into id_agregator (id, table_name) SELECT id, 'warehouse' from warehouse; + +CREATE TEMPORARY VIEW id_view1 AS +SELECT id, count(*) AS num_rows FROM id_agregator +GROUP BY id HAVING num_rows > 1; + +select setval('id', select max(id) + 1 from id_agregator); + +create function fix_dupes() RETURNS OPAQUE AS +' +DECLARE +dupe_id id_agregator%ROWTYPE; +BEGIN +FOR dupe_id IN SELECT id FROM id_agregator + WHERE id IN (SELECT id FROM id_view1) +LOOP + EXECUTE ''UPDATE '' || dupe_id.table_name || + SET id = nextval(''''id'''') WHERE + id = '' ||dupe_id.id; + UPDATE acc_trans SET trans_id = currval(''id'') WHERE + id = '' ||dupe_id.id; + INSERT INTO acc_trans (trans_id, amount, chart_id) VALUES ( + currval(''id''), '1', ( + SELECT id FROM chart WHERE accno = ''1000000000'' + ) + ); + INSERT INTO acc_trans (trans_id, amount, chart_id) VALUES ( + currval(''id''), '-1', ( + SELECT id FROM chart WHERE accno = ''1000000000'' + ) + ); +END; +' LANGUAGE PLPGSQL; + +SELECT fix_dupes (); + +drop function fix_dupes(); + + +commit; -- cgit v1.2.3