W3C home > Mailing lists > Public > public-webapps@w3.org > April to June 2012

[IndexedDB] Extracting keys and null/undefined

From: Kyle Huey <me@kylehuey.com>
Date: Tue, 19 Jun 2012 21:24:08 -0700
Message-ID: <CAP045AqmPmBgoAk9peySCj7Ng1fNFFkMDq8mi4pwRM3i0xdEPg@mail.gmail.com>
To: Web Applications Working Group WG <public-webapps@w3.org>
Consider an autoincrementing IDBObjectStore with keyPath "foo.bar".

Which of the following (if any) should succeed?

1. objectStore.put({foo: null});
2. objectStore.put({foo: undefined});
3. objectStore.put({foo: {bar: null}});
4. objectStore.put({foo: {bar: undefined}});

By my reading of the spec, currently #1 and #2 succeed, and #3 and #4 do
not.

First, we look at the foo property on the object.  All 4 objects have a foo
property.  We take the value of the foo property and consider that further.
Then we look for a bar property.  Because 'null' and 'undefined' do not
have that property, we return from step 5 of "the steps for extracting a
key from a value using a key path" with no value for #1 and #2.  For #3 and
#4, we return the value of the bar property, null or undefined,
respectively.
IDBObjectStore.put throws if, among other conditions, "the object store
uses in-line keys and the result of evaluating the object store's key path
yields a value and that value is not a valid key."  Since null and
undefined are not valid keys, #3 and #4 are rejected, while #1 and #2 go on
to receive autogenerated keys.

IMO, this is not intuitive behavior.

- Kyle
Received on Wednesday, 20 June 2012 04:24:37 GMT

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