mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
add notes on the upgrade mechanism
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5701 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
3d701d072d
commit
34eb691af8
@ -329,3 +329,48 @@ SELECT gnctransaction.date_posted
|
|||||||
LIMIT 2 OFFSET 10;
|
LIMIT 2 OFFSET 10;
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
Upgrading
|
||||||
|
---------
|
||||||
|
If you find you need to change the structure of the sql tables, then
|
||||||
|
note that there is a fully general automatic upgrade mechanism. Its
|
||||||
|
in upgrade.c, upgrade.h.
|
||||||
|
|
||||||
|
Upgrades are treated like patches; the sql db is 'patched'. Each patch
|
||||||
|
carries three version numbers: major, minor, rev. A client can work
|
||||||
|
with a database only if the client's & database's major verion numbers
|
||||||
|
are equal, and the client's minor number is equal or newer than the db.
|
||||||
|
The third number, the rev number, is irrelevant if the above condition
|
||||||
|
is met. The rev number is handy only for making sure that patches are
|
||||||
|
applied in a specified order.
|
||||||
|
|
||||||
|
The gncVersion table stores these three numbers. It also stores a
|
||||||
|
human-readable text string, so that a sysadmin can review the installed
|
||||||
|
upgrades.
|
||||||
|
|
||||||
|
Most of the contents of of upgrade.c is a mechanism to make sure that
|
||||||
|
'ad hoc' upgrades are installed in the appropriate order; i.e. that
|
||||||
|
the upgrade process stays 'safe' and backwards-compatible. The login
|
||||||
|
process in PostegresBackend.c is structured so that older databases
|
||||||
|
are detected: the GUI should pop up a message asking the user if they
|
||||||
|
want to upgrade or not.
|
||||||
|
|
||||||
|
If the user wants to upgrade, then the pgendUpgradeDB() routine is
|
||||||
|
to be called. This routine is a set of nested case statements that
|
||||||
|
compare version numbers, and apply patches as needed. As of this
|
||||||
|
writing, there is only one upgrade: 'put_iguid_in_tables()'. Note
|
||||||
|
how 'put_iguid_in_tables()' is written in a simple ad-hoc manner.
|
||||||
|
That's because everything else in upgrade.c is focused on trying to
|
||||||
|
figure out when its appropriate to call 'put_iguid_in_tables()'.
|
||||||
|
Other upgrades should follow this same pattern: create the adhoc
|
||||||
|
routine, and plug it into a case statement in the pgendUpgradeDB()
|
||||||
|
call. Everything else is automatic.
|
||||||
|
|
||||||
|
This upgrade process only applies to newer clients connecting to
|
||||||
|
older databases. Otherise, if the client is creating a fresh, brand
|
||||||
|
new db, then one does not need to upgrade: put the newest db design
|
||||||
|
into table-create.sql, as usual, and stick in the version number
|
||||||
|
into table-version.sql
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
End of Document.
|
||||||
|
Loading…
Reference in New Issue
Block a user