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

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

Received on Monday, 10 October 2011 17:15:32 UTC