[mythtv] [mythtv-commits] mythtv commit: r21780 by stuartm

Stuart Morgan stuart at tase.co.uk
Fri Sep 11 21:48:36 UTC 2009


On Friday 11 Sep 2009 22:15:51 Daniel Kristjansson wrote:
> On Fri, 2009-09-11 at 17:14 +0000, mythtv at cvs.mythtv.org wrote:
> > Author: stuartm
> >         Date: 2009-09-11 17:14:46 +0000 (Fri, 11 Sep 2009)
> > Set the record id after insertion of a new rule using
> > QSqlQuery::lastInsertId().
> 
> lastInsertId() can be used when the database back end supports it, but
> then you should query it before and after the insert and only its value
> if the insert is successful and the value has been incremented by one
> and the insert does not use the DELAYED keyword (and obviously it can
> not be used with REPLACE inserts.)
> 
> In any case, if the record id is really needed there should be a backup
> method for obtaining it when someone else happens to do an insert
> shortly after you do an insert into the table and when the database
> backend does not support the optionally supported lastInsertId().

I'm assuming that it use's mysqls LAST_INSERT_ID() which should be perfectly 
safe, I've been using it in applications for a long time. It will always 
return the value for the last insertion on the _current_ connection. Granted 
I'm assuming that when we grab a connection from the pool we have it 
exclusively. The call to lastInsertId() is the next instruction after exec() - 
the return value of which we check first so the window for the value to change 
is in the range of 1ms. It's not being used with either DELAYED or REPLACE. 
Lastly since we only support mysql, the assumption is that the backend is 
mysql and that's an assumption made all over the code, so this wouldn't be the 
only thing to break.

I think LAST_INSERT_ID() is certainly a far safer method than the one we were 
using previously in the old code "SELECT MAX(recordid) FROM record;" - there 
exists a real danger of an additional record being inserted in the intervening 
period which might come from any frontend or backend using another mysql 
connection.
-- 
Stuart Morgan


More information about the mythtv-dev mailing list