QOF-to-SQL Proof of Concept

Derek Atkins warlord at MIT.EDU
Sat May 29 22:59:53 EDT 2004

Benjamin Carlyle <benjamincarlyle at optusnet.com.au> writes:

> The database handles it for you.
> Whenever you say "BEGIN TRANSACTION;" a exclusive lock will be placed on
> the whole database. When you commit or rollback your transaction the
> lock is removed. Any insert, update, or other operation that modifies
> the database will implicitly begin and commit a transaction during its
> execution. Every select statement locks the whole database with a shared
> lock and unlocks when the query is done.

Good.  This is exactly what I expected.  So long as this works across
multiple applications connecting to the same database, then it's just
fine.  I think we'll still need to do some sort of internal locking
to stop the race condition of having two apps trying to change the
same piece of data..

I guess we could have the internal "begin edit" actually perform a
database lock, but that's not really a viable option because the app
could hold that lock for a long time waiting on user input.
So we just need to be careful to:

lock db
do {
   check status
   if (status changed)
   update record
} while (0);
unlock db

I'm not sure a BEGIN TRANSACTION / COMMIT TRANSACTION is sufficient to
do this, unless we can actually perform a SELECT and get back real
data in the middle of a transaction?

> Benjamin.


       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available

More information about the gnucash-devel mailing list