diff options
author | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2006-09-15 06:15:24 +0000 |
---|---|---|
committer | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2006-09-15 06:15:24 +0000 |
commit | 0a7564efed07d765af9cdd8fddb417090aff54a0 (patch) | |
tree | 3d6d7521cc1c1898b1b1c8bcb428e612f3712cda /utils/fixme | |
parent | 508724f52e0025161ed3ae8b9f47c145e7c5c885 (diff) |
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
Diffstat (limited to 'utils/fixme')
-rw-r--r-- | utils/fixme/README | 9 | ||||
-rw-r--r-- | utils/fixme/fixme.pgsql | 63 |
2 files changed, 72 insertions, 0 deletions
diff --git a/utils/fixme/README b/utils/fixme/README new file mode 100644 index 00000000..cce8790d --- /dev/null +++ b/utils/fixme/README @@ -0,0 +1,9 @@ +README for fixme.pgsql + +This utility attempts to move all damaged data into one location so that it +can be sorted out. It creates an account with the number of 1000000000 that +stores the broken transactions. + +It can be run from psql. + +IMPORTANT: BACK UP YOUR DATABASE BEFORE TRYING THIS SCRIPT 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; |