- From: Israel Hilerio <israelh@microsoft.com>
- Date: Fri, 7 Oct 2011 18:51:19 +0000
- To: "Jonas Sicking (jonas@sicking.cc)" <jonas@sicking.cc>
- CC: Webapps WG <public-webapps@w3.org>
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