That are SQL 101 questions, this is a Pharo list ;-)

You should wrap your SQL statements in a transactions, 
https://sqlite.org/lang_transaction.html

> On 16 Jul 2016, at 08:19, Hilaire <hila...@drgeo.eu> wrote:
> 
> Hi guys,
> 
> In a multi-thread context use of Sqlite, I try to find out how one will
> fetch securely the automatically last row index of a Primary key.
> 
> The problem seems to be that between the insert of rows in a table and
> the moment you request the last row id, you may have another insert from
> another thread in the same database.
> 
> In the code bellow, I put the insert and last_insert_rowid() call in a
> transaction. The returned rowid value is the right one as expected, and
> now I am wondering if enclosing in a transaction is enought to make the
> last_insert_rowid() safe.
> 
> 
> Any trips how you handle this situation?
> 
> Thanks
> 
> Hilaire
> 
> 
> The organisation table is defined as:
> CREATE TABLE organisation (
>       idOrg           INTEGER PRIMARY KEY,
>       name            VARCHAR(30),
>       address         TEXT,
>       zipcode         INTEGER,
>       city            VARCHAR(30),
>       phone           VARCHAR(15),
>       email           VARCHAR(20) );'
> 
> 
> The code is as follow:
> 
> 
> | row res s id |
> database execute: 'INSERT INTO organisation (name) values (''Pharo
> consortium'')'.
> res := database beginTransaction.
> self assert: res = 0.
> s := database prepare: 'INSERT INTO organisation (name, address,
> zipcode, city, phone, email) values (?, ?, ?, ?, ?, ?)'.
> s at: 1 putString: 'Dupont & co'.
> s at: 2 putString: '12, rue du pont'.
> s at: 3 putInteger: 75000.
> s at: 4 putString: 'Paris'.
> s at: 5 putString: '0105060708'.
> s at: 6 putString: 'cont...@dupont.fr'.
> s step.
> s finalize.
> row := database execute: 'SELECT last_insert_rowid()'.
> res := database commitTransaction.
> id := row next at: 'last_insert_rowid()'.
> row close.
> self assert: res = 0.
> self assert: id = 2.
> 
> -- 
> Dr. Geo
> http://drgeo.eu
> 
> 


Reply via email to