RE: [IndexedDB] Passing an empty array to IDBDatabase.transaction

On Thursday, October 06, 2011 5:44 PM, Jonas Sicking wrote:
> 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
> 

Our implementation interprets the empty array as an empty scope.  We allow the transaction to be created but we throw a NOT_FOUND_ERR when trying to access any object stores.
I vote for not having this behavior :-).

Israel

Received on Friday, 7 October 2011 18:51:52 UTC