- From: Israel Hilerio <israelh@microsoft.com>
- Date: Fri, 14 Oct 2011 21:27:17 +0000
- To: "Jonas Sicking (jonas@sicking.cc)" <jonas@sicking.cc>
- CC: "ben turner (bent.mozilla@gmail.com)" <bent.mozilla@gmail.com>, "Jonas Sicking (jonas@sicking.cc)" <jonas@sicking.cc>, "public-webapps@w3.org" <public-webapps@w3.org>, Tom Bolds <thombo@microsoft.com>, "Adam Herchenroether" <aherchen@microsoft.com>, Victor Ngo <vicngo@microsoft.com>
On Monday, October 10, 2011 10:15 AM, Israel Hilerio wrote: > On Monday, October 10, 2011 9:46 AM, Jonas Sicking wrote: > > On Fri, Oct 7, 2011 at 11:51 AM, Israel Hilerio > > <israelh@microsoft.com> > > wrote: > > > 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 :-). > > > > Hi Israel, > > > > I just realized that I might have misinterpreted your response. > > > > Are you saying that you think that passing an empty-array should > > produce a transaction with an empty scope (like in IEs implementation > > and as described by the spec currently), or a transaction with every > > objectStore in scope (like in Firefox and chrome)? > > > > / Jonas > > > > We don't do it like FF or chrome. We create the transaction but it has an > empty scope transaction. Therefore, whenever you try to access an object > store we throw an exception. Based on what Hans said, it seems we're all in > agreement. > > Also, I like Ben's suggestion of not allowing these transactions to be created in > the first place and throwing an exception during their creation. > > Israel > What type of exception should we throw when trying to create a transaction with an empty scope (NotFoundError, TypeError, or other)? Israel
Received on Friday, 14 October 2011 21:27:47 UTC