diff --git a/src/backend/postgres/table-audit.sql b/src/backend/postgres/table-audit.sql index 0e5cd71140..0f9a9b16a5 100644 --- a/src/backend/postgres/table-audit.sql +++ b/src/backend/postgres/table-audit.sql @@ -39,6 +39,7 @@ CREATE TABLE gncAuditTrail ( CREATE TABLE gncAccountTrail ( accountGuid CHAR(32) NOT NULL, -- override, not a primary key anymore parentGuid CHAR(32) NOT NULL, +-- not yet bookGuid CHAR(32) NOT NULL, accountName TEXT NOT NULL CHECK (accountName <> ''), accountCode TEXT, description TEXT, @@ -50,6 +51,14 @@ CREATE TABLE gncAccountTrail ( CREATE INDEX gncAccountTrail_account_idx ON gncAccountTrail (accountGuid); +-- CREATE TABLE gncBookTrail ( +-- bookGuid CHAR(32) NOT NULL, +-- version INT4 NOT NULL, +-- iguid INT4 DEFAULT 0 +-- ) INHERITS (gncAuditTrail); +-- +-- CREATE INDEX gncBookTrail_book_idx ON gncBookTrail (bookGuid); + CREATE TABLE gncCommodityTrail ( commodity TEXT NOT NULL, -- override, not a primary key anymore fullname TEXT, diff --git a/src/backend/postgres/table-create.sql b/src/backend/postgres/table-create.sql index 1e66192ee8..aced4bd952 100644 --- a/src/backend/postgres/table-create.sql +++ b/src/backend/postgres/table-create.sql @@ -44,6 +44,12 @@ CREATE TABLE gncCommodity ( fraction INT DEFAULT '100' ); +-- CREATE TABLE gncBook ( +-- bookGuid CHAR(32) PRIMARY KEY, +-- version INT4 NOT NULL, +-- iguid INT4 UNIQUE DEFAULT nextval('gnc_iguid_seq') +-- ); + -- Account structure -- parentGUID points to parent account -- guid. There is no supports for Groups in this schema. -- (there seems to be no strong need to have groups in the DB.) @@ -51,6 +57,7 @@ CREATE TABLE gncCommodity ( CREATE TABLE gncAccount ( accountGuid CHAR(32) PRIMARY KEY, parentGuid CHAR(32) NOT NULL, +-- not yet bookGuid CHAR(32) NOT NULL, accountName TEXT NOT NULL CHECK (accountName <> ''), accountCode TEXT, description TEXT, diff --git a/src/backend/postgres/table-version.sql b/src/backend/postgres/table-version.sql index 0df48f1abe..12851bb15d 100644 --- a/src/backend/postgres/table-version.sql +++ b/src/backend/postgres/table-version.sql @@ -16,3 +16,4 @@ INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,0,0,'Version Table'); INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,1,1,'iGUID in Main Tables'); INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,2,1,'Fix gncSubtotalReconedBalance'); INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,3,1,'Add kvp_timespec tables'); +-- not yet -- INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,4,1,'Add support for multiple books'); diff --git a/src/backend/postgres/upgrade.c b/src/backend/postgres/upgrade.c index d8363c1dc1..e1f93c841e 100644 --- a/src/backend/postgres/upgrade.c +++ b/src/backend/postgres/upgrade.c @@ -142,6 +142,15 @@ put_iguid_in_tables (PGBackend *be) SEND_QUERY (be,p, ); FINISH_QUERY(be->connection); + p = "SELECT iguid FROM gncGUIDCache ORDER BY iguid DESC LIMIT 1;"; + SEND_QUERY (be,p, ); + iguid = (guint32) pgendGetResults (be, get_iguid_cb, 0); + iguid ++; + + sprintf(buff, "CREATE SEQUENCE gnc_iguid_seq START %d;", iguid); + SEND_QUERY (be,buff, ); + FINISH_QUERY(be->connection); + p = "ALTER TABLE gncEntry ADD COLUMN iguid INT4 DEFAULT 0;\n" "UPDATE gncEntry SET iguid = 0;\n" @@ -196,15 +205,6 @@ put_iguid_in_tables (PGBackend *be) SEND_QUERY (be,p, ); FINISH_QUERY(be->connection); - p = "SELECT iguid FROM gncGUIDCache ORDER BY iguid DESC LIMIT 1;"; - SEND_QUERY (be,p, ); - iguid = (guint32) pgendGetResults (be, get_iguid_cb, 0); - iguid ++; - - sprintf(buff, "CREATE SEQUENCE gnc_iguid_seq START %d;", iguid); - SEND_QUERY (be,buff, ); - FINISH_QUERY(be->connection); - p = "DROP TABLE gncGUIDCache; \n" "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" " (1,1,1,'End Put iGUID in Main Tables');"; @@ -212,12 +212,15 @@ put_iguid_in_tables (PGBackend *be) FINISH_QUERY(be->connection); } +/* ============================================================= */ + static void fix_reconciled_balance_func (PGBackend *be) { char *p; - p = "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" + p = "LOCK TABLE gncVersion IN ACCESS EXCLUSIVE MODE;\n " + "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" " (1,2,0,'Start Fix gncSubtotalReconedBalance');"; SEND_QUERY (be,p, ); FINISH_QUERY(be->connection); @@ -248,12 +251,15 @@ fix_reconciled_balance_func (PGBackend *be) FINISH_QUERY(be->connection); } +/* ============================================================= */ + static void add_kvp_timespec_tables (PGBackend *be) { char *p; - p = "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" + p = "LOCK TABLE gncVersion IN ACCESS EXCLUSIVE MODE;\n " + "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" " (1,3,0,'Start Add kvp_timespec tables');"; SEND_QUERY (be,p, ); FINISH_QUERY(be->connection); @@ -279,6 +285,75 @@ add_kvp_timespec_tables (PGBackend *be) FINISH_QUERY(be->connection); } +/* ============================================================= */ + +static void +add_multiple_book_support (PGBackend *be) +{ + char buff[4000]; + char *p; + + p = "LOCK TABLE gncAccount IN ACCESS EXCLUSIVE MODE;\n" + "LOCK TABLE gncAccountTrail IN ACCESS EXCLUSIVE MODE;\n" + "LOCK TABLE gncVersion IN ACCESS EXCLUSIVE MODE;\n" + "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" + " (1,4,0,'Start Add multiple book support');"; + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); + + p = "CREATE TABLE gncBook ( \n" + " bookGuid CHAR(32) PRIMARY KEY, \n" + " version INT4 NOT NULL, \n" + " iguid INT4 DEFAULT 0 \n" + ");"; + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); + + p = "CREATE TABLE gncBookTrail ( \n" + " bookGuid CHAR(32) NOT NULL, \n" + " version INT4 NOT NULL, \n" + " iguid INT4 DEFAULT 0 \n" + ") INHERITS (gncAuditTrail); \n\n" + "CREATE INDEX gncBookTrail_book_idx ON gncBookTrail (bookGuid);" ; + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); + + p = "ALTER TABLE gncAccount ADD COLUMN bookGuid CHAR(32) NOT NULL;\n" + "ALTER TABLE gncAccountTrail ADD COLUMN bookGuid CHAR(32) NOT NULL;\n"; + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); + + p = buff; + p = stpcpy (p, "UPDATE gncAccount SET bookGuid = '"); + p = guid_to_string_buff (gnc_book_get_guid (be->book), p); + p = stpcpy (p, "';"); + SEND_QUERY (be,buff, ); + FINISH_QUERY(be->connection); + + p = buff; + p = stpcpy (p, "UPDATE gncAccountTrail SET bookGuid = '"); + p = guid_to_string_buff (gnc_book_get_guid (be->book), p); + p = stpcpy (p, "';"); + SEND_QUERY (be,buff, ); + FINISH_QUERY(be->connection); + + p = buff; + p = stpcpy (p, "INSERT INTO gncBook (bookGuid, version, iguid) " + "VALUES ('"); + p = guid_to_string_buff (gnc_book_get_guid (be->book), p); + p = stpcpy (p, "', 1, nextval('gnc_iguid_seq') );"); + SEND_QUERY (be,buff, ); + FINISH_QUERY(be->connection); + + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); + + p = "INSERT INTO gncVersion (major,minor,rev,name) VALUES \n" + " (1,4,1,'End Add multiple book support');"; + SEND_QUERY (be,p, ); + FINISH_QUERY(be->connection); +} + /* ============================================================= */ /* Are we up to date ? */ /* Return 0 if we are at db version. Return +1 if we are newer. @@ -337,6 +412,12 @@ pgendUpgradeDB (PGBackend *be) { add_kvp_timespec_tables (be); } +#ifdef NOT_YET + if (4 > vers.minor) + { + add_multiple_book_support (be); + } +#endif } }