Re: [Bug 11257] New: Should IDBCursor.update be able to create a new entry?

On Thu, Nov 11, 2010 at 8:46 PM, Jonas Sicking <jonas@sicking.cc> wrote:

> On Thu, Nov 11, 2010 at 5:11 AM, Jeremy Orlow <jorlow@chromium.org> wrote:
> > On Mon, Nov 8, 2010 at 2:12 PM, <bugzilla@jessica.w3.org> wrote:
> >>
> >> http://www.w3.org/Bugs/Public/show_bug.cgi?id=11257
> >>
> >>           Summary: Should IDBCursor.update be able to create a new
> entry?
> >>           Product: WebAppsWG
> >>           Version: unspecified
> >>          Platform: PC
> >>        OS/Version: All
> >>            Status: NEW
> >>          Severity: normal
> >>          Priority: P2
> >>         Component: Indexed Database API
> >>        AssignedTo: dave.null@w3.org
> >>        ReportedBy: jonas@sicking.cc
> >>         QAContact: member-webapi-cvs@w3.org
> >>                CC: mike@w3.org, public-webapps@w3.org
> >>
> >>
> >> What should happen in the following case:
> >>
> >> db.transaction(["foo"]).objectStore("foo").openCursor().onsuccess =
> >> function(e)
> >> {
> >>  var cursor = e.result;
> >>  if (!cursor)
> >>    return;
> >>
> >>  cursor.delete();
> >>  cursor.update({ id: 1234, value: "Benny" });
> >> }
> >>
> >>
> >> This situation can of course arrive in more subtle ways:
> >>
> >> os = db.transaction(["foo"]).objectStore("foo");
> >> os.openCursor().onsuccess = function(e) {
> >>  var cursor = e.result;
> >>  if (!cursor)
> >>    return;
> >>
> >>  cursor.update({ id: 1234, value: "Benny" });
> >> }
> >> os.delete(1234);
> >>
> >>
> >> As specified, IDBCursor.update behaves just like IDBObjectStore.put and
> >> just
> >> creates a new entry, but this might be somewhat unexpected behavior.
> >
> > Let's just remove update and delete from IDBCursor and be done with it.
>
> The problem is that you can't always get to the key of the objectStore
> entry to delete/update. Specifically if the objectStore uses
> out-of-line keys the cursor doesn't expose those.
>

Why not fix this use case then?  I.e. change the cursor to return .indexKey,
.primaryKey, .value (or something like that).  If we did this, we could even
get rid of the different between object cursors and key cursors (which
overload the .value to mean the primary key, which is quite confusing).

J

Received on Thursday, 11 November 2010 19:52:46 UTC