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:
Linas Vepstas 2001-12-31 17:21:25 +00:00
parent 50d07c4a17
commit 43aaa1d7ac
4 changed files with 109 additions and 11 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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');

View File

@ -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
}
}