[whatwg] Comments on updated SQL API

Maciej Stachowiak mjs at apple.com
Wed Oct 17 00:31:38 PDT 2007


On Oct 16, 2007, at 11:18 PM, Ian Hickson wrote:

> On Fri, 5 Oct 2007, Scott Hess wrote:
>
>> In general, I am of the opinion that you should either have no
>> transactions, or explicit transactions, but never implicit  
>> transactions.
>> This is a little different from a case like mysql, where you might  
>> make
>> an explicit decision to do things without transactions in the  
>> interest
>> of scalability, with the associated need to be very careful in how  
>> your
>> system orders your execution.  At least for SQLite, having a  
>> transaction
>> for multiple statements is more efficient than not, and scalability
>> isn't a huge issue.  Even so, I think that implicit transactions are
>> making a decision on behalf of the developer which the developer  
>> should
>> be explicit about.
>
> What are the disadvantages of implicit transactions?
>
> What do other people think?

I can think of two reasons you might not want to open a transaction in  
a particular case.

(1) Behavior - you may honestly want to start a completely independent  
statement from the callback for another. This case seems to be handled  
ok by closeTransaction(), though perhaps a little inconveniently if  
this turns out to be the common case.

(2) Performance for single statements. We should gain implementation  
experience to determine if, in likely implementations, it is a  
significant performance improvement for single statements to be  
executed without opening a transaction at all.

(3) Performance in the face of concurrency by not holding locks as  
long. But again closeTranscation() can cover this case if (2) is not  
an issue.

So I think we need some performance results for (2) to decide if  
another method is warranted.

>> I wasn't clear from the spec, but I think it would be possible to  
>> do the
>> sequence-of-statements case like:
>>
>>  executeSql('sql1', function (result) {
>>    closeTransaction();
>>    executeSql('sql2', function (result) {
>>      closeTransaction();
>>      executeSql('sql3', function (result) {
>>      });
>>    });
>>  });
>>
>> If not, then I think this would be a useful addition (if implicit
>> transactions are retained).




More information about the whatwg mailing list