Changeset 80171 in webkit


Ignore:
Timestamp:
Mar 2, 2011 2:46:35 PM (13 years ago)
Author:
jorlow@chromium.org
Message:

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:
Location:
trunk
Files:
37 edited
3 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r80170 r80171  
     12011-02-28  Jeremy Orlow  <jorlow@chromium.org>
     2
     3        Reviewed by James Robinson.
     4
     5        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
     6        https://bugs.webkit.org/show_bug.cgi?id=55443
     7
     8        * storage/indexeddb/cursor-delete-expected.txt:
     9        * storage/indexeddb/cursor-index-delete-expected.txt:
     10        * storage/indexeddb/cursor-update-expected.txt:
     11        * storage/indexeddb/cursor-update.html:
     12        * storage/indexeddb/duplicates-expected.txt:
     13        * storage/indexeddb/duplicates.html:
     14        * storage/indexeddb/index-basics-expected.txt:
     15        * storage/indexeddb/index-basics.html:
     16        * storage/indexeddb/index-cursor-expected.txt:
     17        * storage/indexeddb/index-cursor.html:
     18
    1192011-03-02  Martin Robinson  <mrobinson@igalia.com>
    220
  • trunk/LayoutTests/storage/indexeddb/cursor-delete-expected.txt

    r79458 r80171  
    3939openCursor2
    4040objectStore.openCursor(keyRange)
    41 PASS [object IDBCursor] is non-null.
     41PASS [object IDBCursorWithValue] is non-null.
    4242event.target.result.delete()
    4343objectStore.get('myKey1')
  • trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt

    r79458 r80171  
    4141index = event.target.source.index('testIndex')
    4242index.openCursor(keyRange)
    43 PASS [object IDBCursor] is non-null.
     43PASS [object IDBCursorWithValue] is non-null.
    4444event.target.result.delete()
    4545index.get(1)
  • trunk/LayoutTests/storage/indexeddb/cursor-update-expected.txt

    r79458 r80171  
    150150keyCursor()
    151151PASS event.target.result.key is counter + 100
    152 PASS event.target.result.value is counter
     152PASS event.target.result.primaryKey is counter
    153153event.target.result.update({id: counter, number: counter + 200})
    154154PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
    155155keyCursor()
    156156PASS event.target.result.key is counter + 100
    157 PASS event.target.result.value is counter
     157PASS event.target.result.primaryKey is counter
    158158event.target.result.update({id: counter, number: counter + 200})
    159159PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
    160160keyCursor()
    161161PASS event.target.result.key is counter + 100
    162 PASS event.target.result.value is counter
     162PASS event.target.result.primaryKey is counter
    163163event.target.result.update({id: counter, number: counter + 200})
    164164PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
    165165keyCursor()
    166166PASS event.target.result.key is counter + 100
    167 PASS event.target.result.value is counter
     167PASS event.target.result.primaryKey is counter
    168168event.target.result.update({id: counter, number: counter + 200})
    169169PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
  • trunk/LayoutTests/storage/indexeddb/cursor-update.html

    r79458 r80171  
    207207
    208208    shouldBe("event.target.result.key", "counter + 100");
    209     shouldBe("event.target.result.value", "counter");
     209    shouldBe("event.target.result.primaryKey", "counter");
    210210
    211211    try {
  • trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt

    r79458 r80171  
    2929PASS event.target.result === null is false
    3030PASS event.target.result.key is "value"
    31 PASS event.target.result.value is "key"
     31PASS event.target.result.primaryKey is "key"
    3232event.target.result.continue()
    3333PASS event.target.result === null is false
    3434PASS event.target.result.key is "value2"
    35 PASS event.target.result.value is "key2"
     35PASS event.target.result.primaryKey is "key2"
    3636event.target.result.continue()
    3737PASS event.target.result === null is true
     
    7373PASS event.target.result === null is false
    7474PASS event.target.result.key is "value"
    75 PASS event.target.result.value is "key"
     75PASS event.target.result.primaryKey is "key"
    7676event.target.result.continue()
    7777PASS event.target.result === null is false
    7878PASS event.target.result.key is "value2"
    79 PASS event.target.result.value is "key2"
     79PASS event.target.result.primaryKey is "key2"
    8080event.target.result.continue()
    8181PASS event.target.result === null is true
  • trunk/LayoutTests/storage/indexeddb/duplicates.html

    r79458 r80171  
    115115    shouldBeFalse("event.target.result === null");
    116116    shouldBeEqualToString("event.target.result.key", "value");
    117     shouldBeEqualToString("event.target.result.value", "key");
     117    shouldBeEqualToString("event.target.result.primaryKey", "key");
    118118
    119119    // We re-use the last request object.
     
    126126    shouldBeFalse("event.target.result === null");
    127127    shouldBeEqualToString("event.target.result.key", "value2");
    128     shouldBeEqualToString("event.target.result.value", "key2");
     128    shouldBeEqualToString("event.target.result.primaryKey", "key2");
    129129
    130130    // We re-use the last request object.
  • trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt

    r79458 r80171  
    5050PASS event.target.result === null is false
    5151PASS event.target.result.key is "value"
    52 PASS event.target.result.value is "key"
     52PASS event.target.result.primaryKey is "key"
    5353event.target.result.continue()
    5454PASS event.target.result === null is false
    5555PASS event.target.result.key is "value2"
    56 PASS event.target.result.value is "key2"
     56PASS event.target.result.primaryKey is "key2"
    5757event.target.result.continue()
    5858PASS event.target.result === null is true
  • trunk/LayoutTests/storage/indexeddb/index-basics.html

    r79458 r80171  
    153153    shouldBeFalse("event.target.result === null");
    154154    shouldBeEqualToString("event.target.result.key", "value");
    155     shouldBeEqualToString("event.target.result.value", "key");
     155    shouldBeEqualToString("event.target.result.primaryKey", "key");
    156156
    157157    // We re-use the last request object.
     
    164164    shouldBeFalse("event.target.result === null");
    165165    shouldBeEqualToString("event.target.result.key", "value2");
    166     shouldBeEqualToString("event.target.result.value", "key2");
     166    shouldBeEqualToString("event.target.result.primaryKey", "key2");
    167167
    168168    // We re-use the last request object.
  • trunk/LayoutTests/storage/indexeddb/index-cursor-expected.txt

    r79458 r80171  
    2424
    2525Next test: lower open bound is 0; sorted ascending.
    26 PASS event.target.result.value is expectedIndex
    27 PASS event.target.result.key is testData[2]
    28 PASS event.target.result.value is expectedIndex
    29 PASS event.target.result.key is testData[3]
    30 PASS event.target.result.value is expectedIndex
    31 PASS event.target.result.key is testData[4]
    32 PASS event.target.result.value is expectedIndex
    33 PASS event.target.result.key is testData[5]
    34 PASS event.target.result.value is expectedIndex
    35 PASS event.target.result.key is testData[6]
    36 PASS event.target.result.value is expectedIndex
     26PASS event.target.result.primaryKey is expectedIndex
     27PASS event.target.result.key is testData[2]
     28PASS event.target.result.primaryKey is expectedIndex
     29PASS event.target.result.key is testData[3]
     30PASS event.target.result.primaryKey is expectedIndex
     31PASS event.target.result.key is testData[4]
     32PASS event.target.result.primaryKey is expectedIndex
     33PASS event.target.result.key is testData[5]
     34PASS event.target.result.primaryKey is expectedIndex
     35PASS event.target.result.key is testData[6]
     36PASS event.target.result.primaryKey is expectedIndex
    3737PASS event.target.result.key is testData[7]
    3838PASS event.target.result is null
    3939
    4040Next test: lower bound is 0; sorted ascending.
    41 PASS event.target.result.value is expectedIndex
    42 PASS event.target.result.key is testData[0]
    43 PASS event.target.result.value is expectedIndex
    44 PASS event.target.result.key is testData[1]
    45 PASS event.target.result.value is expectedIndex
    46 PASS event.target.result.key is testData[2]
    47 PASS event.target.result.value is expectedIndex
    48 PASS event.target.result.key is testData[3]
    49 PASS event.target.result.value is expectedIndex
    50 PASS event.target.result.key is testData[4]
    51 PASS event.target.result.value is expectedIndex
    52 PASS event.target.result.key is testData[5]
    53 PASS event.target.result.value is expectedIndex
    54 PASS event.target.result.key is testData[6]
    55 PASS event.target.result.value is expectedIndex
     41PASS event.target.result.primaryKey is expectedIndex
     42PASS event.target.result.key is testData[0]
     43PASS event.target.result.primaryKey is expectedIndex
     44PASS event.target.result.key is testData[1]
     45PASS event.target.result.primaryKey is expectedIndex
     46PASS event.target.result.key is testData[2]
     47PASS event.target.result.primaryKey is expectedIndex
     48PASS event.target.result.key is testData[3]
     49PASS event.target.result.primaryKey is expectedIndex
     50PASS event.target.result.key is testData[4]
     51PASS event.target.result.primaryKey is expectedIndex
     52PASS event.target.result.key is testData[5]
     53PASS event.target.result.primaryKey is expectedIndex
     54PASS event.target.result.key is testData[6]
     55PASS event.target.result.primaryKey is expectedIndex
    5656PASS event.target.result.key is testData[7]
    5757PASS event.target.result is null
     
    6161
    6262Next test: upper bound is 0; sorted ascending.
    63 PASS event.target.result.value is expectedIndex
    64 PASS event.target.result.key is testData[0]
    65 PASS event.target.result.value is expectedIndex
     63PASS event.target.result.primaryKey is expectedIndex
     64PASS event.target.result.key is testData[0]
     65PASS event.target.result.primaryKey is expectedIndex
    6666PASS event.target.result.key is testData[1]
    6767PASS event.target.result is null
    6868
    6969Next test: lower open bound is 0; sorted descending.
    70 PASS event.target.result.value is expectedIndex
    71 PASS event.target.result.key is testData[7]
    72 PASS event.target.result.value is expectedIndex
    73 PASS event.target.result.key is testData[6]
    74 PASS event.target.result.value is expectedIndex
    75 PASS event.target.result.key is testData[5]
    76 PASS event.target.result.value is expectedIndex
    77 PASS event.target.result.key is testData[4]
    78 PASS event.target.result.value is expectedIndex
    79 PASS event.target.result.key is testData[3]
    80 PASS event.target.result.value is expectedIndex
     70PASS event.target.result.primaryKey is expectedIndex
     71PASS event.target.result.key is testData[7]
     72PASS event.target.result.primaryKey is expectedIndex
     73PASS event.target.result.key is testData[6]
     74PASS event.target.result.primaryKey is expectedIndex
     75PASS event.target.result.key is testData[5]
     76PASS event.target.result.primaryKey is expectedIndex
     77PASS event.target.result.key is testData[4]
     78PASS event.target.result.primaryKey is expectedIndex
     79PASS event.target.result.key is testData[3]
     80PASS event.target.result.primaryKey is expectedIndex
    8181PASS event.target.result.key is testData[2]
    8282PASS event.target.result is null
    8383
    8484Next test: lower bound is 0; sorted descending.
    85 PASS event.target.result.value is expectedIndex
    86 PASS event.target.result.key is testData[7]
    87 PASS event.target.result.value is expectedIndex
    88 PASS event.target.result.key is testData[6]
    89 PASS event.target.result.value is expectedIndex
    90 PASS event.target.result.key is testData[5]
    91 PASS event.target.result.value is expectedIndex
    92 PASS event.target.result.key is testData[4]
    93 PASS event.target.result.value is expectedIndex
    94 PASS event.target.result.key is testData[3]
    95 PASS event.target.result.value is expectedIndex
    96 PASS event.target.result.key is testData[2]
    97 PASS event.target.result.value is expectedIndex
    98 PASS event.target.result.key is testData[1]
    99 PASS event.target.result.value is expectedIndex
     85PASS event.target.result.primaryKey is expectedIndex
     86PASS event.target.result.key is testData[7]
     87PASS event.target.result.primaryKey is expectedIndex
     88PASS event.target.result.key is testData[6]
     89PASS event.target.result.primaryKey is expectedIndex
     90PASS event.target.result.key is testData[5]
     91PASS event.target.result.primaryKey is expectedIndex
     92PASS event.target.result.key is testData[4]
     93PASS event.target.result.primaryKey is expectedIndex
     94PASS event.target.result.key is testData[3]
     95PASS event.target.result.primaryKey is expectedIndex
     96PASS event.target.result.key is testData[2]
     97PASS event.target.result.primaryKey is expectedIndex
     98PASS event.target.result.key is testData[1]
     99PASS event.target.result.primaryKey is expectedIndex
    100100PASS event.target.result.key is testData[0]
    101101PASS event.target.result is null
     
    105105
    106106Next test: upper bound is 0; sorted descending.
    107 PASS event.target.result.value is expectedIndex
    108 PASS event.target.result.key is testData[1]
    109 PASS event.target.result.value is expectedIndex
     107PASS event.target.result.primaryKey is expectedIndex
     108PASS event.target.result.key is testData[1]
     109PASS event.target.result.primaryKey is expectedIndex
    110110PASS event.target.result.key is testData[0]
    111111PASS event.target.result is null
    112112
    113113Next test: lower open bound is 0; upper open bound is 6; sorted ascending.
    114 PASS event.target.result.value is expectedIndex
    115 PASS event.target.result.key is testData[2]
    116 PASS event.target.result.value is expectedIndex
    117 PASS event.target.result.key is testData[3]
    118 PASS event.target.result.value is expectedIndex
    119 PASS event.target.result.key is testData[4]
    120 PASS event.target.result.value is expectedIndex
     114PASS event.target.result.primaryKey is expectedIndex
     115PASS event.target.result.key is testData[2]
     116PASS event.target.result.primaryKey is expectedIndex
     117PASS event.target.result.key is testData[3]
     118PASS event.target.result.primaryKey is expectedIndex
     119PASS event.target.result.key is testData[4]
     120PASS event.target.result.primaryKey is expectedIndex
    121121PASS event.target.result.key is testData[5]
    122122PASS event.target.result is null
    123123
    124124Next test: lower open bound is 0; upper bound is 6; sorted ascending.
    125 PASS event.target.result.value is expectedIndex
    126 PASS event.target.result.key is testData[2]
    127 PASS event.target.result.value is expectedIndex
    128 PASS event.target.result.key is testData[3]
    129 PASS event.target.result.value is expectedIndex
    130 PASS event.target.result.key is testData[4]
    131 PASS event.target.result.value is expectedIndex
    132 PASS event.target.result.key is testData[5]
    133 PASS event.target.result.value is expectedIndex
    134 PASS event.target.result.key is testData[6]
    135 PASS event.target.result.value is expectedIndex
     125PASS event.target.result.primaryKey is expectedIndex
     126PASS event.target.result.key is testData[2]
     127PASS event.target.result.primaryKey is expectedIndex
     128PASS event.target.result.key is testData[3]
     129PASS event.target.result.primaryKey is expectedIndex
     130PASS event.target.result.key is testData[4]
     131PASS event.target.result.primaryKey is expectedIndex
     132PASS event.target.result.key is testData[5]
     133PASS event.target.result.primaryKey is expectedIndex
     134PASS event.target.result.key is testData[6]
     135PASS event.target.result.primaryKey is expectedIndex
    136136PASS event.target.result.key is testData[7]
    137137PASS event.target.result is null
    138138
    139139Next test: lower bound is 0; upper open bound is 6; sorted ascending.
    140 PASS event.target.result.value is expectedIndex
    141 PASS event.target.result.key is testData[0]
    142 PASS event.target.result.value is expectedIndex
    143 PASS event.target.result.key is testData[1]
    144 PASS event.target.result.value is expectedIndex
    145 PASS event.target.result.key is testData[2]
    146 PASS event.target.result.value is expectedIndex
    147 PASS event.target.result.key is testData[3]
    148 PASS event.target.result.value is expectedIndex
    149 PASS event.target.result.key is testData[4]
    150 PASS event.target.result.value is expectedIndex
     140PASS event.target.result.primaryKey is expectedIndex
     141PASS event.target.result.key is testData[0]
     142PASS event.target.result.primaryKey is expectedIndex
     143PASS event.target.result.key is testData[1]
     144PASS event.target.result.primaryKey is expectedIndex
     145PASS event.target.result.key is testData[2]
     146PASS event.target.result.primaryKey is expectedIndex
     147PASS event.target.result.key is testData[3]
     148PASS event.target.result.primaryKey is expectedIndex
     149PASS event.target.result.key is testData[4]
     150PASS event.target.result.primaryKey is expectedIndex
    151151PASS event.target.result.key is testData[5]
    152152PASS event.target.result is null
    153153
    154154Next test: lower bound is 0; upper bound is 6; sorted ascending.
    155 PASS event.target.result.value is expectedIndex
    156 PASS event.target.result.key is testData[0]
    157 PASS event.target.result.value is expectedIndex
    158 PASS event.target.result.key is testData[1]
    159 PASS event.target.result.value is expectedIndex
    160 PASS event.target.result.key is testData[2]
    161 PASS event.target.result.value is expectedIndex
    162 PASS event.target.result.key is testData[3]
    163 PASS event.target.result.value is expectedIndex
    164 PASS event.target.result.key is testData[4]
    165 PASS event.target.result.value is expectedIndex
    166 PASS event.target.result.key is testData[5]
    167 PASS event.target.result.value is expectedIndex
    168 PASS event.target.result.key is testData[6]
    169 PASS event.target.result.value is expectedIndex
     155PASS event.target.result.primaryKey is expectedIndex
     156PASS event.target.result.key is testData[0]
     157PASS event.target.result.primaryKey is expectedIndex
     158PASS event.target.result.key is testData[1]
     159PASS event.target.result.primaryKey is expectedIndex
     160PASS event.target.result.key is testData[2]
     161PASS event.target.result.primaryKey is expectedIndex
     162PASS event.target.result.key is testData[3]
     163PASS event.target.result.primaryKey is expectedIndex
     164PASS event.target.result.key is testData[4]
     165PASS event.target.result.primaryKey is expectedIndex
     166PASS event.target.result.key is testData[5]
     167PASS event.target.result.primaryKey is expectedIndex
     168PASS event.target.result.key is testData[6]
     169PASS event.target.result.primaryKey is expectedIndex
    170170PASS event.target.result.key is testData[7]
    171171PASS event.target.result is null
    172172
    173173Next test: lower open bound is 0; upper open bound is 6; sorted descending.
    174 PASS event.target.result.value is expectedIndex
    175 PASS event.target.result.key is testData[5]
    176 PASS event.target.result.value is expectedIndex
    177 PASS event.target.result.key is testData[4]
    178 PASS event.target.result.value is expectedIndex
    179 PASS event.target.result.key is testData[3]
    180 PASS event.target.result.value is expectedIndex
     174PASS event.target.result.primaryKey is expectedIndex
     175PASS event.target.result.key is testData[5]
     176PASS event.target.result.primaryKey is expectedIndex
     177PASS event.target.result.key is testData[4]
     178PASS event.target.result.primaryKey is expectedIndex
     179PASS event.target.result.key is testData[3]
     180PASS event.target.result.primaryKey is expectedIndex
    181181PASS event.target.result.key is testData[2]
    182182PASS event.target.result is null
    183183
    184184Next test: lower open bound is 0; upper bound is 6; sorted descending.
    185 PASS event.target.result.value is expectedIndex
    186 PASS event.target.result.key is testData[7]
    187 PASS event.target.result.value is expectedIndex
    188 PASS event.target.result.key is testData[6]
    189 PASS event.target.result.value is expectedIndex
    190 PASS event.target.result.key is testData[5]
    191 PASS event.target.result.value is expectedIndex
    192 PASS event.target.result.key is testData[4]
    193 PASS event.target.result.value is expectedIndex
    194 PASS event.target.result.key is testData[3]
    195 PASS event.target.result.value is expectedIndex
     185PASS event.target.result.primaryKey is expectedIndex
     186PASS event.target.result.key is testData[7]
     187PASS event.target.result.primaryKey is expectedIndex
     188PASS event.target.result.key is testData[6]
     189PASS event.target.result.primaryKey is expectedIndex
     190PASS event.target.result.key is testData[5]
     191PASS event.target.result.primaryKey is expectedIndex
     192PASS event.target.result.key is testData[4]
     193PASS event.target.result.primaryKey is expectedIndex
     194PASS event.target.result.key is testData[3]
     195PASS event.target.result.primaryKey is expectedIndex
    196196PASS event.target.result.key is testData[2]
    197197PASS event.target.result is null
    198198
    199199Next test: lower bound is 0; upper open bound is 6; sorted descending.
    200 PASS event.target.result.value is expectedIndex
    201 PASS event.target.result.key is testData[5]
    202 PASS event.target.result.value is expectedIndex
    203 PASS event.target.result.key is testData[4]
    204 PASS event.target.result.value is expectedIndex
    205 PASS event.target.result.key is testData[3]
    206 PASS event.target.result.value is expectedIndex
    207 PASS event.target.result.key is testData[2]
    208 PASS event.target.result.value is expectedIndex
    209 PASS event.target.result.key is testData[1]
    210 PASS event.target.result.value is expectedIndex
     200PASS event.target.result.primaryKey is expectedIndex
     201PASS event.target.result.key is testData[5]
     202PASS event.target.result.primaryKey is expectedIndex
     203PASS event.target.result.key is testData[4]
     204PASS event.target.result.primaryKey is expectedIndex
     205PASS event.target.result.key is testData[3]
     206PASS event.target.result.primaryKey is expectedIndex
     207PASS event.target.result.key is testData[2]
     208PASS event.target.result.primaryKey is expectedIndex
     209PASS event.target.result.key is testData[1]
     210PASS event.target.result.primaryKey is expectedIndex
    211211PASS event.target.result.key is testData[0]
    212212PASS event.target.result is null
    213213
    214214Next test: lower bound is 0; upper bound is 6; sorted descending.
    215 PASS event.target.result.value is expectedIndex
    216 PASS event.target.result.key is testData[7]
    217 PASS event.target.result.value is expectedIndex
    218 PASS event.target.result.key is testData[6]
    219 PASS event.target.result.value is expectedIndex
    220 PASS event.target.result.key is testData[5]
    221 PASS event.target.result.value is expectedIndex
    222 PASS event.target.result.key is testData[4]
    223 PASS event.target.result.value is expectedIndex
    224 PASS event.target.result.key is testData[3]
    225 PASS event.target.result.value is expectedIndex
    226 PASS event.target.result.key is testData[2]
    227 PASS event.target.result.value is expectedIndex
    228 PASS event.target.result.key is testData[1]
    229 PASS event.target.result.value is expectedIndex
     215PASS event.target.result.primaryKey is expectedIndex
     216PASS event.target.result.key is testData[7]
     217PASS event.target.result.primaryKey is expectedIndex
     218PASS event.target.result.key is testData[6]
     219PASS event.target.result.primaryKey is expectedIndex
     220PASS event.target.result.key is testData[5]
     221PASS event.target.result.primaryKey is expectedIndex
     222PASS event.target.result.key is testData[4]
     223PASS event.target.result.primaryKey is expectedIndex
     224PASS event.target.result.key is testData[3]
     225PASS event.target.result.primaryKey is expectedIndex
     226PASS event.target.result.key is testData[2]
     227PASS event.target.result.primaryKey is expectedIndex
     228PASS event.target.result.key is testData[1]
     229PASS event.target.result.primaryKey is expectedIndex
    230230PASS event.target.result.key is testData[0]
    231231PASS event.target.result is null
    232232
    233233Next test: lower open bound is 0; upper open bound is 7; sorted ascending.
    234 PASS event.target.result.value is expectedIndex
    235 PASS event.target.result.key is testData[2]
    236 PASS event.target.result.value is expectedIndex
    237 PASS event.target.result.key is testData[3]
    238 PASS event.target.result.value is expectedIndex
    239 PASS event.target.result.key is testData[4]
    240 PASS event.target.result.value is expectedIndex
     234PASS event.target.result.primaryKey is expectedIndex
     235PASS event.target.result.key is testData[2]
     236PASS event.target.result.primaryKey is expectedIndex
     237PASS event.target.result.key is testData[3]
     238PASS event.target.result.primaryKey is expectedIndex
     239PASS event.target.result.key is testData[4]
     240PASS event.target.result.primaryKey is expectedIndex
    241241PASS event.target.result.key is testData[5]
    242242PASS event.target.result is null
    243243
    244244Next test: lower open bound is 0; upper bound is 7; sorted ascending.
    245 PASS event.target.result.value is expectedIndex
    246 PASS event.target.result.key is testData[2]
    247 PASS event.target.result.value is expectedIndex
    248 PASS event.target.result.key is testData[3]
    249 PASS event.target.result.value is expectedIndex
    250 PASS event.target.result.key is testData[4]
    251 PASS event.target.result.value is expectedIndex
    252 PASS event.target.result.key is testData[5]
    253 PASS event.target.result.value is expectedIndex
    254 PASS event.target.result.key is testData[6]
    255 PASS event.target.result.value is expectedIndex
     245PASS event.target.result.primaryKey is expectedIndex
     246PASS event.target.result.key is testData[2]
     247PASS event.target.result.primaryKey is expectedIndex
     248PASS event.target.result.key is testData[3]
     249PASS event.target.result.primaryKey is expectedIndex
     250PASS event.target.result.key is testData[4]
     251PASS event.target.result.primaryKey is expectedIndex
     252PASS event.target.result.key is testData[5]
     253PASS event.target.result.primaryKey is expectedIndex
     254PASS event.target.result.key is testData[6]
     255PASS event.target.result.primaryKey is expectedIndex
    256256PASS event.target.result.key is testData[7]
    257257PASS event.target.result is null
    258258
    259259Next test: lower bound is 0; upper open bound is 7; sorted ascending.
    260 PASS event.target.result.value is expectedIndex
    261 PASS event.target.result.key is testData[0]
    262 PASS event.target.result.value is expectedIndex
    263 PASS event.target.result.key is testData[1]
    264 PASS event.target.result.value is expectedIndex
    265 PASS event.target.result.key is testData[2]
    266 PASS event.target.result.value is expectedIndex
    267 PASS event.target.result.key is testData[3]
    268 PASS event.target.result.value is expectedIndex
    269 PASS event.target.result.key is testData[4]
    270 PASS event.target.result.value is expectedIndex
     260PASS event.target.result.primaryKey is expectedIndex
     261PASS event.target.result.key is testData[0]
     262PASS event.target.result.primaryKey is expectedIndex
     263PASS event.target.result.key is testData[1]
     264PASS event.target.result.primaryKey is expectedIndex
     265PASS event.target.result.key is testData[2]
     266PASS event.target.result.primaryKey is expectedIndex
     267PASS event.target.result.key is testData[3]
     268PASS event.target.result.primaryKey is expectedIndex
     269PASS event.target.result.key is testData[4]
     270PASS event.target.result.primaryKey is expectedIndex
    271271PASS event.target.result.key is testData[5]
    272272PASS event.target.result is null
    273273
    274274Next test: lower bound is 0; upper bound is 7; sorted ascending.
    275 PASS event.target.result.value is expectedIndex
    276 PASS event.target.result.key is testData[0]
    277 PASS event.target.result.value is expectedIndex
    278 PASS event.target.result.key is testData[1]
    279 PASS event.target.result.value is expectedIndex
    280 PASS event.target.result.key is testData[2]
    281 PASS event.target.result.value is expectedIndex
    282 PASS event.target.result.key is testData[3]
    283 PASS event.target.result.value is expectedIndex
    284 PASS event.target.result.key is testData[4]
    285 PASS event.target.result.value is expectedIndex
    286 PASS event.target.result.key is testData[5]
    287 PASS event.target.result.value is expectedIndex
    288 PASS event.target.result.key is testData[6]
    289 PASS event.target.result.value is expectedIndex
     275PASS event.target.result.primaryKey is expectedIndex
     276PASS event.target.result.key is testData[0]
     277PASS event.target.result.primaryKey is expectedIndex
     278PASS event.target.result.key is testData[1]
     279PASS event.target.result.primaryKey is expectedIndex
     280PASS event.target.result.key is testData[2]
     281PASS event.target.result.primaryKey is expectedIndex
     282PASS event.target.result.key is testData[3]
     283PASS event.target.result.primaryKey is expectedIndex
     284PASS event.target.result.key is testData[4]
     285PASS event.target.result.primaryKey is expectedIndex
     286PASS event.target.result.key is testData[5]
     287PASS event.target.result.primaryKey is expectedIndex
     288PASS event.target.result.key is testData[6]
     289PASS event.target.result.primaryKey is expectedIndex
    290290PASS event.target.result.key is testData[7]
    291291PASS event.target.result is null
    292292
    293293Next test: lower open bound is 0; upper open bound is 7; sorted descending.
    294 PASS event.target.result.value is expectedIndex
    295 PASS event.target.result.key is testData[5]
    296 PASS event.target.result.value is expectedIndex
    297 PASS event.target.result.key is testData[4]
    298 PASS event.target.result.value is expectedIndex
    299 PASS event.target.result.key is testData[3]
    300 PASS event.target.result.value is expectedIndex
     294PASS event.target.result.primaryKey is expectedIndex
     295PASS event.target.result.key is testData[5]
     296PASS event.target.result.primaryKey is expectedIndex
     297PASS event.target.result.key is testData[4]
     298PASS event.target.result.primaryKey is expectedIndex
     299PASS event.target.result.key is testData[3]
     300PASS event.target.result.primaryKey is expectedIndex
    301301PASS event.target.result.key is testData[2]
    302302PASS event.target.result is null
    303303
    304304Next test: lower open bound is 0; upper bound is 7; sorted descending.
    305 PASS event.target.result.value is expectedIndex
    306 PASS event.target.result.key is testData[7]
    307 PASS event.target.result.value is expectedIndex
    308 PASS event.target.result.key is testData[6]
    309 PASS event.target.result.value is expectedIndex
    310 PASS event.target.result.key is testData[5]
    311 PASS event.target.result.value is expectedIndex
    312 PASS event.target.result.key is testData[4]
    313 PASS event.target.result.value is expectedIndex
    314 PASS event.target.result.key is testData[3]
    315 PASS event.target.result.value is expectedIndex
     305PASS event.target.result.primaryKey is expectedIndex
     306PASS event.target.result.key is testData[7]
     307PASS event.target.result.primaryKey is expectedIndex
     308PASS event.target.result.key is testData[6]
     309PASS event.target.result.primaryKey is expectedIndex
     310PASS event.target.result.key is testData[5]
     311PASS event.target.result.primaryKey is expectedIndex
     312PASS event.target.result.key is testData[4]
     313PASS event.target.result.primaryKey is expectedIndex
     314PASS event.target.result.key is testData[3]
     315PASS event.target.result.primaryKey is expectedIndex
    316316PASS event.target.result.key is testData[2]
    317317PASS event.target.result is null
    318318
    319319Next test: lower bound is 0; upper open bound is 7; sorted descending.
    320 PASS event.target.result.value is expectedIndex
    321 PASS event.target.result.key is testData[5]
    322 PASS event.target.result.value is expectedIndex
    323 PASS event.target.result.key is testData[4]
    324 PASS event.target.result.value is expectedIndex
    325 PASS event.target.result.key is testData[3]
    326 PASS event.target.result.value is expectedIndex
    327 PASS event.target.result.key is testData[2]
    328 PASS event.target.result.value is expectedIndex
    329 PASS event.target.result.key is testData[1]
    330 PASS event.target.result.value is expectedIndex
     320PASS event.target.result.primaryKey is expectedIndex
     321PASS event.target.result.key is testData[5]
     322PASS event.target.result.primaryKey is expectedIndex
     323PASS event.target.result.key is testData[4]
     324PASS event.target.result.primaryKey is expectedIndex
     325PASS event.target.result.key is testData[3]
     326PASS event.target.result.primaryKey is expectedIndex
     327PASS event.target.result.key is testData[2]
     328PASS event.target.result.primaryKey is expectedIndex
     329PASS event.target.result.key is testData[1]
     330PASS event.target.result.primaryKey is expectedIndex
    331331PASS event.target.result.key is testData[0]
    332332PASS event.target.result is null
    333333
    334334Next test: lower bound is 0; upper bound is 7; sorted descending.
    335 PASS event.target.result.value is expectedIndex
    336 PASS event.target.result.key is testData[7]
    337 PASS event.target.result.value is expectedIndex
    338 PASS event.target.result.key is testData[6]
    339 PASS event.target.result.value is expectedIndex
    340 PASS event.target.result.key is testData[5]
    341 PASS event.target.result.value is expectedIndex
    342 PASS event.target.result.key is testData[4]
    343 PASS event.target.result.value is expectedIndex
    344 PASS event.target.result.key is testData[3]
    345 PASS event.target.result.value is expectedIndex
    346 PASS event.target.result.key is testData[2]
    347 PASS event.target.result.value is expectedIndex
    348 PASS event.target.result.key is testData[1]
    349 PASS event.target.result.value is expectedIndex
     335PASS event.target.result.primaryKey is expectedIndex
     336PASS event.target.result.key is testData[7]
     337PASS event.target.result.primaryKey is expectedIndex
     338PASS event.target.result.key is testData[6]
     339PASS event.target.result.primaryKey is expectedIndex
     340PASS event.target.result.key is testData[5]
     341PASS event.target.result.primaryKey is expectedIndex
     342PASS event.target.result.key is testData[4]
     343PASS event.target.result.primaryKey is expectedIndex
     344PASS event.target.result.key is testData[3]
     345PASS event.target.result.primaryKey is expectedIndex
     346PASS event.target.result.key is testData[2]
     347PASS event.target.result.primaryKey is expectedIndex
     348PASS event.target.result.key is testData[1]
     349PASS event.target.result.primaryKey is expectedIndex
    350350PASS event.target.result.key is testData[0]
    351351PASS event.target.result is null
    352352
    353353Next test: lower open bound is 1; sorted ascending.
    354 PASS event.target.result.value is expectedIndex
    355 PASS event.target.result.key is testData[2]
    356 PASS event.target.result.value is expectedIndex
    357 PASS event.target.result.key is testData[3]
    358 PASS event.target.result.value is expectedIndex
    359 PASS event.target.result.key is testData[4]
    360 PASS event.target.result.value is expectedIndex
    361 PASS event.target.result.key is testData[5]
    362 PASS event.target.result.value is expectedIndex
    363 PASS event.target.result.key is testData[6]
    364 PASS event.target.result.value is expectedIndex
     354PASS event.target.result.primaryKey is expectedIndex
     355PASS event.target.result.key is testData[2]
     356PASS event.target.result.primaryKey is expectedIndex
     357PASS event.target.result.key is testData[3]
     358PASS event.target.result.primaryKey is expectedIndex
     359PASS event.target.result.key is testData[4]
     360PASS event.target.result.primaryKey is expectedIndex
     361PASS event.target.result.key is testData[5]
     362PASS event.target.result.primaryKey is expectedIndex
     363PASS event.target.result.key is testData[6]
     364PASS event.target.result.primaryKey is expectedIndex
    365365PASS event.target.result.key is testData[7]
    366366PASS event.target.result is null
    367367
    368368Next test: lower bound is 1; sorted ascending.
    369 PASS event.target.result.value is expectedIndex
    370 PASS event.target.result.key is testData[0]
    371 PASS event.target.result.value is expectedIndex
    372 PASS event.target.result.key is testData[1]
    373 PASS event.target.result.value is expectedIndex
    374 PASS event.target.result.key is testData[2]
    375 PASS event.target.result.value is expectedIndex
    376 PASS event.target.result.key is testData[3]
    377 PASS event.target.result.value is expectedIndex
    378 PASS event.target.result.key is testData[4]
    379 PASS event.target.result.value is expectedIndex
    380 PASS event.target.result.key is testData[5]
    381 PASS event.target.result.value is expectedIndex
    382 PASS event.target.result.key is testData[6]
    383 PASS event.target.result.value is expectedIndex
     369PASS event.target.result.primaryKey is expectedIndex
     370PASS event.target.result.key is testData[0]
     371PASS event.target.result.primaryKey is expectedIndex
     372PASS event.target.result.key is testData[1]
     373PASS event.target.result.primaryKey is expectedIndex
     374PASS event.target.result.key is testData[2]
     375PASS event.target.result.primaryKey is expectedIndex
     376PASS event.target.result.key is testData[3]
     377PASS event.target.result.primaryKey is expectedIndex
     378PASS event.target.result.key is testData[4]
     379PASS event.target.result.primaryKey is expectedIndex
     380PASS event.target.result.key is testData[5]
     381PASS event.target.result.primaryKey is expectedIndex
     382PASS event.target.result.key is testData[6]
     383PASS event.target.result.primaryKey is expectedIndex
    384384PASS event.target.result.key is testData[7]
    385385PASS event.target.result is null
     
    389389
    390390Next test: upper bound is 1; sorted ascending.
    391 PASS event.target.result.value is expectedIndex
    392 PASS event.target.result.key is testData[0]
    393 PASS event.target.result.value is expectedIndex
     391PASS event.target.result.primaryKey is expectedIndex
     392PASS event.target.result.key is testData[0]
     393PASS event.target.result.primaryKey is expectedIndex
    394394PASS event.target.result.key is testData[1]
    395395PASS event.target.result is null
    396396
    397397Next test: lower open bound is 1; sorted descending.
    398 PASS event.target.result.value is expectedIndex
    399 PASS event.target.result.key is testData[7]
    400 PASS event.target.result.value is expectedIndex
    401 PASS event.target.result.key is testData[6]
    402 PASS event.target.result.value is expectedIndex
    403 PASS event.target.result.key is testData[5]
    404 PASS event.target.result.value is expectedIndex
    405 PASS event.target.result.key is testData[4]
    406 PASS event.target.result.value is expectedIndex
    407 PASS event.target.result.key is testData[3]
    408 PASS event.target.result.value is expectedIndex
     398PASS event.target.result.primaryKey is expectedIndex
     399PASS event.target.result.key is testData[7]
     400PASS event.target.result.primaryKey is expectedIndex
     401PASS event.target.result.key is testData[6]
     402PASS event.target.result.primaryKey is expectedIndex
     403PASS event.target.result.key is testData[5]
     404PASS event.target.result.primaryKey is expectedIndex
     405PASS event.target.result.key is testData[4]
     406PASS event.target.result.primaryKey is expectedIndex
     407PASS event.target.result.key is testData[3]
     408PASS event.target.result.primaryKey is expectedIndex
    409409PASS event.target.result.key is testData[2]
    410410PASS event.target.result is null
    411411
    412412Next test: lower bound is 1; sorted descending.
    413 PASS event.target.result.value is expectedIndex
    414 PASS event.target.result.key is testData[7]
    415 PASS event.target.result.value is expectedIndex
    416 PASS event.target.result.key is testData[6]
    417 PASS event.target.result.value is expectedIndex
    418 PASS event.target.result.key is testData[5]
    419 PASS event.target.result.value is expectedIndex
    420 PASS event.target.result.key is testData[4]
    421 PASS event.target.result.value is expectedIndex
    422 PASS event.target.result.key is testData[3]
    423 PASS event.target.result.value is expectedIndex
    424 PASS event.target.result.key is testData[2]
    425 PASS event.target.result.value is expectedIndex
    426 PASS event.target.result.key is testData[1]
    427 PASS event.target.result.value is expectedIndex
     413PASS event.target.result.primaryKey is expectedIndex
     414PASS event.target.result.key is testData[7]
     415PASS event.target.result.primaryKey is expectedIndex
     416PASS event.target.result.key is testData[6]
     417PASS event.target.result.primaryKey is expectedIndex
     418PASS event.target.result.key is testData[5]
     419PASS event.target.result.primaryKey is expectedIndex
     420PASS event.target.result.key is testData[4]
     421PASS event.target.result.primaryKey is expectedIndex
     422PASS event.target.result.key is testData[3]
     423PASS event.target.result.primaryKey is expectedIndex
     424PASS event.target.result.key is testData[2]
     425PASS event.target.result.primaryKey is expectedIndex
     426PASS event.target.result.key is testData[1]
     427PASS event.target.result.primaryKey is expectedIndex
    428428PASS event.target.result.key is testData[0]
    429429PASS event.target.result is null
     
    433433
    434434Next test: upper bound is 1; sorted descending.
    435 PASS event.target.result.value is expectedIndex
    436 PASS event.target.result.key is testData[1]
    437 PASS event.target.result.value is expectedIndex
     435PASS event.target.result.primaryKey is expectedIndex
     436PASS event.target.result.key is testData[1]
     437PASS event.target.result.primaryKey is expectedIndex
    438438PASS event.target.result.key is testData[0]
    439439PASS event.target.result is null
    440440
    441441Next test: lower open bound is 1; upper open bound is 6; sorted ascending.
    442 PASS event.target.result.value is expectedIndex
    443 PASS event.target.result.key is testData[2]
    444 PASS event.target.result.value is expectedIndex
    445 PASS event.target.result.key is testData[3]
    446 PASS event.target.result.value is expectedIndex
    447 PASS event.target.result.key is testData[4]
    448 PASS event.target.result.value is expectedIndex
     442PASS event.target.result.primaryKey is expectedIndex
     443PASS event.target.result.key is testData[2]
     444PASS event.target.result.primaryKey is expectedIndex
     445PASS event.target.result.key is testData[3]
     446PASS event.target.result.primaryKey is expectedIndex
     447PASS event.target.result.key is testData[4]
     448PASS event.target.result.primaryKey is expectedIndex
    449449PASS event.target.result.key is testData[5]
    450450PASS event.target.result is null
    451451
    452452Next test: lower open bound is 1; upper bound is 6; sorted ascending.
    453 PASS event.target.result.value is expectedIndex
    454 PASS event.target.result.key is testData[2]
    455 PASS event.target.result.value is expectedIndex
    456 PASS event.target.result.key is testData[3]
    457 PASS event.target.result.value is expectedIndex
    458 PASS event.target.result.key is testData[4]
    459 PASS event.target.result.value is expectedIndex
    460 PASS event.target.result.key is testData[5]
    461 PASS event.target.result.value is expectedIndex
    462 PASS event.target.result.key is testData[6]
    463 PASS event.target.result.value is expectedIndex
     453PASS event.target.result.primaryKey is expectedIndex
     454PASS event.target.result.key is testData[2]
     455PASS event.target.result.primaryKey is expectedIndex
     456PASS event.target.result.key is testData[3]
     457PASS event.target.result.primaryKey is expectedIndex
     458PASS event.target.result.key is testData[4]
     459PASS event.target.result.primaryKey is expectedIndex
     460PASS event.target.result.key is testData[5]
     461PASS event.target.result.primaryKey is expectedIndex
     462PASS event.target.result.key is testData[6]
     463PASS event.target.result.primaryKey is expectedIndex
    464464PASS event.target.result.key is testData[7]
    465465PASS event.target.result is null
    466466
    467467Next test: lower bound is 1; upper open bound is 6; sorted ascending.
    468 PASS event.target.result.value is expectedIndex
    469 PASS event.target.result.key is testData[0]
    470 PASS event.target.result.value is expectedIndex
    471 PASS event.target.result.key is testData[1]
    472 PASS event.target.result.value is expectedIndex
    473 PASS event.target.result.key is testData[2]
    474 PASS event.target.result.value is expectedIndex
    475 PASS event.target.result.key is testData[3]
    476 PASS event.target.result.value is expectedIndex
    477 PASS event.target.result.key is testData[4]
    478 PASS event.target.result.value is expectedIndex
     468PASS event.target.result.primaryKey is expectedIndex
     469PASS event.target.result.key is testData[0]
     470PASS event.target.result.primaryKey is expectedIndex
     471PASS event.target.result.key is testData[1]
     472PASS event.target.result.primaryKey is expectedIndex
     473PASS event.target.result.key is testData[2]
     474PASS event.target.result.primaryKey is expectedIndex
     475PASS event.target.result.key is testData[3]
     476PASS event.target.result.primaryKey is expectedIndex
     477PASS event.target.result.key is testData[4]
     478PASS event.target.result.primaryKey is expectedIndex
    479479PASS event.target.result.key is testData[5]
    480480PASS event.target.result is null
    481481
    482482Next test: lower bound is 1; upper bound is 6; sorted ascending.
    483 PASS event.target.result.value is expectedIndex
    484 PASS event.target.result.key is testData[0]
    485 PASS event.target.result.value is expectedIndex
    486 PASS event.target.result.key is testData[1]
    487 PASS event.target.result.value is expectedIndex
    488 PASS event.target.result.key is testData[2]
    489 PASS event.target.result.value is expectedIndex
    490 PASS event.target.result.key is testData[3]
    491 PASS event.target.result.value is expectedIndex
    492 PASS event.target.result.key is testData[4]
    493 PASS event.target.result.value is expectedIndex
    494 PASS event.target.result.key is testData[5]
    495 PASS event.target.result.value is expectedIndex
    496 PASS event.target.result.key is testData[6]
    497 PASS event.target.result.value is expectedIndex
     483PASS event.target.result.primaryKey is expectedIndex
     484PASS event.target.result.key is testData[0]
     485PASS event.target.result.primaryKey is expectedIndex
     486PASS event.target.result.key is testData[1]
     487PASS event.target.result.primaryKey is expectedIndex
     488PASS event.target.result.key is testData[2]
     489PASS event.target.result.primaryKey is expectedIndex
     490PASS event.target.result.key is testData[3]
     491PASS event.target.result.primaryKey is expectedIndex
     492PASS event.target.result.key is testData[4]
     493PASS event.target.result.primaryKey is expectedIndex
     494PASS event.target.result.key is testData[5]
     495PASS event.target.result.primaryKey is expectedIndex
     496PASS event.target.result.key is testData[6]
     497PASS event.target.result.primaryKey is expectedIndex
    498498PASS event.target.result.key is testData[7]
    499499PASS event.target.result is null
    500500
    501501Next test: lower open bound is 1; upper open bound is 6; sorted descending.
    502 PASS event.target.result.value is expectedIndex
    503 PASS event.target.result.key is testData[5]
    504 PASS event.target.result.value is expectedIndex
    505 PASS event.target.result.key is testData[4]
    506 PASS event.target.result.value is expectedIndex
    507 PASS event.target.result.key is testData[3]
    508 PASS event.target.result.value is expectedIndex
     502PASS event.target.result.primaryKey is expectedIndex
     503PASS event.target.result.key is testData[5]
     504PASS event.target.result.primaryKey is expectedIndex
     505PASS event.target.result.key is testData[4]
     506PASS event.target.result.primaryKey is expectedIndex
     507PASS event.target.result.key is testData[3]
     508PASS event.target.result.primaryKey is expectedIndex
    509509PASS event.target.result.key is testData[2]
    510510PASS event.target.result is null
    511511
    512512Next test: lower open bound is 1; upper bound is 6; sorted descending.
    513 PASS event.target.result.value is expectedIndex
    514 PASS event.target.result.key is testData[7]
    515 PASS event.target.result.value is expectedIndex
    516 PASS event.target.result.key is testData[6]
    517 PASS event.target.result.value is expectedIndex
    518 PASS event.target.result.key is testData[5]
    519 PASS event.target.result.value is expectedIndex
    520 PASS event.target.result.key is testData[4]
    521 PASS event.target.result.value is expectedIndex
    522 PASS event.target.result.key is testData[3]
    523 PASS event.target.result.value is expectedIndex
     513PASS event.target.result.primaryKey is expectedIndex
     514PASS event.target.result.key is testData[7]
     515PASS event.target.result.primaryKey is expectedIndex
     516PASS event.target.result.key is testData[6]
     517PASS event.target.result.primaryKey is expectedIndex
     518PASS event.target.result.key is testData[5]
     519PASS event.target.result.primaryKey is expectedIndex
     520PASS event.target.result.key is testData[4]
     521PASS event.target.result.primaryKey is expectedIndex
     522PASS event.target.result.key is testData[3]
     523PASS event.target.result.primaryKey is expectedIndex
    524524PASS event.target.result.key is testData[2]
    525525PASS event.target.result is null
    526526
    527527Next test: lower bound is 1; upper open bound is 6; sorted descending.
    528 PASS event.target.result.value is expectedIndex
    529 PASS event.target.result.key is testData[5]
    530 PASS event.target.result.value is expectedIndex
    531 PASS event.target.result.key is testData[4]
    532 PASS event.target.result.value is expectedIndex
    533 PASS event.target.result.key is testData[3]
    534 PASS event.target.result.value is expectedIndex
    535 PASS event.target.result.key is testData[2]
    536 PASS event.target.result.value is expectedIndex
    537 PASS event.target.result.key is testData[1]
    538 PASS event.target.result.value is expectedIndex
     528PASS event.target.result.primaryKey is expectedIndex
     529PASS event.target.result.key is testData[5]
     530PASS event.target.result.primaryKey is expectedIndex
     531PASS event.target.result.key is testData[4]
     532PASS event.target.result.primaryKey is expectedIndex
     533PASS event.target.result.key is testData[3]
     534PASS event.target.result.primaryKey is expectedIndex
     535PASS event.target.result.key is testData[2]
     536PASS event.target.result.primaryKey is expectedIndex
     537PASS event.target.result.key is testData[1]
     538PASS event.target.result.primaryKey is expectedIndex
    539539PASS event.target.result.key is testData[0]
    540540PASS event.target.result is null
    541541
    542542Next test: lower bound is 1; upper bound is 6; sorted descending.
    543 PASS event.target.result.value is expectedIndex
    544 PASS event.target.result.key is testData[7]
    545 PASS event.target.result.value is expectedIndex
    546 PASS event.target.result.key is testData[6]
    547 PASS event.target.result.value is expectedIndex
    548 PASS event.target.result.key is testData[5]
    549 PASS event.target.result.value is expectedIndex
    550 PASS event.target.result.key is testData[4]
    551 PASS event.target.result.value is expectedIndex
    552 PASS event.target.result.key is testData[3]
    553 PASS event.target.result.value is expectedIndex
    554 PASS event.target.result.key is testData[2]
    555 PASS event.target.result.value is expectedIndex
    556 PASS event.target.result.key is testData[1]
    557 PASS event.target.result.value is expectedIndex
     543PASS event.target.result.primaryKey is expectedIndex
     544PASS event.target.result.key is testData[7]
     545PASS event.target.result.primaryKey is expectedIndex
     546PASS event.target.result.key is testData[6]
     547PASS event.target.result.primaryKey is expectedIndex
     548PASS event.target.result.key is testData[5]
     549PASS event.target.result.primaryKey is expectedIndex
     550PASS event.target.result.key is testData[4]
     551PASS event.target.result.primaryKey is expectedIndex
     552PASS event.target.result.key is testData[3]
     553PASS event.target.result.primaryKey is expectedIndex
     554PASS event.target.result.key is testData[2]
     555PASS event.target.result.primaryKey is expectedIndex
     556PASS event.target.result.key is testData[1]
     557PASS event.target.result.primaryKey is expectedIndex
    558558PASS event.target.result.key is testData[0]
    559559PASS event.target.result is null
    560560
    561561Next test: lower open bound is 1; upper open bound is 7; sorted ascending.
    562 PASS event.target.result.value is expectedIndex
    563 PASS event.target.result.key is testData[2]
    564 PASS event.target.result.value is expectedIndex
    565 PASS event.target.result.key is testData[3]
    566 PASS event.target.result.value is expectedIndex
    567 PASS event.target.result.key is testData[4]
    568 PASS event.target.result.value is expectedIndex
     562PASS event.target.result.primaryKey is expectedIndex
     563PASS event.target.result.key is testData[2]
     564PASS event.target.result.primaryKey is expectedIndex
     565PASS event.target.result.key is testData[3]
     566PASS event.target.result.primaryKey is expectedIndex
     567PASS event.target.result.key is testData[4]
     568PASS event.target.result.primaryKey is expectedIndex
    569569PASS event.target.result.key is testData[5]
    570570PASS event.target.result is null
    571571
    572572Next test: lower open bound is 1; upper bound is 7; sorted ascending.
    573 PASS event.target.result.value is expectedIndex
    574 PASS event.target.result.key is testData[2]
    575 PASS event.target.result.value is expectedIndex
    576 PASS event.target.result.key is testData[3]
    577 PASS event.target.result.value is expectedIndex
    578 PASS event.target.result.key is testData[4]
    579 PASS event.target.result.value is expectedIndex
    580 PASS event.target.result.key is testData[5]
    581 PASS event.target.result.value is expectedIndex
    582 PASS event.target.result.key is testData[6]
    583 PASS event.target.result.value is expectedIndex
     573PASS event.target.result.primaryKey is expectedIndex
     574PASS event.target.result.key is testData[2]
     575PASS event.target.result.primaryKey is expectedIndex
     576PASS event.target.result.key is testData[3]
     577PASS event.target.result.primaryKey is expectedIndex
     578PASS event.target.result.key is testData[4]
     579PASS event.target.result.primaryKey is expectedIndex
     580PASS event.target.result.key is testData[5]
     581PASS event.target.result.primaryKey is expectedIndex
     582PASS event.target.result.key is testData[6]
     583PASS event.target.result.primaryKey is expectedIndex
    584584PASS event.target.result.key is testData[7]
    585585PASS event.target.result is null
    586586
    587587Next test: lower bound is 1; upper open bound is 7; sorted ascending.
    588 PASS event.target.result.value is expectedIndex
    589 PASS event.target.result.key is testData[0]
    590 PASS event.target.result.value is expectedIndex
    591 PASS event.target.result.key is testData[1]
    592 PASS event.target.result.value is expectedIndex
    593 PASS event.target.result.key is testData[2]
    594 PASS event.target.result.value is expectedIndex
    595 PASS event.target.result.key is testData[3]
    596 PASS event.target.result.value is expectedIndex
    597 PASS event.target.result.key is testData[4]
    598 PASS event.target.result.value is expectedIndex
     588PASS event.target.result.primaryKey is expectedIndex
     589PASS event.target.result.key is testData[0]
     590PASS event.target.result.primaryKey is expectedIndex
     591PASS event.target.result.key is testData[1]
     592PASS event.target.result.primaryKey is expectedIndex
     593PASS event.target.result.key is testData[2]
     594PASS event.target.result.primaryKey is expectedIndex
     595PASS event.target.result.key is testData[3]
     596PASS event.target.result.primaryKey is expectedIndex
     597PASS event.target.result.key is testData[4]
     598PASS event.target.result.primaryKey is expectedIndex
    599599PASS event.target.result.key is testData[5]
    600600PASS event.target.result is null
    601601
    602602Next test: lower bound is 1; upper bound is 7; sorted ascending.
    603 PASS event.target.result.value is expectedIndex
    604 PASS event.target.result.key is testData[0]
    605 PASS event.target.result.value is expectedIndex
    606 PASS event.target.result.key is testData[1]
    607 PASS event.target.result.value is expectedIndex
    608 PASS event.target.result.key is testData[2]
    609 PASS event.target.result.value is expectedIndex
    610 PASS event.target.result.key is testData[3]
    611 PASS event.target.result.value is expectedIndex
    612 PASS event.target.result.key is testData[4]
    613 PASS event.target.result.value is expectedIndex
    614 PASS event.target.result.key is testData[5]
    615 PASS event.target.result.value is expectedIndex
    616 PASS event.target.result.key is testData[6]
    617 PASS event.target.result.value is expectedIndex
     603PASS event.target.result.primaryKey is expectedIndex
     604PASS event.target.result.key is testData[0]
     605PASS event.target.result.primaryKey is expectedIndex
     606PASS event.target.result.key is testData[1]
     607PASS event.target.result.primaryKey is expectedIndex
     608PASS event.target.result.key is testData[2]
     609PASS event.target.result.primaryKey is expectedIndex
     610PASS event.target.result.key is testData[3]
     611PASS event.target.result.primaryKey is expectedIndex
     612PASS event.target.result.key is testData[4]
     613PASS event.target.result.primaryKey is expectedIndex
     614PASS event.target.result.key is testData[5]
     615PASS event.target.result.primaryKey is expectedIndex
     616PASS event.target.result.key is testData[6]
     617PASS event.target.result.primaryKey is expectedIndex
    618618PASS event.target.result.key is testData[7]
    619619PASS event.target.result is null
    620620
    621621Next test: lower open bound is 1; upper open bound is 7; sorted descending.
    622 PASS event.target.result.value is expectedIndex
    623 PASS event.target.result.key is testData[5]
    624 PASS event.target.result.value is expectedIndex
    625 PASS event.target.result.key is testData[4]
    626 PASS event.target.result.value is expectedIndex
    627 PASS event.target.result.key is testData[3]
    628 PASS event.target.result.value is expectedIndex
     622PASS event.target.result.primaryKey is expectedIndex
     623PASS event.target.result.key is testData[5]
     624PASS event.target.result.primaryKey is expectedIndex
     625PASS event.target.result.key is testData[4]
     626PASS event.target.result.primaryKey is expectedIndex
     627PASS event.target.result.key is testData[3]
     628PASS event.target.result.primaryKey is expectedIndex
    629629PASS event.target.result.key is testData[2]
    630630PASS event.target.result is null
    631631
    632632Next test: lower open bound is 1; upper bound is 7; sorted descending.
    633 PASS event.target.result.value is expectedIndex
    634 PASS event.target.result.key is testData[7]
    635 PASS event.target.result.value is expectedIndex
    636 PASS event.target.result.key is testData[6]
    637 PASS event.target.result.value is expectedIndex
    638 PASS event.target.result.key is testData[5]
    639 PASS event.target.result.value is expectedIndex
    640 PASS event.target.result.key is testData[4]
    641 PASS event.target.result.value is expectedIndex
    642 PASS event.target.result.key is testData[3]
    643 PASS event.target.result.value is expectedIndex
     633PASS event.target.result.primaryKey is expectedIndex
     634PASS event.target.result.key is testData[7]
     635PASS event.target.result.primaryKey is expectedIndex
     636PASS event.target.result.key is testData[6]
     637PASS event.target.result.primaryKey is expectedIndex
     638PASS event.target.result.key is testData[5]
     639PASS event.target.result.primaryKey is expectedIndex
     640PASS event.target.result.key is testData[4]
     641PASS event.target.result.primaryKey is expectedIndex
     642PASS event.target.result.key is testData[3]
     643PASS event.target.result.primaryKey is expectedIndex
    644644PASS event.target.result.key is testData[2]
    645645PASS event.target.result is null
    646646
    647647Next test: lower bound is 1; upper open bound is 7; sorted descending.
    648 PASS event.target.result.value is expectedIndex
    649 PASS event.target.result.key is testData[5]
    650 PASS event.target.result.value is expectedIndex
    651 PASS event.target.result.key is testData[4]
    652 PASS event.target.result.value is expectedIndex
    653 PASS event.target.result.key is testData[3]
    654 PASS event.target.result.value is expectedIndex
    655 PASS event.target.result.key is testData[2]
    656 PASS event.target.result.value is expectedIndex
    657 PASS event.target.result.key is testData[1]
    658 PASS event.target.result.value is expectedIndex
     648PASS event.target.result.primaryKey is expectedIndex
     649PASS event.target.result.key is testData[5]
     650PASS event.target.result.primaryKey is expectedIndex
     651PASS event.target.result.key is testData[4]
     652PASS event.target.result.primaryKey is expectedIndex
     653PASS event.target.result.key is testData[3]
     654PASS event.target.result.primaryKey is expectedIndex
     655PASS event.target.result.key is testData[2]
     656PASS event.target.result.primaryKey is expectedIndex
     657PASS event.target.result.key is testData[1]
     658PASS event.target.result.primaryKey is expectedIndex
    659659PASS event.target.result.key is testData[0]
    660660PASS event.target.result is null
    661661
    662662Next test: lower bound is 1; upper bound is 7; sorted descending.
    663 PASS event.target.result.value is expectedIndex
    664 PASS event.target.result.key is testData[7]
    665 PASS event.target.result.value is expectedIndex
    666 PASS event.target.result.key is testData[6]
    667 PASS event.target.result.value is expectedIndex
    668 PASS event.target.result.key is testData[5]
    669 PASS event.target.result.value is expectedIndex
    670 PASS event.target.result.key is testData[4]
    671 PASS event.target.result.value is expectedIndex
    672 PASS event.target.result.key is testData[3]
    673 PASS event.target.result.value is expectedIndex
    674 PASS event.target.result.key is testData[2]
    675 PASS event.target.result.value is expectedIndex
    676 PASS event.target.result.key is testData[1]
    677 PASS event.target.result.value is expectedIndex
     663PASS event.target.result.primaryKey is expectedIndex
     664PASS event.target.result.key is testData[7]
     665PASS event.target.result.primaryKey is expectedIndex
     666PASS event.target.result.key is testData[6]
     667PASS event.target.result.primaryKey is expectedIndex
     668PASS event.target.result.key is testData[5]
     669PASS event.target.result.primaryKey is expectedIndex
     670PASS event.target.result.key is testData[4]
     671PASS event.target.result.primaryKey is expectedIndex
     672PASS event.target.result.key is testData[3]
     673PASS event.target.result.primaryKey is expectedIndex
     674PASS event.target.result.key is testData[2]
     675PASS event.target.result.primaryKey is expectedIndex
     676PASS event.target.result.key is testData[1]
     677PASS event.target.result.primaryKey is expectedIndex
    678678PASS event.target.result.key is testData[0]
    679679PASS event.target.result is null
    680680
    681681Next test: lower open bound is 2; sorted ascending.
    682 PASS event.target.result.value is expectedIndex
    683 PASS event.target.result.key is testData[4]
    684 PASS event.target.result.value is expectedIndex
    685 PASS event.target.result.key is testData[5]
    686 PASS event.target.result.value is expectedIndex
    687 PASS event.target.result.key is testData[6]
    688 PASS event.target.result.value is expectedIndex
     682PASS event.target.result.primaryKey is expectedIndex
     683PASS event.target.result.key is testData[4]
     684PASS event.target.result.primaryKey is expectedIndex
     685PASS event.target.result.key is testData[5]
     686PASS event.target.result.primaryKey is expectedIndex
     687PASS event.target.result.key is testData[6]
     688PASS event.target.result.primaryKey is expectedIndex
    689689PASS event.target.result.key is testData[7]
    690690PASS event.target.result is null
    691691
    692692Next test: lower bound is 2; sorted ascending.
    693 PASS event.target.result.value is expectedIndex
    694 PASS event.target.result.key is testData[2]
    695 PASS event.target.result.value is expectedIndex
    696 PASS event.target.result.key is testData[3]
    697 PASS event.target.result.value is expectedIndex
    698 PASS event.target.result.key is testData[4]
    699 PASS event.target.result.value is expectedIndex
    700 PASS event.target.result.key is testData[5]
    701 PASS event.target.result.value is expectedIndex
    702 PASS event.target.result.key is testData[6]
    703 PASS event.target.result.value is expectedIndex
     693PASS event.target.result.primaryKey is expectedIndex
     694PASS event.target.result.key is testData[2]
     695PASS event.target.result.primaryKey is expectedIndex
     696PASS event.target.result.key is testData[3]
     697PASS event.target.result.primaryKey is expectedIndex
     698PASS event.target.result.key is testData[4]
     699PASS event.target.result.primaryKey is expectedIndex
     700PASS event.target.result.key is testData[5]
     701PASS event.target.result.primaryKey is expectedIndex
     702PASS event.target.result.key is testData[6]
     703PASS event.target.result.primaryKey is expectedIndex
    704704PASS event.target.result.key is testData[7]
    705705PASS event.target.result is null
    706706
    707707Next test: upper open bound is 2; sorted ascending.
    708 PASS event.target.result.value is expectedIndex
    709 PASS event.target.result.key is testData[0]
    710 PASS event.target.result.value is expectedIndex
     708PASS event.target.result.primaryKey is expectedIndex
     709PASS event.target.result.key is testData[0]
     710PASS event.target.result.primaryKey is expectedIndex
    711711PASS event.target.result.key is testData[1]
    712712PASS event.target.result is null
    713713
    714714Next test: upper bound is 2; sorted ascending.
    715 PASS event.target.result.value is expectedIndex
    716 PASS event.target.result.key is testData[0]
    717 PASS event.target.result.value is expectedIndex
    718 PASS event.target.result.key is testData[1]
    719 PASS event.target.result.value is expectedIndex
    720 PASS event.target.result.key is testData[2]
    721 PASS event.target.result.value is expectedIndex
     715PASS event.target.result.primaryKey is expectedIndex
     716PASS event.target.result.key is testData[0]
     717PASS event.target.result.primaryKey is expectedIndex
     718PASS event.target.result.key is testData[1]
     719PASS event.target.result.primaryKey is expectedIndex
     720PASS event.target.result.key is testData[2]
     721PASS event.target.result.primaryKey is expectedIndex
    722722PASS event.target.result.key is testData[3]
    723723PASS event.target.result is null
    724724
    725725Next test: lower open bound is 2; sorted descending.
    726 PASS event.target.result.value is expectedIndex
    727 PASS event.target.result.key is testData[7]
    728 PASS event.target.result.value is expectedIndex
    729 PASS event.target.result.key is testData[6]
    730 PASS event.target.result.value is expectedIndex
    731 PASS event.target.result.key is testData[5]
    732 PASS event.target.result.value is expectedIndex
     726PASS event.target.result.primaryKey is expectedIndex
     727PASS event.target.result.key is testData[7]
     728PASS event.target.result.primaryKey is expectedIndex
     729PASS event.target.result.key is testData[6]
     730PASS event.target.result.primaryKey is expectedIndex
     731PASS event.target.result.key is testData[5]
     732PASS event.target.result.primaryKey is expectedIndex
    733733PASS event.target.result.key is testData[4]
    734734PASS event.target.result is null
    735735
    736736Next test: lower bound is 2; sorted descending.
    737 PASS event.target.result.value is expectedIndex
    738 PASS event.target.result.key is testData[7]
    739 PASS event.target.result.value is expectedIndex
    740 PASS event.target.result.key is testData[6]
    741 PASS event.target.result.value is expectedIndex
    742 PASS event.target.result.key is testData[5]
    743 PASS event.target.result.value is expectedIndex
    744 PASS event.target.result.key is testData[4]
    745 PASS event.target.result.value is expectedIndex
    746 PASS event.target.result.key is testData[3]
    747 PASS event.target.result.value is expectedIndex
     737PASS event.target.result.primaryKey is expectedIndex
     738PASS event.target.result.key is testData[7]
     739PASS event.target.result.primaryKey is expectedIndex
     740PASS event.target.result.key is testData[6]
     741PASS event.target.result.primaryKey is expectedIndex
     742PASS event.target.result.key is testData[5]
     743PASS event.target.result.primaryKey is expectedIndex
     744PASS event.target.result.key is testData[4]
     745PASS event.target.result.primaryKey is expectedIndex
     746PASS event.target.result.key is testData[3]
     747PASS event.target.result.primaryKey is expectedIndex
    748748PASS event.target.result.key is testData[2]
    749749PASS event.target.result is null
    750750
    751751Next test: upper open bound is 2; sorted descending.
    752 PASS event.target.result.value is expectedIndex
    753 PASS event.target.result.key is testData[1]
    754 PASS event.target.result.value is expectedIndex
     752PASS event.target.result.primaryKey is expectedIndex
     753PASS event.target.result.key is testData[1]
     754PASS event.target.result.primaryKey is expectedIndex
    755755PASS event.target.result.key is testData[0]
    756756PASS event.target.result is null
    757757
    758758Next test: upper bound is 2; sorted descending.
    759 PASS event.target.result.value is expectedIndex
    760 PASS event.target.result.key is testData[3]
    761 PASS event.target.result.value is expectedIndex
    762 PASS event.target.result.key is testData[2]
    763 PASS event.target.result.value is expectedIndex
    764 PASS event.target.result.key is testData[1]
    765 PASS event.target.result.value is expectedIndex
     759PASS event.target.result.primaryKey is expectedIndex
     760PASS event.target.result.key is testData[3]
     761PASS event.target.result.primaryKey is expectedIndex
     762PASS event.target.result.key is testData[2]
     763PASS event.target.result.primaryKey is expectedIndex
     764PASS event.target.result.key is testData[1]
     765PASS event.target.result.primaryKey is expectedIndex
    766766PASS event.target.result.key is testData[0]
    767767PASS event.target.result is null
    768768
    769769Next test: lower open bound is 2; upper open bound is 6; sorted ascending.
    770 PASS event.target.result.value is expectedIndex
    771 PASS event.target.result.key is testData[4]
    772 PASS event.target.result.value is expectedIndex
     770PASS event.target.result.primaryKey is expectedIndex
     771PASS event.target.result.key is testData[4]
     772PASS event.target.result.primaryKey is expectedIndex
    773773PASS event.target.result.key is testData[5]
    774774PASS event.target.result is null
    775775
    776776Next test: lower open bound is 2; upper bound is 6; sorted ascending.
    777 PASS event.target.result.value is expectedIndex
    778 PASS event.target.result.key is testData[4]
    779 PASS event.target.result.value is expectedIndex
    780 PASS event.target.result.key is testData[5]
    781 PASS event.target.result.value is expectedIndex
    782 PASS event.target.result.key is testData[6]
    783 PASS event.target.result.value is expectedIndex
     777PASS event.target.result.primaryKey is expectedIndex
     778PASS event.target.result.key is testData[4]
     779PASS event.target.result.primaryKey is expectedIndex
     780PASS event.target.result.key is testData[5]
     781PASS event.target.result.primaryKey is expectedIndex
     782PASS event.target.result.key is testData[6]
     783PASS event.target.result.primaryKey is expectedIndex
    784784PASS event.target.result.key is testData[7]
    785785PASS event.target.result is null
    786786
    787787Next test: lower bound is 2; upper open bound is 6; sorted ascending.
    788 PASS event.target.result.value is expectedIndex
    789 PASS event.target.result.key is testData[2]
    790 PASS event.target.result.value is expectedIndex
    791 PASS event.target.result.key is testData[3]
    792 PASS event.target.result.value is expectedIndex
    793 PASS event.target.result.key is testData[4]
    794 PASS event.target.result.value is expectedIndex
     788PASS event.target.result.primaryKey is expectedIndex
     789PASS event.target.result.key is testData[2]
     790PASS event.target.result.primaryKey is expectedIndex
     791PASS event.target.result.key is testData[3]
     792PASS event.target.result.primaryKey is expectedIndex
     793PASS event.target.result.key is testData[4]
     794PASS event.target.result.primaryKey is expectedIndex
    795795PASS event.target.result.key is testData[5]
    796796PASS event.target.result is null
    797797
    798798Next test: lower bound is 2; upper bound is 6; sorted ascending.
    799 PASS event.target.result.value is expectedIndex
    800 PASS event.target.result.key is testData[2]
    801 PASS event.target.result.value is expectedIndex
    802 PASS event.target.result.key is testData[3]
    803 PASS event.target.result.value is expectedIndex
    804 PASS event.target.result.key is testData[4]
    805 PASS event.target.result.value is expectedIndex
    806 PASS event.target.result.key is testData[5]
    807 PASS event.target.result.value is expectedIndex
    808 PASS event.target.result.key is testData[6]
    809 PASS event.target.result.value is expectedIndex
     799PASS event.target.result.primaryKey is expectedIndex
     800PASS event.target.result.key is testData[2]
     801PASS event.target.result.primaryKey is expectedIndex
     802PASS event.target.result.key is testData[3]
     803PASS event.target.result.primaryKey is expectedIndex
     804PASS event.target.result.key is testData[4]
     805PASS event.target.result.primaryKey is expectedIndex
     806PASS event.target.result.key is testData[5]
     807PASS event.target.result.primaryKey is expectedIndex
     808PASS event.target.result.key is testData[6]
     809PASS event.target.result.primaryKey is expectedIndex
    810810PASS event.target.result.key is testData[7]
    811811PASS event.target.result is null
    812812
    813813Next test: lower open bound is 2; upper open bound is 6; sorted descending.
    814 PASS event.target.result.value is expectedIndex
    815 PASS event.target.result.key is testData[5]
    816 PASS event.target.result.value is expectedIndex
     814PASS event.target.result.primaryKey is expectedIndex
     815PASS event.target.result.key is testData[5]
     816PASS event.target.result.primaryKey is expectedIndex
    817817PASS event.target.result.key is testData[4]
    818818PASS event.target.result is null
    819819
    820820Next test: lower open bound is 2; upper bound is 6; sorted descending.
    821 PASS event.target.result.value is expectedIndex
    822 PASS event.target.result.key is testData[7]
    823 PASS event.target.result.value is expectedIndex
    824 PASS event.target.result.key is testData[6]
    825 PASS event.target.result.value is expectedIndex
    826 PASS event.target.result.key is testData[5]
    827 PASS event.target.result.value is expectedIndex
     821PASS event.target.result.primaryKey is expectedIndex
     822PASS event.target.result.key is testData[7]
     823PASS event.target.result.primaryKey is expectedIndex
     824PASS event.target.result.key is testData[6]
     825PASS event.target.result.primaryKey is expectedIndex
     826PASS event.target.result.key is testData[5]
     827PASS event.target.result.primaryKey is expectedIndex
    828828PASS event.target.result.key is testData[4]
    829829PASS event.target.result is null
    830830
    831831Next test: lower bound is 2; upper open bound is 6; sorted descending.
    832 PASS event.target.result.value is expectedIndex
    833 PASS event.target.result.key is testData[5]
    834 PASS event.target.result.value is expectedIndex
    835 PASS event.target.result.key is testData[4]
    836 PASS event.target.result.value is expectedIndex
    837 PASS event.target.result.key is testData[3]
    838 PASS event.target.result.value is expectedIndex
     832PASS event.target.result.primaryKey is expectedIndex
     833PASS event.target.result.key is testData[5]
     834PASS event.target.result.primaryKey is expectedIndex
     835PASS event.target.result.key is testData[4]
     836PASS event.target.result.primaryKey is expectedIndex
     837PASS event.target.result.key is testData[3]
     838PASS event.target.result.primaryKey is expectedIndex
    839839PASS event.target.result.key is testData[2]
    840840PASS event.target.result is null
    841841
    842842Next test: lower bound is 2; upper bound is 6; sorted descending.
    843 PASS event.target.result.value is expectedIndex
    844 PASS event.target.result.key is testData[7]
    845 PASS event.target.result.value is expectedIndex
    846 PASS event.target.result.key is testData[6]
    847 PASS event.target.result.value is expectedIndex
    848 PASS event.target.result.key is testData[5]
    849 PASS event.target.result.value is expectedIndex
    850 PASS event.target.result.key is testData[4]
    851 PASS event.target.result.value is expectedIndex
    852 PASS event.target.result.key is testData[3]
    853 PASS event.target.result.value is expectedIndex
     843PASS event.target.result.primaryKey is expectedIndex
     844PASS event.target.result.key is testData[7]
     845PASS event.target.result.primaryKey is expectedIndex
     846PASS event.target.result.key is testData[6]
     847PASS event.target.result.primaryKey is expectedIndex
     848PASS event.target.result.key is testData[5]
     849PASS event.target.result.primaryKey is expectedIndex
     850PASS event.target.result.key is testData[4]
     851PASS event.target.result.primaryKey is expectedIndex
     852PASS event.target.result.key is testData[3]
     853PASS event.target.result.primaryKey is expectedIndex
    854854PASS event.target.result.key is testData[2]
    855855PASS event.target.result is null
    856856
    857857Next test: lower open bound is 2; upper open bound is 7; sorted ascending.
    858 PASS event.target.result.value is expectedIndex
    859 PASS event.target.result.key is testData[4]
    860 PASS event.target.result.value is expectedIndex
     858PASS event.target.result.primaryKey is expectedIndex
     859PASS event.target.result.key is testData[4]
     860PASS event.target.result.primaryKey is expectedIndex
    861861PASS event.target.result.key is testData[5]
    862862PASS event.target.result is null
    863863
    864864Next test: lower open bound is 2; upper bound is 7; sorted ascending.
    865 PASS event.target.result.value is expectedIndex
    866 PASS event.target.result.key is testData[4]
    867 PASS event.target.result.value is expectedIndex
    868 PASS event.target.result.key is testData[5]
    869 PASS event.target.result.value is expectedIndex
    870 PASS event.target.result.key is testData[6]
    871 PASS event.target.result.value is expectedIndex
     865PASS event.target.result.primaryKey is expectedIndex
     866PASS event.target.result.key is testData[4]
     867PASS event.target.result.primaryKey is expectedIndex
     868PASS event.target.result.key is testData[5]
     869PASS event.target.result.primaryKey is expectedIndex
     870PASS event.target.result.key is testData[6]
     871PASS event.target.result.primaryKey is expectedIndex
    872872PASS event.target.result.key is testData[7]
    873873PASS event.target.result is null
    874874
    875875Next test: lower bound is 2; upper open bound is 7; sorted ascending.
    876 PASS event.target.result.value is expectedIndex
    877 PASS event.target.result.key is testData[2]
    878 PASS event.target.result.value is expectedIndex
    879 PASS event.target.result.key is testData[3]
    880 PASS event.target.result.value is expectedIndex
    881 PASS event.target.result.key is testData[4]
    882 PASS event.target.result.value is expectedIndex
     876PASS event.target.result.primaryKey is expectedIndex
     877PASS event.target.result.key is testData[2]
     878PASS event.target.result.primaryKey is expectedIndex
     879PASS event.target.result.key is testData[3]
     880PASS event.target.result.primaryKey is expectedIndex
     881PASS event.target.result.key is testData[4]
     882PASS event.target.result.primaryKey is expectedIndex
    883883PASS event.target.result.key is testData[5]
    884884PASS event.target.result is null
    885885
    886886Next test: lower bound is 2; upper bound is 7; sorted ascending.
    887 PASS event.target.result.value is expectedIndex
    888 PASS event.target.result.key is testData[2]
    889 PASS event.target.result.value is expectedIndex
    890 PASS event.target.result.key is testData[3]
    891 PASS event.target.result.value is expectedIndex
    892 PASS event.target.result.key is testData[4]
    893 PASS event.target.result.value is expectedIndex
    894 PASS event.target.result.key is testData[5]
    895 PASS event.target.result.value is expectedIndex
    896 PASS event.target.result.key is testData[6]
    897 PASS event.target.result.value is expectedIndex
     887PASS event.target.result.primaryKey is expectedIndex
     888PASS event.target.result.key is testData[2]
     889PASS event.target.result.primaryKey is expectedIndex
     890PASS event.target.result.key is testData[3]
     891PASS event.target.result.primaryKey is expectedIndex
     892PASS event.target.result.key is testData[4]
     893PASS event.target.result.primaryKey is expectedIndex
     894PASS event.target.result.key is testData[5]
     895PASS event.target.result.primaryKey is expectedIndex
     896PASS event.target.result.key is testData[6]
     897PASS event.target.result.primaryKey is expectedIndex
    898898PASS event.target.result.key is testData[7]
    899899PASS event.target.result is null
    900900
    901901Next test: lower open bound is 2; upper open bound is 7; sorted descending.
    902 PASS event.target.result.value is expectedIndex
    903 PASS event.target.result.key is testData[5]
    904 PASS event.target.result.value is expectedIndex
     902PASS event.target.result.primaryKey is expectedIndex
     903PASS event.target.result.key is testData[5]
     904PASS event.target.result.primaryKey is expectedIndex
    905905PASS event.target.result.key is testData[4]
    906906PASS event.target.result is null
    907907
    908908Next test: lower open bound is 2; upper bound is 7; sorted descending.
    909 PASS event.target.result.value is expectedIndex
    910 PASS event.target.result.key is testData[7]
    911 PASS event.target.result.value is expectedIndex
    912 PASS event.target.result.key is testData[6]
    913 PASS event.target.result.value is expectedIndex
    914 PASS event.target.result.key is testData[5]
    915 PASS event.target.result.value is expectedIndex
     909PASS event.target.result.primaryKey is expectedIndex
     910PASS event.target.result.key is testData[7]
     911PASS event.target.result.primaryKey is expectedIndex
     912PASS event.target.result.key is testData[6]
     913PASS event.target.result.primaryKey is expectedIndex
     914PASS event.target.result.key is testData[5]
     915PASS event.target.result.primaryKey is expectedIndex
    916916PASS event.target.result.key is testData[4]
    917917PASS event.target.result is null
    918918
    919919Next test: lower bound is 2; upper open bound is 7; sorted descending.
    920 PASS event.target.result.value is expectedIndex
    921 PASS event.target.result.key is testData[5]
    922 PASS event.target.result.value is expectedIndex
    923 PASS event.target.result.key is testData[4]
    924 PASS event.target.result.value is expectedIndex
    925 PASS event.target.result.key is testData[3]
    926 PASS event.target.result.value is expectedIndex
     920PASS event.target.result.primaryKey is expectedIndex
     921PASS event.target.result.key is testData[5]
     922PASS event.target.result.primaryKey is expectedIndex
     923PASS event.target.result.key is testData[4]
     924PASS event.target.result.primaryKey is expectedIndex
     925PASS event.target.result.key is testData[3]
     926PASS event.target.result.primaryKey is expectedIndex
    927927PASS event.target.result.key is testData[2]
    928928PASS event.target.result is null
    929929
    930930Next test: lower bound is 2; upper bound is 7; sorted descending.
    931 PASS event.target.result.value is expectedIndex
    932 PASS event.target.result.key is testData[7]
    933 PASS event.target.result.value is expectedIndex
    934 PASS event.target.result.key is testData[6]
    935 PASS event.target.result.value is expectedIndex
    936 PASS event.target.result.key is testData[5]
    937 PASS event.target.result.value is expectedIndex
    938 PASS event.target.result.key is testData[4]
    939 PASS event.target.result.value is expectedIndex
    940 PASS event.target.result.key is testData[3]
    941 PASS event.target.result.value is expectedIndex
     931PASS event.target.result.primaryKey is expectedIndex
     932PASS event.target.result.key is testData[7]
     933PASS event.target.result.primaryKey is expectedIndex
     934PASS event.target.result.key is testData[6]
     935PASS event.target.result.primaryKey is expectedIndex
     936PASS event.target.result.key is testData[5]
     937PASS event.target.result.primaryKey is expectedIndex
     938PASS event.target.result.key is testData[4]
     939PASS event.target.result.primaryKey is expectedIndex
     940PASS event.target.result.key is testData[3]
     941PASS event.target.result.primaryKey is expectedIndex
    942942PASS event.target.result.key is testData[2]
    943943PASS event.target.result is null
    944944
    945945Next test: lower open bound is 3; sorted ascending.
    946 PASS event.target.result.value is expectedIndex
    947 PASS event.target.result.key is testData[4]
    948 PASS event.target.result.value is expectedIndex
    949 PASS event.target.result.key is testData[5]
    950 PASS event.target.result.value is expectedIndex
    951 PASS event.target.result.key is testData[6]
    952 PASS event.target.result.value is expectedIndex
     946PASS event.target.result.primaryKey is expectedIndex
     947PASS event.target.result.key is testData[4]
     948PASS event.target.result.primaryKey is expectedIndex
     949PASS event.target.result.key is testData[5]
     950PASS event.target.result.primaryKey is expectedIndex
     951PASS event.target.result.key is testData[6]
     952PASS event.target.result.primaryKey is expectedIndex
    953953PASS event.target.result.key is testData[7]
    954954PASS event.target.result is null
    955955
    956956Next test: lower bound is 3; sorted ascending.
    957 PASS event.target.result.value is expectedIndex
    958 PASS event.target.result.key is testData[2]
    959 PASS event.target.result.value is expectedIndex
    960 PASS event.target.result.key is testData[3]
    961 PASS event.target.result.value is expectedIndex
    962 PASS event.target.result.key is testData[4]
    963 PASS event.target.result.value is expectedIndex
    964 PASS event.target.result.key is testData[5]
    965 PASS event.target.result.value is expectedIndex
    966 PASS event.target.result.key is testData[6]
    967 PASS event.target.result.value is expectedIndex
     957PASS event.target.result.primaryKey is expectedIndex
     958PASS event.target.result.key is testData[2]
     959PASS event.target.result.primaryKey is expectedIndex
     960PASS event.target.result.key is testData[3]
     961PASS event.target.result.primaryKey is expectedIndex
     962PASS event.target.result.key is testData[4]
     963PASS event.target.result.primaryKey is expectedIndex
     964PASS event.target.result.key is testData[5]
     965PASS event.target.result.primaryKey is expectedIndex
     966PASS event.target.result.key is testData[6]
     967PASS event.target.result.primaryKey is expectedIndex
    968968PASS event.target.result.key is testData[7]
    969969PASS event.target.result is null
    970970
    971971Next test: upper open bound is 3; sorted ascending.
    972 PASS event.target.result.value is expectedIndex
    973 PASS event.target.result.key is testData[0]
    974 PASS event.target.result.value is expectedIndex
     972PASS event.target.result.primaryKey is expectedIndex
     973PASS event.target.result.key is testData[0]
     974PASS event.target.result.primaryKey is expectedIndex
    975975PASS event.target.result.key is testData[1]
    976976PASS event.target.result is null
    977977
    978978Next test: upper bound is 3; sorted ascending.
    979 PASS event.target.result.value is expectedIndex
    980 PASS event.target.result.key is testData[0]
    981 PASS event.target.result.value is expectedIndex
    982 PASS event.target.result.key is testData[1]
    983 PASS event.target.result.value is expectedIndex
    984 PASS event.target.result.key is testData[2]
    985 PASS event.target.result.value is expectedIndex
     979PASS event.target.result.primaryKey is expectedIndex
     980PASS event.target.result.key is testData[0]
     981PASS event.target.result.primaryKey is expectedIndex
     982PASS event.target.result.key is testData[1]
     983PASS event.target.result.primaryKey is expectedIndex
     984PASS event.target.result.key is testData[2]
     985PASS event.target.result.primaryKey is expectedIndex
    986986PASS event.target.result.key is testData[3]
    987987PASS event.target.result is null
    988988
    989989Next test: lower open bound is 3; sorted descending.
    990 PASS event.target.result.value is expectedIndex
    991 PASS event.target.result.key is testData[7]
    992 PASS event.target.result.value is expectedIndex
    993 PASS event.target.result.key is testData[6]
    994 PASS event.target.result.value is expectedIndex
    995 PASS event.target.result.key is testData[5]
    996 PASS event.target.result.value is expectedIndex
     990PASS event.target.result.primaryKey is expectedIndex
     991PASS event.target.result.key is testData[7]
     992PASS event.target.result.primaryKey is expectedIndex
     993PASS event.target.result.key is testData[6]
     994PASS event.target.result.primaryKey is expectedIndex
     995PASS event.target.result.key is testData[5]
     996PASS event.target.result.primaryKey is expectedIndex
    997997PASS event.target.result.key is testData[4]
    998998PASS event.target.result is null
    999999
    10001000Next test: lower bound is 3; sorted descending.
    1001 PASS event.target.result.value is expectedIndex
    1002 PASS event.target.result.key is testData[7]
    1003 PASS event.target.result.value is expectedIndex
    1004 PASS event.target.result.key is testData[6]
    1005 PASS event.target.result.value is expectedIndex
    1006 PASS event.target.result.key is testData[5]
    1007 PASS event.target.result.value is expectedIndex
    1008 PASS event.target.result.key is testData[4]
    1009 PASS event.target.result.value is expectedIndex
    1010 PASS event.target.result.key is testData[3]
    1011 PASS event.target.result.value is expectedIndex
     1001PASS event.target.result.primaryKey is expectedIndex
     1002PASS event.target.result.key is testData[7]
     1003PASS event.target.result.primaryKey is expectedIndex
     1004PASS event.target.result.key is testData[6]
     1005PASS event.target.result.primaryKey is expectedIndex
     1006PASS event.target.result.key is testData[5]
     1007PASS event.target.result.primaryKey is expectedIndex
     1008PASS event.target.result.key is testData[4]
     1009PASS event.target.result.primaryKey is expectedIndex
     1010PASS event.target.result.key is testData[3]
     1011PASS event.target.result.primaryKey is expectedIndex
    10121012PASS event.target.result.key is testData[2]
    10131013PASS event.target.result is null
    10141014
    10151015Next test: upper open bound is 3; sorted descending.
    1016 PASS event.target.result.value is expectedIndex
    1017 PASS event.target.result.key is testData[1]
    1018 PASS event.target.result.value is expectedIndex
     1016PASS event.target.result.primaryKey is expectedIndex
     1017PASS event.target.result.key is testData[1]
     1018PASS event.target.result.primaryKey is expectedIndex
    10191019PASS event.target.result.key is testData[0]
    10201020PASS event.target.result is null
    10211021
    10221022Next test: upper bound is 3; sorted descending.
    1023 PASS event.target.result.value is expectedIndex
    1024 PASS event.target.result.key is testData[3]
    1025 PASS event.target.result.value is expectedIndex
    1026 PASS event.target.result.key is testData[2]
    1027 PASS event.target.result.value is expectedIndex
    1028 PASS event.target.result.key is testData[1]
    1029 PASS event.target.result.value is expectedIndex
     1023PASS event.target.result.primaryKey is expectedIndex
     1024PASS event.target.result.key is testData[3]
     1025PASS event.target.result.primaryKey is expectedIndex
     1026PASS event.target.result.key is testData[2]
     1027PASS event.target.result.primaryKey is expectedIndex
     1028PASS event.target.result.key is testData[1]
     1029PASS event.target.result.primaryKey is expectedIndex
    10301030PASS event.target.result.key is testData[0]
    10311031PASS event.target.result is null
    10321032
    10331033Next test: lower open bound is 3; upper open bound is 6; sorted ascending.
    1034 PASS event.target.result.value is expectedIndex
    1035 PASS event.target.result.key is testData[4]
    1036 PASS event.target.result.value is expectedIndex
     1034PASS event.target.result.primaryKey is expectedIndex
     1035PASS event.target.result.key is testData[4]
     1036PASS event.target.result.primaryKey is expectedIndex
    10371037PASS event.target.result.key is testData[5]
    10381038PASS event.target.result is null
    10391039
    10401040Next test: lower open bound is 3; upper bound is 6; sorted ascending.
    1041 PASS event.target.result.value is expectedIndex
    1042 PASS event.target.result.key is testData[4]
    1043 PASS event.target.result.value is expectedIndex
    1044 PASS event.target.result.key is testData[5]
    1045 PASS event.target.result.value is expectedIndex
    1046 PASS event.target.result.key is testData[6]
    1047 PASS event.target.result.value is expectedIndex
     1041PASS event.target.result.primaryKey is expectedIndex
     1042PASS event.target.result.key is testData[4]
     1043PASS event.target.result.primaryKey is expectedIndex
     1044PASS event.target.result.key is testData[5]
     1045PASS event.target.result.primaryKey is expectedIndex
     1046PASS event.target.result.key is testData[6]
     1047PASS event.target.result.primaryKey is expectedIndex
    10481048PASS event.target.result.key is testData[7]
    10491049PASS event.target.result is null
    10501050
    10511051Next test: lower bound is 3; upper open bound is 6; sorted ascending.
    1052 PASS event.target.result.value is expectedIndex
    1053 PASS event.target.result.key is testData[2]
    1054 PASS event.target.result.value is expectedIndex
    1055 PASS event.target.result.key is testData[3]
    1056 PASS event.target.result.value is expectedIndex
    1057 PASS event.target.result.key is testData[4]
    1058 PASS event.target.result.value is expectedIndex
     1052PASS event.target.result.primaryKey is expectedIndex
     1053PASS event.target.result.key is testData[2]
     1054PASS event.target.result.primaryKey is expectedIndex
     1055PASS event.target.result.key is testData[3]
     1056PASS event.target.result.primaryKey is expectedIndex
     1057PASS event.target.result.key is testData[4]
     1058PASS event.target.result.primaryKey is expectedIndex
    10591059PASS event.target.result.key is testData[5]
    10601060PASS event.target.result is null
    10611061
    10621062Next test: lower bound is 3; upper bound is 6; sorted ascending.
    1063 PASS event.target.result.value is expectedIndex
    1064 PASS event.target.result.key is testData[2]
    1065 PASS event.target.result.value is expectedIndex
    1066 PASS event.target.result.key is testData[3]
    1067 PASS event.target.result.value is expectedIndex
    1068 PASS event.target.result.key is testData[4]
    1069 PASS event.target.result.value is expectedIndex
    1070 PASS event.target.result.key is testData[5]
    1071 PASS event.target.result.value is expectedIndex
    1072 PASS event.target.result.key is testData[6]
    1073 PASS event.target.result.value is expectedIndex
     1063PASS event.target.result.primaryKey is expectedIndex
     1064PASS event.target.result.key is testData[2]
     1065PASS event.target.result.primaryKey is expectedIndex
     1066PASS event.target.result.key is testData[3]
     1067PASS event.target.result.primaryKey is expectedIndex
     1068PASS event.target.result.key is testData[4]
     1069PASS event.target.result.primaryKey is expectedIndex
     1070PASS event.target.result.key is testData[5]
     1071PASS event.target.result.primaryKey is expectedIndex
     1072PASS event.target.result.key is testData[6]
     1073PASS event.target.result.primaryKey is expectedIndex
    10741074PASS event.target.result.key is testData[7]
    10751075PASS event.target.result is null
    10761076
    10771077Next test: lower open bound is 3; upper open bound is 6; sorted descending.
    1078 PASS event.target.result.value is expectedIndex
    1079 PASS event.target.result.key is testData[5]
    1080 PASS event.target.result.value is expectedIndex
     1078PASS event.target.result.primaryKey is expectedIndex
     1079PASS event.target.result.key is testData[5]
     1080PASS event.target.result.primaryKey is expectedIndex
    10811081PASS event.target.result.key is testData[4]
    10821082PASS event.target.result is null
    10831083
    10841084Next test: lower open bound is 3; upper bound is 6; sorted descending.
    1085 PASS event.target.result.value is expectedIndex
    1086 PASS event.target.result.key is testData[7]
    1087 PASS event.target.result.value is expectedIndex
    1088 PASS event.target.result.key is testData[6]
    1089 PASS event.target.result.value is expectedIndex
    1090 PASS event.target.result.key is testData[5]
    1091 PASS event.target.result.value is expectedIndex
     1085PASS event.target.result.primaryKey is expectedIndex
     1086PASS event.target.result.key is testData[7]
     1087PASS event.target.result.primaryKey is expectedIndex
     1088PASS event.target.result.key is testData[6]
     1089PASS event.target.result.primaryKey is expectedIndex
     1090PASS event.target.result.key is testData[5]
     1091PASS event.target.result.primaryKey is expectedIndex
    10921092PASS event.target.result.key is testData[4]
    10931093PASS event.target.result is null
    10941094
    10951095Next test: lower bound is 3; upper open bound is 6; sorted descending.
    1096 PASS event.target.result.value is expectedIndex
    1097 PASS event.target.result.key is testData[5]
    1098 PASS event.target.result.value is expectedIndex
    1099 PASS event.target.result.key is testData[4]
    1100 PASS event.target.result.value is expectedIndex
    1101 PASS event.target.result.key is testData[3]
    1102 PASS event.target.result.value is expectedIndex
     1096PASS event.target.result.primaryKey is expectedIndex
     1097PASS event.target.result.key is testData[5]
     1098PASS event.target.result.primaryKey is expectedIndex
     1099PASS event.target.result.key is testData[4]
     1100PASS event.target.result.primaryKey is expectedIndex
     1101PASS event.target.result.key is testData[3]
     1102PASS event.target.result.primaryKey is expectedIndex
    11031103PASS event.target.result.key is testData[2]
    11041104PASS event.target.result is null
    11051105
    11061106Next test: lower bound is 3; upper bound is 6; sorted descending.
    1107 PASS event.target.result.value is expectedIndex
    1108 PASS event.target.result.key is testData[7]
    1109 PASS event.target.result.value is expectedIndex
    1110 PASS event.target.result.key is testData[6]
    1111 PASS event.target.result.value is expectedIndex
    1112 PASS event.target.result.key is testData[5]
    1113 PASS event.target.result.value is expectedIndex
    1114 PASS event.target.result.key is testData[4]
    1115 PASS event.target.result.value is expectedIndex
    1116 PASS event.target.result.key is testData[3]
    1117 PASS event.target.result.value is expectedIndex
     1107PASS event.target.result.primaryKey is expectedIndex
     1108PASS event.target.result.key is testData[7]
     1109PASS event.target.result.primaryKey is expectedIndex
     1110PASS event.target.result.key is testData[6]
     1111PASS event.target.result.primaryKey is expectedIndex
     1112PASS event.target.result.key is testData[5]
     1113PASS event.target.result.primaryKey is expectedIndex
     1114PASS event.target.result.key is testData[4]
     1115PASS event.target.result.primaryKey is expectedIndex
     1116PASS event.target.result.key is testData[3]
     1117PASS event.target.result.primaryKey is expectedIndex
    11181118PASS event.target.result.key is testData[2]
    11191119PASS event.target.result is null
    11201120
    11211121Next test: lower open bound is 3; upper open bound is 7; sorted ascending.
    1122 PASS event.target.result.value is expectedIndex
    1123 PASS event.target.result.key is testData[4]
    1124 PASS event.target.result.value is expectedIndex
     1122PASS event.target.result.primaryKey is expectedIndex
     1123PASS event.target.result.key is testData[4]
     1124PASS event.target.result.primaryKey is expectedIndex
    11251125PASS event.target.result.key is testData[5]
    11261126PASS event.target.result is null
    11271127
    11281128Next test: lower open bound is 3; upper bound is 7; sorted ascending.
    1129 PASS event.target.result.value is expectedIndex
    1130 PASS event.target.result.key is testData[4]
    1131 PASS event.target.result.value is expectedIndex
    1132 PASS event.target.result.key is testData[5]
    1133 PASS event.target.result.value is expectedIndex
    1134 PASS event.target.result.key is testData[6]
    1135 PASS event.target.result.value is expectedIndex
     1129PASS event.target.result.primaryKey is expectedIndex
     1130PASS event.target.result.key is testData[4]
     1131PASS event.target.result.primaryKey is expectedIndex
     1132PASS event.target.result.key is testData[5]
     1133PASS event.target.result.primaryKey is expectedIndex
     1134PASS event.target.result.key is testData[6]
     1135PASS event.target.result.primaryKey is expectedIndex
    11361136PASS event.target.result.key is testData[7]
    11371137PASS event.target.result is null
    11381138
    11391139Next test: lower bound is 3; upper open bound is 7; sorted ascending.
    1140 PASS event.target.result.value is expectedIndex
    1141 PASS event.target.result.key is testData[2]
    1142 PASS event.target.result.value is expectedIndex
    1143 PASS event.target.result.key is testData[3]
    1144 PASS event.target.result.value is expectedIndex
    1145 PASS event.target.result.key is testData[4]
    1146 PASS event.target.result.value is expectedIndex
     1140PASS event.target.result.primaryKey is expectedIndex
     1141PASS event.target.result.key is testData[2]
     1142PASS event.target.result.primaryKey is expectedIndex
     1143PASS event.target.result.key is testData[3]
     1144PASS event.target.result.primaryKey is expectedIndex
     1145PASS event.target.result.key is testData[4]
     1146PASS event.target.result.primaryKey is expectedIndex
    11471147PASS event.target.result.key is testData[5]
    11481148PASS event.target.result is null
    11491149
    11501150Next test: lower bound is 3; upper bound is 7; sorted ascending.
    1151 PASS event.target.result.value is expectedIndex
    1152 PASS event.target.result.key is testData[2]
    1153 PASS event.target.result.value is expectedIndex
    1154 PASS event.target.result.key is testData[3]
    1155 PASS event.target.result.value is expectedIndex
    1156 PASS event.target.result.key is testData[4]
    1157 PASS event.target.result.value is expectedIndex
    1158 PASS event.target.result.key is testData[5]
    1159 PASS event.target.result.value is expectedIndex
    1160 PASS event.target.result.key is testData[6]
    1161 PASS event.target.result.value is expectedIndex
     1151PASS event.target.result.primaryKey is expectedIndex
     1152PASS event.target.result.key is testData[2]
     1153PASS event.target.result.primaryKey is expectedIndex
     1154PASS event.target.result.key is testData[3]
     1155PASS event.target.result.primaryKey is expectedIndex
     1156PASS event.target.result.key is testData[4]
     1157PASS event.target.result.primaryKey is expectedIndex
     1158PASS event.target.result.key is testData[5]
     1159PASS event.target.result.primaryKey is expectedIndex
     1160PASS event.target.result.key is testData[6]
     1161PASS event.target.result.primaryKey is expectedIndex
    11621162PASS event.target.result.key is testData[7]
    11631163PASS event.target.result is null
    11641164
    11651165Next test: lower open bound is 3; upper open bound is 7; sorted descending.
    1166 PASS event.target.result.value is expectedIndex
    1167 PASS event.target.result.key is testData[5]
    1168 PASS event.target.result.value is expectedIndex
     1166PASS event.target.result.primaryKey is expectedIndex
     1167PASS event.target.result.key is testData[5]
     1168PASS event.target.result.primaryKey is expectedIndex
    11691169PASS event.target.result.key is testData[4]
    11701170PASS event.target.result is null
    11711171
    11721172Next test: lower open bound is 3; upper bound is 7; sorted descending.
    1173 PASS event.target.result.value is expectedIndex
    1174 PASS event.target.result.key is testData[7]
    1175 PASS event.target.result.value is expectedIndex
    1176 PASS event.target.result.key is testData[6]
    1177 PASS event.target.result.value is expectedIndex
    1178 PASS event.target.result.key is testData[5]
    1179 PASS event.target.result.value is expectedIndex
     1173PASS event.target.result.primaryKey is expectedIndex
     1174PASS event.target.result.key is testData[7]
     1175PASS event.target.result.primaryKey is expectedIndex
     1176PASS event.target.result.key is testData[6]
     1177PASS event.target.result.primaryKey is expectedIndex
     1178PASS event.target.result.key is testData[5]
     1179PASS event.target.result.primaryKey is expectedIndex
    11801180PASS event.target.result.key is testData[4]
    11811181PASS event.target.result is null
    11821182
    11831183Next test: lower bound is 3; upper open bound is 7; sorted descending.
    1184 PASS event.target.result.value is expectedIndex
    1185 PASS event.target.result.key is testData[5]
    1186 PASS event.target.result.value is expectedIndex
    1187 PASS event.target.result.key is testData[4]
    1188 PASS event.target.result.value is expectedIndex
    1189 PASS event.target.result.key is testData[3]
    1190 PASS event.target.result.value is expectedIndex
     1184PASS event.target.result.primaryKey is expectedIndex
     1185PASS event.target.result.key is testData[5]
     1186PASS event.target.result.primaryKey is expectedIndex
     1187PASS event.target.result.key is testData[4]
     1188PASS event.target.result.primaryKey is expectedIndex
     1189PASS event.target.result.key is testData[3]
     1190PASS event.target.result.primaryKey is expectedIndex
    11911191PASS event.target.result.key is testData[2]
    11921192PASS event.target.result is null
    11931193
    11941194Next test: lower bound is 3; upper bound is 7; sorted descending.
    1195 PASS event.target.result.value is expectedIndex
    1196 PASS event.target.result.key is testData[7]
    1197 PASS event.target.result.value is expectedIndex
    1198 PASS event.target.result.key is testData[6]
    1199 PASS event.target.result.value is expectedIndex
    1200 PASS event.target.result.key is testData[5]
    1201 PASS event.target.result.value is expectedIndex
    1202 PASS event.target.result.key is testData[4]
    1203 PASS event.target.result.value is expectedIndex
    1204 PASS event.target.result.key is testData[3]
    1205 PASS event.target.result.value is expectedIndex
     1195PASS event.target.result.primaryKey is expectedIndex
     1196PASS event.target.result.key is testData[7]
     1197PASS event.target.result.primaryKey is expectedIndex
     1198PASS event.target.result.key is testData[6]
     1199PASS event.target.result.primaryKey is expectedIndex
     1200PASS event.target.result.key is testData[5]
     1201PASS event.target.result.primaryKey is expectedIndex
     1202PASS event.target.result.key is testData[4]
     1203PASS event.target.result.primaryKey is expectedIndex
     1204PASS event.target.result.key is testData[3]
     1205PASS event.target.result.primaryKey is expectedIndex
    12061206PASS event.target.result.key is testData[2]
    12071207PASS event.target.result is null
    12081208
    12091209Next test: lower open bound is 4; sorted ascending.
    1210 PASS event.target.result.value is expectedIndex
    1211 PASS event.target.result.key is testData[5]
    1212 PASS event.target.result.value is expectedIndex
    1213 PASS event.target.result.key is testData[6]
    1214 PASS event.target.result.value is expectedIndex
     1210PASS event.target.result.primaryKey is expectedIndex
     1211PASS event.target.result.key is testData[5]
     1212PASS event.target.result.primaryKey is expectedIndex
     1213PASS event.target.result.key is testData[6]
     1214PASS event.target.result.primaryKey is expectedIndex
    12151215PASS event.target.result.key is testData[7]
    12161216PASS event.target.result is null
    12171217
    12181218Next test: lower bound is 4; sorted ascending.
    1219 PASS event.target.result.value is expectedIndex
    1220 PASS event.target.result.key is testData[4]
    1221 PASS event.target.result.value is expectedIndex
    1222 PASS event.target.result.key is testData[5]
    1223 PASS event.target.result.value is expectedIndex
    1224 PASS event.target.result.key is testData[6]
    1225 PASS event.target.result.value is expectedIndex
     1219PASS event.target.result.primaryKey is expectedIndex
     1220PASS event.target.result.key is testData[4]
     1221PASS event.target.result.primaryKey is expectedIndex
     1222PASS event.target.result.key is testData[5]
     1223PASS event.target.result.primaryKey is expectedIndex
     1224PASS event.target.result.key is testData[6]
     1225PASS event.target.result.primaryKey is expectedIndex
    12261226PASS event.target.result.key is testData[7]
    12271227PASS event.target.result is null
    12281228
    12291229Next test: upper open bound is 4; sorted ascending.
    1230 PASS event.target.result.value is expectedIndex
    1231 PASS event.target.result.key is testData[0]
    1232 PASS event.target.result.value is expectedIndex
    1233 PASS event.target.result.key is testData[1]
    1234 PASS event.target.result.value is expectedIndex
    1235 PASS event.target.result.key is testData[2]
    1236 PASS event.target.result.value is expectedIndex
     1230PASS event.target.result.primaryKey is expectedIndex
     1231PASS event.target.result.key is testData[0]
     1232PASS event.target.result.primaryKey is expectedIndex
     1233PASS event.target.result.key is testData[1]
     1234PASS event.target.result.primaryKey is expectedIndex
     1235PASS event.target.result.key is testData[2]
     1236PASS event.target.result.primaryKey is expectedIndex
    12371237PASS event.target.result.key is testData[3]
    12381238PASS event.target.result is null
    12391239
    12401240Next test: upper bound is 4; sorted ascending.
    1241 PASS event.target.result.value is expectedIndex
    1242 PASS event.target.result.key is testData[0]
    1243 PASS event.target.result.value is expectedIndex
    1244 PASS event.target.result.key is testData[1]
    1245 PASS event.target.result.value is expectedIndex
    1246 PASS event.target.result.key is testData[2]
    1247 PASS event.target.result.value is expectedIndex
    1248 PASS event.target.result.key is testData[3]
    1249 PASS event.target.result.value is expectedIndex
     1241PASS event.target.result.primaryKey is expectedIndex
     1242PASS event.target.result.key is testData[0]
     1243PASS event.target.result.primaryKey is expectedIndex
     1244PASS event.target.result.key is testData[1]
     1245PASS event.target.result.primaryKey is expectedIndex
     1246PASS event.target.result.key is testData[2]
     1247PASS event.target.result.primaryKey is expectedIndex
     1248PASS event.target.result.key is testData[3]
     1249PASS event.target.result.primaryKey is expectedIndex
    12501250PASS event.target.result.key is testData[4]
    12511251PASS event.target.result is null
    12521252
    12531253Next test: lower open bound is 4; sorted descending.
    1254 PASS event.target.result.value is expectedIndex
    1255 PASS event.target.result.key is testData[7]
    1256 PASS event.target.result.value is expectedIndex
    1257 PASS event.target.result.key is testData[6]
    1258 PASS event.target.result.value is expectedIndex
     1254PASS event.target.result.primaryKey is expectedIndex
     1255PASS event.target.result.key is testData[7]
     1256PASS event.target.result.primaryKey is expectedIndex
     1257PASS event.target.result.key is testData[6]
     1258PASS event.target.result.primaryKey is expectedIndex
    12591259PASS event.target.result.key is testData[5]
    12601260PASS event.target.result is null
    12611261
    12621262Next test: lower bound is 4; sorted descending.
    1263 PASS event.target.result.value is expectedIndex
    1264 PASS event.target.result.key is testData[7]
    1265 PASS event.target.result.value is expectedIndex
    1266 PASS event.target.result.key is testData[6]
    1267 PASS event.target.result.value is expectedIndex
    1268 PASS event.target.result.key is testData[5]
    1269 PASS event.target.result.value is expectedIndex
     1263PASS event.target.result.primaryKey is expectedIndex
     1264PASS event.target.result.key is testData[7]
     1265PASS event.target.result.primaryKey is expectedIndex
     1266PASS event.target.result.key is testData[6]
     1267PASS event.target.result.primaryKey is expectedIndex
     1268PASS event.target.result.key is testData[5]
     1269PASS event.target.result.primaryKey is expectedIndex
    12701270PASS event.target.result.key is testData[4]
    12711271PASS event.target.result is null
    12721272
    12731273Next test: upper open bound is 4; sorted descending.
    1274 PASS event.target.result.value is expectedIndex
    1275 PASS event.target.result.key is testData[3]
    1276 PASS event.target.result.value is expectedIndex
    1277 PASS event.target.result.key is testData[2]
    1278 PASS event.target.result.value is expectedIndex
    1279 PASS event.target.result.key is testData[1]
    1280 PASS event.target.result.value is expectedIndex
     1274PASS event.target.result.primaryKey is expectedIndex
     1275PASS event.target.result.key is testData[3]
     1276PASS event.target.result.primaryKey is expectedIndex
     1277PASS event.target.result.key is testData[2]
     1278PASS event.target.result.primaryKey is expectedIndex
     1279PASS event.target.result.key is testData[1]
     1280PASS event.target.result.primaryKey is expectedIndex
    12811281PASS event.target.result.key is testData[0]
    12821282PASS event.target.result is null
    12831283
    12841284Next test: upper bound is 4; sorted descending.
    1285 PASS event.target.result.value is expectedIndex
    1286 PASS event.target.result.key is testData[4]
    1287 PASS event.target.result.value is expectedIndex
    1288 PASS event.target.result.key is testData[3]
    1289 PASS event.target.result.value is expectedIndex
    1290 PASS event.target.result.key is testData[2]
    1291 PASS event.target.result.value is expectedIndex
    1292 PASS event.target.result.key is testData[1]
    1293 PASS event.target.result.value is expectedIndex
     1285PASS event.target.result.primaryKey is expectedIndex
     1286PASS event.target.result.key is testData[4]
     1287PASS event.target.result.primaryKey is expectedIndex
     1288PASS event.target.result.key is testData[3]
     1289PASS event.target.result.primaryKey is expectedIndex
     1290PASS event.target.result.key is testData[2]
     1291PASS event.target.result.primaryKey is expectedIndex
     1292PASS event.target.result.key is testData[1]
     1293PASS event.target.result.primaryKey is expectedIndex
    12941294PASS event.target.result.key is testData[0]
    12951295PASS event.target.result is null
    12961296
    12971297Next test: lower open bound is 4; upper open bound is 6; sorted ascending.
    1298 PASS event.target.result.value is expectedIndex
     1298PASS event.target.result.primaryKey is expectedIndex
    12991299PASS event.target.result.key is testData[5]
    13001300PASS event.target.result is null
    13011301
    13021302Next test: lower open bound is 4; upper bound is 6; sorted ascending.
    1303 PASS event.target.result.value is expectedIndex
    1304 PASS event.target.result.key is testData[5]
    1305 PASS event.target.result.value is expectedIndex
    1306 PASS event.target.result.key is testData[6]
    1307 PASS event.target.result.value is expectedIndex
     1303PASS event.target.result.primaryKey is expectedIndex
     1304PASS event.target.result.key is testData[5]
     1305PASS event.target.result.primaryKey is expectedIndex
     1306PASS event.target.result.key is testData[6]
     1307PASS event.target.result.primaryKey is expectedIndex
    13081308PASS event.target.result.key is testData[7]
    13091309PASS event.target.result is null
    13101310
    13111311Next test: lower bound is 4; upper open bound is 6; sorted ascending.
    1312 PASS event.target.result.value is expectedIndex
    1313 PASS event.target.result.key is testData[4]
    1314 PASS event.target.result.value is expectedIndex
     1312PASS event.target.result.primaryKey is expectedIndex
     1313PASS event.target.result.key is testData[4]
     1314PASS event.target.result.primaryKey is expectedIndex
    13151315PASS event.target.result.key is testData[5]
    13161316PASS event.target.result is null
    13171317
    13181318Next test: lower bound is 4; upper bound is 6; sorted ascending.
    1319 PASS event.target.result.value is expectedIndex
    1320 PASS event.target.result.key is testData[4]
    1321 PASS event.target.result.value is expectedIndex
    1322 PASS event.target.result.key is testData[5]
    1323 PASS event.target.result.value is expectedIndex
    1324 PASS event.target.result.key is testData[6]
    1325 PASS event.target.result.value is expectedIndex
     1319PASS event.target.result.primaryKey is expectedIndex
     1320PASS event.target.result.key is testData[4]
     1321PASS event.target.result.primaryKey is expectedIndex
     1322PASS event.target.result.key is testData[5]
     1323PASS event.target.result.primaryKey is expectedIndex
     1324PASS event.target.result.key is testData[6]
     1325PASS event.target.result.primaryKey is expectedIndex
    13261326PASS event.target.result.key is testData[7]
    13271327PASS event.target.result is null
    13281328
    13291329Next test: lower open bound is 4; upper open bound is 6; sorted descending.
    1330 PASS event.target.result.value is expectedIndex
     1330PASS event.target.result.primaryKey is expectedIndex
    13311331PASS event.target.result.key is testData[5]
    13321332PASS event.target.result is null
    13331333
    13341334Next test: lower open bound is 4; upper bound is 6; sorted descending.
    1335 PASS event.target.result.value is expectedIndex
    1336 PASS event.target.result.key is testData[7]
    1337 PASS event.target.result.value is expectedIndex
    1338 PASS event.target.result.key is testData[6]
    1339 PASS event.target.result.value is expectedIndex
     1335PASS event.target.result.primaryKey is expectedIndex
     1336PASS event.target.result.key is testData[7]
     1337PASS event.target.result.primaryKey is expectedIndex
     1338PASS event.target.result.key is testData[6]
     1339PASS event.target.result.primaryKey is expectedIndex
    13401340PASS event.target.result.key is testData[5]
    13411341PASS event.target.result is null
    13421342
    13431343Next test: lower bound is 4; upper open bound is 6; sorted descending.
    1344 PASS event.target.result.value is expectedIndex
    1345 PASS event.target.result.key is testData[5]
    1346 PASS event.target.result.value is expectedIndex
     1344PASS event.target.result.primaryKey is expectedIndex
     1345PASS event.target.result.key is testData[5]
     1346PASS event.target.result.primaryKey is expectedIndex
    13471347PASS event.target.result.key is testData[4]
    13481348PASS event.target.result is null
    13491349
    13501350Next test: lower bound is 4; upper bound is 6; sorted descending.
    1351 PASS event.target.result.value is expectedIndex
    1352 PASS event.target.result.key is testData[7]
    1353 PASS event.target.result.value is expectedIndex
    1354 PASS event.target.result.key is testData[6]
    1355 PASS event.target.result.value is expectedIndex
    1356 PASS event.target.result.key is testData[5]
    1357 PASS event.target.result.value is expectedIndex
     1351PASS event.target.result.primaryKey is expectedIndex
     1352PASS event.target.result.key is testData[7]
     1353PASS event.target.result.primaryKey is expectedIndex
     1354PASS event.target.result.key is testData[6]
     1355PASS event.target.result.primaryKey is expectedIndex
     1356PASS event.target.result.key is testData[5]
     1357PASS event.target.result.primaryKey is expectedIndex
    13581358PASS event.target.result.key is testData[4]
    13591359PASS event.target.result is null
    13601360
    13611361Next test: lower open bound is 4; upper open bound is 7; sorted ascending.
    1362 PASS event.target.result.value is expectedIndex
     1362PASS event.target.result.primaryKey is expectedIndex
    13631363PASS event.target.result.key is testData[5]
    13641364PASS event.target.result is null
    13651365
    13661366Next test: lower open bound is 4; upper bound is 7; sorted ascending.
    1367 PASS event.target.result.value is expectedIndex
    1368 PASS event.target.result.key is testData[5]
    1369 PASS event.target.result.value is expectedIndex
    1370 PASS event.target.result.key is testData[6]
    1371 PASS event.target.result.value is expectedIndex
     1367PASS event.target.result.primaryKey is expectedIndex
     1368PASS event.target.result.key is testData[5]
     1369PASS event.target.result.primaryKey is expectedIndex
     1370PASS event.target.result.key is testData[6]
     1371PASS event.target.result.primaryKey is expectedIndex
    13721372PASS event.target.result.key is testData[7]
    13731373PASS event.target.result is null
    13741374
    13751375Next test: lower bound is 4; upper open bound is 7; sorted ascending.
    1376 PASS event.target.result.value is expectedIndex
    1377 PASS event.target.result.key is testData[4]
    1378 PASS event.target.result.value is expectedIndex
     1376PASS event.target.result.primaryKey is expectedIndex
     1377PASS event.target.result.key is testData[4]
     1378PASS event.target.result.primaryKey is expectedIndex
    13791379PASS event.target.result.key is testData[5]
    13801380PASS event.target.result is null
    13811381
    13821382Next test: lower bound is 4; upper bound is 7; sorted ascending.
    1383 PASS event.target.result.value is expectedIndex
    1384 PASS event.target.result.key is testData[4]
    1385 PASS event.target.result.value is expectedIndex
    1386 PASS event.target.result.key is testData[5]
    1387 PASS event.target.result.value is expectedIndex
    1388 PASS event.target.result.key is testData[6]
    1389 PASS event.target.result.value is expectedIndex
     1383PASS event.target.result.primaryKey is expectedIndex
     1384PASS event.target.result.key is testData[4]
     1385PASS event.target.result.primaryKey is expectedIndex
     1386PASS event.target.result.key is testData[5]
     1387PASS event.target.result.primaryKey is expectedIndex
     1388PASS event.target.result.key is testData[6]
     1389PASS event.target.result.primaryKey is expectedIndex
    13901390PASS event.target.result.key is testData[7]
    13911391PASS event.target.result is null
    13921392
    13931393Next test: lower open bound is 4; upper open bound is 7; sorted descending.
    1394 PASS event.target.result.value is expectedIndex
     1394PASS event.target.result.primaryKey is expectedIndex
    13951395PASS event.target.result.key is testData[5]
    13961396PASS event.target.result is null
    13971397
    13981398Next test: lower open bound is 4; upper bound is 7; sorted descending.
    1399 PASS event.target.result.value is expectedIndex
    1400 PASS event.target.result.key is testData[7]
    1401 PASS event.target.result.value is expectedIndex
    1402 PASS event.target.result.key is testData[6]
    1403 PASS event.target.result.value is expectedIndex
     1399PASS event.target.result.primaryKey is expectedIndex
     1400PASS event.target.result.key is testData[7]
     1401PASS event.target.result.primaryKey is expectedIndex
     1402PASS event.target.result.key is testData[6]
     1403PASS event.target.result.primaryKey is expectedIndex
    14041404PASS event.target.result.key is testData[5]
    14051405PASS event.target.result is null
    14061406
    14071407Next test: lower bound is 4; upper open bound is 7; sorted descending.
    1408 PASS event.target.result.value is expectedIndex
    1409 PASS event.target.result.key is testData[5]
    1410 PASS event.target.result.value is expectedIndex
     1408PASS event.target.result.primaryKey is expectedIndex
     1409PASS event.target.result.key is testData[5]
     1410PASS event.target.result.primaryKey is expectedIndex
    14111411PASS event.target.result.key is testData[4]
    14121412PASS event.target.result is null
    14131413
    14141414Next test: lower bound is 4; upper bound is 7; sorted descending.
    1415 PASS event.target.result.value is expectedIndex
    1416 PASS event.target.result.key is testData[7]
    1417 PASS event.target.result.value is expectedIndex
    1418 PASS event.target.result.key is testData[6]
    1419 PASS event.target.result.value is expectedIndex
    1420 PASS event.target.result.key is testData[5]
    1421 PASS event.target.result.value is expectedIndex
     1415PASS event.target.result.primaryKey is expectedIndex
     1416PASS event.target.result.key is testData[7]
     1417PASS event.target.result.primaryKey is expectedIndex
     1418PASS event.target.result.key is testData[6]
     1419PASS event.target.result.primaryKey is expectedIndex
     1420PASS event.target.result.key is testData[5]
     1421PASS event.target.result.primaryKey is expectedIndex
    14221422PASS event.target.result.key is testData[4]
    14231423PASS event.target.result is null
    14241424
    14251425Next test: lower open bound is 5; sorted ascending.
    1426 PASS event.target.result.value is expectedIndex
    1427 PASS event.target.result.key is testData[6]
    1428 PASS event.target.result.value is expectedIndex
     1426PASS event.target.result.primaryKey is expectedIndex
     1427PASS event.target.result.key is testData[6]
     1428PASS event.target.result.primaryKey is expectedIndex
    14291429PASS event.target.result.key is testData[7]
    14301430PASS event.target.result is null
    14311431
    14321432Next test: lower bound is 5; sorted ascending.
    1433 PASS event.target.result.value is expectedIndex
    1434 PASS event.target.result.key is testData[5]
    1435 PASS event.target.result.value is expectedIndex
    1436 PASS event.target.result.key is testData[6]
    1437 PASS event.target.result.value is expectedIndex
     1433PASS event.target.result.primaryKey is expectedIndex
     1434PASS event.target.result.key is testData[5]
     1435PASS event.target.result.primaryKey is expectedIndex
     1436PASS event.target.result.key is testData[6]
     1437PASS event.target.result.primaryKey is expectedIndex
    14381438PASS event.target.result.key is testData[7]
    14391439PASS event.target.result is null
    14401440
    14411441Next test: upper open bound is 5; sorted ascending.
    1442 PASS event.target.result.value is expectedIndex
    1443 PASS event.target.result.key is testData[0]
    1444 PASS event.target.result.value is expectedIndex
    1445 PASS event.target.result.key is testData[1]
    1446 PASS event.target.result.value is expectedIndex
    1447 PASS event.target.result.key is testData[2]
    1448 PASS event.target.result.value is expectedIndex
    1449 PASS event.target.result.key is testData[3]
    1450 PASS event.target.result.value is expectedIndex
     1442PASS event.target.result.primaryKey is expectedIndex
     1443PASS event.target.result.key is testData[0]
     1444PASS event.target.result.primaryKey is expectedIndex
     1445PASS event.target.result.key is testData[1]
     1446PASS event.target.result.primaryKey is expectedIndex
     1447PASS event.target.result.key is testData[2]
     1448PASS event.target.result.primaryKey is expectedIndex
     1449PASS event.target.result.key is testData[3]
     1450PASS event.target.result.primaryKey is expectedIndex
    14511451PASS event.target.result.key is testData[4]
    14521452PASS event.target.result is null
    14531453
    14541454Next test: upper bound is 5; sorted ascending.
    1455 PASS event.target.result.value is expectedIndex
    1456 PASS event.target.result.key is testData[0]
    1457 PASS event.target.result.value is expectedIndex
    1458 PASS event.target.result.key is testData[1]
    1459 PASS event.target.result.value is expectedIndex
    1460 PASS event.target.result.key is testData[2]
    1461 PASS event.target.result.value is expectedIndex
    1462 PASS event.target.result.key is testData[3]
    1463 PASS event.target.result.value is expectedIndex
    1464 PASS event.target.result.key is testData[4]
    1465 PASS event.target.result.value is expectedIndex
     1455PASS event.target.result.primaryKey is expectedIndex
     1456PASS event.target.result.key is testData[0]
     1457PASS event.target.result.primaryKey is expectedIndex
     1458PASS event.target.result.key is testData[1]
     1459PASS event.target.result.primaryKey is expectedIndex
     1460PASS event.target.result.key is testData[2]
     1461PASS event.target.result.primaryKey is expectedIndex
     1462PASS event.target.result.key is testData[3]
     1463PASS event.target.result.primaryKey is expectedIndex
     1464PASS event.target.result.key is testData[4]
     1465PASS event.target.result.primaryKey is expectedIndex
    14661466PASS event.target.result.key is testData[5]
    14671467PASS event.target.result is null
    14681468
    14691469Next test: lower open bound is 5; sorted descending.
    1470 PASS event.target.result.value is expectedIndex
    1471 PASS event.target.result.key is testData[7]
    1472 PASS event.target.result.value is expectedIndex
     1470PASS event.target.result.primaryKey is expectedIndex
     1471PASS event.target.result.key is testData[7]
     1472PASS event.target.result.primaryKey is expectedIndex
    14731473PASS event.target.result.key is testData[6]
    14741474PASS event.target.result is null
    14751475
    14761476Next test: lower bound is 5; sorted descending.
    1477 PASS event.target.result.value is expectedIndex
    1478 PASS event.target.result.key is testData[7]
    1479 PASS event.target.result.value is expectedIndex
    1480 PASS event.target.result.key is testData[6]
    1481 PASS event.target.result.value is expectedIndex
     1477PASS event.target.result.primaryKey is expectedIndex
     1478PASS event.target.result.key is testData[7]
     1479PASS event.target.result.primaryKey is expectedIndex
     1480PASS event.target.result.key is testData[6]
     1481PASS event.target.result.primaryKey is expectedIndex
    14821482PASS event.target.result.key is testData[5]
    14831483PASS event.target.result is null
    14841484
    14851485Next test: upper open bound is 5; sorted descending.
    1486 PASS event.target.result.value is expectedIndex
    1487 PASS event.target.result.key is testData[4]
    1488 PASS event.target.result.value is expectedIndex
    1489 PASS event.target.result.key is testData[3]
    1490 PASS event.target.result.value is expectedIndex
    1491 PASS event.target.result.key is testData[2]
    1492 PASS event.target.result.value is expectedIndex
    1493 PASS event.target.result.key is testData[1]
    1494 PASS event.target.result.value is expectedIndex
     1486PASS event.target.result.primaryKey is expectedIndex
     1487PASS event.target.result.key is testData[4]
     1488PASS event.target.result.primaryKey is expectedIndex
     1489PASS event.target.result.key is testData[3]
     1490PASS event.target.result.primaryKey is expectedIndex
     1491PASS event.target.result.key is testData[2]
     1492PASS event.target.result.primaryKey is expectedIndex
     1493PASS event.target.result.key is testData[1]
     1494PASS event.target.result.primaryKey is expectedIndex
    14951495PASS event.target.result.key is testData[0]
    14961496PASS event.target.result is null
    14971497
    14981498Next test: upper bound is 5; sorted descending.
    1499 PASS event.target.result.value is expectedIndex
    1500 PASS event.target.result.key is testData[5]
    1501 PASS event.target.result.value is expectedIndex
    1502 PASS event.target.result.key is testData[4]
    1503 PASS event.target.result.value is expectedIndex
    1504 PASS event.target.result.key is testData[3]
    1505 PASS event.target.result.value is expectedIndex
    1506 PASS event.target.result.key is testData[2]
    1507 PASS event.target.result.value is expectedIndex
    1508 PASS event.target.result.key is testData[1]
    1509 PASS event.target.result.value is expectedIndex
     1499PASS event.target.result.primaryKey is expectedIndex
     1500PASS event.target.result.key is testData[5]
     1501PASS event.target.result.primaryKey is expectedIndex
     1502PASS event.target.result.key is testData[4]
     1503PASS event.target.result.primaryKey is expectedIndex
     1504PASS event.target.result.key is testData[3]
     1505PASS event.target.result.primaryKey is expectedIndex
     1506PASS event.target.result.key is testData[2]
     1507PASS event.target.result.primaryKey is expectedIndex
     1508PASS event.target.result.key is testData[1]
     1509PASS event.target.result.primaryKey is expectedIndex
    15101510PASS event.target.result.key is testData[0]
    15111511PASS event.target.result is null
     
    15151515
    15161516Next test: lower open bound is 5; upper bound is 6; sorted ascending.
    1517 PASS event.target.result.value is expectedIndex
    1518 PASS event.target.result.key is testData[6]
    1519 PASS event.target.result.value is expectedIndex
     1517PASS event.target.result.primaryKey is expectedIndex
     1518PASS event.target.result.key is testData[6]
     1519PASS event.target.result.primaryKey is expectedIndex
    15201520PASS event.target.result.key is testData[7]
    15211521PASS event.target.result is null
    15221522
    15231523Next test: lower bound is 5; upper open bound is 6; sorted ascending.
    1524 PASS event.target.result.value is expectedIndex
     1524PASS event.target.result.primaryKey is expectedIndex
    15251525PASS event.target.result.key is testData[5]
    15261526PASS event.target.result is null
    15271527
    15281528Next test: lower bound is 5; upper bound is 6; sorted ascending.
    1529 PASS event.target.result.value is expectedIndex
    1530 PASS event.target.result.key is testData[5]
    1531 PASS event.target.result.value is expectedIndex
    1532 PASS event.target.result.key is testData[6]
    1533 PASS event.target.result.value is expectedIndex
     1529PASS event.target.result.primaryKey is expectedIndex
     1530PASS event.target.result.key is testData[5]
     1531PASS event.target.result.primaryKey is expectedIndex
     1532PASS event.target.result.key is testData[6]
     1533PASS event.target.result.primaryKey is expectedIndex
    15341534PASS event.target.result.key is testData[7]
    15351535PASS event.target.result is null
     
    15391539
    15401540Next test: lower open bound is 5; upper bound is 6; sorted descending.
    1541 PASS event.target.result.value is expectedIndex
    1542 PASS event.target.result.key is testData[7]
    1543 PASS event.target.result.value is expectedIndex
     1541PASS event.target.result.primaryKey is expectedIndex
     1542PASS event.target.result.key is testData[7]
     1543PASS event.target.result.primaryKey is expectedIndex
    15441544PASS event.target.result.key is testData[6]
    15451545PASS event.target.result is null
    15461546
    15471547Next test: lower bound is 5; upper open bound is 6; sorted descending.
    1548 PASS event.target.result.value is expectedIndex
     1548PASS event.target.result.primaryKey is expectedIndex
    15491549PASS event.target.result.key is testData[5]
    15501550PASS event.target.result is null
    15511551
    15521552Next test: lower bound is 5; upper bound is 6; sorted descending.
    1553 PASS event.target.result.value is expectedIndex
    1554 PASS event.target.result.key is testData[7]
    1555 PASS event.target.result.value is expectedIndex
    1556 PASS event.target.result.key is testData[6]
    1557 PASS event.target.result.value is expectedIndex
     1553PASS event.target.result.primaryKey is expectedIndex
     1554PASS event.target.result.key is testData[7]
     1555PASS event.target.result.primaryKey is expectedIndex
     1556PASS event.target.result.key is testData[6]
     1557PASS event.target.result.primaryKey is expectedIndex
    15581558PASS event.target.result.key is testData[5]
    15591559PASS event.target.result is null
     
    15631563
    15641564Next test: lower open bound is 5; upper bound is 7; sorted ascending.
    1565 PASS event.target.result.value is expectedIndex
    1566 PASS event.target.result.key is testData[6]
    1567 PASS event.target.result.value is expectedIndex
     1565PASS event.target.result.primaryKey is expectedIndex
     1566PASS event.target.result.key is testData[6]
     1567PASS event.target.result.primaryKey is expectedIndex
    15681568PASS event.target.result.key is testData[7]
    15691569PASS event.target.result is null
    15701570
    15711571Next test: lower bound is 5; upper open bound is 7; sorted ascending.
    1572 PASS event.target.result.value is expectedIndex
     1572PASS event.target.result.primaryKey is expectedIndex
    15731573PASS event.target.result.key is testData[5]
    15741574PASS event.target.result is null
    15751575
    15761576Next test: lower bound is 5; upper bound is 7; sorted ascending.
    1577 PASS event.target.result.value is expectedIndex
    1578 PASS event.target.result.key is testData[5]
    1579 PASS event.target.result.value is expectedIndex
    1580 PASS event.target.result.key is testData[6]
    1581 PASS event.target.result.value is expectedIndex
     1577PASS event.target.result.primaryKey is expectedIndex
     1578PASS event.target.result.key is testData[5]
     1579PASS event.target.result.primaryKey is expectedIndex
     1580PASS event.target.result.key is testData[6]
     1581PASS event.target.result.primaryKey is expectedIndex
    15821582PASS event.target.result.key is testData[7]
    15831583PASS event.target.result is null
     
    15871587
    15881588Next test: lower open bound is 5; upper bound is 7; sorted descending.
    1589 PASS event.target.result.value is expectedIndex
    1590 PASS event.target.result.key is testData[7]
    1591 PASS event.target.result.value is expectedIndex
     1589PASS event.target.result.primaryKey is expectedIndex
     1590PASS event.target.result.key is testData[7]
     1591PASS event.target.result.primaryKey is expectedIndex
    15921592PASS event.target.result.key is testData[6]
    15931593PASS event.target.result is null
    15941594
    15951595Next test: lower bound is 5; upper open bound is 7; sorted descending.
    1596 PASS event.target.result.value is expectedIndex
     1596PASS event.target.result.primaryKey is expectedIndex
    15971597PASS event.target.result.key is testData[5]
    15981598PASS event.target.result is null
    15991599
    16001600Next test: lower bound is 5; upper bound is 7; sorted descending.
    1601 PASS event.target.result.value is expectedIndex
    1602 PASS event.target.result.key is testData[7]
    1603 PASS event.target.result.value is expectedIndex
    1604 PASS event.target.result.key is testData[6]
    1605 PASS event.target.result.value is expectedIndex
     1601PASS event.target.result.primaryKey is expectedIndex
     1602PASS event.target.result.key is testData[7]
     1603PASS event.target.result.primaryKey is expectedIndex
     1604PASS event.target.result.key is testData[6]
     1605PASS event.target.result.primaryKey is expectedIndex
    16061606PASS event.target.result.key is testData[5]
    16071607PASS event.target.result is null
     
    16111611
    16121612Next test: lower bound is 6; sorted ascending.
    1613 PASS event.target.result.value is expectedIndex
    1614 PASS event.target.result.key is testData[6]
    1615 PASS event.target.result.value is expectedIndex
     1613PASS event.target.result.primaryKey is expectedIndex
     1614PASS event.target.result.key is testData[6]
     1615PASS event.target.result.primaryKey is expectedIndex
    16161616PASS event.target.result.key is testData[7]
    16171617PASS event.target.result is null
    16181618
    16191619Next test: upper open bound is 6; sorted ascending.
    1620 PASS event.target.result.value is expectedIndex
    1621 PASS event.target.result.key is testData[0]
    1622 PASS event.target.result.value is expectedIndex
    1623 PASS event.target.result.key is testData[1]
    1624 PASS event.target.result.value is expectedIndex
    1625 PASS event.target.result.key is testData[2]
    1626 PASS event.target.result.value is expectedIndex
    1627 PASS event.target.result.key is testData[3]
    1628 PASS event.target.result.value is expectedIndex
    1629 PASS event.target.result.key is testData[4]
    1630 PASS event.target.result.value is expectedIndex
     1620PASS event.target.result.primaryKey is expectedIndex
     1621PASS event.target.result.key is testData[0]
     1622PASS event.target.result.primaryKey is expectedIndex
     1623PASS event.target.result.key is testData[1]
     1624PASS event.target.result.primaryKey is expectedIndex
     1625PASS event.target.result.key is testData[2]
     1626PASS event.target.result.primaryKey is expectedIndex
     1627PASS event.target.result.key is testData[3]
     1628PASS event.target.result.primaryKey is expectedIndex
     1629PASS event.target.result.key is testData[4]
     1630PASS event.target.result.primaryKey is expectedIndex
    16311631PASS event.target.result.key is testData[5]
    16321632PASS event.target.result is null
    16331633
    16341634Next test: upper bound is 6; sorted ascending.
    1635 PASS event.target.result.value is expectedIndex
    1636 PASS event.target.result.key is testData[0]
    1637 PASS event.target.result.value is expectedIndex
    1638 PASS event.target.result.key is testData[1]
    1639 PASS event.target.result.value is expectedIndex
    1640 PASS event.target.result.key is testData[2]
    1641 PASS event.target.result.value is expectedIndex
    1642 PASS event.target.result.key is testData[3]
    1643 PASS event.target.result.value is expectedIndex
    1644 PASS event.target.result.key is testData[4]
    1645 PASS event.target.result.value is expectedIndex
    1646 PASS event.target.result.key is testData[5]
    1647 PASS event.target.result.value is expectedIndex
    1648 PASS event.target.result.key is testData[6]
    1649 PASS event.target.result.value is expectedIndex
     1635PASS event.target.result.primaryKey is expectedIndex
     1636PASS event.target.result.key is testData[0]
     1637PASS event.target.result.primaryKey is expectedIndex
     1638PASS event.target.result.key is testData[1]
     1639PASS event.target.result.primaryKey is expectedIndex
     1640PASS event.target.result.key is testData[2]
     1641PASS event.target.result.primaryKey is expectedIndex
     1642PASS event.target.result.key is testData[3]
     1643PASS event.target.result.primaryKey is expectedIndex
     1644PASS event.target.result.key is testData[4]
     1645PASS event.target.result.primaryKey is expectedIndex
     1646PASS event.target.result.key is testData[5]
     1647PASS event.target.result.primaryKey is expectedIndex
     1648PASS event.target.result.key is testData[6]
     1649PASS event.target.result.primaryKey is expectedIndex
    16501650PASS event.target.result.key is testData[7]
    16511651PASS event.target.result is null
     
    16551655
    16561656Next test: lower bound is 6; sorted descending.
    1657 PASS event.target.result.value is expectedIndex
    1658 PASS event.target.result.key is testData[7]
    1659 PASS event.target.result.value is expectedIndex
     1657PASS event.target.result.primaryKey is expectedIndex
     1658PASS event.target.result.key is testData[7]
     1659PASS event.target.result.primaryKey is expectedIndex
    16601660PASS event.target.result.key is testData[6]
    16611661PASS event.target.result is null
    16621662
    16631663Next test: upper open bound is 6; sorted descending.
    1664 PASS event.target.result.value is expectedIndex
    1665 PASS event.target.result.key is testData[5]
    1666 PASS event.target.result.value is expectedIndex
    1667 PASS event.target.result.key is testData[4]
    1668 PASS event.target.result.value is expectedIndex
    1669 PASS event.target.result.key is testData[3]
    1670 PASS event.target.result.value is expectedIndex
    1671 PASS event.target.result.key is testData[2]
    1672 PASS event.target.result.value is expectedIndex
    1673 PASS event.target.result.key is testData[1]
    1674 PASS event.target.result.value is expectedIndex
     1664PASS event.target.result.primaryKey is expectedIndex
     1665PASS event.target.result.key is testData[5]
     1666PASS event.target.result.primaryKey is expectedIndex
     1667PASS event.target.result.key is testData[4]
     1668PASS event.target.result.primaryKey is expectedIndex
     1669PASS event.target.result.key is testData[3]
     1670PASS event.target.result.primaryKey is expectedIndex
     1671PASS event.target.result.key is testData[2]
     1672PASS event.target.result.primaryKey is expectedIndex
     1673PASS event.target.result.key is testData[1]
     1674PASS event.target.result.primaryKey is expectedIndex
    16751675PASS event.target.result.key is testData[0]
    16761676PASS event.target.result is null
    16771677
    16781678Next test: upper bound is 6; sorted descending.
    1679 PASS event.target.result.value is expectedIndex
    1680 PASS event.target.result.key is testData[7]
    1681 PASS event.target.result.value is expectedIndex
    1682 PASS event.target.result.key is testData[6]
    1683 PASS event.target.result.value is expectedIndex
    1684 PASS event.target.result.key is testData[5]
    1685 PASS event.target.result.value is expectedIndex
    1686 PASS event.target.result.key is testData[4]
    1687 PASS event.target.result.value is expectedIndex
    1688 PASS event.target.result.key is testData[3]
    1689 PASS event.target.result.value is expectedIndex
    1690 PASS event.target.result.key is testData[2]
    1691 PASS event.target.result.value is expectedIndex
    1692 PASS event.target.result.key is testData[1]
    1693 PASS event.target.result.value is expectedIndex
     1679PASS event.target.result.primaryKey is expectedIndex
     1680PASS event.target.result.key is testData[7]
     1681PASS event.target.result.primaryKey is expectedIndex
     1682PASS event.target.result.key is testData[6]
     1683PASS event.target.result.primaryKey is expectedIndex
     1684PASS event.target.result.key is testData[5]
     1685PASS event.target.result.primaryKey is expectedIndex
     1686PASS event.target.result.key is testData[4]
     1687PASS event.target.result.primaryKey is expectedIndex
     1688PASS event.target.result.key is testData[3]
     1689PASS event.target.result.primaryKey is expectedIndex
     1690PASS event.target.result.key is testData[2]
     1691PASS event.target.result.primaryKey is expectedIndex
     1692PASS event.target.result.key is testData[1]
     1693PASS event.target.result.primaryKey is expectedIndex
    16941694PASS event.target.result.key is testData[0]
    16951695PASS event.target.result is null
     
    17051705
    17061706Next test: lower bound is 6; upper bound is 6; sorted ascending.
    1707 PASS event.target.result.value is expectedIndex
    1708 PASS event.target.result.key is testData[6]
    1709 PASS event.target.result.value is expectedIndex
     1707PASS event.target.result.primaryKey is expectedIndex
     1708PASS event.target.result.key is testData[6]
     1709PASS event.target.result.primaryKey is expectedIndex
    17101710PASS event.target.result.key is testData[7]
    17111711PASS event.target.result is null
     
    17211721
    17221722Next test: lower bound is 6; upper bound is 6; sorted descending.
    1723 PASS event.target.result.value is expectedIndex
    1724 PASS event.target.result.key is testData[7]
    1725 PASS event.target.result.value is expectedIndex
     1723PASS event.target.result.primaryKey is expectedIndex
     1724PASS event.target.result.key is testData[7]
     1725PASS event.target.result.primaryKey is expectedIndex
    17261726PASS event.target.result.key is testData[6]
    17271727PASS event.target.result is null
     
    17371737
    17381738Next test: lower bound is 6; upper bound is 7; sorted ascending.
    1739 PASS event.target.result.value is expectedIndex
    1740 PASS event.target.result.key is testData[6]
    1741 PASS event.target.result.value is expectedIndex
     1739PASS event.target.result.primaryKey is expectedIndex
     1740PASS event.target.result.key is testData[6]
     1741PASS event.target.result.primaryKey is expectedIndex
    17421742PASS event.target.result.key is testData[7]
    17431743PASS event.target.result is null
     
    17531753
    17541754Next test: lower bound is 6; upper bound is 7; sorted descending.
    1755 PASS event.target.result.value is expectedIndex
    1756 PASS event.target.result.key is testData[7]
    1757 PASS event.target.result.value is expectedIndex
     1755PASS event.target.result.primaryKey is expectedIndex
     1756PASS event.target.result.key is testData[7]
     1757PASS event.target.result.primaryKey is expectedIndex
    17581758PASS event.target.result.key is testData[6]
    17591759PASS event.target.result is null
     
    17631763
    17641764Next test: lower bound is 7; sorted ascending.
    1765 PASS event.target.result.value is expectedIndex
    1766 PASS event.target.result.key is testData[6]
    1767 PASS event.target.result.value is expectedIndex
     1765PASS event.target.result.primaryKey is expectedIndex
     1766PASS event.target.result.key is testData[6]
     1767PASS event.target.result.primaryKey is expectedIndex
    17681768PASS event.target.result.key is testData[7]
    17691769PASS event.target.result is null
    17701770
    17711771Next test: upper open bound is 7; sorted ascending.
    1772 PASS event.target.result.value is expectedIndex
    1773 PASS event.target.result.key is testData[0]
    1774 PASS event.target.result.value is expectedIndex
    1775 PASS event.target.result.key is testData[1]
    1776 PASS event.target.result.value is expectedIndex
    1777 PASS event.target.result.key is testData[2]
    1778 PASS event.target.result.value is expectedIndex
    1779 PASS event.target.result.key is testData[3]
    1780 PASS event.target.result.value is expectedIndex
    1781 PASS event.target.result.key is testData[4]
    1782 PASS event.target.result.value is expectedIndex
     1772PASS event.target.result.primaryKey is expectedIndex
     1773PASS event.target.result.key is testData[0]
     1774PASS event.target.result.primaryKey is expectedIndex
     1775PASS event.target.result.key is testData[1]
     1776PASS event.target.result.primaryKey is expectedIndex
     1777PASS event.target.result.key is testData[2]
     1778PASS event.target.result.primaryKey is expectedIndex
     1779PASS event.target.result.key is testData[3]
     1780PASS event.target.result.primaryKey is expectedIndex
     1781PASS event.target.result.key is testData[4]
     1782PASS event.target.result.primaryKey is expectedIndex
    17831783PASS event.target.result.key is testData[5]
    17841784PASS event.target.result is null
    17851785
    17861786Next test: upper bound is 7; sorted ascending.
    1787 PASS event.target.result.value is expectedIndex
    1788 PASS event.target.result.key is testData[0]
    1789 PASS event.target.result.value is expectedIndex
    1790 PASS event.target.result.key is testData[1]
    1791 PASS event.target.result.value is expectedIndex
    1792 PASS event.target.result.key is testData[2]
    1793 PASS event.target.result.value is expectedIndex
    1794 PASS event.target.result.key is testData[3]
    1795 PASS event.target.result.value is expectedIndex
    1796 PASS event.target.result.key is testData[4]
    1797 PASS event.target.result.value is expectedIndex
    1798 PASS event.target.result.key is testData[5]
    1799 PASS event.target.result.value is expectedIndex
    1800 PASS event.target.result.key is testData[6]
    1801 PASS event.target.result.value is expectedIndex
     1787PASS event.target.result.primaryKey is expectedIndex
     1788PASS event.target.result.key is testData[0]
     1789PASS event.target.result.primaryKey is expectedIndex
     1790PASS event.target.result.key is testData[1]
     1791PASS event.target.result.primaryKey is expectedIndex
     1792PASS event.target.result.key is testData[2]
     1793PASS event.target.result.primaryKey is expectedIndex
     1794PASS event.target.result.key is testData[3]
     1795PASS event.target.result.primaryKey is expectedIndex
     1796PASS event.target.result.key is testData[4]
     1797PASS event.target.result.primaryKey is expectedIndex
     1798PASS event.target.result.key is testData[5]
     1799PASS event.target.result.primaryKey is expectedIndex
     1800PASS event.target.result.key is testData[6]
     1801PASS event.target.result.primaryKey is expectedIndex
    18021802PASS event.target.result.key is testData[7]
    18031803PASS event.target.result is null
     
    18071807
    18081808Next test: lower bound is 7; sorted descending.
    1809 PASS event.target.result.value is expectedIndex
    1810 PASS event.target.result.key is testData[7]
    1811 PASS event.target.result.value is expectedIndex
     1809PASS event.target.result.primaryKey is expectedIndex
     1810PASS event.target.result.key is testData[7]
     1811PASS event.target.result.primaryKey is expectedIndex
    18121812PASS event.target.result.key is testData[6]
    18131813PASS event.target.result is null
    18141814
    18151815Next test: upper open bound is 7; sorted descending.
    1816 PASS event.target.result.value is expectedIndex
    1817 PASS event.target.result.key is testData[5]
    1818 PASS event.target.result.value is expectedIndex
    1819 PASS event.target.result.key is testData[4]
    1820 PASS event.target.result.value is expectedIndex
    1821 PASS event.target.result.key is testData[3]
    1822 PASS event.target.result.value is expectedIndex
    1823 PASS event.target.result.key is testData[2]
    1824 PASS event.target.result.value is expectedIndex
    1825 PASS event.target.result.key is testData[1]
    1826 PASS event.target.result.value is expectedIndex
     1816PASS event.target.result.primaryKey is expectedIndex
     1817PASS event.target.result.key is testData[5]
     1818PASS event.target.result.primaryKey is expectedIndex
     1819PASS event.target.result.key is testData[4]
     1820PASS event.target.result.primaryKey is expectedIndex
     1821PASS event.target.result.key is testData[3]
     1822PASS event.target.result.primaryKey is expectedIndex
     1823PASS event.target.result.key is testData[2]
     1824PASS event.target.result.primaryKey is expectedIndex
     1825PASS event.target.result.key is testData[1]
     1826PASS event.target.result.primaryKey is expectedIndex
    18271827PASS event.target.result.key is testData[0]
    18281828PASS event.target.result is null
    18291829
    18301830Next test: upper bound is 7; sorted descending.
    1831 PASS event.target.result.value is expectedIndex
    1832 PASS event.target.result.key is testData[7]
    1833 PASS event.target.result.value is expectedIndex
    1834 PASS event.target.result.key is testData[6]
    1835 PASS event.target.result.value is expectedIndex
    1836 PASS event.target.result.key is testData[5]
    1837 PASS event.target.result.value is expectedIndex
    1838 PASS event.target.result.key is testData[4]
    1839 PASS event.target.result.value is expectedIndex
    1840 PASS event.target.result.key is testData[3]
    1841 PASS event.target.result.value is expectedIndex
    1842 PASS event.target.result.key is testData[2]
    1843 PASS event.target.result.value is expectedIndex
    1844 PASS event.target.result.key is testData[1]
    1845 PASS event.target.result.value is expectedIndex
     1831PASS event.target.result.primaryKey is expectedIndex
     1832PASS event.target.result.key is testData[7]
     1833PASS event.target.result.primaryKey is expectedIndex
     1834PASS event.target.result.key is testData[6]
     1835PASS event.target.result.primaryKey is expectedIndex
     1836PASS event.target.result.key is testData[5]
     1837PASS event.target.result.primaryKey is expectedIndex
     1838PASS event.target.result.key is testData[4]
     1839PASS event.target.result.primaryKey is expectedIndex
     1840PASS event.target.result.key is testData[3]
     1841PASS event.target.result.primaryKey is expectedIndex
     1842PASS event.target.result.key is testData[2]
     1843PASS event.target.result.primaryKey is expectedIndex
     1844PASS event.target.result.key is testData[1]
     1845PASS event.target.result.primaryKey is expectedIndex
    18461846PASS event.target.result.key is testData[0]
    18471847PASS event.target.result is null
     
    18571857
    18581858Next test: lower bound is 7; upper bound is 6; sorted ascending.
    1859 PASS event.target.result.value is expectedIndex
    1860 PASS event.target.result.key is testData[6]
    1861 PASS event.target.result.value is expectedIndex
     1859PASS event.target.result.primaryKey is expectedIndex
     1860PASS event.target.result.key is testData[6]
     1861PASS event.target.result.primaryKey is expectedIndex
    18621862PASS event.target.result.key is testData[7]
    18631863PASS event.target.result is null
     
    18731873
    18741874Next test: lower bound is 7; upper bound is 6; sorted descending.
    1875 PASS event.target.result.value is expectedIndex
    1876 PASS event.target.result.key is testData[7]
    1877 PASS event.target.result.value is expectedIndex
     1875PASS event.target.result.primaryKey is expectedIndex
     1876PASS event.target.result.key is testData[7]
     1877PASS event.target.result.primaryKey is expectedIndex
    18781878PASS event.target.result.key is testData[6]
    18791879PASS event.target.result is null
     
    18891889
    18901890Next test: lower bound is 7; upper bound is 7; sorted ascending.
    1891 PASS event.target.result.value is expectedIndex
    1892 PASS event.target.result.key is testData[6]
    1893 PASS event.target.result.value is expectedIndex
     1891PASS event.target.result.primaryKey is expectedIndex
     1892PASS event.target.result.key is testData[6]
     1893PASS event.target.result.primaryKey is expectedIndex
    18941894PASS event.target.result.key is testData[7]
    18951895PASS event.target.result is null
     
    19051905
    19061906Next test: lower bound is 7; upper bound is 7; sorted descending.
    1907 PASS event.target.result.value is expectedIndex
    1908 PASS event.target.result.key is testData[7]
    1909 PASS event.target.result.value is expectedIndex
     1907PASS event.target.result.primaryKey is expectedIndex
     1908PASS event.target.result.key is testData[7]
     1909PASS event.target.result.primaryKey is expectedIndex
    19101910PASS event.target.result.key is testData[6]
    19111911PASS event.target.result is null
    19121912
    19131913Next test: null key path sorted ascending.
    1914 PASS event.target.result.value is expectedIndex
    1915 PASS event.target.result.key is testData[0]
    1916 PASS event.target.result.value is expectedIndex
    1917 PASS event.target.result.key is testData[1]
    1918 PASS event.target.result.value is expectedIndex
    1919 PASS event.target.result.key is testData[2]
    1920 PASS event.target.result.value is expectedIndex
    1921 PASS event.target.result.key is testData[3]
    1922 PASS event.target.result.value is expectedIndex
    1923 PASS event.target.result.key is testData[4]
    1924 PASS event.target.result.value is expectedIndex
    1925 PASS event.target.result.key is testData[5]
    1926 PASS event.target.result.value is expectedIndex
    1927 PASS event.target.result.key is testData[6]
    1928 PASS event.target.result.value is expectedIndex
     1914PASS event.target.result.primaryKey is expectedIndex
     1915PASS event.target.result.key is testData[0]
     1916PASS event.target.result.primaryKey is expectedIndex
     1917PASS event.target.result.key is testData[1]
     1918PASS event.target.result.primaryKey is expectedIndex
     1919PASS event.target.result.key is testData[2]
     1920PASS event.target.result.primaryKey is expectedIndex
     1921PASS event.target.result.key is testData[3]
     1922PASS event.target.result.primaryKey is expectedIndex
     1923PASS event.target.result.key is testData[4]
     1924PASS event.target.result.primaryKey is expectedIndex
     1925PASS event.target.result.key is testData[5]
     1926PASS event.target.result.primaryKey is expectedIndex
     1927PASS event.target.result.key is testData[6]
     1928PASS event.target.result.primaryKey is expectedIndex
    19291929PASS event.target.result.key is testData[7]
    19301930PASS event.target.result is null
    19311931
    19321932Next test: null key path sorted descending.
    1933 PASS event.target.result.value is expectedIndex
    1934 PASS event.target.result.key is testData[7]
    1935 PASS event.target.result.value is expectedIndex
    1936 PASS event.target.result.key is testData[6]
    1937 PASS event.target.result.value is expectedIndex
    1938 PASS event.target.result.key is testData[5]
    1939 PASS event.target.result.value is expectedIndex
    1940 PASS event.target.result.key is testData[4]
    1941 PASS event.target.result.value is expectedIndex
    1942 PASS event.target.result.key is testData[3]
    1943 PASS event.target.result.value is expectedIndex
    1944 PASS event.target.result.key is testData[2]
    1945 PASS event.target.result.value is expectedIndex
    1946 PASS event.target.result.key is testData[1]
    1947 PASS event.target.result.value is expectedIndex
     1933PASS event.target.result.primaryKey is expectedIndex
     1934PASS event.target.result.key is testData[7]
     1935PASS event.target.result.primaryKey is expectedIndex
     1936PASS event.target.result.key is testData[6]
     1937PASS event.target.result.primaryKey is expectedIndex
     1938PASS event.target.result.key is testData[5]
     1939PASS event.target.result.primaryKey is expectedIndex
     1940PASS event.target.result.key is testData[4]
     1941PASS event.target.result.primaryKey is expectedIndex
     1942PASS event.target.result.key is testData[3]
     1943PASS event.target.result.primaryKey is expectedIndex
     1944PASS event.target.result.key is testData[2]
     1945PASS event.target.result.primaryKey is expectedIndex
     1946PASS event.target.result.key is testData[1]
     1947PASS event.target.result.primaryKey is expectedIndex
    19481948PASS event.target.result.key is testData[0]
    19491949PASS event.target.result is null
  • trunk/LayoutTests/storage/indexeddb/index-cursor.html

    r80076 r80171  
    209209    }
    210210 
    211     shouldBe("event.target.result.value", "expectedIndex");
     211    shouldBe("event.target.result.primaryKey", "expectedIndex");
    212212    shouldBe("event.target.result.key", "testData[" + expectedIndex + "]");
    213213    window.expectedIndex = ascending ? expectedIndex + 1 : expectedIndex - 1;
  • trunk/Source/WebCore/ChangeLog

    r80169 r80171  
     12011-02-28  Jeremy Orlow  <jorlow@chromium.org>
     2
     3        Reviewed by James Robinson.
     4
     5        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
     6        https://bugs.webkit.org/show_bug.cgi?id=55443
     7
     8        Implement http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948
     9
     10        The idea is to have an IDBCursor and an IDBCursorWithValue interface which
     11        inherits from the former.  index.openKeyCursor will return the former and
     12        index/objectStore.openCursor will return the latter.  We'll add a primaryKey
     13        attribute to IDBCursor.  It will always be the key of the associated object
     14        store entry.  For index.openCursor cursors, the key attribute will be the key
     15        of the index.  For objectStore.openCursors, it'll be the same as the
     16        primaryKey.  The value will be the value of the objectStore entry.
     17
     18        * WebCore.gypi:
     19        * bindings/scripts/CodeGeneratorV8.pm:
     20        * bindings/v8/SerializedScriptValue.cpp:
     21        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
     22        * bindings/v8/SerializedScriptValue.h:
     23        * bindings/v8/custom/V8IDBAnyCustom.cpp:
     24        (WebCore::toV8):
     25        * storage/IDBAny.cpp:
     26        (WebCore::IDBAny::idbCursorWithValue):
     27        (WebCore::IDBAny::set):
     28        * storage/IDBAny.h:
     29        * storage/IDBCursor.cpp:
     30        (WebCore::IDBCursor::create):
     31        (WebCore::IDBCursor::primaryKey):
     32        (WebCore::IDBCursor::value):
     33        * storage/IDBCursor.h:
     34        * storage/IDBCursor.idl:
     35        * storage/IDBCursorBackendImpl.cpp:
     36        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
     37        (WebCore::IDBCursorBackendImpl::primaryKey):
     38        (WebCore::IDBCursorBackendImpl::value):
     39        (WebCore::IDBCursorBackendImpl::update):
     40        (WebCore::IDBCursorBackendImpl::currentRowExists):
     41        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
     42        (WebCore::IDBCursorBackendImpl::deleteFunction):
     43        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
     44        * storage/IDBCursorBackendImpl.h:
     45        (WebCore::IDBCursorBackendImpl::create):
     46        * storage/IDBCursorBackendInterface.h:
     47        * storage/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursor.idl.
     48        (WebCore::IDBCursorWithValue::create):
     49        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
     50        (WebCore::IDBCursorWithValue::~IDBCursorWithValue):
     51        * storage/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
     52        * storage/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
     53        * storage/IDBIndex.cpp:
     54        (WebCore::IDBIndex::openCursor):
     55        (WebCore::IDBIndex::openKeyCursor):
     56        * storage/IDBIndexBackendImpl.cpp:
     57        (WebCore::IDBIndexBackendImpl::openCursorInternal):
     58        (WebCore::IDBIndexBackendImpl::openCursor):
     59        (WebCore::IDBIndexBackendImpl::openKeyCursor):
     60        * storage/IDBIndexBackendImpl.h:
     61        * storage/IDBObjectStore.cpp:
     62        (WebCore::IDBObjectStore::openCursor):
     63        * storage/IDBObjectStoreBackendImpl.cpp:
     64        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
     65        * storage/IDBRequest.cpp:
     66        (WebCore::IDBRequest::IDBRequest):
     67        (WebCore::IDBRequest::setCursorType):
     68        (WebCore::IDBRequest::onSuccess):
     69        (WebCore::IDBRequest::dispatchEvent):
     70        * storage/IDBRequest.h:
     71
    1722011-03-02  Aravind Akella  <aravind.akella@nokia.com>
    273
  • trunk/Source/WebCore/WebCore.gypi

    r80151 r80171  
    277277            'storage/IDBAny.idl',
    278278            'storage/IDBCursor.idl',
     279            'storage/IDBCursorWithValue.idl',
    279280            'storage/IDBDatabaseError.idl',
    280281            'storage/IDBDatabaseException.idl',
     
    40904091            'storage/IDBCursor.cpp',
    40914092            'storage/IDBCursor.h',
     4093            'storage/IDBCursorWithValue.cpp',
     4094            'storage/IDBCursorWithValue.h',
    40924095            'storage/IDBCursorBackendImpl.cpp',
    40934096            'storage/IDBCursorBackendImpl.h',
  • trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp

    r79209 r80171  
    11471147}
    11481148
     1149void SerializedScriptValue::deserializeAndSetProperty(v8::Handle<v8::Object> object, const char* propertyName,
     1150                                                      v8::PropertyAttribute attribute, PassRefPtr<SerializedScriptValue> value)
     1151{
     1152    deserializeAndSetProperty(object, propertyName, attribute, value.get());
     1153}
     1154
    11491155PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::Value> value, bool& didThrow)
    11501156{
  • trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h

    r77558 r80171  
    4040class SerializedScriptValue : public ThreadSafeShared<SerializedScriptValue> {
    4141public:
    42     static void deserializeAndSetProperty(v8::Handle<v8::Object> object, const char* propertyName,
     42    static void deserializeAndSetProperty(v8::Handle<v8::Object>, const char* propertyName,
    4343                                          v8::PropertyAttribute, SerializedScriptValue*);
     44    static void deserializeAndSetProperty(v8::Handle<v8::Object>, const char* propertyName,
     45                                          v8::PropertyAttribute, PassRefPtr<SerializedScriptValue>);
    4446
    4547    // If a serialization error occurs (e.g., cyclic input value) this
  • trunk/Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp

    r68795 r80171  
    3434#include "SerializedScriptValue.h"
    3535#include "V8IDBCursor.h"
     36#include "V8IDBCursorWithValue.h"
    3637#include "V8IDBDatabase.h"
    3738#include "V8IDBFactory.h"
     
    5556    case IDBAny::IDBCursorType:
    5657        return toV8(impl->idbCursor());
     58    case IDBAny::IDBCursorWithValueType:
     59        return toV8(impl->idbCursorWithValue());
    5760    case IDBAny::IDBDatabaseType:
    5861        return toV8(impl->idbDatabase());
  • trunk/Source/WebCore/storage/IDBAny.cpp

    r68795 r80171  
    2929#if ENABLE(INDEXED_DATABASE)
    3030
    31 #include "IDBCursor.h"
     31#include "IDBCursorWithValue.h"
    3232#include "IDBDatabase.h"
    3333#include "IDBFactory.h"
     
    6363    ASSERT(m_type == IDBCursorType);
    6464    return m_idbCursor;
     65}
     66
     67
     68PassRefPtr<IDBCursorWithValue> IDBAny::idbCursorWithValue()
     69{
     70    ASSERT(m_type == IDBCursorWithValueType);
     71    return m_idbCursorWithValue;
    6572}
    6673
     
    111118    ASSERT(m_type == UndefinedType);
    112119    m_type = NullType;
     120}
     121
     122void IDBAny::set(PassRefPtr<IDBCursorWithValue> value)
     123{
     124    ASSERT(m_type == UndefinedType);
     125    m_type = IDBCursorWithValueType;
     126    m_idbCursorWithValue = value;
    113127}
    114128
  • trunk/Source/WebCore/storage/IDBAny.h

    r68795 r80171  
    3636
    3737class IDBCursor;
     38class IDBCursorWithValue;
    3839class IDBDatabase;
    3940class IDBFactory;
     
    6869        NullType,
    6970        IDBCursorType,
     71        IDBCursorWithValueType,
    7072        IDBDatabaseType,
    7173        IDBFactoryType,
     
    8082    // Use type() to figure out which one of these you're allowed to call.
    8183    PassRefPtr<IDBCursor> idbCursor();
     84    PassRefPtr<IDBCursorWithValue> idbCursorWithValue();
    8285    PassRefPtr<IDBDatabase> idbDatabase();
    8386    PassRefPtr<IDBFactory> idbFactory();
     
    9194    void setNull();
    9295    void set(PassRefPtr<IDBCursor>);
     96    void set(PassRefPtr<IDBCursorWithValue>);
    9397    void set(PassRefPtr<IDBDatabase>);
    9498    void set(PassRefPtr<IDBFactory>);
     
    106110    // Only one of the following should ever be in use at any given time.
    107111    RefPtr<IDBCursor> m_idbCursor;
     112    RefPtr<IDBCursorWithValue> m_idbCursorWithValue;
    108113    RefPtr<IDBDatabase> m_idbDatabase;
    109114    RefPtr<IDBFactory> m_idbFactory;
  • trunk/Source/WebCore/storage/IDBCursor.cpp

    r80055 r80171  
    4040namespace WebCore {
    4141
     42PassRefPtr<IDBCursor> IDBCursor::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
     43{
     44    return adoptRef(new IDBCursor(backend, request, transaction));
     45}
     46
    4247IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
    4348    : m_backend(backend)
     
    6469}
    6570
    66 PassRefPtr<IDBAny> IDBCursor::value() const
     71PassRefPtr<IDBKey> IDBCursor::primaryKey() const
     72{
     73    return m_backend->primaryKey();
     74}
     75
     76PassRefPtr<SerializedScriptValue> IDBCursor::value() const
    6777{
    6878    return m_backend->value();
  • trunk/Source/WebCore/storage/IDBCursor.h

    r77689 r80171  
    3030
    3131#include "ExceptionCode.h"
     32#include "IDBKey.h"
    3233#include <wtf/PassRefPtr.h>
    3334#include <wtf/RefCounted.h>
     
    3940class IDBCallbacks;
    4041class IDBCursorBackendInterface;
    41 class IDBKey;
    4242class IDBRequest;
    4343class IDBTransaction;
     
    5353        PREV_NO_DUPLICATE = 3,
    5454    };
    55     static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
    56     {
    57         return adoptRef(new IDBCursor(backend, request, transaction));
    58     }
    59     ~IDBCursor();
     55    static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
     56    virtual ~IDBCursor();
    6057
    6158    // FIXME: Try to modify the code generator so this is unneeded.
     
    6562    unsigned short direction() const;
    6663    PassRefPtr<IDBKey> key() const;
    67     PassRefPtr<IDBAny> value() const;
     64    PassRefPtr<IDBKey> primaryKey() const;
     65    PassRefPtr<SerializedScriptValue> value() const;
    6866    PassRefPtr<IDBRequest> update(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue>, ExceptionCode&);
    6967    void continueFunction(PassRefPtr<IDBKey>, ExceptionCode&);
    7068    PassRefPtr<IDBRequest> deleteFunction(ScriptExecutionContext*, ExceptionCode&);
    7169
    72 private:
     70protected:
    7371    explicit IDBCursor(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
    7472
     73private:
    7574    RefPtr<IDBCursorBackendInterface> m_backend;
    7675    RefPtr<IDBRequest> m_request;
  • trunk/Source/WebCore/storage/IDBCursor.idl

    r77371 r80171  
    3636        readonly attribute unsigned short direction;
    3737        readonly attribute IDBKey key;
    38         readonly attribute IDBAny value;
     38        readonly attribute IDBKey primaryKey;
    3939
    4040        [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
  • trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp

    r79426 r80171  
    4646namespace WebCore {
    4747
    48 IDBCursorBackendImpl::IDBCursorBackendImpl(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
     48IDBCursorBackendImpl::IDBCursorBackendImpl(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, CursorType cursorType, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
    4949    : m_backingStore(backingStore)
    5050    , m_keyRange(keyRange)
    5151    , m_direction(direction)
    5252    , m_query(query)
    53     , m_isSerializedScriptValueCursor(isSerializedScriptValueCursor)
     53    , m_cursorType(cursorType)
    5454    , m_transaction(transaction)
    5555    , m_objectStore(objectStore)
     
    7272}
    7373
    74 PassRefPtr<IDBAny> IDBCursorBackendImpl::value() const
     74PassRefPtr<IDBKey> IDBCursorBackendImpl::primaryKey() const
    7575{
    76     if (m_isSerializedScriptValueCursor)
    77         return IDBAny::create(m_currentSerializedScriptValue.get());
    78     return IDBAny::create(m_currentIDBKeyValue.get());
     76    return m_currentPrimaryKey;
     77}
     78
     79PassRefPtr<SerializedScriptValue> IDBCursorBackendImpl::value() const
     80{
     81    ASSERT(m_cursorType != IndexKeyCursor);
     82    return m_currentValue;
    7983}
    8084
    8185void IDBCursorBackendImpl::update(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBCallbacks> callbacks, ExceptionCode& ec)
    8286{
    83     if (!m_query || m_currentId == InvalidId || !m_isSerializedScriptValueCursor) {
     87    if (!m_query || m_currentId == InvalidId || m_cursorType == IndexKeyCursor) {
    8488        ec = IDBDatabaseException::NOT_ALLOWED_ERR;
    8589        return;
    8690    }
    8791
    88     RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
    89     m_objectStore->put(value, key.release(), IDBObjectStoreBackendInterface::CursorUpdate, callbacks, m_transaction.get(), ec);
     92    m_objectStore->put(value, m_currentPrimaryKey, IDBObjectStoreBackendInterface::CursorUpdate, callbacks, m_transaction.get(), ec);
    9093}
    9194
     
    101104bool IDBCursorBackendImpl::currentRowExists()
    102105{
    103     String sql = m_currentIDBKeyValue ? "SELECT id FROM IndexData WHERE id = ?" : "SELECT id FROM ObjectStoreData WHERE id = ?";
     106    String sql = m_cursorType == ObjectStoreCursor ? "SELECT id FROM ObjectStoreData WHERE id = ?" : "SELECT id FROM IndexData WHERE id = ?";
    104107    SQLiteStatement statement(m_backingStore->db(), sql);
    105108
     
    122125            cursor->m_currentId = InvalidId;
    123126            cursor->m_currentKey = 0;
    124             cursor->m_currentSerializedScriptValue = 0;
    125             cursor->m_currentIDBKeyValue = 0;
     127            cursor->m_currentPrimaryKey = 0;
     128            cursor->m_currentValue = 0;
    126129            callbacks->onSuccess(SerializedScriptValue::nullValue());
    127130            return;
     
    151154void IDBCursorBackendImpl::deleteFunction(PassRefPtr<IDBCallbacks> prpCallbacks, ExceptionCode& ec)
    152155{
    153     if (!m_query || m_currentId == InvalidId || !m_isSerializedScriptValueCursor) {
     156    if (!m_query || m_currentId == InvalidId || m_cursorType == IndexKeyCursor) {
    154157        ec = IDBDatabaseException::NOT_ALLOWED_ERR;
    155158        return;
    156159    }
    157160
    158     RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
    159     m_objectStore->deleteFunction(key.release(), prpCallbacks, m_transaction.get(), ec);
     161    m_objectStore->deleteFunction(m_currentPrimaryKey, prpCallbacks, m_transaction.get(), ec);
    160162}
    161163
     
    163165void IDBCursorBackendImpl::loadCurrentRow()
    164166{
    165     // The column numbers depend on the query in IDBObjectStoreBackendImpl::openCursorInternal or
    166     // IDBIndexBackendImpl::openCursorInternal.
     167    // The column numbers depend on the query in IDBObjectStoreBackendImpl::openCursorInternal and/or IDBIndexBackendImpl::openCursorInternal.
    167168    m_currentId = m_query->getColumnInt64(0);
    168169    m_currentKey = IDBKey::fromQuery(*m_query, 1);
    169     if (m_isSerializedScriptValueCursor)
    170         m_currentSerializedScriptValue = SerializedScriptValue::createFromWire(m_query->getColumnBlobAsString(4));
    171 
    172     m_currentIDBKeyValue = IDBKey::fromQuery(*m_query, 5);
     170    m_currentValue = SerializedScriptValue::createFromWire(m_query->getColumnBlobAsString(4));
     171    m_currentPrimaryKey = IDBKey::fromQuery(*m_query, 5);
    173172}
    174173
  • trunk/Source/WebCore/storage/IDBCursorBackendImpl.h

    r79426 r80171  
    5050class IDBCursorBackendImpl : public IDBCursorBackendInterface {
    5151public:
    52     static PassRefPtr<IDBCursorBackendImpl> create(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
     52    static PassRefPtr<IDBCursorBackendImpl> create(IDBBackingStore* backingStore, PassRefPtr<IDBKeyRange> keyRange, IDBCursor::Direction direction, PassOwnPtr<SQLiteStatement> query, CursorType cursorType, IDBTransactionBackendInterface* transaction, IDBObjectStoreBackendInterface* objectStore)
    5353    {
    54         return adoptRef(new IDBCursorBackendImpl(backingStore, keyRange, direction, query, isSerializedScriptValueCursor, transaction, objectStore));
     54        return adoptRef(new IDBCursorBackendImpl(backingStore, keyRange, direction, query, cursorType, transaction, objectStore));
    5555    }
    5656    virtual ~IDBCursorBackendImpl();
     
    5858    virtual unsigned short direction() const;
    5959    virtual PassRefPtr<IDBKey> key() const;
    60     virtual PassRefPtr<IDBAny> value() const;
     60    virtual PassRefPtr<IDBKey> primaryKey() const;
     61    virtual PassRefPtr<SerializedScriptValue> value() const;
    6162    virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
    6263    virtual void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
     
    6465
    6566private:
    66     IDBCursorBackendImpl(IDBBackingStore*, PassRefPtr<IDBKeyRange>, IDBCursor::Direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface*, IDBObjectStoreBackendInterface*);
     67    IDBCursorBackendImpl(IDBBackingStore*, PassRefPtr<IDBKeyRange>, IDBCursor::Direction, PassOwnPtr<SQLiteStatement> query, CursorType, IDBTransactionBackendInterface*, IDBObjectStoreBackendInterface*);
    6768
    6869    bool currentRowExists();
     
    7980    IDBCursor::Direction m_direction;
    8081    OwnPtr<SQLiteStatement> m_query;
    81     bool m_isSerializedScriptValueCursor;
     82    CursorType m_cursorType;
    8283    int64_t m_currentId;
    8384
    84     // The key in the objectStore or index that this cursor iterates over.
    8585    RefPtr<IDBKey> m_currentKey;
    86 
    87     // m_isSerializedScriptValueCursor will only be available for object cursors.
    88     RefPtr<SerializedScriptValue> m_currentSerializedScriptValue;
    89 
    90     // FIXME: make the primary key available via script for all types of cursors.
    91     // For cursors on indices, this is the key in the objectstore that corresponds to the current entry in the index.
    92     RefPtr<IDBKey> m_currentIDBKeyValue;
     86    RefPtr<IDBKey> m_currentPrimaryKey;
     87    RefPtr<SerializedScriptValue> m_currentValue;
    9388
    9489    RefPtr<IDBTransactionBackendInterface> m_transaction;
  • trunk/Source/WebCore/storage/IDBCursorBackendInterface.h

    r74342 r80171  
    4646    virtual ~IDBCursorBackendInterface() {}
    4747
     48    enum CursorType {
     49        InvalidCursorType = 0,
     50        IndexCursor,
     51        IndexKeyCursor,
     52        ObjectStoreCursor
     53    };
     54
    4855    virtual unsigned short direction() const = 0;
    4956    virtual PassRefPtr<IDBKey> key() const = 0;
    50     virtual PassRefPtr<IDBAny> value() const = 0;
     57    virtual PassRefPtr<IDBKey> primaryKey() const = 0;
     58    virtual PassRefPtr<SerializedScriptValue> value() const = 0;
    5159
    5260    virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
  • trunk/Source/WebCore/storage/IDBCursorWithValue.cpp

    r80170 r80171  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 module storage {
     26#include "config.h"
     27#include "IDBCursorWithValue.h"
    2728
    28     interface [
    29         Conditional=INDEXED_DATABASE
    30     ] IDBCursor {
    31         const unsigned short NEXT = 0;
    32         const unsigned short NEXT_NO_DUPLICATE = 1;
    33         const unsigned short PREV = 2;
    34         const unsigned short PREV_NO_DUPLICATE = 3;
     29#if ENABLE(INDEXED_DATABASE)
    3530
    36         readonly attribute unsigned short direction;
    37         readonly attribute IDBKey key;
    38         readonly attribute IDBAny value;
     31#include "IDBCursorBackendInterface.h"
     32#include "IDBKey.h"
    3933
    40         [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
    41             raises (IDBDatabaseException);
    42         [ImplementationFunction=continueFunction] void continue(in [Optional] IDBKey key)
    43             raises (IDBDatabaseException);
    44         [CallWith=ScriptExecutionContext, ImplementationFunction=deleteFunction] IDBRequest delete()
    45             raises (IDBDatabaseException);
    46     };
     34namespace WebCore {
     35
     36PassRefPtr<IDBCursorWithValue> IDBCursorWithValue::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
     37{
     38    return adoptRef(new IDBCursorWithValue(backend, request, transaction));
    4739}
     40
     41IDBCursorWithValue::IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
     42    : IDBCursor(backend, request, transaction)
     43{
     44}
     45
     46IDBCursorWithValue::~IDBCursorWithValue()
     47{
     48}
     49
     50} // namespace WebCore
     51
     52#endif // ENABLE(INDEXED_DATABASE)
  • trunk/Source/WebCore/storage/IDBCursorWithValue.h

    r80170 r80171  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #ifndef IDBCursorBackendInterface_h
    27 #define IDBCursorBackendInterface_h
     26#ifndef IDBCursorWithValue_h
     27#define IDBCursorWithValue_h
    2828
    2929#if ENABLE(INDEXED_DATABASE)
    3030
    31 #include "ExceptionCode.h"
    32 #include <wtf/PassRefPtr.h>
    33 #include <wtf/RefCounted.h>
    34 #include <wtf/Threading.h>
     31#include "IDBCursor.h"
    3532
    3633namespace WebCore {
    3734
    38 class IDBAny;
    39 class IDBCallbacks;
    40 class IDBKey;
    41 class IDBRequest;
    42 class SerializedScriptValue;
     35class IDBCursorWithValue : public IDBCursor {
     36public:
     37    static PassRefPtr<IDBCursorWithValue> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
     38    virtual ~IDBCursorWithValue();
    4339
    44 class IDBCursorBackendInterface : public ThreadSafeShared<IDBCursorBackendInterface> {
    45 public:
    46     virtual ~IDBCursorBackendInterface() {}
     40    // The value attribute defined in the IDL is simply implemented in IDBCursor (but not exposed via
     41    // its IDL). This is to make the implementation more simple while matching what the spec says.
    4742
    48     virtual unsigned short direction() const = 0;
    49     virtual PassRefPtr<IDBKey> key() const = 0;
    50     virtual PassRefPtr<IDBAny> value() const = 0;
    51 
    52     virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
    53     virtual void continueFunction(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
    54     virtual void deleteFunction(PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
     43private:
     44    explicit IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
    5545};
    5646
     
    5949#endif
    6050
    61 #endif // IDBCursorBackendInterface_h
     51#endif // IDBCursorWithValue_h
  • trunk/Source/WebCore/storage/IDBCursorWithValue.idl

    r80170 r80171  
    2828    interface [
    2929        Conditional=INDEXED_DATABASE
    30     ] IDBCursor {
    31         const unsigned short NEXT = 0;
    32         const unsigned short NEXT_NO_DUPLICATE = 1;
    33         const unsigned short PREV = 2;
    34         const unsigned short PREV_NO_DUPLICATE = 3;
    35 
    36         readonly attribute unsigned short direction;
    37         readonly attribute IDBKey key;
    38         readonly attribute IDBAny value;
    39 
    40         [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
    41             raises (IDBDatabaseException);
    42         [ImplementationFunction=continueFunction] void continue(in [Optional] IDBKey key)
    43             raises (IDBDatabaseException);
    44         [CallWith=ScriptExecutionContext, ImplementationFunction=deleteFunction] IDBRequest delete()
    45             raises (IDBDatabaseException);
     30    ] IDBCursorWithValue : IDBCursor {
     31        readonly attribute SerializedScriptValue value;
    4632    };
    4733}
  • trunk/Source/WebCore/storage/IDBIndex.cpp

    r80055 r80171  
    6262
    6363    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
     64    request->setCursorType(IDBCursorBackendInterface::IndexCursor);
    6465    m_backend->openCursor(keyRange, direction, request, m_transaction->backend(), ec);
    6566    if (ec) {
     
    7980
    8081    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
     82    request->setCursorType(IDBCursorBackendInterface::IndexKeyCursor);
    8183    m_backend->openKeyCursor(keyRange, direction, request, m_transaction->backend(), ec);
    8284    if (ec) {
  • trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp

    r79426 r80171  
    6767}
    6868
    69 void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl> index, PassRefPtr<IDBKeyRange> range, unsigned short untypedDirection, bool objectCursor, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
     69void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl> index, PassRefPtr<IDBKeyRange> range, unsigned short untypedDirection, IDBCursorBackendInterface::CursorType cursorType, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
    7070{
    7171    // Several files depend on this order of selects.
     
    109109    ASSERT(objectStore && !ec);
    110110
    111     RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(index->m_backingStore.get(), range, direction, query.release(), objectCursor, transaction.get(), objectStore.get());
     111    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(index->m_backingStore.get(), range, direction, query.release(), cursorType, transaction.get(), objectStore.get());
    112112    callbacks->onSuccess(cursor.release());
    113113}
     
    119119    RefPtr<IDBCallbacks> callbacks = prpCallbacks;
    120120    RefPtr<IDBTransactionBackendInterface> transaction = transactionPtr;
    121     if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, true, callbacks, transaction)))
     121    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, IDBCursorBackendInterface::IndexCursor, callbacks, transaction)))
    122122        ec = IDBDatabaseException::NOT_ALLOWED_ERR;
    123123}
     
    129129    RefPtr<IDBCallbacks> callbacks = prpCallbacks;
    130130    RefPtr<IDBTransactionBackendInterface> transaction = transactionPtr;
    131     if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, false, callbacks, transaction)))
     131    if (!transaction->scheduleTask(createCallbackTask(&openCursorInternal, index, keyRange, direction, IDBCursorBackendInterface::IndexKeyCursor, callbacks, transaction)))
    132132        ec = IDBDatabaseException::NOT_ALLOWED_ERR;
    133133}
  • trunk/Source/WebCore/storage/IDBIndexBackendImpl.h

    r79426 r80171  
    2727#define IDBIndexBackendImpl_h
    2828
     29#if ENABLE(INDEXED_DATABASE)
     30
     31#include "IDBCursorBackendInterface.h"
    2932#include "IDBIndexBackendInterface.h"
    30 
    31 #if ENABLE(INDEXED_DATABASE)
    3233
    3334namespace WebCore {
     
    7879    SQLiteDatabase& sqliteDatabase() const;
    7980
    80     static void openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKeyRange>, unsigned short direction, bool objectCursor, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
     81    static void openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKeyRange>, unsigned short direction, IDBCursorBackendInterface::CursorType, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
    8182    static void getInternal(ScriptExecutionContext*, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBKey>, bool getObject, PassRefPtr<IDBCallbacks>);
    8283
  • trunk/Source/WebCore/storage/IDBObjectStore.cpp

    r80055 r80171  
    158158
    159159    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
     160    request->setCursorType(IDBCursorBackendInterface::ObjectStoreCursor);
    160161    m_objectStore->openCursor(range, direction, request, m_transaction->backend(), ec);
    161162    if (ec) {
  • trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp

    r79445 r80171  
    489489
    490490    // Several files depend on this order of selects.
    491     String sql = "SELECT id, keyString, keyDate, keyNumber, value FROM ObjectStoreData WHERE ";
     491    String sql = "SELECT id, keyString, keyDate, keyNumber, value, keyString, keyDate, keyNumber FROM ObjectStoreData WHERE ";
    492492    if (lowerBound)
    493493        sql += range->lower()->lowerCursorWhereFragment(range->lowerWhereClauseComparisonOperator());
     
    518518    }
    519519
    520     RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(objectStore->m_backingStore.get(), range, direction, query.release(), true, transaction.get(), objectStore.get());
     520    RefPtr<IDBCursorBackendInterface> cursor = IDBCursorBackendImpl::create(objectStore->m_backingStore.get(), range, direction, query.release(), IDBCursorBackendInterface::ObjectStoreCursor, transaction.get(), objectStore.get());
    521521    callbacks->onSuccess(cursor.release());
    522522}
  • trunk/Source/WebCore/storage/IDBRequest.cpp

    r80055 r80171  
    3737#include "EventNames.h"
    3838#include "EventQueue.h"
    39 #include "IDBCursor.h"
     39#include "IDBCursorWithValue.h"
    4040#include "IDBDatabase.h"
    4141#include "IDBEventDispatcher.h"
     
    5959    , m_readyState(LOADING)
    6060    , m_finished(false)
     61    , m_cursorType(IDBCursorBackendInterface::InvalidCursorType)
    6162{
    6263    if (m_transaction) {
     
    166167}
    167168
     169void IDBRequest::setCursorType(IDBCursorBackendInterface::CursorType cursorType)
     170{
     171    ASSERT(m_cursorType == IDBCursorBackendInterface::InvalidCursorType);
     172    m_cursorType = cursorType;
     173}
     174
    168175void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
    169176{
     
    182189{
    183190    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
    184     m_result = IDBAny::create(IDBCursor::create(backend, this, m_transaction.get()));
     191    ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);
     192    if (m_cursorType == IDBCursorBackendInterface::IndexKeyCursor)
     193        m_result = IDBAny::create(IDBCursor::create(backend, this, m_transaction.get()));
     194    else
     195        m_result = IDBAny::create(IDBCursorWithValue::create(backend, this, m_transaction.get()));
    185196    enqueueEvent(createSuccessEvent());
    186197}
     
    286297
    287298    // If the result was of type IDBCursor, then we'll fire again.
    288     if (m_result && m_result->type() != IDBAny::IDBCursorType)
     299    if (m_result && m_result->type() != IDBAny::IDBCursorType && m_result->type() != IDBAny::IDBCursorWithValueType)
    289300        m_finished = true;
    290301
  • trunk/Source/WebCore/storage/IDBRequest.h

    r80055 r80171  
    6969    void markEarlyDeath();
    7070    bool resetReadyState(IDBTransaction*);
     71    void setCursorType(IDBCursorBackendInterface::CursorType);
    7172    IDBAny* source();
    7273    void abort();
     
    117118    Vector<RefPtr<Event> > m_enqueuedEvents;
    118119
     120    // Only used if the result type will be a cursor.
     121    IDBCursorBackendInterface::CursorType m_cursorType;
     122
    119123    EventTargetData m_eventTargetData;
    120124};
  • trunk/Source/WebKit/chromium/ChangeLog

    r80166 r80171  
     12011-02-28  Jeremy Orlow  <jorlow@chromium.org>
     2
     3        Reviewed by James Robinson.
     4
     5        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
     6        https://bugs.webkit.org/show_bug.cgi?id=55443
     7
     8        * public/WebIDBCursor.h:
     9        (WebKit::WebIDBCursor::primaryKey):
     10        (WebKit::WebIDBCursor::value):
     11        * src/IDBCursorBackendProxy.cpp:
     12        (WebCore::IDBCursorBackendProxy::primaryKey):
     13        (WebCore::IDBCursorBackendProxy::value):
     14        * src/IDBCursorBackendProxy.h:
     15        * src/WebIDBCursorImpl.cpp:
     16        (WebKit::WebIDBCursorImpl::key):
     17        (WebKit::WebIDBCursorImpl::primaryKey):
     18        (WebKit::WebIDBCursorImpl::value):
     19        * src/WebIDBCursorImpl.h:
     20
    1212011-03-02  Daniel Cheng  <dcheng@chromium.org>
    222
  • trunk/Source/WebKit/chromium/public/WebIDBCursor.h

    r80056 r80171  
    5656        return WebIDBKey::createInvalid();
    5757    }
    58     // One or the other will set, depending on what type of cursor this is.
    59     virtual void value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& idbKey) const { WEBKIT_ASSERT_NOT_REACHED(); }
     58    // FIXME: Remove the following 2 methods and uncomment third after roll.
     59    virtual WebSerializedScriptValue value() const
     60    {
     61        WebSerializedScriptValue serializedScriptValue;
     62        WebIDBKey key;
     63        value(serializedScriptValue, key);
     64        return serializedScriptValue;       
     65    }
     66    virtual void value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& key) const
     67    {
     68        serializedScriptValue = value();
     69    }
     70    // virtual WebSerializedScriptValue value() const
     71    // {
     72    //     WEBKIT_ASSERT_NOT_REACHED();
     73    //     return WebSerializedScriptValue();
     74    // }
    6075
    6176    virtual void update(const WebSerializedScriptValue&, WebIDBCallbacks*, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
  • trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp

    r74342 r80171  
    6363}
    6464
    65 PassRefPtr<IDBAny> IDBCursorBackendProxy::value() const
     65PassRefPtr<IDBKey> IDBCursorBackendProxy::primaryKey() const
    6666{
    67     WebKit::WebSerializedScriptValue webScriptValue;
    68     WebKit::WebIDBKey webKey;
    69     m_idbCursor->value(webScriptValue, webKey);
    70     if (!webScriptValue.isNull()) {
    71         ASSERT(webKey.type() == WebKit::WebIDBKey::InvalidType);
    72         return IDBAny::create<SerializedScriptValue>(webScriptValue);
    73     }
    74     ASSERT(webKey.type() != WebKit::WebIDBKey::InvalidType);
    75     return IDBAny::create<IDBKey>(webKey);
     67    return m_idbCursor->primaryKey();
     68}
     69
     70PassRefPtr<SerializedScriptValue> IDBCursorBackendProxy::value() const
     71{
     72    return m_idbCursor->value();
    7673}
    7774
  • trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h

    r74342 r80171  
    4545    virtual unsigned short direction() const;
    4646    virtual PassRefPtr<IDBKey> key() const;
    47     virtual PassRefPtr<IDBAny> value() const;
     47    virtual PassRefPtr<IDBKey> primaryKey() const;
     48    virtual PassRefPtr<SerializedScriptValue> value() const;
    4849    virtual void update(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
    4950    virtual void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
  • trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp

    r74342 r80171  
    5353WebIDBKey WebIDBCursorImpl::key() const
    5454{
    55     return WebIDBKey(m_idbCursorBackend->key());
     55    return m_idbCursorBackend->key();
    5656}
    5757
    58 void WebIDBCursorImpl::value(WebSerializedScriptValue& serializedScriptValue, WebIDBKey& idbKey) const
     58WebIDBKey WebIDBCursorImpl::primaryKey() const
    5959{
    60     // Verify we're starting off with blank slates.
    61     ASSERT(serializedScriptValue.isNull());
    62     ASSERT(idbKey.type() == WebIDBKey::InvalidType);
     60    return m_idbCursorBackend->primaryKey();
     61}
    6362
    64     RefPtr<IDBAny> any = m_idbCursorBackend->value();
    65     if (any->type() == IDBAny::SerializedScriptValueType)
    66         serializedScriptValue.assign(any->serializedScriptValue());
    67     else if (any->type() == IDBAny::IDBKeyType)
    68         idbKey.assign(any->idbKey());
    69     else
    70         ASSERT_NOT_REACHED();
     63WebSerializedScriptValue WebIDBCursorImpl::value() const
     64{
     65    return m_idbCursorBackend->value();
    7166}
    7267
  • trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h

    r74342 r80171  
    4545    virtual unsigned short direction() const;
    4646    virtual WebIDBKey key() const;
    47     virtual void value(WebSerializedScriptValue&, WebIDBKey&) const;
     47    virtual WebIDBKey primaryKey() const;
     48    virtual WebSerializedScriptValue value() const;
    4849    virtual void update(const WebSerializedScriptValue&, WebIDBCallbacks*, WebExceptionCode&);
    4950    virtual void continueFunction(const WebIDBKey&, WebIDBCallbacks*, WebExceptionCode&);
Note: See TracChangeset for help on using the changeset viewer.