haikuwebkit/LayoutTests/storage/indexeddb/index-multientry-expected.txt

193 lines
5.5 KiB
Plaintext
Raw Permalink Normal View History

IndexedDB: Rename "multientry" to "multiEntry" per spec change https://bugs.webkit.org/show_bug.cgi?id=73578 Patch by Joshua Bell <jsbell@chromium.org> on 2011-12-02 Reviewed by Darin Fisher. Source/WebCore: * storage/IDBIndex.h: (WebCore::IDBIndex::multiEntry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multiEntry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multiEntry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multiEntry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multiEntry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: Canonical link: https://commits.webkit.org/90295@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-02 18:31:40 +00:00
Test features of IndexedDB's multiEntry indices.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
IndexedDB layout tests: factor out prefix-handling-code https://bugs.webkit.org/show_bug.cgi?id=80664 This makes our tests vendor neutral so that we can load them in any browser to check what that browser does. Also changed some instances of 'window' to 'self' so that they are more worker friendly. Reviewed by Tony Chang. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-shared-workers-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/constants-expected.txt: * storage/indexeddb/constants.html: * storage/indexeddb/create-and-remove-object-store-expected.txt: * storage/indexeddb/create-and-remove-object-store.html: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/create-object-store-options.html: * storage/indexeddb/createObjectStore-name-argument-required-expected.txt: * storage/indexeddb/createObjectStore-name-argument-required.html: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/createObjectStore-null-name.html: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue.html: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-delete.html: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-inconsistency.html: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-index-delete.html: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-key-order.html: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order.html: * storage/indexeddb/cursor-reverse-bug-expected.txt: * storage/indexeddb/cursor-reverse-bug.html: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-skip-deleted.html: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/cursor-update-value-argument-required-expected.txt: * storage/indexeddb/cursor-update-value-argument-required.html: * storage/indexeddb/cursor-update.html: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/data-corruption.html: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/database-basics.html: * storage/indexeddb/database-name-undefined-expected.txt: * storage/indexeddb/database-name-undefined.html: * storage/indexeddb/database-odd-names-expected.txt: * storage/indexeddb/database-odd-names.html: * storage/indexeddb/database-quota-expected.txt: * storage/indexeddb/database-quota.html: * storage/indexeddb/delete-closed-database-object-expected.txt: * storage/indexeddb/delete-closed-database-object.html: * storage/indexeddb/delete-range-expected.txt: * storage/indexeddb/delete-range.html: * storage/indexeddb/deleteIndex-expected.txt: * storage/indexeddb/deleteIndex.html: * storage/indexeddb/deleteObjectStore-name-argument-required-expected.txt: * storage/indexeddb/deleteObjectStore-name-argument-required.html: * storage/indexeddb/deleteObjectStore-null-name-expected.txt: * storage/indexeddb/deleteObjectStore-null-name.html: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/duplicates.html: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/error-causes-abort-by-default.html: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/exception-in-event-aborts.html: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-basics.html: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-cmp.html: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/factory-deletedatabase-interactions-expected.txt: * storage/indexeddb/factory-deletedatabase-interactions.html: * storage/indexeddb/factory-deletedatabase.html: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-count.html: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-cursor.html: * storage/indexeddb/index-get-key-argument-required-expected.txt: * storage/indexeddb/index-get-key-argument-required.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-population.html: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/index-unique.html: * storage/indexeddb/invalid-keys-expected.txt: * storage/indexeddb/invalid-keys.html: * storage/indexeddb/key-generator-expected.txt: * storage/indexeddb/key-generator.html: * storage/indexeddb/key-sort-order-across-types-expected.txt: * storage/indexeddb/key-sort-order-across-types.html: * storage/indexeddb/key-sort-order-date-expected.txt: * storage/indexeddb/key-sort-order-date.html: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/key-type-array.html: * storage/indexeddb/key-type-infinity-expected.txt: * storage/indexeddb/key-type-infinity.html: * storage/indexeddb/keypath-basics-expected.txt: * storage/indexeddb/keypath-basics.html: * storage/indexeddb/keypath-edges-expected.txt: * storage/indexeddb/keypath-edges.html: * storage/indexeddb/keypath-fetch-key-expected.txt: * storage/indexeddb/keypath-fetch-key.html: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/keyrange-required-arguments-expected.txt: * storage/indexeddb/keyrange-required-arguments.html: * storage/indexeddb/keyrange.html: * storage/indexeddb/list-ordering-expected.txt: * storage/indexeddb/list-ordering.html: * storage/indexeddb/mozilla/add-twice-failure-expected.txt: * storage/indexeddb/mozilla/add-twice-failure.html: * storage/indexeddb/mozilla/autoincrement-indexes-expected.txt: * storage/indexeddb/mozilla/autoincrement-indexes.html: * storage/indexeddb/mozilla/bad-keypath-expected.txt: * storage/indexeddb/mozilla/bad-keypath.html: * storage/indexeddb/mozilla/clear-expected.txt: * storage/indexeddb/mozilla/clear.html: * storage/indexeddb/mozilla/create-index-unique-expected.txt: * storage/indexeddb/mozilla/create-index-unique.html: * storage/indexeddb/mozilla/create-index-with-integer-keys-expected.txt: * storage/indexeddb/mozilla/create-index-with-integer-keys.html: * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt: * storage/indexeddb/mozilla/create-objectstore-basics.html: * storage/indexeddb/mozilla/create-objectstore-null-name-expected.txt: * storage/indexeddb/mozilla/create-objectstore-null-name.html: * storage/indexeddb/mozilla/cursor-mutation-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html: * storage/indexeddb/mozilla/cursor-mutation.html: * storage/indexeddb/mozilla/cursor-update-updates-indexes-expected.txt: * storage/indexeddb/mozilla/cursor-update-updates-indexes.html: * storage/indexeddb/mozilla/cursors-expected.txt: * storage/indexeddb/mozilla/cursors.html: * storage/indexeddb/mozilla/delete-result-expected.txt: * storage/indexeddb/mozilla/delete-result.html: * storage/indexeddb/mozilla/event-source-expected.txt: * storage/indexeddb/mozilla/event-source.html: * storage/indexeddb/mozilla/global-data-expected.txt: * storage/indexeddb/mozilla/global-data.html: * storage/indexeddb/mozilla/indexes-expected.txt: * storage/indexeddb/mozilla/indexes.html: * storage/indexeddb/mozilla/key-requirements-delete-null-key-expected.txt: * storage/indexeddb/mozilla/key-requirements-delete-null-key.html: * storage/indexeddb/mozilla/key-requirements-expected.txt: * storage/indexeddb/mozilla/key-requirements-inline-and-passed-expected.txt: * storage/indexeddb/mozilla/key-requirements-inline-and-passed.html: * storage/indexeddb/mozilla/key-requirements-put-no-key-expected.txt: * storage/indexeddb/mozilla/key-requirements-put-no-key.html: * storage/indexeddb/mozilla/key-requirements-put-null-key-expected.txt: * storage/indexeddb/mozilla/key-requirements-put-null-key.html: * storage/indexeddb/mozilla/key-requirements.html: * storage/indexeddb/mozilla/object-cursors-expected.txt: * storage/indexeddb/mozilla/object-cursors.html: * storage/indexeddb/mozilla/object-identity-expected.txt: * storage/indexeddb/mozilla/object-identity.html: * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-expected.txt: * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html: * storage/indexeddb/mozilla/object-store-remove-values-expected.txt: * storage/indexeddb/mozilla/object-store-remove-values.html: * storage/indexeddb/mozilla/objectstorenames-expected.txt: * storage/indexeddb/mozilla/objectstorenames.html: * storage/indexeddb/mozilla/odd-result-order-expected.txt: * storage/indexeddb/mozilla/odd-result-order.html: * storage/indexeddb/mozilla/open-database-null-name-expected.txt: * storage/indexeddb/mozilla/open-database-null-name.html: * storage/indexeddb/mozilla/put-get-values-expected.txt: * storage/indexeddb/mozilla/put-get-values.html: * storage/indexeddb/mozilla/readonly-transactions-expected.txt: * storage/indexeddb/mozilla/readonly-transactions.html: * storage/indexeddb/mozilla/readwrite-transactions-expected.txt: * storage/indexeddb/mozilla/readwrite-transactions.html: * storage/indexeddb/mozilla/readyState-expected.txt: * storage/indexeddb/mozilla/readyState.html: * storage/indexeddb/mozilla/remove-index-expected.txt: * storage/indexeddb/mozilla/remove-index.html: * storage/indexeddb/mozilla/remove-objectstore-expected.txt: * storage/indexeddb/mozilla/remove-objectstore.html: * storage/indexeddb/mozilla/versionchange-abort-expected.txt: * storage/indexeddb/mozilla/versionchange-abort.html: * storage/indexeddb/mozilla/versionchange-expected.txt: * storage/indexeddb/mozilla/versionchange.html: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/mutating-cursor.html: * storage/indexeddb/objectStore-required-arguments-expected.txt: * storage/indexeddb/objectStore-required-arguments.html: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-autoincrement.html: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-clear.html: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-count.html: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-cursor.html: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/objectstore-removeobjectstore.html: * storage/indexeddb/odd-strings-expected.txt: * storage/indexeddb/odd-strings.html: * storage/indexeddb/open-close-version-expected.txt: * storage/indexeddb/open-close-version.html: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/open-cursor.html: * storage/indexeddb/open-during-transaction-expected.txt: * storage/indexeddb/open-during-transaction.html: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/prefetch-bugfix-108071.html: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/queued-commands.html: * storage/indexeddb/readonly-expected.txt: * storage/indexeddb/readonly-properties-expected.txt: * storage/indexeddb/readonly-properties.html: * storage/indexeddb/readonly.html: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/request-event-propagation.html: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/index-basics.js: (test): * storage/indexeddb/resources/objectstore-basics.js: (test): (setVersionSuccess): (createIndex): (addData): (addAgainFailure): (removeSuccessButNotThere): (testPreConditions.request.onsuccess): (testPreConditions): * storage/indexeddb/resources/shared.js: (removeVendorPrefixes): * storage/indexeddb/resources/transaction-abort-workers.js: (transactionAborted): (transactionCompleted): (timeoutTest.transaction.onabort): (timeoutTest): (errorTransactionAborted): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/setVersion-null.html: * storage/indexeddb/setVersion-undefined-expected.txt: * storage/indexeddb/setVersion-undefined.html: * storage/indexeddb/set_version_blocked-expected.txt: * storage/indexeddb/set_version_blocked.html: * storage/indexeddb/set_version_queue-expected.txt: * storage/indexeddb/set_version_queue.html: * storage/indexeddb/structured-clone-expected.txt: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-abort-with-js-recursion-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion.html: * storage/indexeddb/transaction-abort-workers-expected.txt: * storage/indexeddb/transaction-abort.html: * storage/indexeddb/transaction-after-close-expected.txt: * storage/indexeddb/transaction-after-close.html: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls.html: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-basics.html: * storage/indexeddb/transaction-crash-on-abort-expected.txt: * storage/indexeddb/transaction-crash-on-abort.html: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-event-propagation.html: * storage/indexeddb/transaction-read-only-expected.txt: * storage/indexeddb/transaction-read-only.html: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/transaction-rollback.html: * storage/indexeddb/transaction-storeNames-required-expected.txt: * storage/indexeddb/transaction-storeNames-required.html: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/two-version-changes.html: * storage/indexeddb/value-undefined-expected.txt: * storage/indexeddb/value-undefined.html: * storage/indexeddb/values-odd-types-expected.txt: * storage/indexeddb/values-odd-types.html: * storage/indexeddb/version-change-abort-expected.txt: * storage/indexeddb/version-change-abort.html: * storage/indexeddb/version-change-exclusive-expected.txt: * storage/indexeddb/version-change-exclusive.html: * storage/indexeddb/versionchangerequest-activedomobject-expected.txt: * storage/indexeddb/versionchangerequest-activedomobject.html: Canonical link: https://commits.webkit.org/98319@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110750 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-03-14 21:20:56 +00:00
indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
IndexedDB: test conversion batch 3 https://bugs.webkit.org/show_bug.cgi?id=102168 Reviewed by Tony Chang. These were all pretty straightforward. metadata.html could include some additional tests that check the metadata after a versionchange transaction aborts, but I think that's tested in one of the intversion tests. * storage/indexeddb/exceptions-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-duplicate-keypaths-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/metadata-expected.txt: * storage/indexeddb/resources/database-basics.js: Fix failure when run as a chromium browser test. * storage/indexeddb/resources/exceptions.js: Moved some asserts from running before the database is opened to afterward but they appear to be testing the same thing. (transactionComplete): close can't proceed until the transactions are complete, something setVersion didn't have to deal with. * storage/indexeddb/resources/factory-deletedatabase.js: The conditions under which deleteDatabase is called in this test is _slightly_ different. Previously, deleteDatabase was called from inside a versionchange transaction, causing the original connection to receive a versionchange event. With upgradeneeded we have to close the original connection before entering a versionchange transaction, so the second connection is now what closes in response to the deleteDatabase's versionchange event. * storage/indexeddb/resources/index-duplicate-keypaths.js: (testCollideAutoIncrementSetup): (testCollideAutoIncrement): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (createIndexOnStoreWithData): * storage/indexeddb/resources/index-population.js: (prepareDatabase.request.onsuccess): (prepareDatabase): (doSetVersion2): (setVersion2): (setVersion2Abort): * storage/indexeddb/resources/metadata.js: (prepareDatabase): (snapshotConnection1): (secondOpen.request.onupgradeneeded): (secondOpen.request.onsuccess): (secondOpen): (thirdOpen.request.onupgradeneeded): (thirdOpen.request.onerror): (thirdOpen): (fourthOpen.request.onupgradeneeded): (fourthOpen.request.onsuccess): (fourthOpen): (checkState): Canonical link: https://commits.webkit.org/120385@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@134661 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-11-14 21:52:49 +00:00
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
store = db.createObjectStore('store')
IndexedDB: Rename "multientry" to "multiEntry" per spec change https://bugs.webkit.org/show_bug.cgi?id=73578 Patch by Joshua Bell <jsbell@chromium.org> on 2011-12-02 Reviewed by Darin Fisher. Source/WebCore: * storage/IDBIndex.h: (WebCore::IDBIndex::multiEntry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multiEntry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multiEntry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multiEntry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multiEntry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: Canonical link: https://commits.webkit.org/90295@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-02 18:31:40 +00:00
store.createIndex('index', 'x', {multiEntry: true})
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
store2 = db.createObjectStore('store-unique')
IndexedDB: Rename "multientry" to "multiEntry" per spec change https://bugs.webkit.org/show_bug.cgi?id=73578 Patch by Joshua Bell <jsbell@chromium.org> on 2011-12-02 Reviewed by Darin Fisher. Source/WebCore: * storage/IDBIndex.h: (WebCore::IDBIndex::multiEntry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multiEntry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multiEntry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multiEntry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multiEntry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: Canonical link: https://commits.webkit.org/90295@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-02 18:31:40 +00:00
store2.createIndex('index-unique', 'x', {multiEntry: true, unique: true})
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
Populating stores (and indexes)
IndexedDB: Replace numeric constants with strings https://bugs.webkit.org/show_bug.cgi?id=84894 Patch by Alec Flett <alecflett@chromium.org> on 2012-05-07 Reviewed by Tony Chang. Source/WebCore: Test: storage/indexeddb/legacy-constants.html Update IDBObjectStore.openCursor, IDBIndex.openCursor, IDBIndex.openKeyCursor, IDBDatabase.transaction, IDBCursor.direction, IDBTransaction.mode, and IDBRequest.readyState to meet the latest spec. All of these APIs now support string-based values in addition to the legacy/deprecated enum-based values. * Modules/indexeddb/IDBCursor.cpp: (WebCore): (WebCore::IDBCursor::direction): (WebCore::IDBCursor::stringToDirection): (WebCore::IDBCursor::directionToString): * Modules/indexeddb/IDBCursor.h: (IDBCursor): * Modules/indexeddb/IDBCursor.idl: * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::transaction): (WebCore): * Modules/indexeddb/IDBDatabase.h: (IDBDatabase): * Modules/indexeddb/IDBDatabase.idl: * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::openCursor): (WebCore): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::openCursor): (IDBIndex): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.idl: * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::openCursor): (WebCore): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::openCursor): (IDBObjectStore): * Modules/indexeddb/IDBObjectStore.idl: * Modules/indexeddb/IDBRequest.cpp: (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::readyState): (WebCore::IDBRequest::markEarlyDeath): (WebCore::IDBRequest::resetReadyState): (WebCore::IDBRequest::abort): (WebCore::IDBRequest::finishCursor): (WebCore::IDBRequest::onSuccess): (WebCore::IDBRequest::stop): * Modules/indexeddb/IDBRequest.h: * Modules/indexeddb/IDBRequest.idl: * Modules/indexeddb/IDBTransaction.cpp: (WebCore): (WebCore::IDBTransaction::mode): (WebCore::IDBTransaction::stringToMode): (WebCore::IDBTransaction::modeToString): * Modules/indexeddb/IDBTransaction.h: (IDBTransaction): * Modules/indexeddb/IDBTransaction.idl: LayoutTests: New test for legacy constants (legacy-constants) and update all other tests to use the new string-based constants. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/constants-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-advance-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-prev-no-duplicate-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-reverse-bug-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-quota-expected.txt: * storage/indexeddb/delete-range-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-generator-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keypath-edges-expected.txt: * storage/indexeddb/keypath-intrinsic-properties-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: Added. * storage/indexeddb/legacy-constants.html: Added. * storage/indexeddb/mozilla/clear-expected.txt: * storage/indexeddb/mozilla/create-index-unique-expected.txt: * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt: * storage/indexeddb/mozilla/cursors-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate.html: * storage/indexeddb/mozilla/indexes-expected.txt: * storage/indexeddb/mozilla/odd-result-order-expected.txt: * storage/indexeddb/mozilla/readwrite-transactions-expected.txt: * storage/indexeddb/mozilla/readyState-expected.txt: * storage/indexeddb/mozilla/resources/clear.js: (clear): * storage/indexeddb/mozilla/resources/create-index-unique.js: (createAndVerifyIndex): * storage/indexeddb/mozilla/resources/create-objectstore-basics.js: (cleanDatabase): * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js: (checkCursorResultsAndSetupMutatingCursor): * storage/indexeddb/mozilla/resources/cursor-mutation.js: (setupMutatingCursor): * storage/indexeddb/mozilla/resources/cursors.js: * storage/indexeddb/mozilla/resources/indexes.js: * storage/indexeddb/mozilla/resources/odd-result-order.js: (addRecord): (deleteRecord): * storage/indexeddb/mozilla/resources/readwrite-transactions.js: (setVersionComplete): (postAdd): (postAdd2): (postPut): (postPut2): (postPut3): (postPut4): (postDelete): (postDelete2): * storage/indexeddb/mozilla/resources/readyState.js: (test): (openSuccess): (setupObjectStore): (getRecord): (finalCheck): * storage/indexeddb/mozilla/resources/versionchange.js: (postSetVersion): (postSetVersion2): * storage/indexeddb/mozilla/versionchange-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/noblobs-expected.txt: * storage/indexeddb/noblobs.html: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/open-during-transaction-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/readonly-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/constants.js: (test): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/cursor-added-bug.js: (openCursor): * storage/indexeddb/resources/cursor-advance.js: (runTest): (testAdvanceIndexNoDupe): (testAdvanceIndexPrev): (testAdvanceIndexPrevNoDupe): * storage/indexeddb/resources/cursor-continue-validity.js: (continueTest): (continueIndexTest): (testModifyContinueOrder): * storage/indexeddb/resources/cursor-continue.js: (ascendingTest): (descendingTest): * storage/indexeddb/resources/cursor-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-inconsistency.js: (openBasicCursor): * storage/indexeddb/resources/cursor-index-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-key-order.js: * storage/indexeddb/resources/cursor-prev-no-duplicate.js: (populateStore): (testFarRangeCursor_closed): (testFarRangeCursor_open): (testFarRangeCursor_indexClosed): (testFarRangeCursor_indexOpen): (testFarRangeCursor_indexKeyOpen): (testFarRangeCursor_indexKeyClosed): (testBoundaryCursor_closed): (testBoundaryCursor_open): (testBoundaryCursor_indexClosed): (testBoundaryCursor_indexOpen): (testBoundaryCursor_indexKeyClosed): (testBoundaryCursor_indexKeyOpen): (testNoDuplicate_closed): (testNoDuplicate_open): (testNoDuplicate_indexKeyClosed): * storage/indexeddb/resources/cursor-primary-key-order.js: (populateStore): * storage/indexeddb/resources/cursor-reverse-bug.js: (populateStore): (testCursor): * storage/indexeddb/resources/cursor-skip-deleted.js: (basicCursorTest): (reverseCursorTest): * storage/indexeddb/resources/cursor-update.js: (openBasicCursor): * storage/indexeddb/resources/data-corruption.js: (addData): (getData): * storage/indexeddb/resources/database-quota.js: (checkQuotaEnforcing): * storage/indexeddb/resources/delete-range.js: (runTests.nextTest): (runTests): * storage/indexeddb/resources/error-causes-abort-by-default.js: (addData): (transactionCompleted): (transactionAborted1): * storage/indexeddb/resources/exception-in-event-aborts.js: (startTest): (transactionAborted1): (transactionAborted2): * storage/indexeddb/resources/factory-deletedatabase.js: (getValue): * storage/indexeddb/resources/index-count.js: * storage/indexeddb/resources/index-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/index-multientry.js: * storage/indexeddb/resources/index-unique.js: (setVersionCompleted): * storage/indexeddb/resources/key-generator.js: (.): * storage/indexeddb/resources/key-type-array.js: * storage/indexeddb/resources/keypath-edges.js: * storage/indexeddb/resources/keypath-intrinsic-properties.js: * storage/indexeddb/resources/legacy-constants.js: Added. (test): (prepareDatabase.openreq.onsuccess.verreq.onsuccess): (prepareDatabase.openreq.onsuccess): (prepareDatabase): (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (openForwardCursor): (openReverseCursor): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionCompleted): * storage/indexeddb/resources/objectstore-basics.js: (addData): (addAgainFailure): * storage/indexeddb/resources/objectstore-count.js: * storage/indexeddb/resources/objectstore-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): * storage/indexeddb/resources/open-during-transaction.js: * storage/indexeddb/resources/opencursor-key.js: * storage/indexeddb/resources/prefetch-bugfix-108071.js: * storage/indexeddb/resources/request-event-propagation.js: (startTest): (transactionAborted): (transactionAborted2): * storage/indexeddb/resources/set_version_blocked.js: (blocked): * storage/indexeddb/resources/transaction-abort.js: (startTest): * storage/indexeddb/resources/transaction-after-close.js: (runFirstRegularTransaction): (firstTransactionComplete): (onSecondOpen): * storage/indexeddb/resources/transaction-basics.js: (testInvalidMode): * storage/indexeddb/resources/transaction-event-propagation.js: (startTest): (dbAbortBubbleCallback): * storage/indexeddb/resources/transaction-rollback.js: (setVersionComplete): (abortCallback): * storage/indexeddb/set_version_blocked-expected.txt: * storage/indexeddb/structured-clone-expected.txt: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-abort-with-js-recursion-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion.html: * storage/indexeddb/transaction-after-close-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/tutorial.html: Canonical link: https://commits.webkit.org/103395@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-07 19:12:00 +00:00
transaction = db.transaction(['store'], 'readwrite')
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
First try some keys that aren't what we're expecting
transaction.objectStore('store').put({x: [7, 8, 9], y: 'a'}, 'foo')
Now overwrite them with what we're expecting
transaction.objectStore('store').put({x: [1, 2, 3], y: 'a'}, 'foo')
transaction.objectStore('store').put({x: [4, 5, 6], y: 'b'}, 'bar')
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
transaction.objectStore('store').put({x: [7, 7, 8, 7], y: 'c'}, 'baz')
transaction.objectStore('store').put({x: [null, 9, 9], y: 'd'}, 'bloop')
transaction.objectStore('store').put({x: [1, [2, null]], y:'e'}, 'oh')
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
Verifying index: index
IndexedDB: Replace numeric constants with strings https://bugs.webkit.org/show_bug.cgi?id=84894 Patch by Alec Flett <alecflett@chromium.org> on 2012-05-07 Reviewed by Tony Chang. Source/WebCore: Test: storage/indexeddb/legacy-constants.html Update IDBObjectStore.openCursor, IDBIndex.openCursor, IDBIndex.openKeyCursor, IDBDatabase.transaction, IDBCursor.direction, IDBTransaction.mode, and IDBRequest.readyState to meet the latest spec. All of these APIs now support string-based values in addition to the legacy/deprecated enum-based values. * Modules/indexeddb/IDBCursor.cpp: (WebCore): (WebCore::IDBCursor::direction): (WebCore::IDBCursor::stringToDirection): (WebCore::IDBCursor::directionToString): * Modules/indexeddb/IDBCursor.h: (IDBCursor): * Modules/indexeddb/IDBCursor.idl: * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::transaction): (WebCore): * Modules/indexeddb/IDBDatabase.h: (IDBDatabase): * Modules/indexeddb/IDBDatabase.idl: * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::openCursor): (WebCore): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::openCursor): (IDBIndex): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.idl: * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::openCursor): (WebCore): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::openCursor): (IDBObjectStore): * Modules/indexeddb/IDBObjectStore.idl: * Modules/indexeddb/IDBRequest.cpp: (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::readyState): (WebCore::IDBRequest::markEarlyDeath): (WebCore::IDBRequest::resetReadyState): (WebCore::IDBRequest::abort): (WebCore::IDBRequest::finishCursor): (WebCore::IDBRequest::onSuccess): (WebCore::IDBRequest::stop): * Modules/indexeddb/IDBRequest.h: * Modules/indexeddb/IDBRequest.idl: * Modules/indexeddb/IDBTransaction.cpp: (WebCore): (WebCore::IDBTransaction::mode): (WebCore::IDBTransaction::stringToMode): (WebCore::IDBTransaction::modeToString): * Modules/indexeddb/IDBTransaction.h: (IDBTransaction): * Modules/indexeddb/IDBTransaction.idl: LayoutTests: New test for legacy constants (legacy-constants) and update all other tests to use the new string-based constants. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/constants-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-advance-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-prev-no-duplicate-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-reverse-bug-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-quota-expected.txt: * storage/indexeddb/delete-range-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-generator-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keypath-edges-expected.txt: * storage/indexeddb/keypath-intrinsic-properties-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: Added. * storage/indexeddb/legacy-constants.html: Added. * storage/indexeddb/mozilla/clear-expected.txt: * storage/indexeddb/mozilla/create-index-unique-expected.txt: * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt: * storage/indexeddb/mozilla/cursors-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate.html: * storage/indexeddb/mozilla/indexes-expected.txt: * storage/indexeddb/mozilla/odd-result-order-expected.txt: * storage/indexeddb/mozilla/readwrite-transactions-expected.txt: * storage/indexeddb/mozilla/readyState-expected.txt: * storage/indexeddb/mozilla/resources/clear.js: (clear): * storage/indexeddb/mozilla/resources/create-index-unique.js: (createAndVerifyIndex): * storage/indexeddb/mozilla/resources/create-objectstore-basics.js: (cleanDatabase): * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js: (checkCursorResultsAndSetupMutatingCursor): * storage/indexeddb/mozilla/resources/cursor-mutation.js: (setupMutatingCursor): * storage/indexeddb/mozilla/resources/cursors.js: * storage/indexeddb/mozilla/resources/indexes.js: * storage/indexeddb/mozilla/resources/odd-result-order.js: (addRecord): (deleteRecord): * storage/indexeddb/mozilla/resources/readwrite-transactions.js: (setVersionComplete): (postAdd): (postAdd2): (postPut): (postPut2): (postPut3): (postPut4): (postDelete): (postDelete2): * storage/indexeddb/mozilla/resources/readyState.js: (test): (openSuccess): (setupObjectStore): (getRecord): (finalCheck): * storage/indexeddb/mozilla/resources/versionchange.js: (postSetVersion): (postSetVersion2): * storage/indexeddb/mozilla/versionchange-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/noblobs-expected.txt: * storage/indexeddb/noblobs.html: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/open-during-transaction-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/readonly-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/constants.js: (test): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/cursor-added-bug.js: (openCursor): * storage/indexeddb/resources/cursor-advance.js: (runTest): (testAdvanceIndexNoDupe): (testAdvanceIndexPrev): (testAdvanceIndexPrevNoDupe): * storage/indexeddb/resources/cursor-continue-validity.js: (continueTest): (continueIndexTest): (testModifyContinueOrder): * storage/indexeddb/resources/cursor-continue.js: (ascendingTest): (descendingTest): * storage/indexeddb/resources/cursor-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-inconsistency.js: (openBasicCursor): * storage/indexeddb/resources/cursor-index-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-key-order.js: * storage/indexeddb/resources/cursor-prev-no-duplicate.js: (populateStore): (testFarRangeCursor_closed): (testFarRangeCursor_open): (testFarRangeCursor_indexClosed): (testFarRangeCursor_indexOpen): (testFarRangeCursor_indexKeyOpen): (testFarRangeCursor_indexKeyClosed): (testBoundaryCursor_closed): (testBoundaryCursor_open): (testBoundaryCursor_indexClosed): (testBoundaryCursor_indexOpen): (testBoundaryCursor_indexKeyClosed): (testBoundaryCursor_indexKeyOpen): (testNoDuplicate_closed): (testNoDuplicate_open): (testNoDuplicate_indexKeyClosed): * storage/indexeddb/resources/cursor-primary-key-order.js: (populateStore): * storage/indexeddb/resources/cursor-reverse-bug.js: (populateStore): (testCursor): * storage/indexeddb/resources/cursor-skip-deleted.js: (basicCursorTest): (reverseCursorTest): * storage/indexeddb/resources/cursor-update.js: (openBasicCursor): * storage/indexeddb/resources/data-corruption.js: (addData): (getData): * storage/indexeddb/resources/database-quota.js: (checkQuotaEnforcing): * storage/indexeddb/resources/delete-range.js: (runTests.nextTest): (runTests): * storage/indexeddb/resources/error-causes-abort-by-default.js: (addData): (transactionCompleted): (transactionAborted1): * storage/indexeddb/resources/exception-in-event-aborts.js: (startTest): (transactionAborted1): (transactionAborted2): * storage/indexeddb/resources/factory-deletedatabase.js: (getValue): * storage/indexeddb/resources/index-count.js: * storage/indexeddb/resources/index-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/index-multientry.js: * storage/indexeddb/resources/index-unique.js: (setVersionCompleted): * storage/indexeddb/resources/key-generator.js: (.): * storage/indexeddb/resources/key-type-array.js: * storage/indexeddb/resources/keypath-edges.js: * storage/indexeddb/resources/keypath-intrinsic-properties.js: * storage/indexeddb/resources/legacy-constants.js: Added. (test): (prepareDatabase.openreq.onsuccess.verreq.onsuccess): (prepareDatabase.openreq.onsuccess): (prepareDatabase): (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (openForwardCursor): (openReverseCursor): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionCompleted): * storage/indexeddb/resources/objectstore-basics.js: (addData): (addAgainFailure): * storage/indexeddb/resources/objectstore-count.js: * storage/indexeddb/resources/objectstore-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): * storage/indexeddb/resources/open-during-transaction.js: * storage/indexeddb/resources/opencursor-key.js: * storage/indexeddb/resources/prefetch-bugfix-108071.js: * storage/indexeddb/resources/request-event-propagation.js: (startTest): (transactionAborted): (transactionAborted2): * storage/indexeddb/resources/set_version_blocked.js: (blocked): * storage/indexeddb/resources/transaction-abort.js: (startTest): * storage/indexeddb/resources/transaction-after-close.js: (runFirstRegularTransaction): (firstTransactionComplete): (onSecondOpen): * storage/indexeddb/resources/transaction-basics.js: (testInvalidMode): * storage/indexeddb/resources/transaction-event-propagation.js: (startTest): (dbAbortBubbleCallback): * storage/indexeddb/resources/transaction-rollback.js: (setVersionComplete): (abortCallback): * storage/indexeddb/set_version_blocked-expected.txt: * storage/indexeddb/structured-clone-expected.txt: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-abort-with-js-recursion-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion.html: * storage/indexeddb/transaction-after-close-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/tutorial.html: Canonical link: https://commits.webkit.org/103395@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-07 19:12:00 +00:00
transaction = db.transaction(['store'], 'readonly')
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
transaction.objectStore('store').index('index').openCursor()
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 1
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
PASS cursor.key is 1
PASS cursor.primaryKey is "oh"
PASS cursor.value.y is "e"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 2
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 3
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 4
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 5
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 6
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 7
PASS cursor.primaryKey is "baz"
PASS cursor.value.y is "c"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 8
PASS cursor.primaryKey is "baz"
PASS cursor.value.y is "c"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 9
PASS cursor.primaryKey is "bloop"
PASS cursor.value.y is "d"
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS expected.length is 0
IndexedDB: Migrate backend ObjectStore calls to use transaction id https://bugs.webkit.org/show_bug.cgi?id=102741 Reviewed by Tony Chang. Source/WebCore: Fully migrate 8 core data calls (get, put, setIndexKeys, setIndexesReady, openCursor, count, deleteRange, and clear) into IDBDatabaseBackendImpl, combining common code from IDBObjectStoreBackendImpl and IDBIndexBackendImpl in order to simplify the backend interface. These calls are now implemented in terms of an int64_t-based transactionId rather than an IDBTransactionBackendInterface, which simplifies the ownership model between the frontend and the backend. In addition, remove references to IDBObjectStoreBackend* from IDBIndex, as it is no longer needed. A few duplicate IDB_TRACE methods have been removed from wrapper methods that call another method that already have IDB_TRACE's. Finally, IDBCursorBackendImpl now no longer holds onto an IDBObjectStoreBackendImpl*, so its destruction and member variables are simplified, and reordered to match proper destruction order. * Modules/indexeddb/IDBCursorBackendImpl.cpp: Reordered to account for proper destruction. (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::deleteFunction): * Modules/indexeddb/IDBCursorBackendImpl.h: (WebCore::IDBCursorBackendImpl::create): (IDBCursorBackendImpl): * Modules/indexeddb/IDBDatabase.h: (WebCore::IDBDatabase::backend): (IDBDatabase): * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: (GetOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*RetrievalOperation (WebCore::GetOperation::create): (WebCore::GetOperation::GetOperation): (WebCore): (PutOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*StorageOperation. (WebCore::PutOperation::create): (WebCore::PutOperation::PutOperation): (SetIndexesReadyOperation): Moved from IDBObjectStoreBackendImpl::IndexesReadyOperation (WebCore::SetIndexesReadyOperation::create): (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation): (OpenCursorOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::Open*CursorOperation (WebCore::OpenCursorOperation::create): (WebCore::OpenCursorOperation::OpenCursorOperation): (CountOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::CountOperation (WebCore::CountOperation::create): (WebCore::CountOperation::CountOperation): (DeleteRangeOperation): Moved from IDBObjectStoreBackendImpl::DeleteOperation (WebCore::DeleteRangeOperation::create): (WebCore::DeleteRangeOperation::DeleteRangeOperation): (ClearOperation): Moved from IDBObjectStoreBackendImpl::ClearOperation (WebCore::ClearOperation::create): (WebCore::ClearOperation::ClearOperation): (WebCore::IDBDatabaseBackendImpl::get): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::get* (WebCore::GetOperation::perform): (WebCore::IDBDatabaseBackendImpl::put): Moved from IDBObjectStoreBackendImpl::put (WebCore::PutOperation::perform): (WebCore::IDBDatabaseBackendImpl::setIndexKeys): Moved from IDBObjectStoreBackendImpl::setIndexKeys (WebCore::IDBDatabaseBackendImpl::setIndexesReady): (WebCore::SetIndexesReadyOperation::perform): (WebCore::IDBDatabaseBackendImpl::openCursor): (WebCore::IDBDatabaseBackendImpl::count): (WebCore::CountOperation::perform): (WebCore::IDBDatabaseBackendImpl::deleteRange): (WebCore::DeleteRangeOperation::perform): (WebCore::IDBDatabaseBackendImpl::clear): (WebCore::ClearOperation::perform): (WebCore::OpenCursorOperation::perform): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::IDBIndex): (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::count): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): (WebCore::IDBIndex::backendDB): (WebCore): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::create): (IDBIndex): * Modules/indexeddb/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * Modules/indexeddb/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::openCursor): (WebCore::IDBIndexBackendImpl::count): (WebCore::IDBIndexBackendImpl::openKeyCursor): (WebCore::IDBIndexBackendImpl::get): (WebCore::IDBIndexBackendImpl::getKey): (IDBIndexBackendImpl): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::clear): (WebCore): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::index): (WebCore::IDBObjectStore::openCursor): (WebCore::IDBObjectStore::count): (WebCore::IDBObjectStore::backendDB): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::id): (IDBObjectStore): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): (WebCore::IDBObjectStoreBackendImpl::generateKey): (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator): * Modules/indexeddb/IDBObjectStoreBackendImpl.h: (WebCore::IDBObjectStoreBackendImpl::get): (WebCore::IDBObjectStoreBackendImpl::put): (WebCore::IDBObjectStoreBackendImpl::deleteFunction): (WebCore::IDBObjectStoreBackendImpl::clear): (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): (WebCore::IDBObjectStoreBackendImpl::openCursor): (WebCore::IDBObjectStoreBackendImpl::count): (IDBObjectStoreBackendImpl): * Modules/indexeddb/IDBTransactionBackendImpl.h: (WebCore::IDBTransactionBackendImpl::database): (IDBTransactionBackendImpl): Source/WebKit/chromium: Fix a bug where an array was initialized with a large empty buffer, clean up whitespace, and update to match signatures that changed in WebCore. * public/WebIDBDatabase.h: (WebKit::WebIDBDatabase::clear): * src/WebIDBDatabaseImpl.cpp: (WebKit::WebIDBDatabaseImpl::put): * src/WebIDBIndexImpl.cpp: * tests/IDBDatabaseBackendTest.cpp: LayoutTests: Add additional count() tests for multi-entry indexes, not previously covered. * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (.transaction.oncomplete): (verifyCount.request.onsuccess.request.onsuccess): (verifyCount.request.onsuccess): (verifyCount): Canonical link: https://commits.webkit.org/124370@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138900 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-01-05 20:42:38 +00:00
transaction = db.transaction(['store'])
transaction.objectStore('store').index('index')
index.count()
PASS event.target.result is 10
IndexedDB: Migrate backend ObjectStore calls to use transaction id https://bugs.webkit.org/show_bug.cgi?id=102741 Reviewed by Tony Chang. Source/WebCore: Fully migrate 8 core data calls (get, put, setIndexKeys, setIndexesReady, openCursor, count, deleteRange, and clear) into IDBDatabaseBackendImpl, combining common code from IDBObjectStoreBackendImpl and IDBIndexBackendImpl in order to simplify the backend interface. These calls are now implemented in terms of an int64_t-based transactionId rather than an IDBTransactionBackendInterface, which simplifies the ownership model between the frontend and the backend. In addition, remove references to IDBObjectStoreBackend* from IDBIndex, as it is no longer needed. A few duplicate IDB_TRACE methods have been removed from wrapper methods that call another method that already have IDB_TRACE's. Finally, IDBCursorBackendImpl now no longer holds onto an IDBObjectStoreBackendImpl*, so its destruction and member variables are simplified, and reordered to match proper destruction order. * Modules/indexeddb/IDBCursorBackendImpl.cpp: Reordered to account for proper destruction. (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::deleteFunction): * Modules/indexeddb/IDBCursorBackendImpl.h: (WebCore::IDBCursorBackendImpl::create): (IDBCursorBackendImpl): * Modules/indexeddb/IDBDatabase.h: (WebCore::IDBDatabase::backend): (IDBDatabase): * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: (GetOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*RetrievalOperation (WebCore::GetOperation::create): (WebCore::GetOperation::GetOperation): (WebCore): (PutOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*StorageOperation. (WebCore::PutOperation::create): (WebCore::PutOperation::PutOperation): (SetIndexesReadyOperation): Moved from IDBObjectStoreBackendImpl::IndexesReadyOperation (WebCore::SetIndexesReadyOperation::create): (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation): (OpenCursorOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::Open*CursorOperation (WebCore::OpenCursorOperation::create): (WebCore::OpenCursorOperation::OpenCursorOperation): (CountOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::CountOperation (WebCore::CountOperation::create): (WebCore::CountOperation::CountOperation): (DeleteRangeOperation): Moved from IDBObjectStoreBackendImpl::DeleteOperation (WebCore::DeleteRangeOperation::create): (WebCore::DeleteRangeOperation::DeleteRangeOperation): (ClearOperation): Moved from IDBObjectStoreBackendImpl::ClearOperation (WebCore::ClearOperation::create): (WebCore::ClearOperation::ClearOperation): (WebCore::IDBDatabaseBackendImpl::get): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::get* (WebCore::GetOperation::perform): (WebCore::IDBDatabaseBackendImpl::put): Moved from IDBObjectStoreBackendImpl::put (WebCore::PutOperation::perform): (WebCore::IDBDatabaseBackendImpl::setIndexKeys): Moved from IDBObjectStoreBackendImpl::setIndexKeys (WebCore::IDBDatabaseBackendImpl::setIndexesReady): (WebCore::SetIndexesReadyOperation::perform): (WebCore::IDBDatabaseBackendImpl::openCursor): (WebCore::IDBDatabaseBackendImpl::count): (WebCore::CountOperation::perform): (WebCore::IDBDatabaseBackendImpl::deleteRange): (WebCore::DeleteRangeOperation::perform): (WebCore::IDBDatabaseBackendImpl::clear): (WebCore::ClearOperation::perform): (WebCore::OpenCursorOperation::perform): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::IDBIndex): (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::count): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): (WebCore::IDBIndex::backendDB): (WebCore): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::create): (IDBIndex): * Modules/indexeddb/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * Modules/indexeddb/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::openCursor): (WebCore::IDBIndexBackendImpl::count): (WebCore::IDBIndexBackendImpl::openKeyCursor): (WebCore::IDBIndexBackendImpl::get): (WebCore::IDBIndexBackendImpl::getKey): (IDBIndexBackendImpl): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::clear): (WebCore): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::index): (WebCore::IDBObjectStore::openCursor): (WebCore::IDBObjectStore::count): (WebCore::IDBObjectStore::backendDB): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::id): (IDBObjectStore): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): (WebCore::IDBObjectStoreBackendImpl::generateKey): (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator): * Modules/indexeddb/IDBObjectStoreBackendImpl.h: (WebCore::IDBObjectStoreBackendImpl::get): (WebCore::IDBObjectStoreBackendImpl::put): (WebCore::IDBObjectStoreBackendImpl::deleteFunction): (WebCore::IDBObjectStoreBackendImpl::clear): (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): (WebCore::IDBObjectStoreBackendImpl::openCursor): (WebCore::IDBObjectStoreBackendImpl::count): (IDBObjectStoreBackendImpl): * Modules/indexeddb/IDBTransactionBackendImpl.h: (WebCore::IDBTransactionBackendImpl::database): (IDBTransactionBackendImpl): Source/WebKit/chromium: Fix a bug where an array was initialized with a large empty buffer, clean up whitespace, and update to match signatures that changed in WebCore. * public/WebIDBDatabase.h: (WebKit::WebIDBDatabase::clear): * src/WebIDBDatabaseImpl.cpp: (WebKit::WebIDBDatabaseImpl::put): * src/WebIDBIndexImpl.cpp: * tests/IDBDatabaseBackendTest.cpp: LayoutTests: Add additional count() tests for multi-entry indexes, not previously covered. * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (.transaction.oncomplete): (verifyCount.request.onsuccess.request.onsuccess): (verifyCount.request.onsuccess): (verifyCount): Canonical link: https://commits.webkit.org/124370@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138900 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-01-05 20:42:38 +00:00
index.count(7)
PASS event.target.result is 1
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
IndexedDB: Rename "multientry" to "multiEntry" per spec change https://bugs.webkit.org/show_bug.cgi?id=73578 Patch by Joshua Bell <jsbell@chromium.org> on 2011-12-02 Reviewed by Darin Fisher. Source/WebCore: * storage/IDBIndex.h: (WebCore::IDBIndex::multiEntry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multiEntry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multiEntry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multiEntry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multiEntry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: Canonical link: https://commits.webkit.org/90295@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-02 18:31:40 +00:00
Verifying unique constraint on multiEntry index
IndexedDB: Replace numeric constants with strings https://bugs.webkit.org/show_bug.cgi?id=84894 Patch by Alec Flett <alecflett@chromium.org> on 2012-05-07 Reviewed by Tony Chang. Source/WebCore: Test: storage/indexeddb/legacy-constants.html Update IDBObjectStore.openCursor, IDBIndex.openCursor, IDBIndex.openKeyCursor, IDBDatabase.transaction, IDBCursor.direction, IDBTransaction.mode, and IDBRequest.readyState to meet the latest spec. All of these APIs now support string-based values in addition to the legacy/deprecated enum-based values. * Modules/indexeddb/IDBCursor.cpp: (WebCore): (WebCore::IDBCursor::direction): (WebCore::IDBCursor::stringToDirection): (WebCore::IDBCursor::directionToString): * Modules/indexeddb/IDBCursor.h: (IDBCursor): * Modules/indexeddb/IDBCursor.idl: * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::transaction): (WebCore): * Modules/indexeddb/IDBDatabase.h: (IDBDatabase): * Modules/indexeddb/IDBDatabase.idl: * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::openCursor): (WebCore): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::openCursor): (IDBIndex): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.idl: * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::openCursor): (WebCore): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::openCursor): (IDBObjectStore): * Modules/indexeddb/IDBObjectStore.idl: * Modules/indexeddb/IDBRequest.cpp: (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::readyState): (WebCore::IDBRequest::markEarlyDeath): (WebCore::IDBRequest::resetReadyState): (WebCore::IDBRequest::abort): (WebCore::IDBRequest::finishCursor): (WebCore::IDBRequest::onSuccess): (WebCore::IDBRequest::stop): * Modules/indexeddb/IDBRequest.h: * Modules/indexeddb/IDBRequest.idl: * Modules/indexeddb/IDBTransaction.cpp: (WebCore): (WebCore::IDBTransaction::mode): (WebCore::IDBTransaction::stringToMode): (WebCore::IDBTransaction::modeToString): * Modules/indexeddb/IDBTransaction.h: (IDBTransaction): * Modules/indexeddb/IDBTransaction.idl: LayoutTests: New test for legacy constants (legacy-constants) and update all other tests to use the new string-based constants. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/constants-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-advance-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-prev-no-duplicate-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-reverse-bug-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-quota-expected.txt: * storage/indexeddb/delete-range-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-generator-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keypath-edges-expected.txt: * storage/indexeddb/keypath-intrinsic-properties-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: Added. * storage/indexeddb/legacy-constants.html: Added. * storage/indexeddb/mozilla/clear-expected.txt: * storage/indexeddb/mozilla/create-index-unique-expected.txt: * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt: * storage/indexeddb/mozilla/cursors-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate.html: * storage/indexeddb/mozilla/indexes-expected.txt: * storage/indexeddb/mozilla/odd-result-order-expected.txt: * storage/indexeddb/mozilla/readwrite-transactions-expected.txt: * storage/indexeddb/mozilla/readyState-expected.txt: * storage/indexeddb/mozilla/resources/clear.js: (clear): * storage/indexeddb/mozilla/resources/create-index-unique.js: (createAndVerifyIndex): * storage/indexeddb/mozilla/resources/create-objectstore-basics.js: (cleanDatabase): * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js: (checkCursorResultsAndSetupMutatingCursor): * storage/indexeddb/mozilla/resources/cursor-mutation.js: (setupMutatingCursor): * storage/indexeddb/mozilla/resources/cursors.js: * storage/indexeddb/mozilla/resources/indexes.js: * storage/indexeddb/mozilla/resources/odd-result-order.js: (addRecord): (deleteRecord): * storage/indexeddb/mozilla/resources/readwrite-transactions.js: (setVersionComplete): (postAdd): (postAdd2): (postPut): (postPut2): (postPut3): (postPut4): (postDelete): (postDelete2): * storage/indexeddb/mozilla/resources/readyState.js: (test): (openSuccess): (setupObjectStore): (getRecord): (finalCheck): * storage/indexeddb/mozilla/resources/versionchange.js: (postSetVersion): (postSetVersion2): * storage/indexeddb/mozilla/versionchange-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/noblobs-expected.txt: * storage/indexeddb/noblobs.html: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/open-during-transaction-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/readonly-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/constants.js: (test): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/cursor-added-bug.js: (openCursor): * storage/indexeddb/resources/cursor-advance.js: (runTest): (testAdvanceIndexNoDupe): (testAdvanceIndexPrev): (testAdvanceIndexPrevNoDupe): * storage/indexeddb/resources/cursor-continue-validity.js: (continueTest): (continueIndexTest): (testModifyContinueOrder): * storage/indexeddb/resources/cursor-continue.js: (ascendingTest): (descendingTest): * storage/indexeddb/resources/cursor-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-inconsistency.js: (openBasicCursor): * storage/indexeddb/resources/cursor-index-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-key-order.js: * storage/indexeddb/resources/cursor-prev-no-duplicate.js: (populateStore): (testFarRangeCursor_closed): (testFarRangeCursor_open): (testFarRangeCursor_indexClosed): (testFarRangeCursor_indexOpen): (testFarRangeCursor_indexKeyOpen): (testFarRangeCursor_indexKeyClosed): (testBoundaryCursor_closed): (testBoundaryCursor_open): (testBoundaryCursor_indexClosed): (testBoundaryCursor_indexOpen): (testBoundaryCursor_indexKeyClosed): (testBoundaryCursor_indexKeyOpen): (testNoDuplicate_closed): (testNoDuplicate_open): (testNoDuplicate_indexKeyClosed): * storage/indexeddb/resources/cursor-primary-key-order.js: (populateStore): * storage/indexeddb/resources/cursor-reverse-bug.js: (populateStore): (testCursor): * storage/indexeddb/resources/cursor-skip-deleted.js: (basicCursorTest): (reverseCursorTest): * storage/indexeddb/resources/cursor-update.js: (openBasicCursor): * storage/indexeddb/resources/data-corruption.js: (addData): (getData): * storage/indexeddb/resources/database-quota.js: (checkQuotaEnforcing): * storage/indexeddb/resources/delete-range.js: (runTests.nextTest): (runTests): * storage/indexeddb/resources/error-causes-abort-by-default.js: (addData): (transactionCompleted): (transactionAborted1): * storage/indexeddb/resources/exception-in-event-aborts.js: (startTest): (transactionAborted1): (transactionAborted2): * storage/indexeddb/resources/factory-deletedatabase.js: (getValue): * storage/indexeddb/resources/index-count.js: * storage/indexeddb/resources/index-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/index-multientry.js: * storage/indexeddb/resources/index-unique.js: (setVersionCompleted): * storage/indexeddb/resources/key-generator.js: (.): * storage/indexeddb/resources/key-type-array.js: * storage/indexeddb/resources/keypath-edges.js: * storage/indexeddb/resources/keypath-intrinsic-properties.js: * storage/indexeddb/resources/legacy-constants.js: Added. (test): (prepareDatabase.openreq.onsuccess.verreq.onsuccess): (prepareDatabase.openreq.onsuccess): (prepareDatabase): (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (openForwardCursor): (openReverseCursor): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionCompleted): * storage/indexeddb/resources/objectstore-basics.js: (addData): (addAgainFailure): * storage/indexeddb/resources/objectstore-count.js: * storage/indexeddb/resources/objectstore-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): * storage/indexeddb/resources/open-during-transaction.js: * storage/indexeddb/resources/opencursor-key.js: * storage/indexeddb/resources/prefetch-bugfix-108071.js: * storage/indexeddb/resources/request-event-propagation.js: (startTest): (transactionAborted): (transactionAborted2): * storage/indexeddb/resources/set_version_blocked.js: (blocked): * storage/indexeddb/resources/transaction-abort.js: (startTest): * storage/indexeddb/resources/transaction-after-close.js: (runFirstRegularTransaction): (firstTransactionComplete): (onSecondOpen): * storage/indexeddb/resources/transaction-basics.js: (testInvalidMode): * storage/indexeddb/resources/transaction-event-propagation.js: (startTest): (dbAbortBubbleCallback): * storage/indexeddb/resources/transaction-rollback.js: (setVersionComplete): (abortCallback): * storage/indexeddb/set_version_blocked-expected.txt: * storage/indexeddb/structured-clone-expected.txt: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-abort-with-js-recursion-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion.html: * storage/indexeddb/transaction-after-close-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/tutorial.html: Canonical link: https://commits.webkit.org/103395@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-07 19:12:00 +00:00
transaction = db.transaction(['store-unique'], 'readwrite')
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
transaction.objectStore('store-unique').put({x: [1, 2, 3], y: 'a'}, 'foo')
success!
Replace an existing record - this should work
transaction.objectStore('store-unique').put({x: [1, 2, 7], y: 'a'}, 'foo')
success!
This should fail the uniqueness constraint on the index, and fail:
transaction.objectStore('store-unique').put({x: [5, 2], y: 'c'}, 'should fail')
IndexedDB: generate index keys for existing data in createIndex in front end https://bugs.webkit.org/show_bug.cgi?id=91125 Patch by Alec Flett <alecflett@chromium.org> on 2012-08-15 Reviewed by Tony Chang. Source/WebCore: Make createIndex() do index key generation in the frontend, rather than the backend. When an index is created, the frontend uses the cursor API to iterate through the values in the backend to generate keys, sending them back to the backend using IDBObjectStore::setIndexKeys() This confines all key injection/extraction to the frontend. The new test verifies the implemented behavior with respect to error handling in degenerate uses of put(), though that behavior is still in discussion as the spec is vague on the proper error behavior. Test: storage/indexeddb/lazy-index-population.html * Modules/indexeddb/IDBCursorBackendImpl.cpp: Make sure that the TaskType propagates throught the cursor and all subsequent continue() calls. (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::continueFunction): (WebCore::IDBCursorBackendImpl::prefetchContinue): * Modules/indexeddb/IDBCursorBackendImpl.h: (WebCore::IDBCursorBackendImpl::create): (IDBCursorBackendImpl): * Modules/indexeddb/IDBObjectStore.cpp: Add an IndexPopulator class to run a cursor from the frontend. (WebCore): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::openCursor): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::openCursor): (IDBObjectStore): (WebCore::IDBObjectStore::createIndex): * Modules/indexeddb/IDBObjectStore.idl: Pass along ScriptContext so that openCursor can be called from createIndex. * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore): (WebCore::makeIndexWriters): (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): (WebCore::IDBObjectStoreBackendImpl::setIndexesReadyInternal): (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::deleteInternal): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::openCursor): (WebCore::IDBObjectStoreBackendImpl::openCursorInternal): * Modules/indexeddb/IDBObjectStoreBackendImpl.h: (IDBObjectStoreBackendImpl): (WebCore::IDBObjectStoreBackendImpl::iterIndexesBegin): (WebCore::IDBObjectStoreBackendImpl::iterIndexesEnd): (WebCore::IDBObjectStoreBackendImpl::backingStore): (WebCore::IDBObjectStoreBackendImpl::databaseId): * Modules/indexeddb/IDBObjectStoreBackendInterface.h: * Modules/indexeddb/IDBRequest.cpp: Allow requests to keep their own TaskType, to give certain requests priority over others. (WebCore::IDBRequest::create): (WebCore): (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::abort): * Modules/indexeddb/IDBRequest.h: (IDBRequest): (WebCore::IDBRequest::taskType): * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Introduce a second, higher priority event queue, m_preemptiveTaskQueue, which takes priority over the regular task queue. (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl): (WebCore::IDBTransactionBackendImpl::scheduleTask): (WebCore::IDBTransactionBackendImpl::isTaskQueueEmpty): (WebCore): (WebCore::IDBTransactionBackendImpl::commit): (WebCore::IDBTransactionBackendImpl::taskTimerFired): (WebCore::IDBTransactionBackendImpl::taskEventTimerFired): * Modules/indexeddb/IDBTransactionBackendImpl.h: (WebCore::IDBTransactionBackendImpl::scheduleTask): (IDBTransactionBackendImpl): (WebCore::IDBTransactionBackendImpl::addEarlyEvent): (WebCore::IDBTransactionBackendImpl::didCompleteEarlyEvent): * Modules/indexeddb/IDBVersionChangeRequest.cpp: (WebCore::IDBVersionChangeRequest::IDBVersionChangeRequest): Source/WebKit/chromium: Add Chromium API methods to let the renderer process tell the browser process about indexing progress. * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::openCursor): * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::setIndexKeys): (WebKit): (WebKit::IDBObjectStoreBackendProxy::setIndexesReady): (WebKit::IDBObjectStoreBackendProxy::openCursor): * src/IDBObjectStoreBackendProxy.h: (IDBObjectStoreBackendProxy): * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::setIndexKeys): (WebKit): (WebKit::WebIDBObjectStoreImpl::setIndexesReady): (WebKit::WebIDBObjectStoreImpl::openCursor): * src/WebIDBObjectStoreImpl.h: (WebIDBObjectStoreImpl): LayoutTests: The transaction should be aborted when existing data in an objectStore causes uniqueness errors during index creation. * storage/indexeddb/lazy-index-population-expected.txt: Added. * storage/indexeddb/lazy-index-population.html: Added. Canonical link: https://commits.webkit.org/111986@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@125728 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-08-16 00:50:52 +00:00
Request failed, as expected (ConstraintError)
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
Transaction aborted as expected
Create an index on a populated store
IndexedDB: test conversion batch 3 https://bugs.webkit.org/show_bug.cgi?id=102168 Reviewed by Tony Chang. These were all pretty straightforward. metadata.html could include some additional tests that check the metadata after a versionchange transaction aborts, but I think that's tested in one of the intversion tests. * storage/indexeddb/exceptions-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-duplicate-keypaths-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/metadata-expected.txt: * storage/indexeddb/resources/database-basics.js: Fix failure when run as a chromium browser test. * storage/indexeddb/resources/exceptions.js: Moved some asserts from running before the database is opened to afterward but they appear to be testing the same thing. (transactionComplete): close can't proceed until the transactions are complete, something setVersion didn't have to deal with. * storage/indexeddb/resources/factory-deletedatabase.js: The conditions under which deleteDatabase is called in this test is _slightly_ different. Previously, deleteDatabase was called from inside a versionchange transaction, causing the original connection to receive a versionchange event. With upgradeneeded we have to close the original connection before entering a versionchange transaction, so the second connection is now what closes in response to the deleteDatabase's versionchange event. * storage/indexeddb/resources/index-duplicate-keypaths.js: (testCollideAutoIncrementSetup): (testCollideAutoIncrement): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (createIndexOnStoreWithData): * storage/indexeddb/resources/index-population.js: (prepareDatabase.request.onsuccess): (prepareDatabase): (doSetVersion2): (setVersion2): (setVersion2Abort): * storage/indexeddb/resources/metadata.js: (prepareDatabase): (snapshotConnection1): (secondOpen.request.onupgradeneeded): (secondOpen.request.onsuccess): (secondOpen): (thirdOpen.request.onupgradeneeded): (thirdOpen.request.onerror): (thirdOpen): (fourthOpen.request.onupgradeneeded): (fourthOpen.request.onsuccess): (fourthOpen): (checkState): Canonical link: https://commits.webkit.org/120385@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@134661 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-11-14 21:52:49 +00:00
db.close()
indexedDB.open(dbname, 2)
db = event.target.result
trans = event.target.transaction
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
store = trans.objectStore('store')
IndexedDB: Rename "multientry" to "multiEntry" per spec change https://bugs.webkit.org/show_bug.cgi?id=73578 Patch by Joshua Bell <jsbell@chromium.org> on 2011-12-02 Reviewed by Darin Fisher. Source/WebCore: * storage/IDBIndex.h: (WebCore::IDBIndex::multiEntry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multiEntry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multiEntry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multiEntry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multiEntry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-multientry.html: Canonical link: https://commits.webkit.org/90295@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-02 18:31:40 +00:00
store.createIndex('index-new', 'x', {multiEntry: true})
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
Verifying index: index-new
IndexedDB: Replace numeric constants with strings https://bugs.webkit.org/show_bug.cgi?id=84894 Patch by Alec Flett <alecflett@chromium.org> on 2012-05-07 Reviewed by Tony Chang. Source/WebCore: Test: storage/indexeddb/legacy-constants.html Update IDBObjectStore.openCursor, IDBIndex.openCursor, IDBIndex.openKeyCursor, IDBDatabase.transaction, IDBCursor.direction, IDBTransaction.mode, and IDBRequest.readyState to meet the latest spec. All of these APIs now support string-based values in addition to the legacy/deprecated enum-based values. * Modules/indexeddb/IDBCursor.cpp: (WebCore): (WebCore::IDBCursor::direction): (WebCore::IDBCursor::stringToDirection): (WebCore::IDBCursor::directionToString): * Modules/indexeddb/IDBCursor.h: (IDBCursor): * Modules/indexeddb/IDBCursor.idl: * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::transaction): (WebCore): * Modules/indexeddb/IDBDatabase.h: (IDBDatabase): * Modules/indexeddb/IDBDatabase.idl: * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::openCursor): (WebCore): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::openCursor): (IDBIndex): (WebCore::IDBIndex::openKeyCursor): * Modules/indexeddb/IDBIndex.idl: * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::openCursor): (WebCore): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::openCursor): (IDBObjectStore): * Modules/indexeddb/IDBObjectStore.idl: * Modules/indexeddb/IDBRequest.cpp: (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::readyState): (WebCore::IDBRequest::markEarlyDeath): (WebCore::IDBRequest::resetReadyState): (WebCore::IDBRequest::abort): (WebCore::IDBRequest::finishCursor): (WebCore::IDBRequest::onSuccess): (WebCore::IDBRequest::stop): * Modules/indexeddb/IDBRequest.h: * Modules/indexeddb/IDBRequest.idl: * Modules/indexeddb/IDBTransaction.cpp: (WebCore): (WebCore::IDBTransaction::mode): (WebCore::IDBTransaction::stringToMode): (WebCore::IDBTransaction::modeToString): * Modules/indexeddb/IDBTransaction.h: (IDBTransaction): * Modules/indexeddb/IDBTransaction.idl: LayoutTests: New test for legacy constants (legacy-constants) and update all other tests to use the new string-based constants. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/constants-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-advance-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-prev-no-duplicate-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-reverse-bug-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-quota-expected.txt: * storage/indexeddb/delete-range-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-generator-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keypath-edges-expected.txt: * storage/indexeddb/keypath-intrinsic-properties-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: Added. * storage/indexeddb/legacy-constants.html: Added. * storage/indexeddb/mozilla/clear-expected.txt: * storage/indexeddb/mozilla/create-index-unique-expected.txt: * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-expected.txt: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt: * storage/indexeddb/mozilla/cursors-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate-expected.txt: * storage/indexeddb/mozilla/index-prev-no-duplicate.html: * storage/indexeddb/mozilla/indexes-expected.txt: * storage/indexeddb/mozilla/odd-result-order-expected.txt: * storage/indexeddb/mozilla/readwrite-transactions-expected.txt: * storage/indexeddb/mozilla/readyState-expected.txt: * storage/indexeddb/mozilla/resources/clear.js: (clear): * storage/indexeddb/mozilla/resources/create-index-unique.js: (createAndVerifyIndex): * storage/indexeddb/mozilla/resources/create-objectstore-basics.js: (cleanDatabase): * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js: (checkCursorResultsAndSetupMutatingCursor): * storage/indexeddb/mozilla/resources/cursor-mutation.js: (setupMutatingCursor): * storage/indexeddb/mozilla/resources/cursors.js: * storage/indexeddb/mozilla/resources/indexes.js: * storage/indexeddb/mozilla/resources/odd-result-order.js: (addRecord): (deleteRecord): * storage/indexeddb/mozilla/resources/readwrite-transactions.js: (setVersionComplete): (postAdd): (postAdd2): (postPut): (postPut2): (postPut3): (postPut4): (postDelete): (postDelete2): * storage/indexeddb/mozilla/resources/readyState.js: (test): (openSuccess): (setupObjectStore): (getRecord): (finalCheck): * storage/indexeddb/mozilla/resources/versionchange.js: (postSetVersion): (postSetVersion2): * storage/indexeddb/mozilla/versionchange-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/noblobs-expected.txt: * storage/indexeddb/noblobs.html: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/open-during-transaction-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/readonly-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/constants.js: (test): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/cursor-added-bug.js: (openCursor): * storage/indexeddb/resources/cursor-advance.js: (runTest): (testAdvanceIndexNoDupe): (testAdvanceIndexPrev): (testAdvanceIndexPrevNoDupe): * storage/indexeddb/resources/cursor-continue-validity.js: (continueTest): (continueIndexTest): (testModifyContinueOrder): * storage/indexeddb/resources/cursor-continue.js: (ascendingTest): (descendingTest): * storage/indexeddb/resources/cursor-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-inconsistency.js: (openBasicCursor): * storage/indexeddb/resources/cursor-index-delete.js: (openCursor): (addObject): * storage/indexeddb/resources/cursor-key-order.js: * storage/indexeddb/resources/cursor-prev-no-duplicate.js: (populateStore): (testFarRangeCursor_closed): (testFarRangeCursor_open): (testFarRangeCursor_indexClosed): (testFarRangeCursor_indexOpen): (testFarRangeCursor_indexKeyOpen): (testFarRangeCursor_indexKeyClosed): (testBoundaryCursor_closed): (testBoundaryCursor_open): (testBoundaryCursor_indexClosed): (testBoundaryCursor_indexOpen): (testBoundaryCursor_indexKeyClosed): (testBoundaryCursor_indexKeyOpen): (testNoDuplicate_closed): (testNoDuplicate_open): (testNoDuplicate_indexKeyClosed): * storage/indexeddb/resources/cursor-primary-key-order.js: (populateStore): * storage/indexeddb/resources/cursor-reverse-bug.js: (populateStore): (testCursor): * storage/indexeddb/resources/cursor-skip-deleted.js: (basicCursorTest): (reverseCursorTest): * storage/indexeddb/resources/cursor-update.js: (openBasicCursor): * storage/indexeddb/resources/data-corruption.js: (addData): (getData): * storage/indexeddb/resources/database-quota.js: (checkQuotaEnforcing): * storage/indexeddb/resources/delete-range.js: (runTests.nextTest): (runTests): * storage/indexeddb/resources/error-causes-abort-by-default.js: (addData): (transactionCompleted): (transactionAborted1): * storage/indexeddb/resources/exception-in-event-aborts.js: (startTest): (transactionAborted1): (transactionAborted2): * storage/indexeddb/resources/factory-deletedatabase.js: (getValue): * storage/indexeddb/resources/index-count.js: * storage/indexeddb/resources/index-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/index-multientry.js: * storage/indexeddb/resources/index-unique.js: (setVersionCompleted): * storage/indexeddb/resources/key-generator.js: (.): * storage/indexeddb/resources/key-type-array.js: * storage/indexeddb/resources/keypath-edges.js: * storage/indexeddb/resources/keypath-intrinsic-properties.js: * storage/indexeddb/resources/legacy-constants.js: Added. (test): (prepareDatabase.openreq.onsuccess.verreq.onsuccess): (prepareDatabase.openreq.onsuccess): (prepareDatabase): (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (openForwardCursor): (openReverseCursor): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionCompleted): * storage/indexeddb/resources/objectstore-basics.js: (addData): (addAgainFailure): * storage/indexeddb/resources/objectstore-count.js: * storage/indexeddb/resources/objectstore-cursor.js: (runNextTest): (testNullKeyRange): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): * storage/indexeddb/resources/open-during-transaction.js: * storage/indexeddb/resources/opencursor-key.js: * storage/indexeddb/resources/prefetch-bugfix-108071.js: * storage/indexeddb/resources/request-event-propagation.js: (startTest): (transactionAborted): (transactionAborted2): * storage/indexeddb/resources/set_version_blocked.js: (blocked): * storage/indexeddb/resources/transaction-abort.js: (startTest): * storage/indexeddb/resources/transaction-after-close.js: (runFirstRegularTransaction): (firstTransactionComplete): (onSecondOpen): * storage/indexeddb/resources/transaction-basics.js: (testInvalidMode): * storage/indexeddb/resources/transaction-event-propagation.js: (startTest): (dbAbortBubbleCallback): * storage/indexeddb/resources/transaction-rollback.js: (setVersionComplete): (abortCallback): * storage/indexeddb/set_version_blocked-expected.txt: * storage/indexeddb/structured-clone-expected.txt: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-abort-with-js-recursion-expected.txt: * storage/indexeddb/transaction-abort-with-js-recursion.html: * storage/indexeddb/transaction-after-close-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/tutorial.html: Canonical link: https://commits.webkit.org/103395@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-07 19:12:00 +00:00
transaction = db.transaction(['store'], 'readonly')
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
transaction.objectStore('store').index('index-new').openCursor()
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 1
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
PASS cursor.key is 1
PASS cursor.primaryKey is "oh"
PASS cursor.value.y is "e"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 2
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 3
PASS cursor.primaryKey is "foo"
PASS cursor.value.y is "a"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 4
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 5
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS ex is non-null.
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS cursor.key is 6
PASS cursor.primaryKey is "bar"
PASS cursor.value.y is "b"
IndexedDB: Implement spec behavior for multiEntry indexes with invalid/duplicate subkeys https://bugs.webkit.org/show_bug.cgi?id=86123 Patch by Alec Flett <alecflett@chromium.org> on 2012-06-21 Reviewed by Darin Fisher. Source/WebCore: Distinguish between an actual invalid IDBKey, and an array of possibly-invalid subkeys by making IDBKey::isValid() check subkeys if the type is an array. Introduce a new way to transform an IDBKey into a multiEntry-specific IDBKey, (IDBKey::createMultiEntryArray) throwing out duplicates and invalid keys. Use it when storing index entries for multiEntry indexes. No new tests: existing tests have been altered to include new behavior. * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::continueFunction): * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): * Modules/indexeddb/IDBKey.cpp: (WebCore::IDBKey::isValid): (WebCore): * Modules/indexeddb/IDBKey.h: (WebCore::IDBKey::createMultiEntryArray): (IDBKey): * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): * Modules/indexeddb/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord): (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord): * Modules/indexeddb/IDBLevelDBCoding.cpp: (WebCore::IDBLevelDBCoding::encodeIDBKey): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore): * bindings/v8/IDBBindingUtilities.cpp: (WebCore::createIDBKeyFromValue): Source/WebKit/chromium: Add matching isValid() to WebIDBKey to match the one in IDBKey. * public/WebIDBKey.h: * src/WebIDBKey.cpp: (WebKit::WebIDBKey::isValid): (WebKit): * src/WebIDBKeyRange.cpp: (WebKit::WebIDBKeyRange::assign): LayoutTests: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (addData): (verifyIndexes.request.onsuccess): (verifyIndexes): (verifyUniqueConstraint.request.onsuccess.request.onsuccess.request.onerror): (verifyUniqueConstraint.request.onsuccess.request.onsuccess): (verifyUniqueConstraint.request.onsuccess): (verifyUniqueConstraint): Canonical link: https://commits.webkit.org/107555@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-06-21 22:28:40 +00:00
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 7
PASS cursor.primaryKey is "baz"
PASS cursor.value.y is "c"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 8
PASS cursor.primaryKey is "baz"
PASS cursor.value.y is "c"
cursor.continue()
cursor = event.target.result
PASS ex is non-null.
PASS cursor.key is 9
PASS cursor.primaryKey is "bloop"
PASS cursor.value.y is "d"
cursor.continue()
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
cursor = event.target.result
IndexedDB layout tests should make better use of test library functions https://bugs.webkit.org/show_bug.cgi?id=86932 Reviewed by Ojan Vafai. Use functions like shouldBeEqualToString, shouldBeNull, evalAndExpectException and so forth where possible. * storage/indexeddb/basics-expected.txt: * storage/indexeddb/basics-workers-expected.txt: * storage/indexeddb/create-object-store-options-expected.txt: * storage/indexeddb/createObjectStore-null-name-expected.txt: * storage/indexeddb/cursor-added-bug-expected.txt: * storage/indexeddb/cursor-continue-expected.txt: * storage/indexeddb/cursor-continue-validity-expected.txt: * storage/indexeddb/cursor-delete-expected.txt: * storage/indexeddb/cursor-inconsistency-expected.txt: * storage/indexeddb/cursor-index-delete-expected.txt: * storage/indexeddb/cursor-key-order-expected.txt: * storage/indexeddb/cursor-primary-key-order-expected.txt: * storage/indexeddb/cursor-skip-deleted-expected.txt: * storage/indexeddb/cursor-update-expected.txt: * storage/indexeddb/data-corruption-expected.txt: * storage/indexeddb/database-basics-expected.txt: * storage/indexeddb/duplicates-expected.txt: * storage/indexeddb/error-causes-abort-by-default-expected.txt: * storage/indexeddb/exception-in-event-aborts-expected.txt: * storage/indexeddb/factory-basics-expected.txt: * storage/indexeddb/factory-cmp-expected.txt: * storage/indexeddb/factory-deletedatabase-expected.txt: * storage/indexeddb/get-keyrange-expected.txt: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics-workers-expected.txt: * storage/indexeddb/index-count-expected.txt: * storage/indexeddb/index-cursor-expected.txt: * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/index-population-expected.txt: * storage/indexeddb/index-unique-expected.txt: * storage/indexeddb/key-type-array-expected.txt: * storage/indexeddb/keyrange-expected.txt: * storage/indexeddb/legacy-constants-expected.txt: * storage/indexeddb/mutating-cursor-expected.txt: * storage/indexeddb/objectstore-autoincrement-expected.txt: * storage/indexeddb/objectstore-basics-expected.txt: * storage/indexeddb/objectstore-basics-workers-expected.txt: * storage/indexeddb/objectstore-clear-expected.txt: * storage/indexeddb/objectstore-count-expected.txt: * storage/indexeddb/objectstore-cursor-expected.txt: * storage/indexeddb/objectstore-removeobjectstore-expected.txt: * storage/indexeddb/open-cursor-expected.txt: * storage/indexeddb/opencursor-key-expected.txt: * storage/indexeddb/prefetch-bugfix-108071-expected.txt: * storage/indexeddb/queued-commands-expected.txt: * storage/indexeddb/request-event-propagation-expected.txt: * storage/indexeddb/resources/basics.js: (test): (openCallback): * storage/indexeddb/resources/create-object-store-options.js: (setVersionComplete): * storage/indexeddb/resources/createObjectStore-null-name.js: (createAndPopulateObjectStore): * storage/indexeddb/resources/cursor-added-bug.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-continue-validity.js: (deleteExisting): * storage/indexeddb/resources/cursor-continue.js: (deleteExisting): * storage/indexeddb/resources/cursor-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-inconsistency.js: (setVersionSuccess): (checkCursor): * storage/indexeddb/resources/cursor-index-delete.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-key-order.js: (checkStore.curreq.onsuccess.getreq.onsuccess): (checkStore.curreq.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-primary-key-order.js: (checkStore.cursorRequest.onsuccess): (checkStore): * storage/indexeddb/resources/cursor-skip-deleted.js: (setVersionSuccess): * storage/indexeddb/resources/cursor-update.js: (setVersionSuccess): (basicUpdateCursor.request.onsuccess): (basicUpdateCursor): (autoIncrementUpdateCursor.request.onsuccess): (autoIncrementUpdateCursor): (keyPathUpdateCursor.request.onsuccess): (keyPathUpdateCursor): (keyCursor): * storage/indexeddb/resources/data-corruption.js: (setVersionSuccess): (doCheck): * storage/indexeddb/resources/database-basics.js: (setVersionSuccess): (createAnotherObjectStore): * storage/indexeddb/resources/database-quota.js: (setVersionSuccess): * storage/indexeddb/resources/duplicates.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (last): * storage/indexeddb/resources/error-causes-abort-by-default.js: (deleteExisting): * storage/indexeddb/resources/exception-in-event-aborts.js: (deleteExisting): * storage/indexeddb/resources/factory-basics.js: (test): * storage/indexeddb/resources/factory-cmp.js: (test): (testValidKeys): (testIdenticalKeys): * storage/indexeddb/resources/factory-deletedatabase.js: (deleteExisting): * storage/indexeddb/resources/get-keyrange.js: (deleteExisting): * storage/indexeddb/resources/index-basics.js: (deleteExisting): (cursor1Continue): (cursor1Continue2): (cursor1Continue3): (openObjectCursor): (cursor2Continue): (cursor2Continue2): (cursor2Continue3): (last): * storage/indexeddb/resources/index-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/index-cursor.js: (deleteExisting): * storage/indexeddb/resources/index-multientry.js: (prepareDatabase): (verifyIndexes.request.onsuccess): (verifyIndexes): * storage/indexeddb/resources/index-population.js: (setVersion2Abort): * storage/indexeddb/resources/index-unique.js: (deleteExisting): (cursorSuccess): (keyCursorSuccess): * storage/indexeddb/resources/key-type-array.js: (test): * storage/indexeddb/resources/keyrange.js: (test): * storage/indexeddb/resources/legacy-constants.js: (populateStore): (checkNext.request.onsuccess): (checkNext): (checkNextNoDuplicate.request.onsuccess): (checkNextNoDuplicate): (checkPrev.request.onsuccess): (checkPrev): (checkPrevNoDuplicate.request.onsuccess): (checkPrevNoDuplicate): * storage/indexeddb/resources/mutating-cursor.js: (setVersionSuccess): * storage/indexeddb/resources/objectstore-autoincrement.js: (setVersionSuccess): (testLongKeyPath.cursorRequest.onsuccess): (testLongKeyPath): * storage/indexeddb/resources/objectstore-basics.js: (setVersionSuccess): (createIndex): (createAnotherIndex): (addDateSuccess): (addAgainFailure): * storage/indexeddb/resources/objectstore-clear.js: (deleteExisting): * storage/indexeddb/resources/objectstore-count.js: (prepareDatabase): (verifyCount.request.onsuccess): (verifyCount): (verifyCountWithRange.nextTest.request.onsuccess): (verifyCountWithRange.nextTest): (verifyCountWithRange): (verifyCountWithKey.nextTest.request.onsuccess): (verifyCountWithKey.nextTest): (verifyCountWithKey): * storage/indexeddb/resources/objectstore-cursor.js: (deleteExisting): * storage/indexeddb/resources/objectstore-removeobjectstore.js: (deleteExisting): (deleteObjectStore): * storage/indexeddb/resources/open-cursor.js: (cursorWithKeySuccess): (cursorSuccess): (setVersionSuccess): * storage/indexeddb/resources/opencursor-key.js: (testObjectStore.request.onsuccess): (testObjectStore): (testIndex.request.onsuccess): (testIndex): (testIndexWithKey.request.onsuccess): (testIndexWithKey): * storage/indexeddb/resources/prefetch-bugfix-108071.js: (setVersionSuccess): * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/request-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/setVersion-null.js: (postSetVersion): * storage/indexeddb/resources/shared.js: (evalAndExpectExceptionClass): * storage/indexeddb/resources/transaction-abort.js: (deleteExisting): * storage/indexeddb/resources/transaction-and-objectstore-calls.js: (created): (afterComplete): * storage/indexeddb/resources/transaction-basics.js: (addRemoveIDBObjects): (addRemoveAddIDBObjects): (addIDBObjects): (addIDBObjectsAndCommit): (removeIDBObjects): (setVersionSuccess): (testDOMStringList): * storage/indexeddb/resources/transaction-event-propagation.js: (deleteExisting): * storage/indexeddb/resources/transaction-rollback.js: (addSuccess): (getSuccess): * storage/indexeddb/resources/two-version-changes.js: (test): * storage/indexeddb/resources/values-odd-types.js: (openACursor.request.onsuccess): (openACursor): * storage/indexeddb/setVersion-null-expected.txt: * storage/indexeddb/transaction-abort-expected.txt: * storage/indexeddb/transaction-and-objectstore-calls-expected.txt: * storage/indexeddb/transaction-basics-expected.txt: * storage/indexeddb/transaction-event-propagation-expected.txt: * storage/indexeddb/transaction-rollback-expected.txt: * storage/indexeddb/two-version-changes-expected.txt: * storage/indexeddb/values-odd-types-expected.txt: Canonical link: https://commits.webkit.org/104601@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@117702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-05-19 23:36:46 +00:00
PASS expected.length is 0
IndexedDB: Migrate backend ObjectStore calls to use transaction id https://bugs.webkit.org/show_bug.cgi?id=102741 Reviewed by Tony Chang. Source/WebCore: Fully migrate 8 core data calls (get, put, setIndexKeys, setIndexesReady, openCursor, count, deleteRange, and clear) into IDBDatabaseBackendImpl, combining common code from IDBObjectStoreBackendImpl and IDBIndexBackendImpl in order to simplify the backend interface. These calls are now implemented in terms of an int64_t-based transactionId rather than an IDBTransactionBackendInterface, which simplifies the ownership model between the frontend and the backend. In addition, remove references to IDBObjectStoreBackend* from IDBIndex, as it is no longer needed. A few duplicate IDB_TRACE methods have been removed from wrapper methods that call another method that already have IDB_TRACE's. Finally, IDBCursorBackendImpl now no longer holds onto an IDBObjectStoreBackendImpl*, so its destruction and member variables are simplified, and reordered to match proper destruction order. * Modules/indexeddb/IDBCursorBackendImpl.cpp: Reordered to account for proper destruction. (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::deleteFunction): * Modules/indexeddb/IDBCursorBackendImpl.h: (WebCore::IDBCursorBackendImpl::create): (IDBCursorBackendImpl): * Modules/indexeddb/IDBDatabase.h: (WebCore::IDBDatabase::backend): (IDBDatabase): * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: (GetOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*RetrievalOperation (WebCore::GetOperation::create): (WebCore::GetOperation::GetOperation): (WebCore): (PutOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*StorageOperation. (WebCore::PutOperation::create): (WebCore::PutOperation::PutOperation): (SetIndexesReadyOperation): Moved from IDBObjectStoreBackendImpl::IndexesReadyOperation (WebCore::SetIndexesReadyOperation::create): (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation): (OpenCursorOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::Open*CursorOperation (WebCore::OpenCursorOperation::create): (WebCore::OpenCursorOperation::OpenCursorOperation): (CountOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::CountOperation (WebCore::CountOperation::create): (WebCore::CountOperation::CountOperation): (DeleteRangeOperation): Moved from IDBObjectStoreBackendImpl::DeleteOperation (WebCore::DeleteRangeOperation::create): (WebCore::DeleteRangeOperation::DeleteRangeOperation): (ClearOperation): Moved from IDBObjectStoreBackendImpl::ClearOperation (WebCore::ClearOperation::create): (WebCore::ClearOperation::ClearOperation): (WebCore::IDBDatabaseBackendImpl::get): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::get* (WebCore::GetOperation::perform): (WebCore::IDBDatabaseBackendImpl::put): Moved from IDBObjectStoreBackendImpl::put (WebCore::PutOperation::perform): (WebCore::IDBDatabaseBackendImpl::setIndexKeys): Moved from IDBObjectStoreBackendImpl::setIndexKeys (WebCore::IDBDatabaseBackendImpl::setIndexesReady): (WebCore::SetIndexesReadyOperation::perform): (WebCore::IDBDatabaseBackendImpl::openCursor): (WebCore::IDBDatabaseBackendImpl::count): (WebCore::CountOperation::perform): (WebCore::IDBDatabaseBackendImpl::deleteRange): (WebCore::DeleteRangeOperation::perform): (WebCore::IDBDatabaseBackendImpl::clear): (WebCore::ClearOperation::perform): (WebCore::OpenCursorOperation::perform): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::IDBIndex): (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::count): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): (WebCore::IDBIndex::backendDB): (WebCore): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::create): (IDBIndex): * Modules/indexeddb/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * Modules/indexeddb/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::openCursor): (WebCore::IDBIndexBackendImpl::count): (WebCore::IDBIndexBackendImpl::openKeyCursor): (WebCore::IDBIndexBackendImpl::get): (WebCore::IDBIndexBackendImpl::getKey): (IDBIndexBackendImpl): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::clear): (WebCore): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::index): (WebCore::IDBObjectStore::openCursor): (WebCore::IDBObjectStore::count): (WebCore::IDBObjectStore::backendDB): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::id): (IDBObjectStore): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): (WebCore::IDBObjectStoreBackendImpl::generateKey): (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator): * Modules/indexeddb/IDBObjectStoreBackendImpl.h: (WebCore::IDBObjectStoreBackendImpl::get): (WebCore::IDBObjectStoreBackendImpl::put): (WebCore::IDBObjectStoreBackendImpl::deleteFunction): (WebCore::IDBObjectStoreBackendImpl::clear): (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): (WebCore::IDBObjectStoreBackendImpl::openCursor): (WebCore::IDBObjectStoreBackendImpl::count): (IDBObjectStoreBackendImpl): * Modules/indexeddb/IDBTransactionBackendImpl.h: (WebCore::IDBTransactionBackendImpl::database): (IDBTransactionBackendImpl): Source/WebKit/chromium: Fix a bug where an array was initialized with a large empty buffer, clean up whitespace, and update to match signatures that changed in WebCore. * public/WebIDBDatabase.h: (WebKit::WebIDBDatabase::clear): * src/WebIDBDatabaseImpl.cpp: (WebKit::WebIDBDatabaseImpl::put): * src/WebIDBIndexImpl.cpp: * tests/IDBDatabaseBackendTest.cpp: LayoutTests: Add additional count() tests for multi-entry indexes, not previously covered. * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (.transaction.oncomplete): (verifyCount.request.onsuccess.request.onsuccess): (verifyCount.request.onsuccess): (verifyCount): Canonical link: https://commits.webkit.org/124370@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138900 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-01-05 20:42:38 +00:00
transaction = db.transaction(['store'])
transaction.objectStore('store').index('index')
index.count()
PASS event.target.result is 10
IndexedDB: Migrate backend ObjectStore calls to use transaction id https://bugs.webkit.org/show_bug.cgi?id=102741 Reviewed by Tony Chang. Source/WebCore: Fully migrate 8 core data calls (get, put, setIndexKeys, setIndexesReady, openCursor, count, deleteRange, and clear) into IDBDatabaseBackendImpl, combining common code from IDBObjectStoreBackendImpl and IDBIndexBackendImpl in order to simplify the backend interface. These calls are now implemented in terms of an int64_t-based transactionId rather than an IDBTransactionBackendInterface, which simplifies the ownership model between the frontend and the backend. In addition, remove references to IDBObjectStoreBackend* from IDBIndex, as it is no longer needed. A few duplicate IDB_TRACE methods have been removed from wrapper methods that call another method that already have IDB_TRACE's. Finally, IDBCursorBackendImpl now no longer holds onto an IDBObjectStoreBackendImpl*, so its destruction and member variables are simplified, and reordered to match proper destruction order. * Modules/indexeddb/IDBCursorBackendImpl.cpp: Reordered to account for proper destruction. (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl): (WebCore::IDBCursorBackendImpl::deleteFunction): * Modules/indexeddb/IDBCursorBackendImpl.h: (WebCore::IDBCursorBackendImpl::create): (IDBCursorBackendImpl): * Modules/indexeddb/IDBDatabase.h: (WebCore::IDBDatabase::backend): (IDBDatabase): * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: (GetOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*RetrievalOperation (WebCore::GetOperation::create): (WebCore::GetOperation::GetOperation): (WebCore): (PutOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*StorageOperation. (WebCore::PutOperation::create): (WebCore::PutOperation::PutOperation): (SetIndexesReadyOperation): Moved from IDBObjectStoreBackendImpl::IndexesReadyOperation (WebCore::SetIndexesReadyOperation::create): (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation): (OpenCursorOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::Open*CursorOperation (WebCore::OpenCursorOperation::create): (WebCore::OpenCursorOperation::OpenCursorOperation): (CountOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::CountOperation (WebCore::CountOperation::create): (WebCore::CountOperation::CountOperation): (DeleteRangeOperation): Moved from IDBObjectStoreBackendImpl::DeleteOperation (WebCore::DeleteRangeOperation::create): (WebCore::DeleteRangeOperation::DeleteRangeOperation): (ClearOperation): Moved from IDBObjectStoreBackendImpl::ClearOperation (WebCore::ClearOperation::create): (WebCore::ClearOperation::ClearOperation): (WebCore::IDBDatabaseBackendImpl::get): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::get* (WebCore::GetOperation::perform): (WebCore::IDBDatabaseBackendImpl::put): Moved from IDBObjectStoreBackendImpl::put (WebCore::PutOperation::perform): (WebCore::IDBDatabaseBackendImpl::setIndexKeys): Moved from IDBObjectStoreBackendImpl::setIndexKeys (WebCore::IDBDatabaseBackendImpl::setIndexesReady): (WebCore::SetIndexesReadyOperation::perform): (WebCore::IDBDatabaseBackendImpl::openCursor): (WebCore::IDBDatabaseBackendImpl::count): (WebCore::CountOperation::perform): (WebCore::IDBDatabaseBackendImpl::deleteRange): (WebCore::DeleteRangeOperation::perform): (WebCore::IDBDatabaseBackendImpl::clear): (WebCore::ClearOperation::perform): (WebCore::OpenCursorOperation::perform): * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::IDBIndex): (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::count): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey): (WebCore::IDBIndex::backendDB): (WebCore): * Modules/indexeddb/IDBIndex.h: (WebCore::IDBIndex::create): (IDBIndex): * Modules/indexeddb/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * Modules/indexeddb/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::openCursor): (WebCore::IDBIndexBackendImpl::count): (WebCore::IDBIndexBackendImpl::openKeyCursor): (WebCore::IDBIndexBackendImpl::get): (WebCore::IDBIndexBackendImpl::getKey): (IDBIndexBackendImpl): * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::clear): (WebCore): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::index): (WebCore::IDBObjectStore::openCursor): (WebCore::IDBObjectStore::count): (WebCore::IDBObjectStore::backendDB): * Modules/indexeddb/IDBObjectStore.h: (WebCore::IDBObjectStore::id): (IDBObjectStore): * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): (WebCore::IDBObjectStoreBackendImpl::generateKey): (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator): * Modules/indexeddb/IDBObjectStoreBackendImpl.h: (WebCore::IDBObjectStoreBackendImpl::get): (WebCore::IDBObjectStoreBackendImpl::put): (WebCore::IDBObjectStoreBackendImpl::deleteFunction): (WebCore::IDBObjectStoreBackendImpl::clear): (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): (WebCore::IDBObjectStoreBackendImpl::openCursor): (WebCore::IDBObjectStoreBackendImpl::count): (IDBObjectStoreBackendImpl): * Modules/indexeddb/IDBTransactionBackendImpl.h: (WebCore::IDBTransactionBackendImpl::database): (IDBTransactionBackendImpl): Source/WebKit/chromium: Fix a bug where an array was initialized with a large empty buffer, clean up whitespace, and update to match signatures that changed in WebCore. * public/WebIDBDatabase.h: (WebKit::WebIDBDatabase::clear): * src/WebIDBDatabaseImpl.cpp: (WebKit::WebIDBDatabaseImpl::put): * src/WebIDBIndexImpl.cpp: * tests/IDBDatabaseBackendTest.cpp: LayoutTests: Add additional count() tests for multi-entry indexes, not previously covered. * storage/indexeddb/index-multientry-expected.txt: * storage/indexeddb/resources/index-multientry.js: (.transaction.oncomplete): (verifyCount.request.onsuccess.request.onsuccess): (verifyCount.request.onsuccess): (verifyCount): Canonical link: https://commits.webkit.org/124370@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138900 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-01-05 20:42:38 +00:00
index.count(7)
PASS event.target.result is 1
IndexedDB: Implement IDBIndex multientry feature https://bugs.webkit.org/show_bug.cgi?id=73232 Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-30 Reviewed by Tony Chang. Source/WebCore: The multientry flag is used when populating indexes, either when the index is created on an existing store or as new values are added to the store. Per the spec the semantics are: if the flag is set and the index key is calculated to be an array, each member of the array is used as an index key instead. Test: storage/indexeddb/index-multientry.html * storage/IDBBackingStore.h: * storage/IDBIndex.h: (WebCore::IDBIndex::multientry): * storage/IDBIndex.idl: * storage/IDBIndexBackendImpl.cpp: (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl): * storage/IDBIndexBackendImpl.h: (WebCore::IDBIndexBackendImpl::create): (WebCore::IDBIndexBackendImpl::multientry): * storage/IDBIndexBackendInterface.h: * storage/IDBLevelDBBackingStore.cpp: (WebCore::checkIndexAndMetaDataKey): (WebCore::IDBLevelDBBackingStore::getIndexes): (WebCore::IDBLevelDBBackingStore::createIndex): * storage/IDBLevelDBBackingStore.h: * storage/IDBLevelDBCoding.cpp: * storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::createIndex): * storage/IDBObjectStoreBackendImpl.cpp: (WebCore::IDBObjectStoreBackendImpl::putInternal): (WebCore::IDBObjectStoreBackendImpl::populateIndex): (WebCore::IDBObjectStoreBackendImpl::createIndex): (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): (WebCore::IDBObjectStoreBackendImpl::loadIndexes): * storage/IDBObjectStoreBackendImpl.h: * storage/IDBObjectStoreBackendInterface.h: Source/WebKit/chromium: Adds the multientry IDBIndex flag to the WebKit API. A version of the createIndex() method without this flag is retained until all callers are updated. * public/WebIDBIndex.h: (WebKit::WebIDBIndex::multientry): * public/WebIDBObjectStore.h: (WebKit::WebIDBObjectStore::createIndex): * src/IDBIndexBackendProxy.cpp: (WebKit::IDBIndexBackendProxy::multientry): * src/IDBIndexBackendProxy.h: * src/IDBObjectStoreBackendProxy.cpp: (WebKit::IDBObjectStoreBackendProxy::createIndex): * src/IDBObjectStoreBackendProxy.h: * src/WebIDBIndexImpl.cpp: (WebKit::WebIDBIndexImpl::multientry): * src/WebIDBIndexImpl.h: * src/WebIDBObjectStoreImpl.cpp: (WebKit::WebIDBObjectStoreImpl::createIndex): * src/WebIDBObjectStoreImpl.h: (WebKit::WebIDBObjectStoreImpl::createIndex): LayoutTests: * storage/indexeddb/index-basics-expected.txt: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-multientry-expected.txt: Added. * storage/indexeddb/index-multientry.html: Added. Canonical link: https://commits.webkit.org/90074@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@101602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-12-01 05:22:26 +00:00
PASS successfullyParsed is true
TEST COMPLETE