I'm have been trying to test this new audit function in trunk, but so far the mything_archive table has never been created in any of my tests.
Is this the current state of the implementation, or am I missing something? I downloaded the latest trunk and used it web2py admin to create a new app. I then modified db.py according to the instructions in this thread: .................................................... auth = Auth(db, hmac_key=Auth.get_or_create_key()) auth.define_tables(username=True, signature=True) ... db.define_table("points", Field('type','integer'), Field('point','integer'), Field('pointname','string'), auth.signature) auth.enable_record_versioning(db) .................................................... I've tried this with both mysql and sqlite databases, but no *_archive table... Any comments or suggestions? thanks, - Tom On Thursday, April 5, 2012 4:16:04 PM UTC-6, Massimo Di Pierro wrote: > > This is how it works: > > # define auth > auth = Auth(db, hmac_key=Auth.get_or_create_key()) > auth.define_tables(username=True,signature=True) > > # define your own tables like > db.define_table('mything',Field('name'),auth.signature) > > # than do: > auth.enable_record_versioning(db) > > how does it work? every table, including auth_user will have an > auth.signature including created_by, created_on, modified_by, modified_on, > is_active fields. When a record of table mything (or any other table) is > modified, a copy of the previous record is copied into mything_archive > which references the current record. When a record is deleted, it is not > actually deleted but is_active is set to False, all records with > is_active==False are filtered out in searches except in appadmin. > > Pros: > - your app will get full record archival for auditing purposes > - could not be simpler. nothing else to do. Try with > SQLFORM.grid(db.mything) for example. > - does not break references and there is no need for uuids > - does not slow down searches because archive is done in separate archive > tables > > Cons: > - uses lots of extra memory because every version of a record is stored > (it would be more efficient to store changes only but that would make more > difficult to do auditing). > - slows down db(...).update(...) for multi record because it needs to copy > all records needing update from the original table to the archive table. > This requires selecting all the records. > > Comments? Suggestions? > > > > > > > On Thursday, April 5, 2012 4:16:04 PM UTC-6, Massimo Di Pierro wrote: > > This is how it works: > > # define auth > auth = Auth(db, hmac_key=Auth.get_or_create_key()) > auth.define_tables(username=True,signature=True) > > # define your own tables like > db.define_table('mything',Field('name'),auth.signature) > > # than do: > auth.enable_record_versioning(db) > > how does it work? every table, including auth_user will have an > auth.signature including created_by, created_on, modified_by, modified_on, > is_active fields. When a record of table mything (or any other table) is > modified, a copy of the previous record is copied into mything_archive > which references the current record. When a record is deleted, it is not > actually deleted but is_active is set to False, all records with > is_active==False are filtered out in searches except in appadmin. > > Pros: > - your app will get full record archival for auditing purposes > - could not be simpler. nothing else to do. Try with > SQLFORM.grid(db.mything) for example. > - does not break references and there is no need for uuids > - does not slow down searches because archive is done in separate archive > tables > > Cons: > - uses lots of extra memory because every version of a record is stored > (it would be more efficient to store changes only but that would make more > difficult to do auditing). > - slows down db(...).update(...) for multi record because it needs to copy > all records needing update from the original table to the archive table. > This requires selecting all the records. > > Comments? Suggestions? > > > > > > >