The last transaction should always be the final one. In a a multiprocess/threaded application how can one make assumptions on the order of updates?
Sreekumar On Fri, Feb 10, 2012 at 8:16 PM, Igor Tandetnik <itandet...@mvps.org> wrote: > Sreekumar TP <sreekumar...@gmail.com> wrote: > > How is this different from two threads each with a db connection in a > > single process? > > If each thread uses its own separate connection, it should be no different > - you would observe the same issue. > > > Moreover the journal mode is WAL. Hence the writer should be able to > append > > changes to the WAL file as there are no other write transaction. > > Your problem is with a transaction stat starts as a reader, and later > tries to become a writer. This is only possible if the reader is observing > the most recent state of the database, that is, if there were no writes > since it started. > > Consider: > > // initial setup > create table t(count integer); > insert into t values (0); > > /* 1 */ select count from t; > /* 2 */ update t set count = count + 10; > /* 1 */ update t set count = count + 1; // (!) > /* 1 */ select count from t; // (!!) > > /* 1 */ and /* 2 */ mark operations performed by two separate > transactions. Imagine that such a sequence were possible, and the update at > (!) succeeded. What value should count have after this update? If it's 11, > then a select at (!!) would effectively observe a change written by a > different transaction, violating transaction isolation. If it's 1, then an > observer in yet third connection could see the count go up, then down - > which is surprising as the update statements only ever increment it. > > Neither outcome is particularly appealing, so the sequence is prohibited > altogether. > > There are several ways in which transactions that start as readers and > later promote themselves to writers may cause problems. It's best to avoid > such situations: if you know that you may need to write eventually, start > your transaction with BEGIN IMMEDIATE, then it would be marked as a writer > from the outset. > -- > Igor Tandetnik > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users