- From: Jeremy Orlow <jorlow@chromium.org>
- Date: Mon, 1 Nov 2010 14:21:18 +0000
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: Webapps WG <public-webapps@w3.org>
- Message-ID: <AANLkTinWn9Zqq7dO=5C79N0E41-iaTQ39YDgQVPuxxsp@mail.gmail.com>
On Sat, Oct 30, 2010 at 12:24 AM, Jonas Sicking <jonas@sicking.cc> wrote: > On Sun, Oct 24, 2010 at 8:06 AM, Jeremy Orlow <jorlow@chromium.org> wrote: > > On Sat, Oct 23, 2010 at 2:45 AM, Jonas Sicking <jonas@sicking.cc> wrote: > >> > >> Hi all, > >> > >> IDBKeyRange is in need of some cleanup. The first issue is its > >> constructors. Currently the IDL for IDBKeyRange, define that the > >> constructors, .only, .leftBound, .rightBound, .bound, on object > >> instances themselves. I don't think this is intentional since first of > >> all it makes it impossible to create the first IDBKeyRange, second, > >> second it seems strange to have constructor functions on instances. > >> > >> It seems like the intent is that the following should work: > >> > >> x = new IDBKeyRange.bound(...); > >> and possibly also > >> x = IDBKeyRange.bound(...); > >> (the latter works for for example XMLHttpRequest, JS-heads have also > >> informed me that it should work). > > > > The latter is what we do in Chromium and what I'm pretty sure we agreed > upon > > in earlier threads. Since these methods are factories, it seems as > though > > the new operator should not be necessary. > > > >> > >> Unfortunately there is no way to express this in WebIDL, so I think we > >> need to describe it in prose instead. I'll raise this with Cameron, > >> but I think that since at this point only IndexedDB uses these > >> "static" functions, it might not make sense to add support to WebIDL. > > > > I believe "class methods" is the more accepted term for such methods. > I'd > > rather we look at adding these to WebIDL now rather than waiting for the > > next instance that uses them as I'd hope we didn't add a new concept just > > for one interface in one API. Prose seems like the right solution in the > > mean time though. > > > >> > >> The other thing is that the .flags attribute is really not very > >> javascript friendly as it uses bitfields. It also is weird in that it > >> has multiple bits, but some have strong interdependencies. For example > >> if SINGLE is set LEFT_OPEN and RIGHT_OPEN must be false, and > >> LEFT_BOUND and RIGHT_BOUND must be true. It also seems like the > >> LEFT_BOUND flag is closely correlated to the .left property. > >> > >> I suggest the following API instead: > >> > >> interface IDBKeyRange { > >> readonly attribute any left; > >> readonly attribute any right; > >> readonly attribute boolean leftOpen; > >> readonly attribute boolean rightOpen; > >> }; > >> > >> the .left and .right properties return 'null' or 'undefined' (to be > >> discussed) when the keyrange isn't bound in that direction. > > > > I agree the flags attribute is confusing and not very JavaScript like. I > > also like your solution. null is probably what it should return when not > > bounded. > Why did you end up using undefined rather than null? "The <a>key range</a> <a href="#widl-IDBKeyRange-lower"><code>lower</code></a> value is <code>undefined</code> or <a>less than</a> <var>key value</var>." > > What should the open param return if its associated left/right is not > bound? > > I don't care much, but it should definitely be specced. > >> > >> Another question I had is if "left" and "right" really are good names. > >> Seems to me that "upper" and "lower" are better words, but it might be > >> that left/right is established concepts in the database community? I > >> don't feel strongly on this issue. Oh, I see now that bug 10397 is > >> filed on this exact issue. > > > > Yup. Agree that left/right are bad names. > > The fact that we're discussing things over again points to the fact that > we > > really need to get on top of all the bugs against the spec. Most of them > > should be pretty easy. Will the editors have time to address these > before > > TPAC? If not, does anyone have a problem with me becoming an editor? > > > >> > >> Lastly, should we allow values to be passed directly to all APIs that > >> currently take IDBKeyRanges? It seems nice to not require people to > >> create an IDBKeyRange object using patterns like: > >> > >> req = objectStore.openCursor(new IDBKeyRange.only(foo)); > >> > >> and instead allow > >> > >> req = objectStore.openCursor(foo); > > > > I'm OK with this. > > > >> > >> Similarly, should we allow IDBObjectStore.get on and IDBIndex.get to > >> take a IDBKeyRange and return the first value that matches the > >> keyrange. This would allow things like "give me the first entry with a > >> value greater than X". > > > > That seems like it could be valuable. I'd support such a change. > > I've implemented these changes in > http://dvcs.w3.org/hg/IndexedDB/rev/e5a08025e518 > > There is definitely a lot of work remaining on the spec. I've added a > lot of infrastructure which should make this *much* easier, such as > defining algorithms for request handling, but the work to fully > integrate that everywhere is still remaining. Much of it tightening up > the language to make things more strictly defined. One thing that is > totally lacking for example is integration with event loops, another > is cursors. > > So the more help we can get, the better. We'd just need to be better > at assigning bugs to ourselves before working on them as to avoid > stepping on each others toes. > The text looks better. The formatting seems to be screwed up though. (A large part of the doc is now red.) I only skimmed, but I did notice one thing right away: 1.401: comma before or is incorrect. Also, is this implying that opening a cursor that has no results should throw and/or fire on error? It doesn't seem super clear. Thanks for doing this, J
Received on Monday, 1 November 2010 14:22:11 UTC