<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[80171] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/80171">80171</a></dd>
<dt>Author</dt> <dd>jorlow@chromium.org</dd>
<dt>Date</dt> <dd>2011-03-02 14:46:35 -0800 (Wed, 02 Mar 2011)</dd>
</dl>

<h3>Log Message</h3>
<pre>2011-02-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=55443

        * storage/indexeddb/cursor-delete-expected.txt:
        * storage/indexeddb/cursor-index-delete-expected.txt:
        * storage/indexeddb/cursor-update-expected.txt:
        * storage/indexeddb/cursor-update.html:
        * storage/indexeddb/duplicates-expected.txt:
        * storage/indexeddb/duplicates.html:
        * storage/indexeddb/index-basics-expected.txt:
        * storage/indexeddb/index-basics.html:
        * storage/indexeddb/index-cursor-expected.txt:
        * storage/indexeddb/index-cursor.html:
2011-02-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=55443

        Implement http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948

        The idea is to have an IDBCursor and an IDBCursorWithValue interface which
        inherits from the former.  index.openKeyCursor will return the former and
        index/objectStore.openCursor will return the latter.  We'll add a primaryKey
        attribute to IDBCursor.  It will always be the key of the associated object
        store entry.  For index.openCursor cursors, the key attribute will be the key
        of the index.  For objectStore.openCursors, it'll be the same as the
        primaryKey.  The value will be the value of the objectStore entry.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbCursorWithValue):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::primaryKey):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursor.idl.
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        (WebCore::IDBCursorWithValue::~IDBCursorWithValue):
        * storage/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
        * storage/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursorType):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
2011-02-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=55443

        * public/WebIDBCursor.h:
        (WebKit::WebIDBCursor::primaryKey):
        (WebKit::WebIDBCursor::value):
        * src/IDBCursorBackendProxy.cpp:
        (WebCore::IDBCursorBackendProxy::primaryKey):
        (WebCore::IDBCursorBackendProxy::value):
        * src/IDBCursorBackendProxy.h:
        * src/WebIDBCursorImpl.cpp:
        (WebKit::WebIDBCursorImpl::key):
        (WebKit::WebIDBCursorImpl::primaryKey):
        (WebKit::WebIDBCursorImpl::value):
        * src/WebIDBCursorImpl.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursordeleteexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-delete-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorindexdeleteexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorupdateexpectedtxt">trunk/LayoutTests/storage/indexeddb/cursor-update-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbcursorupdatehtml">trunk/LayoutTests/storage/indexeddb/cursor-update.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbduplicatesexpectedtxt">trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbduplicateshtml">trunk/LayoutTests/storage/indexeddb/duplicates.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbindexbasicsexpectedtxt">trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbindexbasicshtml">trunk/LayoutTests/storage/indexeddb/index-basics.html</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbindexcursorexpectedtxt">trunk/LayoutTests/storage/indexeddb/index-cursor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstorageindexeddbindexcursorhtml">trunk/LayoutTests/storage/indexeddb/index-cursor.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoregypi">trunk/Source/WebCore/WebCore.gypi</a></li>
