mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
start scratching in support for multiple books
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6444 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
50d07c4a17
commit
43aaa1d7ac
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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');
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user