W3C home > Mailing lists > Public > public-webapps@w3.org > October to December 2011

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

From: Jonas Sicking <jonas@sicking.cc>
Date: Fri, 14 Oct 2011 14:43:07 -0700
Message-ID: <CA+c2ei8G+4K21fZfsaok=Rf70u76h2rukHiPhAGaY1kntHcONQ@mail.gmail.com>
To: Israel Hilerio <israelh@microsoft.com>
Cc: "ben turner (bent.mozilla@gmail.com)" <bent.mozilla@gmail.com>, "public-webapps@w3.org" <public-webapps@w3.org>, Tom Bolds <thombo@microsoft.com>, Adam Herchenroether <aherchen@microsoft.com>, Victor Ngo <vicngo@microsoft.com>
On Fri, Oct 14, 2011 at 2:27 PM, Israel Hilerio <israelh@microsoft.com> wrote:
> 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)?

Either of those would work for me.

/ Jonas
Received on Friday, 14 October 2011 21:44:12 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:48 GMT