From: Tab Atkins Jr. [mailto:[email protected]] 
Sent: Wednesday, November 10, 2010 1:50 PM

>> On Wed, Nov 10, 2010 at 1:43 PM, Pablo Castro
>> <[email protected]> wrote:
>> >
>> > From: [email protected] [mailto:[email protected]] 
>> > On Behalf Of [email protected]
>> > Sent: Monday, November 08, 2010 5:07 PM
>> >
>> >>> So what happens if trying save in an object store which has the following
>> >>> keypath, the following value. (The generated key is 4):
>> >>>
>> >>> "foo.bar"
>> >>> { foo: {} }
>> >>>
>> >>> Here the resulting object is clearly { foo: { bar: 4 } }
>> >>>
>> >>> But what about
>> >>>
>> >>> "foo.bar"
>> >>> { foo: { bar: 10 } }
>> >>>
>> >>> Does this use the value 10 rather than generate a new key, does it throw 
>> >>> an
>> >>> exception or does it store the value { foo: { bar: 4 } }?
>> >
>> > I suspect that all options are somewhat arbitrary here. I'll just propose 
>> > that we error out to ensure that nobody has the wrong expectations about 
>> > the implementation preserving the initial value. I would be open to other 
>> > options except silently overwriting the initial value with a generated 
>> > one, as that's likely to confuse folks.
>>
>> It's relatively common for me to need to supply a manual value for an
>> id field that's automatically generated when working with databases,
>> and I don't see any particular reason that my situation would change
>> if using IndexedDB.  So I think that a manually-supplied key should be
>> kept.

That would be okay with me. One bit of fine-print on this one is that if you're 
calling store.add() with an explicit key then you may get a unique constraint 
error (which would never happen with a generator if you never provided your own 
keys). Also, did we settle for having put() never adding a new record if one 
didn't exist? If put() can create a record, then things still work but become a 
bit more elaborate in that put() would create a new record either if the key is 
not present in the object or if it's present but the value doesn't exist in the 
database, while it would update a record if the value was present and it 
existed as a key in the store.

-pablo

Reply via email to