<li><a href="#trunkSourceWebCorebindingsv8SerializedScriptValuecpp">trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsv8SerializedScriptValueh">trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h</a></li>
<li><a href="#trunkSourceWebCorebindingsv8customV8IDBAnyCustomcpp">trunk/Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBAnycpp">trunk/Source/WebCore/storage/IDBAny.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBAnyh">trunk/Source/WebCore/storage/IDBAny.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorcpp">trunk/Source/WebCore/storage/IDBCursor.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorh">trunk/Source/WebCore/storage/IDBCursor.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursoridl">trunk/Source/WebCore/storage/IDBCursor.idl</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorBackendImplcpp">trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorBackendImplh">trunk/Source/WebCore/storage/IDBCursorBackendImpl.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorBackendInterfaceh">trunk/Source/WebCore/storage/IDBCursorBackendInterface.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBIndexcpp">trunk/Source/WebCore/storage/IDBIndex.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBIndexBackendImplcpp">trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBIndexBackendImplh">trunk/Source/WebCore/storage/IDBIndexBackendImpl.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBObjectStorecpp">trunk/Source/WebCore/storage/IDBObjectStore.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBObjectStoreBackendImplcpp">trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBRequestcpp">trunk/Source/WebCore/storage/IDBRequest.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBRequesth">trunk/Source/WebCore/storage/IDBRequest.h</a></li>
<li><a href="#trunkSourceWebKitchromiumChangeLog">trunk/Source/WebKit/chromium/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitchromiumpublicWebIDBCursorh">trunk/Source/WebKit/chromium/public/WebIDBCursor.h</a></li>
<li><a href="#trunkSourceWebKitchromiumsrcIDBCursorBackendProxycpp">trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp</a></li>
<li><a href="#trunkSourceWebKitchromiumsrcIDBCursorBackendProxyh">trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h</a></li>
<li><a href="#trunkSourceWebKitchromiumsrcWebIDBCursorImplcpp">trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp</a></li>
<li><a href="#trunkSourceWebKitchromiumsrcWebIDBCursorImplh">trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorestorageIDBCursorWithValuecpp">trunk/Source/WebCore/storage/IDBCursorWithValue.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorWithValueh">trunk/Source/WebCore/storage/IDBCursorWithValue.h</a></li>
<li><a href="#trunkSourceWebCorestorageIDBCursorWithValueidl">trunk/Source/WebCore/storage/IDBCursorWithValue.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/ChangeLog 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2011-02-28  Jeremy Orlow  <jorlow@chromium.org>
+
+        Reviewed by James Robinson.
+
+        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
+        https://bugs.webkit.org/show_bug.cgi?id=55443
+
+        * storage/indexeddb/cursor-delete-expected.txt:
+        * storage/indexeddb/cursor-index-delete-expected.txt:
+        * storage/indexeddb/cursor-update-expected.txt:
+        * storage/indexeddb/cursor-update.html:
+        * storage/indexeddb/duplicates-expected.txt:
+        * storage/indexeddb/duplicates.html:
+        * storage/indexeddb/index-basics-expected.txt:
+        * storage/indexeddb/index-basics.html:
+        * storage/indexeddb/index-cursor-expected.txt:
+        * storage/indexeddb/index-cursor.html:
+
</ins><span class="cx"> 2011-03-02  Martin Robinson  <mrobinson@igalia.com>
</span><span class="cx"> 
</span><span class="cx">         Update GTK+ baselines after r80151.
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursordeleteexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-delete-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-delete-expected.txt   2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/cursor-delete-expected.txt      2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> objectStore.add('myValue1', 'myKey1')
</span><span class="cx"> openCursor2
</span><span class="cx"> objectStore.openCursor(keyRange)
</span><del>-PASS [object IDBCursor] is non-null.
</del><ins>+PASS [object IDBCursorWithValue] is non-null.
</ins><span class="cx"> event.target.result.delete()
</span><span class="cx"> objectStore.get('myKey1')
</span><span class="cx"> PASS event.target.result is undefined
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorindexdeleteexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt     2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt        2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> openCursor2
</span><span class="cx"> index = event.target.source.index('testIndex')
</span><span class="cx"> index.openCursor(keyRange)
</span><del>-PASS [object IDBCursor] is non-null.
</del><ins>+PASS [object IDBCursorWithValue] is non-null.
</ins><span class="cx"> event.target.result.delete()
</span><span class="cx"> index.get(1)
</span><span class="cx"> event.preventDefault()
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorupdateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-update-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-update-expected.txt   2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/cursor-update-expected.txt      2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -149,22 +149,22 @@
</span><span class="cx"> trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)
</span><span class="cx"> keyCursor()
</span><span class="cx"> PASS event.target.result.key is counter + 100
</span><del>-PASS event.target.result.value is counter
</del><ins>+PASS event.target.result.primaryKey is counter
</ins><span class="cx"> event.target.result.update({id: counter, number: counter + 200})
</span><span class="cx"> PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
</span><span class="cx"> keyCursor()
</span><span class="cx"> PASS event.target.result.key is counter + 100
</span><del>-PASS event.target.result.value is counter
</del><ins>+PASS event.target.result.primaryKey is counter
</ins><span class="cx"> event.target.result.update({id: counter, number: counter + 200})
</span><span class="cx"> PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
</span><span class="cx"> keyCursor()
</span><span class="cx"> PASS event.target.result.key is counter + 100
</span><del>-PASS event.target.result.value is counter
</del><ins>+PASS event.target.result.primaryKey is counter
</ins><span class="cx"> event.target.result.update({id: counter, number: counter + 200})
</span><span class="cx"> PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
</span><span class="cx"> keyCursor()
</span><span class="cx"> PASS event.target.result.key is counter + 100
</span><del>-PASS event.target.result.value is counter
</del><ins>+PASS event.target.result.primaryKey is counter
</ins><span class="cx"> event.target.result.update({id: counter, number: counter + 200})
</span><span class="cx"> PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
</span><span class="cx"> keyCursor()
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbcursorupdatehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/cursor-update.html (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/cursor-update.html   2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/cursor-update.html      2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -206,7 +206,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     shouldBe("event.target.result.key", "counter + 100");
</span><del>-    shouldBe("event.target.result.value", "counter");
</del><ins>+    shouldBe("event.target.result.primaryKey", "counter");
</ins><span class="cx"> 
</span><span class="cx">     try {
</span><span class="cx">         debug("event.target.result.update({id: counter, number: counter + 200})");
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbduplicatesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -28,11 +28,11 @@
</span><span class="cx"> indexObject.openKeyCursor()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value"
</span><del>-PASS event.target.result.value is "key"
</del><ins>+PASS event.target.result.primaryKey is "key"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value2"
</span><del>-PASS event.target.result.value is "key2"
</del><ins>+PASS event.target.result.primaryKey is "key2"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is true
</span><span class="cx"> indexObject.openCursor()
</span><span class="lines">@@ -72,11 +72,11 @@
</span><span class="cx"> indexObject.openKeyCursor()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value"
</span><del>-PASS event.target.result.value is "key"
</del><ins>+PASS event.target.result.primaryKey is "key"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value2"
</span><del>-PASS event.target.result.value is "key2"
</del><ins>+PASS event.target.result.primaryKey is "key2"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is true
</span><span class="cx"> indexObject.openCursor()
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbduplicateshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/duplicates.html (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/duplicates.html      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/duplicates.html 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> {
</span><span class="cx">     shouldBeFalse("event.target.result === null");
</span><span class="cx">     shouldBeEqualToString("event.target.result.key", "value");
</span><del>-    shouldBeEqualToString("event.target.result.value", "key");
</del><ins>+    shouldBeEqualToString("event.target.result.primaryKey", "key");
</ins><span class="cx"> 
</span><span class="cx">     // We re-use the last request object.
</span><span class="cx">     evalAndLog("event.target.result.continue()");
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx"> {
</span><span class="cx">     shouldBeFalse("event.target.result === null");
</span><span class="cx">     shouldBeEqualToString("event.target.result.key", "value2");
</span><del>-    shouldBeEqualToString("event.target.result.value", "key2");
</del><ins>+    shouldBeEqualToString("event.target.result.primaryKey", "key2");
</ins><span class="cx"> 
</span><span class="cx">     // We re-use the last request object.
</span><span class="cx">     evalAndLog("event.target.result.continue()");
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbindexbasicsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -49,11 +49,11 @@
</span><span class="cx"> indexObject.openKeyCursor()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value"
</span><del>-PASS event.target.result.value is "key"
</del><ins>+PASS event.target.result.primaryKey is "key"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is false
</span><span class="cx"> PASS event.target.result.key is "value2"
</span><del>-PASS event.target.result.value is "key2"
</del><ins>+PASS event.target.result.primaryKey is "key2"
</ins><span class="cx"> event.target.result.continue()
</span><span class="cx"> PASS event.target.result === null is true
</span><span class="cx"> indexObject.openCursor()
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbindexbasicshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/index-basics.html (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/index-basics.html    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/index-basics.html       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx"> {
</span><span class="cx">     shouldBeFalse("event.target.result === null");
</span><span class="cx">     shouldBeEqualToString("event.target.result.key", "value");
</span><del>-    shouldBeEqualToString("event.target.result.value", "key");
</del><ins>+    shouldBeEqualToString("event.target.result.primaryKey", "key");
</ins><span class="cx"> 
</span><span class="cx">     // We re-use the last request object.
</span><span class="cx">     evalAndLog("event.target.result.continue()");
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx"> {
</span><span class="cx">     shouldBeFalse("event.target.result === null");
</span><span class="cx">     shouldBeEqualToString("event.target.result.key", "value2");
</span><del>-    shouldBeEqualToString("event.target.result.value", "key2");
</del><ins>+    shouldBeEqualToString("event.target.result.primaryKey", "key2");
</ins><span class="cx"> 
</span><span class="cx">     // We re-use the last request object.
</span><span class="cx">     evalAndLog("event.target.result.continue()");
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbindexcursorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/index-cursor-expected.txt (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/index-cursor-expected.txt    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/index-cursor-expected.txt       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -23,36 +23,36 @@
</span><span class="cx"> Running tests...
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -60,43 +60,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 0; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -104,283 +104,283 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 0; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 0; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 0; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -388,43 +388,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 1; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -432,1081 +432,1081 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 1; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 1; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 1; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 2; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 2; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 2; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 2; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 2; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 2; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 3; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 3; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 3; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 3; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 3; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 3; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 4; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 4; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 4; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 4; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 4; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 4; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 5; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 5; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 5; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 5; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1514,23 +1514,23 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1538,23 +1538,23 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1562,23 +1562,23 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1586,23 +1586,23 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower open bound is 5; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 5; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1610,43 +1610,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1654,43 +1654,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1704,9 +1704,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1720,9 +1720,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1736,9 +1736,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1752,9 +1752,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 6; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1762,43 +1762,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1806,43 +1806,43 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper open bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1856,9 +1856,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; upper bound is 6; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1872,9 +1872,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; upper bound is 6; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1888,9 +1888,9 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; upper bound is 7; sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="lines">@@ -1904,47 +1904,47 @@
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: lower bound is 7; upper bound is 7; sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: null key path sorted ascending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> 
</span><span class="cx"> Next test: null key path sorted descending.
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[7]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[6]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[5]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[4]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[3]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[2]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[1]
</span><del>-PASS event.target.result.value is expectedIndex
</del><ins>+PASS event.target.result.primaryKey is expectedIndex
</ins><span class="cx"> PASS event.target.result.key is testData[0]
</span><span class="cx"> PASS event.target.result is null
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsstorageindexeddbindexcursorhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/indexeddb/index-cursor.html (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/indexeddb/index-cursor.html    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/LayoutTests/storage/indexeddb/index-cursor.html       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -208,7 +208,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">  
</span><del>-    shouldBe("event.target.result.value", "expectedIndex");
</del><ins>+    shouldBe("event.target.result.primaryKey", "expectedIndex");
</ins><span class="cx">     shouldBe("event.target.result.key", "testData[" + expectedIndex + "]");
</span><span class="cx">     window.expectedIndex = ascending ? expectedIndex + 1 : expectedIndex - 1;
</span><span class="cx">     testWithinBounds();
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/ChangeLog      2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -1,3 +1,74 @@
</span><ins>+2011-02-28  Jeremy Orlow  <jorlow@chromium.org>
+
+        Reviewed by James Robinson.
+
+        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
+        https://bugs.webkit.org/show_bug.cgi?id=55443
+
+        Implement http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948
+
+        The idea is to have an IDBCursor and an IDBCursorWithValue interface which
+        inherits from the former.  index.openKeyCursor will return the former and
+        index/objectStore.openCursor will return the latter.  We'll add a primaryKey
+        attribute to IDBCursor.  It will always be the key of the associated object
+        store entry.  For index.openCursor cursors, the key attribute will be the key
+        of the index.  For objectStore.openCursors, it'll be the same as the
+        primaryKey.  The value will be the value of the objectStore entry.
+
+        * WebCore.gypi:
+        * bindings/scripts/CodeGeneratorV8.pm:
+        * bindings/v8/SerializedScriptValue.cpp:
+        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
+        * bindings/v8/SerializedScriptValue.h:
+        * bindings/v8/custom/V8IDBAnyCustom.cpp:
+        (WebCore::toV8):
+        * storage/IDBAny.cpp:
+        (WebCore::IDBAny::idbCursorWithValue):
+        (WebCore::IDBAny::set):
+        * storage/IDBAny.h:
+        * storage/IDBCursor.cpp:
+        (WebCore::IDBCursor::create):
+        (WebCore::IDBCursor::primaryKey):
+        (WebCore::IDBCursor::value):
+        * storage/IDBCursor.h:
+        * storage/IDBCursor.idl:
+        * storage/IDBCursorBackendImpl.cpp:
+        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
+        (WebCore::IDBCursorBackendImpl::primaryKey):
+        (WebCore::IDBCursorBackendImpl::value):
+        (WebCore::IDBCursorBackendImpl::update):
+        (WebCore::IDBCursorBackendImpl::currentRowExists):
+        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
+        (WebCore::IDBCursorBackendImpl::deleteFunction):
+        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
+        * storage/IDBCursorBackendImpl.h:
+        (WebCore::IDBCursorBackendImpl::create):
+        * storage/IDBCursorBackendInterface.h:
+        * storage/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursor.idl.
+        (WebCore::IDBCursorWithValue::create):
+        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
+        (WebCore::IDBCursorWithValue::~IDBCursorWithValue):
+        * storage/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
+        * storage/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
+        * storage/IDBIndex.cpp:
+        (WebCore::IDBIndex::openCursor):
+        (WebCore::IDBIndex::openKeyCursor):
+        * storage/IDBIndexBackendImpl.cpp:
+        (WebCore::IDBIndexBackendImpl::openCursorInternal):
+        (WebCore::IDBIndexBackendImpl::openCursor):
+        (WebCore::IDBIndexBackendImpl::openKeyCursor):
+        * storage/IDBIndexBackendImpl.h:
+        * storage/IDBObjectStore.cpp:
+        (WebCore::IDBObjectStore::openCursor):
+        * storage/IDBObjectStoreBackendImpl.cpp:
+        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
+        * storage/IDBRequest.cpp:
+        (WebCore::IDBRequest::IDBRequest):
+        (WebCore::IDBRequest::setCursorType):
+        (WebCore::IDBRequest::onSuccess):
+        (WebCore::IDBRequest::dispatchEvent):
+        * storage/IDBRequest.h:
+
</ins><span class="cx"> 2011-03-02  Aravind Akella  <aravind.akella@nokia.com>
</span><span class="cx"> 
</span><span class="cx">          Reviewed by Csaba Osztrogon√°c.
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoregypi"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.gypi (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.gypi        2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/WebCore.gypi   2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -276,6 +276,7 @@
</span><span class="cx">             'storage/DatabaseSync.idl',
</span><span class="cx">             'storage/IDBAny.idl',
</span><span class="cx">             'storage/IDBCursor.idl',
</span><ins>+            'storage/IDBCursorWithValue.idl',
</ins><span class="cx">             'storage/IDBDatabaseError.idl',
</span><span class="cx">             'storage/IDBDatabaseException.idl',
</span><span class="cx">             'storage/IDBDatabase.idl',
</span><span class="lines">@@ -4089,6 +4090,8 @@
</span><span class="cx">             'storage/IDBCallbacks.h',
</span><span class="cx">             'storage/IDBCursor.cpp',
</span><span class="cx">             'storage/IDBCursor.h',
</span><ins>+            'storage/IDBCursorWithValue.cpp',
+            'storage/IDBCursorWithValue.h',
</ins><span class="cx">             'storage/IDBCursorBackendImpl.cpp',
</span><span class="cx">             'storage/IDBCursorBackendImpl.h',
</span><span class="cx">             'storage/IDBCursorBackendInterface.h',
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsv8SerializedScriptValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -1146,6 +1146,12 @@
</span><span class="cx">     object->ForceSet(v8::String::NewSymbol(propertyName), deserialized, attribute);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void SerializedScriptValue::deserializeAndSetProperty(v8::Handle<v8::Object> object, const char* propertyName,
+                                                      v8::PropertyAttribute attribute, PassRefPtr<SerializedScriptValue> value)
+{
+    deserializeAndSetProperty(object, propertyName, attribute, value.get());
+}
+
</ins><span class="cx"> PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::Value> value, bool& didThrow)
</span><span class="cx"> {
</span><span class="cx">     return adoptRef(new SerializedScriptValue(value, didThrow));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsv8SerializedScriptValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h 2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h    2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -39,8 +39,10 @@
</span><span class="cx"> 
</span><span class="cx"> class SerializedScriptValue : public ThreadSafeShared<SerializedScriptValue> {
</span><span class="cx"> public:
</span><del>-    static void deserializeAndSetProperty(v8::Handle<v8::Object> object, const char* propertyName,
</del><ins>+    static void deserializeAndSetProperty(v8::Handle<v8::Object>, const char* propertyName,
</ins><span class="cx">                                           v8::PropertyAttribute, SerializedScriptValue*);
</span><ins>+    static void deserializeAndSetProperty(v8::Handle<v8::Object>, const char* propertyName,
+                                          v8::PropertyAttribute, PassRefPtr<SerializedScriptValue>);
</ins><span class="cx"> 
</span><span class="cx">     // If a serialization error occurs (e.g., cyclic input value) this
</span><span class="cx">     // function returns an empty representation, schedules a V8 exception to
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsv8customV8IDBAnyCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include "SerializedScriptValue.h"
</span><span class="cx"> #include "V8IDBCursor.h"
</span><ins>+#include "V8IDBCursorWithValue.h"
</ins><span class="cx"> #include "V8IDBDatabase.h"
</span><span class="cx"> #include "V8IDBFactory.h"
</span><span class="cx"> #include "V8IDBIndex.h"
</span><span class="lines">@@ -54,6 +55,8 @@
</span><span class="cx">         return v8::Null();
</span><span class="cx">     case IDBAny::IDBCursorType:
</span><span class="cx">         return toV8(impl->idbCursor());
</span><ins>+    case IDBAny::IDBCursorWithValueType:
+        return toV8(impl->idbCursorWithValue());
</ins><span class="cx">     case IDBAny::IDBDatabaseType:
</span><span class="cx">         return toV8(impl->idbDatabase());
</span><span class="cx">     case IDBAny::IDBFactoryType:
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBAnycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBAny.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBAny.cpp  2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBAny.cpp     2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><del>-#include "IDBCursor.h"
</del><ins>+#include "IDBCursorWithValue.h"
</ins><span class="cx"> #include "IDBDatabase.h"
</span><span class="cx"> #include "IDBFactory.h"
</span><span class="cx"> #include "IDBIndex.h"
</span><span class="lines">@@ -64,6 +64,13 @@
</span><span class="cx">     return m_idbCursor;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+
+PassRefPtr<IDBCursorWithValue> IDBAny::idbCursorWithValue()
+{
+    ASSERT(m_type == IDBCursorWithValueType);
+    return m_idbCursorWithValue;
+}
+
</ins><span class="cx"> PassRefPtr<IDBDatabase> IDBAny::idbDatabase()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_type == IDBDatabaseType);
</span><span class="lines">@@ -112,6 +119,13 @@
</span><span class="cx">     m_type = NullType;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBAny::set(PassRefPtr<IDBCursorWithValue> value)
+{
+    ASSERT(m_type == UndefinedType);
+    m_type = IDBCursorWithValueType;
+    m_idbCursorWithValue = value;
+}
+
</ins><span class="cx"> void IDBAny::set(PassRefPtr<IDBCursor> value)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_type == UndefinedType);
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBAnyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBAny.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBAny.h    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBAny.h       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class IDBCursor;
</span><ins>+class IDBCursorWithValue;
</ins><span class="cx"> class IDBDatabase;
</span><span class="cx"> class IDBFactory;
</span><span class="cx"> class IDBIndex;
</span><span class="lines">@@ -67,6 +68,7 @@
</span><span class="cx">         UndefinedType = 0,
</span><span class="cx">         NullType,
</span><span class="cx">         IDBCursorType,
</span><ins>+        IDBCursorWithValueType,
</ins><span class="cx">         IDBDatabaseType,
</span><span class="cx">         IDBFactoryType,
</span><span class="cx">         IDBIndexType,
</span><span class="lines">@@ -79,6 +81,7 @@
</span><span class="cx">     Type type() const { return m_type; }
</span><span class="cx">     // Use type() to figure out which one of these you're allowed to call.
</span><span class="cx">     PassRefPtr<IDBCursor> idbCursor();
</span><ins>+    PassRefPtr<IDBCursorWithValue> idbCursorWithValue();
</ins><span class="cx">     PassRefPtr<IDBDatabase> idbDatabase();
</span><span class="cx">     PassRefPtr<IDBFactory> idbFactory();
</span><span class="cx">     PassRefPtr<IDBIndex> idbIndex();
</span><span class="lines">@@ -90,6 +93,7 @@
</span><span class="cx">     // Set can only be called once.
</span><span class="cx">     void setNull();
</span><span class="cx">     void set(PassRefPtr<IDBCursor>);
</span><ins>+    void set(PassRefPtr<IDBCursorWithValue>);
</ins><span class="cx">     void set(PassRefPtr<IDBDatabase>);
</span><span class="cx">     void set(PassRefPtr<IDBFactory>);
</span><span class="cx">     void set(PassRefPtr<IDBIndex>);
</span><span class="lines">@@ -105,6 +109,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Only one of the following should ever be in use at any given time.
</span><span class="cx">     RefPtr<IDBCursor> m_idbCursor;
</span><ins>+    RefPtr<IDBCursorWithValue> m_idbCursorWithValue;
</ins><span class="cx">     RefPtr<IDBDatabase> m_idbDatabase;
</span><span class="cx">     RefPtr<IDBFactory> m_idbFactory;
</span><span class="cx">     RefPtr<IDBIndex> m_idbIndex;
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursor.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursor.cpp       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursor.cpp  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -39,6 +39,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+PassRefPtr<IDBCursor> IDBCursor::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
+{
+    return adoptRef(new IDBCursor(backend, request, transaction));
+}
+
</ins><span class="cx"> IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
</span><span class="cx">     : m_backend(backend)
</span><span class="cx">     , m_request(request)
</span><span class="lines">@@ -63,8 +68,13 @@
</span><span class="cx">     return m_backend->key();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr<IDBAny> IDBCursor::value() const
</del><ins>+PassRefPtr<IDBKey> IDBCursor::primaryKey() const
</ins><span class="cx"> {
</span><ins>+    return m_backend->primaryKey();
+}
+
+PassRefPtr<SerializedScriptValue> IDBCursor::value() const
+{
</ins><span class="cx">     return m_backend->value();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursor.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursor.h 2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursor.h    2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><span class="cx"> #include "ExceptionCode.h"
</span><ins>+#include "IDBKey.h"
</ins><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="lines">@@ -38,7 +39,6 @@
</span><span class="cx"> class IDBAny;
</span><span class="cx"> class IDBCallbacks;
</span><span class="cx"> class IDBCursorBackendInterface;
</span><del>-class IDBKey;
</del><span class="cx"> class IDBRequest;
</span><span class="cx"> class IDBTransaction;
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="lines">@@ -52,11 +52,8 @@
</span><span class="cx">         PREV = 2,
</span><span class="cx">         PREV_NO_DUPLICATE = 3,
</span><span class="cx">     };
</span><del>-    static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
-    {
-        return adoptRef(new IDBCursor(backend, request, transaction));
-    }
-    ~IDBCursor();
</del><ins>+    static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
+    virtual ~IDBCursor();
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: Try to modify the code generator so this is unneeded.
</span><span class="cx">     void continueFunction(ExceptionCode& ec) { continueFunction(0, ec); }
</span><span class="lines">@@ -64,14 +61,16 @@
</span><span class="cx">     // Implement the IDL
</span><span class="cx">     unsigned short direction() const;
</span><span class="cx">     PassRefPtr<IDBKey> key() const;
</span><del>-    PassRefPtr<IDBAny> value() const;
</del><ins>+    PassRefPtr<IDBKey> primaryKey() const;
+    PassRefPtr<SerializedScriptValue> value() const;
</ins><span class="cx">     PassRefPtr<IDBRequest> update(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue>, ExceptionCode&);
</span><span class="cx">     void continueFunction(PassRefPtr<IDBKey>, ExceptionCode&);
</span><span class="cx">     PassRefPtr<IDBRequest> deleteFunction(ScriptExecutionContext*, ExceptionCode&);
</span><span class="cx"> 
</span><del>-private:
</del><ins>+protected:
</ins><span class="cx">     explicit IDBCursor(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
</span><span class="cx"> 
</span><ins>+private:
</ins><span class="cx">     RefPtr<IDBCursorBackendInterface> m_backend;
</span><span class="cx">     RefPtr<IDBRequest> m_request;
</span><span class="cx">     RefPtr<IDBTransaction> m_transaction;
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursoridl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursor.idl (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursor.idl       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursor.idl  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx"> 
</span><span class="cx">         readonly attribute unsigned short direction;
</span><span class="cx">         readonly attribute IDBKey key;
</span><del>-        readonly attribute IDBAny value;
</del><ins>+        readonly attribute IDBKey primaryKey;
</ins><span class="cx"> 
</span><span class="cx">         [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
</span><span class="cx">             raises (IDBDatabaseException);
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorBackendImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -45,12 +45,12 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-IDBCursorBackendImpl::IDBCursorBackendImpl(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
</del><ins>+IDBCursorBackendImpl::IDBCursorBackendImpl(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, CursorType cursorType, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
</ins><span class="cx">     : m_backingStore(backingStore)
</span><span class="cx">     , m_keyRange(keyRange)
</span><span class="cx">     , m_direction(direction)
</span><span class="cx">     , m_query(query)
</span><del>-    , m_isSerializedScriptValueCursor(isSerializedScriptValueCursor)
</del><ins>+    , m_cursorType(cursorType)
</ins><span class="cx">     , m_transaction(transaction)
</span><span class="cx">     , m_objectStore(objectStore)
</span><span class="cx"> {
</span><span class="lines">@@ -71,22 +71,25 @@
</span><span class="cx">     return m_currentKey;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr<IDBAny> IDBCursorBackendImpl::value() const
</del><ins>+PassRefPtr<IDBKey> IDBCursorBackendImpl::primaryKey() const
</ins><span class="cx"> {
</span><del>-    if (m_isSerializedScriptValueCursor)
-        return IDBAny::create(m_currentSerializedScriptValue.get());
-    return IDBAny::create(m_currentIDBKeyValue.get());
</del><ins>+    return m_currentPrimaryKey;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PassRefPtr<SerializedScriptValue> IDBCursorBackendImpl::value() const
+{
+    ASSERT(m_cursorType != IndexKeyCursor);
+    return m_currentValue;
+}
+
</ins><span class="cx"> void IDBCursorBackendImpl::update(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBCallbacks> callbacks, ExceptionCode& ec)
</span><span class="cx"> {
</span><del>-    if (!m_query || m_currentId == InvalidId || !m_isSerializedScriptValueCursor) {
</del><ins>+    if (!m_query || m_currentId == InvalidId || m_cursorType == IndexKeyCursor) {
</ins><span class="cx">         ec = IDBDatabaseException::NOT_ALLOWED_ERR;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
-    m_objectStore->put(value, key.release(), IDBObjectStoreBackendInterface::CursorUpdate, callbacks, m_transaction.get(), ec);
</del><ins>+    m_objectStore->put(value, m_currentPrimaryKey, IDBObjectStoreBackendInterface::CursorUpdate, callbacks, m_transaction.get(), ec);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBCursorBackendImpl::continueFunction(PassRefPtr<IDBKey> prpKey, PassRefPtr<IDBCallbacks> prpCallbacks, ExceptionCode& ec)
</span><span class="lines">@@ -100,7 +103,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool IDBCursorBackendImpl::currentRowExists()
</span><span class="cx"> {
</span><del>-    String sql = m_currentIDBKeyValue ? "SELECT id FROM IndexData WHERE id = ?" : "SELECT id FROM ObjectStoreData WHERE id = ?";
</del><ins>+    String sql = m_cursorType == ObjectStoreCursor ? "SELECT id FROM ObjectStoreData WHERE id = ?" : "SELECT id FROM IndexData WHERE id = ?";
</ins><span class="cx">     SQLiteStatement statement(m_backingStore->db(), sql);
</span><span class="cx"> 
</span><span class="cx">     bool ok = statement.prepare() == SQLResultOk;
</span><span class="lines">@@ -121,8 +124,8 @@
</span><span class="cx">             cursor->m_query = 0;
</span><span class="cx">             cursor->m_currentId = InvalidId;
</span><span class="cx">             cursor->m_currentKey = 0;
</span><del>-            cursor->m_currentSerializedScriptValue = 0;
-            cursor->m_currentIDBKeyValue = 0;
</del><ins>+            cursor->m_currentPrimaryKey = 0;
+            cursor->m_currentValue = 0;
</ins><span class="cx">             callbacks->onSuccess(SerializedScriptValue::nullValue());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -150,26 +153,22 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBCursorBackendImpl::deleteFunction(PassRefPtr<IDBCallbacks> prpCallbacks, ExceptionCode& ec)
</span><span class="cx"> {
</span><del>-    if (!m_query || m_currentId == InvalidId || !m_isSerializedScriptValueCursor) {
</del><ins>+    if (!m_query || m_currentId == InvalidId || m_cursorType == IndexKeyCursor) {
</ins><span class="cx">         ec = IDBDatabaseException::NOT_ALLOWED_ERR;
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
-    m_objectStore->deleteFunction(key.release(), prpCallbacks, m_transaction.get(), ec);
</del><ins>+    m_objectStore->deleteFunction(m_currentPrimaryKey, prpCallbacks, m_transaction.get(), ec);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> void IDBCursorBackendImpl::loadCurrentRow()
</span><span class="cx"> {
</span><del>-    // The column numbers depend on the query in IDBObjectStoreBackendImpl::openCursorInternal or
-    // IDBIndexBackendImpl::openCursorInternal.
</del><ins>+    // The column numbers depend on the query in IDBObjectStoreBackendImpl::openCursorInternal and/or IDBIndexBackendImpl::openCursorInternal.
</ins><span class="cx">     m_currentId = m_query->getColumnInt64(0);
</span><span class="cx">     m_currentKey = IDBKey::fromQuery(*m_query, 1);
</span><del>-    if (m_isSerializedScriptValueCursor)
-        m_currentSerializedScriptValue = SerializedScriptValue::createFromWire(m_query->getColumnBlobAsString(4));
-
-    m_currentIDBKeyValue = IDBKey::fromQuery(*m_query, 5);
</del><ins>+    m_currentValue = SerializedScriptValue::createFromWire(m_query->getColumnBlobAsString(4));
+    m_currentPrimaryKey = IDBKey::fromQuery(*m_query, 5);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SQLiteDatabase& IDBCursorBackendImpl::database() const
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorBackendImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursorBackendImpl.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorBackendImpl.h      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursorBackendImpl.h 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -49,21 +49,22 @@
</span><span class="cx"> 
</span><span class="cx"> class IDBCursorBackendImpl : public IDBCursorBackendInterface {
</span><span class="cx"> public:
</span><del>-    static PassRefPtr<IDBCursorBackendImpl> create(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
</del><ins>+    static PassRefPtr<IDBCursorBackendImpl> create(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, CursorType cursorType, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
</ins><span class="cx">     {
</span><del>-        return adoptRef(new IDBCursorBackendImpl(backingStore, keyRange, direction, query, isSerializedScriptValueCursor, transaction, objectStore));
</del><ins>+        return adoptRef(new IDBCursorBackendImpl(backingStore, keyRange, direction, query, cursorType, transaction, objectStore));
</ins><span class="cx">     }
</span><span class="cx">     virtual ~IDBCursorBackendImpl();
</span><span class="cx"> 
</span><span class="cx">     virtual unsigned short direction() const;
</span><span class="cx">     virtual PassRefPtr<IDBKey> key() const;
</span><del>-    virtual PassRefPtr<IDBAny> value() const;
</del><ins>+    virtual PassRefPtr<IDBKey> primaryKey() const;
+    virtual PassRefPtr<SerializedScriptValue> value() const;
</ins><span class="cx">     virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span><span class="cx">     virtual void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span><span class="cx">     virtual void deleteFunction(PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    IDBCursorBackendImpl(IDBBackingStore*, PassRefPtr<IDBKeyRange>, IDBCursor::Direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface*, IDBObjectStoreBackendInterface*);
</del><ins>+    IDBCursorBackendImpl(IDBBackingStore*, PassRefPtr<IDBKeyRange>, IDBCursor::Direction, PassOwnPtr<SQLiteStatement> query, CursorType, IDBTransactionBackendInterface*, IDBObjectStoreBackendInterface*);
</ins><span class="cx"> 
</span><span class="cx">     bool currentRowExists();
</span><span class="cx">     void loadCurrentRow();
</span><span class="lines">@@ -78,19 +79,13 @@
</span><span class="cx">     RefPtr<IDBKeyRange> m_keyRange;
</span><span class="cx">     IDBCursor::Direction m_direction;
</span><span class="cx">     OwnPtr<SQLiteStatement> m_query;
</span><del>-    bool m_isSerializedScriptValueCursor;
</del><ins>+    CursorType m_cursorType;
</ins><span class="cx">     int64_t m_currentId;
</span><span class="cx"> 
</span><del>-    // The key in the objectStore or index that this cursor iterates over.
</del><span class="cx">     RefPtr<IDBKey> m_currentKey;
</span><ins>+    RefPtr<IDBKey> m_currentPrimaryKey;
+    RefPtr<SerializedScriptValue> m_currentValue;
</ins><span class="cx"> 
</span><del>-    // m_isSerializedScriptValueCursor will only be available for object cursors.
-    RefPtr<SerializedScriptValue> m_currentSerializedScriptValue;
-
-    // FIXME: make the primary key available via script for all types of cursors.
-    // For cursors on indices, this is the key in the objectstore that corresponds to the current entry in the index.
-    RefPtr<IDBKey> m_currentIDBKeyValue;
-
</del><span class="cx">     RefPtr<IDBTransactionBackendInterface> m_transaction;
</span><span class="cx">     RefPtr<IDBObjectStoreBackendInterface> m_objectStore;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorBackendInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBCursorBackendInterface.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorBackendInterface.h 2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBCursorBackendInterface.h    2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -45,9 +45,17 @@
</span><span class="cx"> public:
</span><span class="cx">     virtual ~IDBCursorBackendInterface() {}
</span><span class="cx"> 
</span><ins>+    enum CursorType {
+        InvalidCursorType = 0,
+        IndexCursor,
+        IndexKeyCursor,
+        ObjectStoreCursor
+    };
+
</ins><span class="cx">     virtual unsigned short direction() const = 0;
</span><span class="cx">     virtual PassRefPtr<IDBKey> key() const = 0;
</span><del>-    virtual PassRefPtr<IDBAny> value() const = 0;
</del><ins>+    virtual PassRefPtr<IDBKey> primaryKey() const = 0;
+    virtual PassRefPtr<SerializedScriptValue> value() const = 0;
</ins><span class="cx"> 
</span><span class="cx">     virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
</span><span class="cx">     virtual void continueFunction(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorWithValuecppfromrev80170trunkSourceWebCorestorageIDBCursoridl"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/storage/IDBCursorWithValue.cpp (from rev 80170, trunk/Source/WebCore/storage/IDBCursor.idl) (0 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorWithValue.cpp                              (rev 0)
+++ trunk/Source/WebCore/storage/IDBCursorWithValue.cpp 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "IDBCursorWithValue.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBCursorBackendInterface.h"
+#include "IDBKey.h"
+
+namespace WebCore {
+
+PassRefPtr<IDBCursorWithValue> IDBCursorWithValue::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
+{
+    return adoptRef(new IDBCursorWithValue(backend, request, transaction));
+}
+
+IDBCursorWithValue::IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
+    : IDBCursor(backend, request, transaction)
+{
+}
+
+IDBCursorWithValue::~IDBCursorWithValue()
+{
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
</ins></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorWithValuehfromrev80170trunkSourceWebCorestorageIDBCursorBackendInterfaceh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/storage/IDBCursorWithValue.h (from rev 80170, trunk/Source/WebCore/storage/IDBCursorBackendInterface.h) (0 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorWithValue.h                                (rev 0)
+++ trunk/Source/WebCore/storage/IDBCursorWithValue.h   2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IDBCursorWithValue_h
+#define IDBCursorWithValue_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBCursor.h"
+
+namespace WebCore {
+
+class IDBCursorWithValue : public IDBCursor {
+public:
+    static PassRefPtr<IDBCursorWithValue> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
+    virtual ~IDBCursorWithValue();
+
+    // The value attribute defined in the IDL is simply implemented in IDBCursor (but not exposed via
+    // its IDL). This is to make the implementation more simple while matching what the spec says.
+
+private:
+    explicit IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
+};
+
+} // namespace WebCore
+
+#endif
+
+#endif // IDBCursorWithValue_h
</ins></span></pre></div>
<a id="trunkSourceWebCorestorageIDBCursorWithValueidlfromrev80170trunkSourceWebCorestorageIDBCursoridl"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/storage/IDBCursorWithValue.idl (from rev 80170, trunk/Source/WebCore/storage/IDBCursor.idl) (0 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBCursorWithValue.idl                              (rev 0)
+++ trunk/Source/WebCore/storage/IDBCursorWithValue.idl 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+module storage {
+
+    interface [
+        Conditional=INDEXED_DATABASE
+    ] IDBCursorWithValue : IDBCursor {
+        readonly attribute SerializedScriptValue value;
+    };
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorestorageIDBIndexcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBIndex.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBIndex.cpp        2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBIndex.cpp   2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -61,6 +61,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
</span><ins>+    request->setCursorType(IDBCursorBackendInterface::IndexCursor);
</ins><span class="cx">     m_backend->openCursor(keyRange, direction, request, m_transaction->backend(), ec);
</span><span class="cx">     if (ec) {
</span><span class="cx">         request->markEarlyDeath();
</span><span class="lines">@@ -78,6 +79,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
</span><ins>+    request->setCursorType(IDBCursorBackendInterface::IndexKeyCursor);
</ins><span class="cx">     m_backend->openKeyCursor(keyRange, direction, request, m_transaction->backend(), ec);
</span><span class="cx">     if (ec) {
</span><span class="cx">         request->markEarlyDeath();
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBIndexBackendImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp     2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp        2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl> index, PassRefPtr<IDBKeyRange> range, unsigned short untypedDirection, bool objectCursor, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
</del><ins>+void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl> index, PassRefPtr<IDBKeyRange> range, unsigned short untypedDirection, IDBCursorBackendInterface::CursorType cursorType, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
</ins><span class="cx"> {
</span><span class="cx">     // Several files depend on this order of selects.
</span><span class="cx">     String sql = String("SELECT IndexData.id, IndexData.keyString, IndexData.keyDate, IndexData.keyNumber, ")
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx">     RefPtr<IDBObjectStoreBackendInterface> objectStore = transaction->objectStore(index->m_storeName, ec);
</span><span class="cx">     ASSERT(objectStore && !ec);
</span><span class="cx"> 
</span><del>-    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(index->m_backingStore.get(), range, direction, query.release(), objectCursor, transaction.get(), objectStore.get());
</del><ins>+    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(index->m_backingStore.get(), range, direction, query.release(), cursorType, transaction.get(), objectStore.get());
</ins><span class="cx">     callbacks->onSuccess(cursor.release());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     RefPtr<IDBKeyRange> keyRange = prpKeyRange;
</span><span class="cx">     RefPtr<IDBCallbacks> callbacks = prpCallbacks;
</span><span class="cx">     RefPtr<IDBTransactionBackendInterface> transaction = transactionPtr;
</span><del>-    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, true, callbacks, transaction)))
</del><ins>+    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, IDBCursorBackendInterface::IndexCursor, callbacks, transaction)))
</ins><span class="cx">         ec = IDBDatabaseException::NOT_ALLOWED_ERR;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx">     RefPtr<IDBKeyRange> keyRange = prpKeyRange;
</span><span class="cx">     RefPtr<IDBCallbacks> callbacks = prpCallbacks;
</span><span class="cx">     RefPtr<IDBTransactionBackendInterface> transaction = transactionPtr;
</span><del>-    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, false, callbacks, transaction)))
</del><ins>+    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, IDBCursorBackendInterface::IndexKeyCursor, callbacks, transaction)))
</ins><span class="cx">         ec = IDBDatabaseException::NOT_ALLOWED_ERR;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBIndexBackendImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBIndexBackendImpl.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBIndexBackendImpl.h       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBIndexBackendImpl.h  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -26,10 +26,11 @@
</span><span class="cx"> #ifndef IDBIndexBackendImpl_h
</span><span class="cx"> #define IDBIndexBackendImpl_h
</span><span class="cx"> 
</span><ins>+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBCursorBackendInterface.h"
</ins><span class="cx"> #include "IDBIndexBackendInterface.h"
</span><span class="cx"> 
</span><del>-#if ENABLE(INDEXED_DATABASE)
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class IDBBackingStore;
</span><span class="lines">@@ -77,7 +78,7 @@
</span><span class="cx"> 
</span><span class="cx">     SQLiteDatabase& sqliteDatabase() const;
</span><span class="cx"> 
</span><del>-    static void openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKeyRange>, unsigned short direction, bool objectCursor, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
</del><ins>+    static void openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKeyRange>, unsigned short direction, IDBCursorBackendInterface::CursorType, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
</ins><span class="cx">     static void getInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKey>, bool getObject, PassRefPtr<IDBCallbacks>);
</span><span class="cx"> 
</span><span class="cx">     static const int64_t InvalidId = 0;
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBObjectStorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBObjectStore.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBObjectStore.cpp  2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBObjectStore.cpp     2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -157,6 +157,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
</span><ins>+    request->setCursorType(IDBCursorBackendInterface::ObjectStoreCursor);
</ins><span class="cx">     m_objectStore->openCursor(range, direction, request, m_transaction->backend(), ec);
</span><span class="cx">     if (ec) {
</span><span class="cx">         request->markEarlyDeath();
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBObjectStoreBackendImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -488,7 +488,7 @@
</span><span class="cx">     bool upperBound = range && range->upper();
</span><span class="cx"> 
</span><span class="cx">     // Several files depend on this order of selects.
</span><del>-    String sql = "SELECT id, keyString, keyDate, keyNumber, value FROM ObjectStoreData WHERE ";
</del><ins>+    String sql = "SELECT id, keyString, keyDate, keyNumber, value, keyString, keyDate, keyNumber FROM ObjectStoreData WHERE ";
</ins><span class="cx">     if (lowerBound)
</span><span class="cx">         sql += range->lower()->lowerCursorWhereFragment(range->lowerWhereClauseComparisonOperator());
</span><span class="cx">     if (upperBound)
</span><span class="lines">@@ -517,7 +517,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(objectStore->m_backingStore.get(), range, direction, query.release(), true, transaction.get(), objectStore.get());
</del><ins>+    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(objectStore->m_backingStore.get(), range, direction, query.release(), IDBCursorBackendInterface::ObjectStoreCursor, transaction.get(), objectStore.get());
</ins><span class="cx">     callbacks->onSuccess(cursor.release());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBRequest.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBRequest.cpp      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBRequest.cpp 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> #include "EventListener.h"
</span><span class="cx"> #include "EventNames.h"
</span><span class="cx"> #include "EventQueue.h"
</span><del>-#include "IDBCursor.h"
</del><ins>+#include "IDBCursorWithValue.h"
</ins><span class="cx"> #include "IDBDatabase.h"
</span><span class="cx"> #include "IDBEventDispatcher.h"
</span><span class="cx"> #include "IDBIndex.h"
</span><span class="lines">@@ -58,6 +58,7 @@
</span><span class="cx">     , m_transaction(transaction)
</span><span class="cx">     , m_readyState(LOADING)
</span><span class="cx">     , m_finished(false)
</span><ins>+    , m_cursorType(IDBCursorBackendInterface::InvalidCursorType)
</ins><span class="cx"> {
</span><span class="cx">     if (m_transaction) {
</span><span class="cx">         m_transaction->registerRequest(this);
</span><span class="lines">@@ -165,6 +166,12 @@
</span><span class="cx">     onError(IDBDatabaseError::create(IDBDatabaseException::ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBRequest::setCursorType(IDBCursorBackendInterface::CursorType cursorType)
+{
+    ASSERT(m_cursorType == IDBCursorBackendInterface::InvalidCursorType);
+    m_cursorType = cursorType;
+}
+
</ins><span class="cx"> void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
</span><span class="lines">@@ -181,7 +188,11 @@
</span><span class="cx"> void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
</span><del>-    m_result = IDBAny::create(IDBCursor::create(backend, this, m_transaction.get()));
</del><ins>+    ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);
+    if (m_cursorType == IDBCursorBackendInterface::IndexKeyCursor)
+        m_result = IDBAny::create(IDBCursor::create(backend, this, m_transaction.get()));
+    else
+        m_result = IDBAny::create(IDBCursorWithValue::create(backend, this, m_transaction.get()));
</ins><span class="cx">     enqueueEvent(createSuccessEvent());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -285,7 +296,7 @@
</span><span class="cx">     bool dontPreventDefault = IDBEventDispatcher::dispatch(event.get(), targets);
</span><span class="cx"> 
</span><span class="cx">     // If the result was of type IDBCursor, then we'll fire again.
</span><del>-    if (m_result && m_result->type() != IDBAny::IDBCursorType)
</del><ins>+    if (m_result && m_result->type() != IDBAny::IDBCursorType && m_result->type() != IDBAny::IDBCursorWithValueType)
</ins><span class="cx">         m_finished = true;
</span><span class="cx"> 
</span><span class="cx">     if (m_transaction) {
</span></span></pre></div>
<a id="trunkSourceWebCorestorageIDBRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/IDBRequest.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/IDBRequest.h        2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebCore/storage/IDBRequest.h   2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -68,6 +68,7 @@
</span><span class="cx"> 
</span><span class="cx">     void markEarlyDeath();
</span><span class="cx">     bool resetReadyState(IDBTransaction*);
</span><ins>+    void setCursorType(IDBCursorBackendInterface::CursorType);
</ins><span class="cx">     IDBAny* source();
</span><span class="cx">     void abort();
</span><span class="cx"> 
</span><span class="lines">@@ -116,6 +117,9 @@
</span><span class="cx">     bool m_finished; // Is it possible that we'll fire any more events? If not, we're finished.
</span><span class="cx">     Vector<RefPtr<Event> > m_enqueuedEvents;
</span><span class="cx"> 
</span><ins>+    // Only used if the result type will be a cursor.
+    IDBCursorBackendInterface::CursorType m_cursorType;
+
</ins><span class="cx">     EventTargetData m_eventTargetData;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/ChangeLog (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/ChangeLog   2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/ChangeLog      2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2011-02-28  Jeremy Orlow  <jorlow@chromium.org>
+
+        Reviewed by James Robinson.
+
+        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
+        https://bugs.webkit.org/show_bug.cgi?id=55443
+
+        * public/WebIDBCursor.h:
+        (WebKit::WebIDBCursor::primaryKey):
+        (WebKit::WebIDBCursor::value):
+        * src/IDBCursorBackendProxy.cpp:
+        (WebCore::IDBCursorBackendProxy::primaryKey):
+        (WebCore::IDBCursorBackendProxy::value):
+        * src/IDBCursorBackendProxy.h:
+        * src/WebIDBCursorImpl.cpp:
+        (WebKit::WebIDBCursorImpl::key):
+        (WebKit::WebIDBCursorImpl::primaryKey):
+        (WebKit::WebIDBCursorImpl::value):
+        * src/WebIDBCursorImpl.h:
+
</ins><span class="cx"> 2011-03-02  Daniel Cheng  <dcheng@chromium.org>
</span><span class="cx"> 
</span><span class="cx">         Reviewed by David Levin.
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumpublicWebIDBCursorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/public/WebIDBCursor.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/public/WebIDBCursor.h       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/public/WebIDBCursor.h  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -55,8 +55,23 @@
</span><span class="cx">         WEBKIT_ASSERT_NOT_REACHED();
</span><span class="cx">         return WebIDBKey::createInvalid();
</span><span class="cx">     }
</span><del>-    // One or the other will set, depending on what type of cursor this is.
-    virtual void value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& idbKey) const { WEBKIT_ASSERT_NOT_REACHED(); }
</del><ins>+    // FIXME: Remove the following 2 methods and uncomment third after roll.
+    virtual WebSerializedScriptValue value() const
+    {
+        WebSerializedScriptValue serializedScriptValue;
+        WebIDBKey key;
+        value(serializedScriptValue, key);
+        return serializedScriptValue;        
+    }
+    virtual void value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& key) const
+    {
+        serializedScriptValue = value();
+    }
+    // virtual WebSerializedScriptValue value() const
+    // {
+    //     WEBKIT_ASSERT_NOT_REACHED();
+    //     return WebSerializedScriptValue();
+    // }
</ins><span class="cx"> 
</span><span class="cx">     virtual void update(const WebSerializedScriptValue&, WebIDBCallbacks*, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
</span><span class="cx">     virtual void continueFunction(const WebIDBKey&, WebIDBCallbacks*, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumsrcIDBCursorBackendProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp       2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp  2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -62,19 +62,16 @@
</span><span class="cx">     return m_idbCursor->key();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr<IDBAny> IDBCursorBackendProxy::value() const
</del><ins>+PassRefPtr<IDBKey> IDBCursorBackendProxy::primaryKey() const
</ins><span class="cx"> {
</span><del>-    WebKit::WebSerializedScriptValue webScriptValue;
-    WebKit::WebIDBKey webKey;
-    m_idbCursor->value(webScriptValue, webKey);
-    if (!webScriptValue.isNull()) {
-        ASSERT(webKey.type() == WebKit::WebIDBKey::InvalidType);
-        return IDBAny::create<SerializedScriptValue>(webScriptValue);
-    }
-    ASSERT(webKey.type() != WebKit::WebIDBKey::InvalidType);
-    return IDBAny::create<IDBKey>(webKey);
</del><ins>+    return m_idbCursor->primaryKey();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PassRefPtr<SerializedScriptValue> IDBCursorBackendProxy::value() const
+{
+    return m_idbCursor->value();
+}
+
</ins><span class="cx"> void IDBCursorBackendProxy::update(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBCallbacks> callbacks, ExceptionCode& ec)
</span><span class="cx"> {
</span><span class="cx">     m_idbCursor->update(value, new WebIDBCallbacksImpl(callbacks), ec);
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumsrcIDBCursorBackendProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h 2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h    2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -44,7 +44,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual unsigned short direction() const;
</span><span class="cx">     virtual PassRefPtr<IDBKey> key() const;
</span><del>-    virtual PassRefPtr<IDBAny> value() const;
</del><ins>+    virtual PassRefPtr<IDBKey> primaryKey() const;
+    virtual PassRefPtr<SerializedScriptValue> value() const;
</ins><span class="cx">     virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span><span class="cx">     virtual void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span><span class="cx">     virtual void deleteFunction(PassRefPtr<IDBCallbacks>, ExceptionCode&);
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumsrcWebIDBCursorImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp    2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp       2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -52,22 +52,17 @@
</span><span class="cx"> 
</span><span class="cx"> WebIDBKey WebIDBCursorImpl::key() const
</span><span class="cx"> {
</span><del>-    return WebIDBKey(m_idbCursorBackend->key());
</del><ins>+    return m_idbCursorBackend->key();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebIDBCursorImpl::value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& idbKey) const
</del><ins>+WebIDBKey WebIDBCursorImpl::primaryKey() const
</ins><span class="cx"> {
</span><del>-    // Verify we're starting off with blank slates.
-    ASSERT(serializedScriptValue.isNull());
-    ASSERT(idbKey.type() == WebIDBKey::InvalidType);
</del><ins>+    return m_idbCursorBackend->primaryKey();
+}
</ins><span class="cx"> 
</span><del>-    RefPtr<IDBAny> any = m_idbCursorBackend->value();
-    if (any->type() == IDBAny::SerializedScriptValueType)
-        serializedScriptValue.assign(any->serializedScriptValue());
-    else if (any->type() == IDBAny::IDBKeyType)
-        idbKey.assign(any->idbKey());
-    else
-        ASSERT_NOT_REACHED();
</del><ins>+WebSerializedScriptValue WebIDBCursorImpl::value() const
+{
+    return m_idbCursorBackend->value();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebIDBCursorImpl::update(const WebSerializedScriptValue& value, WebIDBCallbacks* callbacks, WebExceptionCode& ec)
</span></span></pre></div>
<a id="trunkSourceWebKitchromiumsrcWebIDBCursorImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h (80170 => 80171)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h      2011-03-02 22:42:23 UTC (rev 80170)
+++ trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h 2011-03-02 22:46:35 UTC (rev 80171)
</span><span class="lines">@@ -44,7 +44,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual unsigned short direction() const;
</span><span class="cx">     virtual WebIDBKey key() const;
</span><del>-    virtual void value(WebSerializedScriptValue&, WebIDBKey&) const;
</del><ins>+    virtual WebIDBKey primaryKey() const;
+    virtual WebSerializedScriptValue value() const;
</ins><span class="cx">     virtual void update(const WebSerializedScriptValue&, WebIDBCallbacks*, WebExceptionCode&);
</span><span class="cx">     virtual void continueFunction(const WebIDBKey&, WebIDBCallbacks*, WebExceptionCode&);
</span><span class="cx">     virtual void deleteFunction(WebIDBCallbacks*, WebExceptionCode&);
</span></span></pre>
</div>
</div>

</body>
</html>