Re: IndexedDB: undefined parameters

On Tue, 09 Oct 2012 19:52:27 +0200, Joshua Bell <jsbell@chromium.org>  
wrote:
> We were looking at Opera's w3c-test submissions, and noticed that  
> several of them use a pattern like:
>
> request = index.openCursor(undefined, 'prev');
>
> or:
>
> opts = {};
> request = index.openCursor(opts.range, opts.direction);
>
> In Chrome, these throw DataError per our interpretation of the spec: "If  
> the range parameter is specified but is not a valid key or a key range,  
> this method throws a DOMException of type DataError." [1]

Yes. You are correct.

Some of the first tests I wrote had that pattern, and since the testcases  
came before the implementation, the implementation followed the testcases  
:P  Firefox, which I used to sanity check at the time I wrote them,  
allowed it (and still do).

I did check and change a few other tests that I wrote more recently when  
checked up against IE10 (and now Chromium), but I didn't go through older  
ones.

The tests are meant to follow the spec so they should be fixed. :-)



But I am quite convinced that not having TreatUndefinedAs=Missing is a  
painful API design though, for just the reasons others have brought up in  
this thread.

I have written one like that for open. In supports.js, there is something  
like

# function createdb(name, version) {
#   if (!name) name = generate_name()
#
#   if (!version) return indexedDB.open(name)
#   else return indexedDB.open(name, version)
# }

Where that last if-tests feel very redundant.

Last time I looked at it, WebIDL said [TreatUndefinedAs=Missing] is meant  
to be for legacy API's, and not new ones. I think that a bit strange and  
counter productive. Why?

-- 
Odin Hørthe Omdal (Velmont/odinho) · Core, Opera Software, http://opera.com

Received on Wednesday, 10 October 2012 18:15:33 UTC