[IndexedDB] Passing an empty array to IDBDatabase.transaction

Hi All,

In both the Firefox and the Chrome implementation you can pass an
empty array to IDBDatabase.transaction in order to create a
transaction which has a scope that covers all objectStores in the
database. I.e. you can do something like:

trans = db.transaction([]);
trans.objectStore(<any objectstore here>);

(Note that this is *not* a dynamic scoped transaction, it's still a
static scope that covers the whole database).

In other words, these implementations treat the following two lines as
equivalent:

trans = db.transaction([]);
trans = db.transaction(db.objectStoreNames);

This, however, is not specified behavior. According to the spec as it
is now the transaction should be created with an empty scope.

I suspect both Mozilla and Google implemented it this way because we
had discussions about this syntax on the list. However apparently this
syntax never made it into the spec. I don't recall why.

I'm personally not a big fan of this syntax. My concern is that it
makes it easier to create a widely scoped transaction which has less
ability to run in parallel with other transactions, than to create a
transaction with as narrow scope as possible. And passing
db.objectStoreNames is always possible.

What do people think we should do? Should we add this behavior to the
spec? Or are implementations willing to remove it?

/ Jonas

Received on Friday, 7 October 2011 00:44:53 UTC