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 (
|
CREATE TABLE gncAccountTrail (
|
||||||
accountGuid CHAR(32) NOT NULL, -- override, not a primary key anymore
|
accountGuid CHAR(32) NOT NULL, -- override, not a primary key anymore
|
||||||
parentGuid CHAR(32) NOT NULL,
|
parentGuid CHAR(32) NOT NULL,
|
||||||
|
-- not yet bookGuid CHAR(32) NOT NULL,
|
||||||
accountName TEXT NOT NULL CHECK (accountName <> ''),
|
accountName TEXT NOT NULL CHECK (accountName <> ''),
|
||||||
accountCode TEXT,
|
accountCode TEXT,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
@ -50,6 +51,14 @@ CREATE TABLE gncAccountTrail (
|
|||||||
|
|
||||||
CREATE INDEX gncAccountTrail_account_idx ON gncAccountTrail (accountGuid);
|
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 (
|
CREATE TABLE gncCommodityTrail (
|
||||||
commodity TEXT NOT NULL, -- override, not a primary key anymore
|
commodity TEXT NOT NULL, -- override, not a primary key anymore
|
||||||
fullname TEXT,
|
fullname TEXT,
|
||||||
|
@ -44,6 +44,12 @@ CREATE TABLE gncCommodity (
|
|||||||
fraction INT DEFAULT '100'
|
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
|
-- Account structure -- parentGUID points to parent account
|
||||||
-- guid. There is no supports for Groups in this schema.
|
-- guid. There is no supports for Groups in this schema.
|
||||||
-- (there seems to be no strong need to have groups in the DB.)
|
-- (there seems to be no strong need to have groups in the DB.)
|
||||||
@ -51,6 +57,7 @@ CREATE TABLE gncCommodity (
|
|||||||
CREATE TABLE gncAccount (
|
CREATE TABLE gncAccount (
|
||||||
accountGuid CHAR(32) PRIMARY KEY,
|
accountGuid CHAR(32) PRIMARY KEY,
|
||||||
parentGuid CHAR(32) NOT NULL,
|
parentGuid CHAR(32) NOT NULL,
|
||||||
|
-- not yet bookGuid CHAR(32) NOT NULL,
|
||||||
accountName TEXT NOT NULL CHECK (accountName <> ''),
|
accountName TEXT NOT NULL CHECK (accountName <> ''),
|
||||||
accountCode TEXT,
|
accountCode TEXT,
|
||||||
description 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,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,2,1,'Fix gncSubtotalReconedBalance');
|
||||||
INSERT INTO gncVersion (major,minor,rev,name) VALUES (1,3,1,'Add kvp_timespec tables');
|
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, );
|
SEND_QUERY (be,p, );
|
||||||
FINISH_QUERY(be->connection);
|
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"
|
p = "ALTER TABLE gncEntry ADD COLUMN iguid INT4 DEFAULT 0;\n"
|
||||||
"UPDATE gncEntry SET iguid = 0;\n"
|
"UPDATE gncEntry SET iguid = 0;\n"
|
||||||
|
|
||||||
@ -196,15 +205,6 @@ put_iguid_in_tables (PGBackend *be)
|
|||||||
SEND_QUERY (be,p, );
|
SEND_QUERY (be,p, );
|
||||||
FINISH_QUERY(be->connection);
|
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"
|
p = "DROP TABLE gncGUIDCache; \n"
|
||||||
"INSERT INTO gncVersion (major,minor,rev,name) VALUES \n"
|
"INSERT INTO gncVersion (major,minor,rev,name) VALUES \n"
|
||||||
" (1,1,1,'End Put iGUID in Main Tables');";
|
" (1,1,1,'End Put iGUID in Main Tables');";
|
||||||
@ -212,12 +212,15 @@ put_iguid_in_tables (PGBackend *be)
|
|||||||
FINISH_QUERY(be->connection);
|
FINISH_QUERY(be->connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ============================================================= */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fix_reconciled_balance_func (PGBackend *be)
|
fix_reconciled_balance_func (PGBackend *be)
|
||||||
{
|
{
|
||||||
char *p;
|
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');";
|
" (1,2,0,'Start Fix gncSubtotalReconedBalance');";
|
||||||
SEND_QUERY (be,p, );
|
SEND_QUERY (be,p, );
|
||||||
FINISH_QUERY(be->connection);
|
FINISH_QUERY(be->connection);
|
||||||
@ -248,12 +251,15 @@ fix_reconciled_balance_func (PGBackend *be)
|
|||||||
FINISH_QUERY(be->connection);
|
FINISH_QUERY(be->connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ============================================================= */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_kvp_timespec_tables (PGBackend *be)
|
add_kvp_timespec_tables (PGBackend *be)
|
||||||
{
|
{
|
||||||
char *p;
|
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');";
|
" (1,3,0,'Start Add kvp_timespec tables');";
|
||||||
SEND_QUERY (be,p, );
|
SEND_QUERY (be,p, );
|
||||||
FINISH_QUERY(be->connection);
|
FINISH_QUERY(be->connection);
|
||||||
@ -279,6 +285,75 @@ add_kvp_timespec_tables (PGBackend *be)
|
|||||||
FINISH_QUERY(be->connection);
|
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 ? */
|
/* Are we up to date ? */
|
||||||
/* Return 0 if we are at db version. Return +1 if we are newer.
|
/* 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);
|
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