Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(703)

Side by Side Diff: content/browser/indexed_db/indexed_db_database.cc

Issue 1147433002: IndexedDB: Added IDBIndex.getAll() implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweaked getAll comments in indexed_db_database.cc Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/indexed_db/indexed_db_database.h" 5 #include "content/browser/indexed_db/indexed_db_database.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 10
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 IDB_TRACE1("IndexedDBDatabase::Abort(error)", "txn.id", transaction_id); 528 IDB_TRACE1("IndexedDBDatabase::Abort(error)", "txn.id", transaction_id);
529 // If the transaction is unknown, then it has already been aborted by the 529 // If the transaction is unknown, then it has already been aborted by the
530 // backend before this call so it is safe to ignore it. 530 // backend before this call so it is safe to ignore it.
531 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 531 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
532 if (transaction) 532 if (transaction)
533 transaction->Abort(error); 533 transaction->Abort(error);
534 } 534 }
535 535
536 void IndexedDBDatabase::GetAll(int64 transaction_id, 536 void IndexedDBDatabase::GetAll(int64 transaction_id,
537 int64 object_store_id, 537 int64 object_store_id,
538 int64 index_id,
538 scoped_ptr<IndexedDBKeyRange> key_range, 539 scoped_ptr<IndexedDBKeyRange> key_range,
539 int64 max_count, 540 int64 max_count,
540 scoped_refptr<IndexedDBCallbacks> callbacks) { 541 scoped_refptr<IndexedDBCallbacks> callbacks) {
541 IDB_TRACE1("IndexedDBDatabase::GetAll", "txn.id", transaction_id); 542 IDB_TRACE1("IndexedDBDatabase::GetAll", "txn.id", transaction_id);
542 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 543 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
543 if (!transaction) 544 if (!transaction)
544 return; 545 return;
545 546
546 if (!ValidateObjectStoreId(object_store_id)) 547 if (!ValidateObjectStoreId(object_store_id))
547 return; 548 return;
548 549
549 transaction->ScheduleTask( 550 transaction->ScheduleTask(
550 base::Bind(&IndexedDBDatabase::GetAllOperation, this, object_store_id, 551 base::Bind(&IndexedDBDatabase::GetAllOperation, this, object_store_id,
551 Passed(&key_range), max_count, callbacks)); 552 index_id, Passed(&key_range), max_count, callbacks));
552 } 553 }
553 554
554 void IndexedDBDatabase::Get(int64 transaction_id, 555 void IndexedDBDatabase::Get(int64 transaction_id,
555 int64 object_store_id, 556 int64 object_store_id,
556 int64 index_id, 557 int64 index_id,
557 scoped_ptr<IndexedDBKeyRange> key_range, 558 scoped_ptr<IndexedDBKeyRange> key_range,
558 bool key_only, 559 bool key_only,
559 scoped_refptr<IndexedDBCallbacks> callbacks) { 560 scoped_refptr<IndexedDBCallbacks> callbacks) {
560 IDB_TRACE1("IndexedDBDatabase::Get", "txn.id", transaction_id); 561 IDB_TRACE1("IndexedDBDatabase::Get", "txn.id", transaction_id);
561 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 562 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 if (object_store_metadata.auto_increment && 733 if (object_store_metadata.auto_increment &&
733 !object_store_metadata.key_path.IsNull()) { 734 !object_store_metadata.key_path.IsNull()) {
734 value.primary_key = *primary_key; 735 value.primary_key = *primary_key;
735 value.key_path = object_store_metadata.key_path; 736 value.key_path = object_store_metadata.key_path;
736 } 737 }
737 callbacks->OnSuccess(&value); 738 callbacks->OnSuccess(&value);
738 } 739 }
739 740
740 void IndexedDBDatabase::GetAllOperation( 741 void IndexedDBDatabase::GetAllOperation(
741 int64 object_store_id, 742 int64 object_store_id,
743 int64 index_id,
742 scoped_ptr<IndexedDBKeyRange> key_range, 744 scoped_ptr<IndexedDBKeyRange> key_range,
743 int64 max_count, 745 int64 max_count,
744 scoped_refptr<IndexedDBCallbacks> callbacks, 746 scoped_refptr<IndexedDBCallbacks> callbacks,
745 IndexedDBTransaction* transaction) { 747 IndexedDBTransaction* transaction) {
746 IDB_TRACE1("IndexedDBDatabase::GetAllOperation", "txn.id", transaction->id()); 748 IDB_TRACE1("IndexedDBDatabase::GetAllOperation", "txn.id", transaction->id());
747 749
748 DCHECK_GE(max_count, 0); 750 DCHECK_GE(max_count, 0);
749 if (!max_count) 751 if (!max_count)
750 max_count = std::numeric_limits<decltype(max_count)>::max(); 752 max_count = std::numeric_limits<decltype(max_count)>::max();
751 753
752 DCHECK(metadata_.object_stores.find(object_store_id) != 754 DCHECK(metadata_.object_stores.find(object_store_id) !=
753 metadata_.object_stores.end()); 755 metadata_.object_stores.end());
754 const IndexedDBObjectStoreMetadata& object_store_metadata = 756 const IndexedDBObjectStoreMetadata& object_store_metadata =
755 metadata_.object_stores[object_store_id]; 757 metadata_.object_stores[object_store_id];
756 758
757 leveldb::Status s; 759 leveldb::Status s;
758 760
759 scoped_ptr<IndexedDBBackingStore::Cursor> cursor = 761 scoped_ptr<IndexedDBBackingStore::Cursor> cursor;
760 backing_store_->OpenObjectStoreCursor( 762
761 transaction->BackingStoreTransaction(), id(), object_store_id, 763 if (index_id == IndexedDBIndexMetadata::kInvalidId) {
762 *key_range, blink::WebIDBCursorDirectionNext, &s); 764 // ObjectStore
765 cursor = backing_store_->OpenObjectStoreCursor(
766 transaction->BackingStoreTransaction(), id(), object_store_id,
767 *key_range, blink::WebIDBCursorDirectionNext, &s);
768 } else {
769 // Index
770 cursor = backing_store_->OpenIndexCursor(
771 transaction->BackingStoreTransaction(), id(), object_store_id, index_id,
772 *key_range, blink::WebIDBCursorDirectionNext, &s);
773 }
763 774
764 if (!s.ok()) { 775 if (!s.ok()) {
765 DLOG(ERROR) << "Unable to open cursor operation: " << s.ToString(); 776 DLOG(ERROR) << "Unable to open cursor operation: " << s.ToString();
766 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 777 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
767 "Internal error in GetAllOperation"); 778 "Internal error in GetAllOperation");
768 callbacks->OnError(error); 779 callbacks->OnError(error);
769 if (s.IsCorruption()) { 780 if (s.IsCorruption()) {
770 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(), 781 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
771 error); 782 error);
772 } 783 }
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 IndexedDBTransaction* transaction) { 1936 IndexedDBTransaction* transaction) {
1926 DCHECK(!transaction); 1937 DCHECK(!transaction);
1927 IDB_TRACE1("IndexedDBDatabase::VersionChangeAbortOperation", 1938 IDB_TRACE1("IndexedDBDatabase::VersionChangeAbortOperation",
1928 "txn.id", 1939 "txn.id",
1929 transaction->id()); 1940 transaction->id());
1930 metadata_.version = previous_version; 1941 metadata_.version = previous_version;
1931 metadata_.int_version = previous_int_version; 1942 metadata_.int_version = previous_int_version;
1932 } 1943 }
1933 1944
1934 } // namespace content 1945 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_database.h ('k') | content/browser/indexed_db/indexed_db_dispatcher_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698