Quoting Dan Kennedy ([EMAIL PROTECTED]):
> > - The second problem appears to be a problem with self-locking.  I'm
> >   inserting a "mapping" into a table.  I have a query active to find ids
> >   that require mapping, and then I try to find the current lowest
> >   unused "mapping" value, and insert it.
> 
> Right. You can't modify a table that is currently being scanned by
> a SELECT query. One way around this is to make a copy of the table
> in a TEMP table for the duration of the operation.

But actually I'm not currently selecting from it.  I prepare two
statements, one for query and one for insert.  The query should only
return 0 or 1 rows.  I do the query, then if it returns 0 rows, I do the
insert.  I repeat this multiple times, using the same prepared statements
each time.  Like I said, this never caused a problem when I did it in
MySQL or PostgreSQL.

I realize that SQLite has to be simplied compared to full features RDBMS,
but it appears that either the SQLite library, or possibly the perl
wrapper, is somehow mistaking a prepared statement which has finished
executing the current query for one whose query is still open.

I suppose the only way I'm going to know for sure is to try writing the
same sequence of events in C, and it's been so long I'm not sure my C
skills are up to it.

-- 
Paul Tomblin <[EMAIL PROTECTED]> http://xcski.com/blogs/pt/
If you're not part of the solution, you're part of the precipitate.

Reply via email to