[whatwg] Comments on updated SQL API

Maciej Stachowiak mjs at apple.com
Sat Sep 22 20:20:06 PDT 2007


On Sep 22, 2007, at 9:32 AM, Aaron Boodman wrote:

> I agree with both Maciej's points, and want the second one more than  
> he did.
>
> Additional comments:
>
> 4.12.3, step 3:
>
> I don't think you should implicitly join active transactions unless
> you're inside a callback from a previous executeSql call. Otherwise
> all code that wants to call executeSql needs to know about all other
> code using it and know to wait if it wants isolation. In the case
> where you're a top-level call to executeSql, you should start a new
> transaction.

This is a little unclear, but I think the spec has the behavior you  
suggest already.

There is a distinction between "transaction", which is essentially a  
local variable to a specific pass through the algorithm, and the  
"active thread-global transaction". "transaction" is set in step 3,  
but the "active thread-global transaction" is not set until step 8,  
which is after the method has returned and when you are about to  
dispatch the callback, and is cleared after the callback is  
dispatched. However, this is less than perfectly clear in the spec, as  
you were not the only one confused on this point. I think the spec  
could make this more clear.

I agree with the remainder of your comments (which I omitted).

Another comment:

Sometimes it's useful to schedule multiple SQL queries in a single  
transaction at once, without a separate async callback for each. We  
discussed possible syntax something like the following:

void executeSql(in sequence<Object> sqlStatements, in SQLMultiCallback  
callback);

sqlStatements is an Array where each element is either a string or an  
array. If a string, it is strated as a standalone statement. If an  
array, it the first element of that nested array is a statement with ?  
slots for parameter substitution and the remainder of the elements are  
arrays. SQLMultiCallback is like SQLCallback but gets an array of  
ResultSets. Example:

db.executeSql(['INSERT INTO "db1" ("column1") VALUES ("value1")',
                       ['UPDATE "counter" SET "version" = ? WHERE  
"version" = ?', v + 1, v]],
function (resultArray) {
     // ... do stuff ...
});

Otherwise, there's no way to put multiple independent statements  
inside a transaction from top level.

Regards,
Maciej

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20070922/3144888d/attachment-0001.htm>


More information about the whatwg mailing list