W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2012

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

From: Joshua Bell <jsbell@chromium.org>
Date: Wed, 11 Jan 2012 15:44:52 -0800
Message-ID: <CAD649j7e7FCkS1oBS_OFPS-3oyD2JjMCp6N4aWffzZU8ZEDgxg@mail.gmail.com>
To: Israel Hilerio <israelh@microsoft.com>
Cc: "public-webapps@w3.org" <public-webapps@w3.org>
On Wed, Jan 11, 2012 at 3:17 PM, Israel Hilerio <israelh@microsoft.com>wrote:

>  We updated Section 3.1.3 with examples to capture the behavior you are
> seeing in IE.
>

Ah, I missed this, looking for normative text. :)

Based on this section, if the attribute doesn’t exists and there is an
> autogen is set to true the attribute is added to the structure and can be
> used to access the generated value. The use case for this is to be able to
> auto-generate a key value by the system in a well-defined attribute. This
> allows devs to access their primary keys from a well-known attribute.  This
> is easier than having to add the attribute yourself with an empty value
> before adding the object. This was agreed on a previous email thread last
> year.****
>
> ** **
>
> I agree with you that we should probably add a section with “steps for
> assigning a key to a value using a key path.”  However, I would change step
> #4 and add #8.5 to reflect the approach described in section 3.1.3 and #9
> to reflect that you can’t add attributes to entities which are not
> objects.  In my mind this is how the new section should look like:****
>
> ** **
>
> When taking the steps for assigning a key to a value using a key path, the
> ****
>
> implementation must run the following algorithm. The algorithm takes a key
> path****
>
> named /keyPath/, a key named /key/, and a value named /value/ which may be
> ****
>
> modified by the steps of the algorithm.****
>
> ** **
>
> 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 /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 7.****
>
> 4. If /object/ does not have an attribute named /attribute/, then create
> the attribute and assign it an empty object.  If error creating the
> attribute then skip the remaining steps, /value/ is not modified, and throw
> a DOMException of type InvalidStateError.****
>
> 5. Assign /object/ to be the value of the attribute named /attribute/ on**
> **
>
> /object/.****
>
> 6. Go to step 3.****
>
> 7. NOTE: The steps leading here ensure that /remainingKeyPath/ is a single
> ****
>
> attribute name (i.e. string without periods) by this step.****
>
> 8. Let /attribute/ be /remainingKeyPath/****
>
> 8.5. If /object/ does not have an attribute named /attribute/, then create
> the attribute.  If error creating the attribute then skip the remaining
> steps, /value/ is not modified, and throw a DOMException of type
> InvalidStateError.****
>
> 9. If /object/ has an attribute named /attribute/ which is not modifiable,
> then****
>
> skip the remaining steps, /value/ is not modified, and throw a
> DOMException of type InvalidStateError.****
>
> 10. Set an attribute named /attribute/ on /object/ with the value /key/.**
> **
>
> ** **
>
> What do you think?****
>
> **
>

Overall looks good to me. Obviously needs to be renumbered. Steps 4 and 8.5
talk about first creating an attribute, then later then assigning it a
value. In contrast, step 10 phrases it as a single operation ("set an
attribute named /attribute/ on /object/ with the value /key/"). We should
unify the language; I'm not sure if there's precedent for one step vs. two
step attribute assignment.





>  **
>
> Israel****
>
> ** **
>
> On Wednesday, January 11, 2012 12:42 PM, Joshua Bell wrote:****
>
> *From:* jsbell@google.com [mailto:jsbell@google.com] *On Behalf Of *Joshua
> Bell
> *Sent:* Wednesday, January 11, 2012 12:42 PM
> *To:* public-webapps@w3.org
> *Subject:* Re: [Bug 15434] New: [IndexedDB] Detail steps for assigning a
> key to a value****
>
> ** **
>
> On Wed, Jan 11, 2012 at 12:40 PM, Joshua Bell <jsbell@chromium.org> wrote:
> ****
>
> I thought this issue was theoretical when I filed it, but it appears to be
> the reason behind the difference in results for IE10 vs. Chrome 17 when
> running this test:****
>
> ** **
>
>
> http://samples.msdn.microsoft.com/ietestcenter/indexeddb/indexeddb_harness.htm?url=idbobjectstore_add8.htm
> ****
>
> ** **
>
> If I'm reading the test script right, the IDB implementation is being
> asked to assign a key (autogenerated, so a number, say 1) using the key
> path "test.obj.key" to a value { property: "data" }****
>
> ** **
>
> The Chromium/WebKit implementation follows the steps I outlined below.
> Namely, at step 4 the algorithm would abort when the value is found to not
> have a "test" attribute. ****
>
> ** **
>
> To be clear, in Chromium the *algorithm* aborts, leaving the value
> unchanged. The request and transaction carry on just fine.****
>
>  ****
>
>  If IE10 is passing, then it must be synthesizing new JS objects as it
> walks the key path, until it gets to the final step in the path, yielding
> something like { property: "data", test: { obj: { key: 1 } } }****
>
> ** **
>
> Thoughts?****
>
> ** **
>
> On Thu, Jan 5, 2012 at 1:44 PM, <bugzilla@jessica.w3.org> wrote:****
>
> https://www.w3.org/Bugs/Public/show_bug.cgi?id=15434
>
>           Summary: [IndexedDB] Detail steps for assigning a key to a
>                    value
>           Product: WebAppsWG
>           Version: unspecified
>          Platform: All
>        OS/Version: All
>            Status: NEW
>          Severity: minor
>          Priority: P2
>         Component: Indexed Database API
>        AssignedTo: dave.null@w3.org
>        ReportedBy: jsbell@chromium.org
>         QAContact: member-webapi-cvs@w3.org
>                CC: mike@w3.org, public-webapps@w3.org
>
>
> In section 5.1 "Object Store Storage Operation", step 2: when a key
> generator
> is used with store with in line keys, the spec says: "set the property in
> value
> pointed to by store's key path to the new value for key"
>
> The "steps for extracting a key from a value using a key path" are called
> out
> explicitly under Algorithms in 4.7. Should the steps for assigning a key
> to a
> value using a key path be similarly documented?
>
> Cribbing from the spec, this could read as:
>
> 4.X Steps for assigning a key to a value using a key path
>
> When taking the steps for assigning a key to a value using a key path, the
> implementation must run the following algorithm. The algorithm takes a key
> path
> named /keyPath/, a key named /key/, and a value named /value/ which may be
> modified by the steps of the algorithm.
>
> 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 /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 7.
> 4. If /object/ does not have an attribute named /attribute/, then skip the
> rest
> of these steps and /value/ is not modified.
> 5. Assign /object/ to be the /value/ of the attribute named /attribute/ on
> /object/.
> 6. Go to step 3.
> 7. NOTE: The steps leading here ensure that /remainingKeyPath/ is a single
> attribute name (i.e. string without periods) by this step.
> 8. Let /attribute/ be /remainingKeyPath/
> 9. If /object/ has an attribute named /attribute/ which is not modifiable,
> then
> skip the remaining steps and /value/ is not modified.
> 10. Set an attribute named /attribute/ on /object/ with the value /key/.
>
> Notes:
>
> The above talks in terms of a mutable value. It could be amended to have an
> initial step which produces a clone of the value, which is later returned,
> but
> given how this algorithm is used the difference is not observable, since
> the
> value stored should already be a clone that doesn't have any other
> references.
>
> Step 9 is present in case the key path refers to a "special" property,
> e.g. a
> String/Array length, Blob/File properties, etc.
>
> --
> Configure bugmail: https://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug.****
>
> ** **
>
>  ** **
>
Received on Wednesday, 11 January 2012 23:45:26 GMT

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