|
From: <sub...@co...> - 2006-12-28 20:55:50
|
Author: novalis Date: 2006-12-28 13:55:44 -0700 (Thu, 28 Dec 2006) New Revision: 2165 Added: SQLObject/docs/Versioning.txt Log: fixed code samples Added: SQLObject/docs/Versioning.txt =================================================================== --- SQLObject/docs/Versioning.txt (rev 0) +++ SQLObject/docs/Versioning.txt 2006-12-28 20:55:44 UTC (rev 2165) @@ -0,0 +1,81 @@ +:Author: David Turner, The Open Planning Project + +Versioning +----------- + +Why +~~~ + +You have a table where rows can be altered, such as a table of wiki +pages. You want to retain a history of changes for auditing, backup, +or tracking purposes. + +You could write a decorator that stores old versions and manage all +access to this object through it. Or you could take advantage of the +event system in SQLObject 0.8+ and just catch row accesses to the +object. SQLObject's versioning module does this for you. And it even +works with inheritance! + +How +~~~ + +Here's how to set it up:: + + class MyClass(SQLObject): + name = StringCol() + versions = Versioning() + +To use it, just create an instance as usual:: + + mc = MyClass(name='fleem') + +Then make some changes and check out the results:: + + mc.set(name='morx') + assert mc.versions[0].name == 'fleem' + +You can also restore to a previous version:: + + mc.versions[0].restore() + assert mc.name == "fleem" + +Inheritance +~~~~~~~~~~~ + +There are three ways versioning can be used with inheritance: + +1. Parent versioned, children unversioned:: + + class Base(InheritableSQLObject): + name = StringCol() + versions = Versioning() + + class Child(Base): + toy = StringCol() + +In this case, when changes are made to an instance of Base, new +versions are created. But when changes are made to an instance of +Child, no new versions are created. + +2. Children versioned, parents unversioned. + +In this case, when changes are made to an instance of Child, new +versions are created. But when changes are made to an instance of +Base, no new versions are created. The version data for Child +contains all of the columns from child and from base, so that a full +restore is possible. + +3. Both children and parents versioned. + +In this case, changes to either Child or Base instances create new +versions, but in different tables. Child versions still contain all +Base data, and a change to a Child only creates a new Child version, not +a new Base version. + +Version Tables +~~~~~~~~~~~~~~ + +Versions are stored in a special table which is created when the table +for a versioned class is created. Version tables are not altered when +the main table is altered, so if you add a column to your main class, +you will need to manually add the column to your version table. |