Re: [Bug 15434] New: [IndexedDB] Detail steps for assigning a key to a value

On Tue, Jan 24, 2012 at 5:15 PM, Jonas Sicking <jonas@sicking.cc> wrote:

> On Tue, Jan 24, 2012 at 4:23 PM, Joshua Bell <jsbell@chromium.org> wrote:
> >
> >
> > On Tue, Jan 24, 2012 at 4:16 PM, Israel Hilerio <israelh@microsoft.com>
> > wrote:
> >>
> >> On Tuesday, January 24, 2012 11:38 AM, Jonas Sicking wrote:>
> >> > Based on this (pending details from microsoft of course) I suggest the
> >> > following set of steps:
> >> >
> >> > 1. If /keyPath/ is the empty string, skip the remaining steps and
> >> > /value/ is not
> >> > modified.
> >> > 2. Let /remainingKeypath/ be /keyPath/ and /object/ be /value/.
> >> > 3. if /object/ is not an Object object or an Array object (see
> >> > structured clone
> >> > algorithm), then throw a DOMException of type DataError.
> >> > 4. If /remainingKeypath/ has a period in it, assign /remainingKeypath/
> >> > to be
> >> > everything after the first period and assign /attribute/ to be
> >> > everything
> >> > before that first period. Otherwise, go to step 8.
> >> > 5. If /object/ does not have an attribute named /attribute/, then
> create
> >> > the
> >> > attribute and assign it an empty object.
> >> > 6. Assign /object/ to be the value of the attribute named /attribute/
> on
> >> > /object/.
> >> > 7. Go to step 3.
> >> > 8. NOTE: The steps leading here ensure that /remainingKeyPath/ is a
> >> > single
> >> > attribute name (i.e. string without periods) by this step. They also
> >> > ensure
> >> > that /object/ is an Object or an Array, and not a Date, RegExp, Blob
> >> > etc.
> >> > 9. Let /attribute/ be /remainingKeyPath/ 10. Set an attribute named
> >> > /attribute/ on /object/ with the value /key/.
> >> >
> >> > Note that the intent is that these steps are only executed if
> evaluating
> >> > the
> >> > keyPath did not yield a value. I.e. if we know that we need to modify
> >> > the
> >> > stored value. Because of this we know that at step
> >> > 10 the object does not have an attribute with name /attribute/.
> >> >
> >> > Let me know if these steps sound ok?
> >> >
> >> > / Jonas
> >> >
> >>
> >> The steps look good to me.
> >>
> >> Israel
> >>
> >
> > Ditto.
>
> Sweet! Though as I was copying these steps into the bug I realized
> that step 1 is superfluous as I already pointed out earlier in this
> thread (this is disregarding what we decide regarding empty-string as
> valid keyPaths for objectStores and/or indexes).
>
> I hope it was ok that I removed that step as I copied the steps into the
> bug.


If we decide to keep empty-string as a valid keyPath, it would not hurt to
leave an informative note at the start of the section describing this
algorithm pointing out that keyPath is guaranteed not be empty based on the
preconditions for autoIncrement.

Received on Wednesday, 25 January 2012 01:28:39 UTC