On 4/06/2009 8:22 AM, Nikolaus Rath wrote: > Nuno Lucas <ntlu...@gmail.com> writes: >> On Wed, Jun 3, 2009 at 2:41 AM, Nikolaus Rath <nikol...@rath.org> wrote: >>> Nuno Lucas <ntlu...@gmail.com> writes: >>>> On Tue, May 26, 2009 at 5:17 PM, Nikolaus Rath <nikol...@rath.org> wrote: >>>>> Hello, >>>>> >>>>> How can I determine the rowid of the last insert if I am accessing the >>>>> db from different threads? If I understand correctly, >>>>> last_insert_rowid() won't work reliably in this case. >>>> It should work if you do: >>>> >>>> BEGIN >>>> INSERT ... >>>> last_insert_rowid() >>>> END >>> That would be very nice. But does "it should work" mean that you know >>> that it works (and it is documented and guaranteed)? The above sounds a >>> bit uncertain to me...
Guaranteed? You're expecting a lot. Most software that you pay large sums of money for guarantee not much more than that the version numbers will be monotonically increasing. >> It just means I'm too old to assume anything is certain. The Universe >> is always conspiring against you ;-) >> >> What I mean is that if it doesn't work, then you found a bug, most >> probably in your own code. > > Well, now you are in direct contradiction to Igor who says that it does > not work: > > ,---- > | >> If all threads share the same connection, it is your responsibility > | >> to make "insert then retrieve last rowid" an atomic operation, using > | >> thread synchronization mechanism of your choice. Just as with any > | >> access to shared data. > | > > | > Is BEGIN ... COMMIT sufficient for that? > | > | No. Transaction is also maintained per connection. Starting a > | transaction would prevent other connections from making concurrent > | changes, but wouldn't block other threads using the same connection. > `---- > > > Any third opinions or references to documentation? <opinion> I don't see Igor saying it doesn't work. He says that it is not sufficient; *YOU* must maintain atomicity, using mutexes or whatever -- just as you need to "with any access to shared data" if you have multiple threads per connection. "if it doesn't work, then you found a bug, most probably in your own code" is not "in direct contradiction to Igor" ... I'd call it corroborative of Igor. </opinion> _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users