| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 IDBKey* indexKey = ScriptValue::to<IDBKey*>( | 319 IDBKey* indexKey = ScriptValue::to<IDBKey*>( |
| 320 isolate, objectValue, exceptionState, indexMetadata.keyPath); | 320 isolate, objectValue, exceptionState, indexMetadata.keyPath); |
| 321 | 321 |
| 322 if (!indexKey) | 322 if (!indexKey) |
| 323 return; | 323 return; |
| 324 | 324 |
| 325 if (!indexMetadata.multiEntry || indexKey->getType() != IDBKey::ArrayType) { | 325 if (!indexMetadata.multiEntry || indexKey->getType() != IDBKey::ArrayType) { |
| 326 if (!indexKey->isValid()) | 326 if (!indexKey->isValid()) |
| 327 return; | 327 return; |
| 328 | 328 |
| 329 indexKeys->append(indexKey); | 329 indexKeys->push_back(indexKey); |
| 330 } else { | 330 } else { |
| 331 DCHECK(indexMetadata.multiEntry); | 331 DCHECK(indexMetadata.multiEntry); |
| 332 DCHECK_EQ(indexKey->getType(), IDBKey::ArrayType); | 332 DCHECK_EQ(indexKey->getType(), IDBKey::ArrayType); |
| 333 indexKey = IDBKey::createMultiEntryArray(indexKey->array()); | 333 indexKey = IDBKey::createMultiEntryArray(indexKey->array()); |
| 334 | 334 |
| 335 for (size_t i = 0; i < indexKey->array().size(); ++i) | 335 for (size_t i = 0; i < indexKey->array().size(); ++i) |
| 336 indexKeys->append(indexKey->array()[i]); | 336 indexKeys->push_back(indexKey->array()[i]); |
| 337 } | 337 } |
| 338 } | 338 } |
| 339 | 339 |
| 340 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, | 340 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, |
| 341 const ScriptValue& value, | 341 const ScriptValue& value, |
| 342 const ScriptValue& key, | 342 const ScriptValue& key, |
| 343 ExceptionState& exceptionState) { | 343 ExceptionState& exceptionState) { |
| 344 IDB_TRACE("IDBObjectStore::add"); | 344 IDB_TRACE("IDBObjectStore::add"); |
| 345 return put(scriptState, WebIDBPutModeAddOnly, IDBAny::create(this), value, | 345 return put(scriptState, WebIDBPutModeAddOnly, IDBAny::create(this), value, |
| 346 key, exceptionState); | 346 key, exceptionState); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 } | 495 } |
| 496 | 496 |
| 497 Vector<int64_t> indexIds; | 497 Vector<int64_t> indexIds; |
| 498 HeapVector<IndexKeys> indexKeys; | 498 HeapVector<IndexKeys> indexKeys; |
| 499 for (const auto& it : metadata().indexes) { | 499 for (const auto& it : metadata().indexes) { |
| 500 if (clone.isEmpty()) | 500 if (clone.isEmpty()) |
| 501 clone = | 501 clone = |
| 502 deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo); | 502 deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo); |
| 503 IndexKeys keys; | 503 IndexKeys keys; |
| 504 generateIndexKeysForValue(scriptState->isolate(), *it.value, clone, &keys); | 504 generateIndexKeysForValue(scriptState->isolate(), *it.value, clone, &keys); |
| 505 indexIds.append(it.key); | 505 indexIds.push_back(it.key); |
| 506 indexKeys.append(keys); | 506 indexKeys.push_back(keys); |
| 507 } | 507 } |
| 508 | 508 |
| 509 IDBRequest* request = | 509 IDBRequest* request = |
| 510 IDBRequest::create(scriptState, source, m_transaction.get()); | 510 IDBRequest::create(scriptState, source, m_transaction.get()); |
| 511 Vector<char> wireBytes; | 511 Vector<char> wireBytes; |
| 512 serializedValue->toWireBytes(wireBytes); | 512 serializedValue->toWireBytes(wireBytes); |
| 513 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); | 513 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); |
| 514 | 514 |
| 515 backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, | 515 backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, |
| 516 key, static_cast<WebIDBPutMode>(putMode), | 516 key, static_cast<WebIDBPutMode>(putMode), |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 return; | 658 return; |
| 659 | 659 |
| 660 ScriptState::Scope scope(m_scriptState.get()); | 660 ScriptState::Scope scope(m_scriptState.get()); |
| 661 | 661 |
| 662 IDBAny* cursorAny = request->resultAsAny(); | 662 IDBAny* cursorAny = request->resultAsAny(); |
| 663 IDBCursorWithValue* cursor = nullptr; | 663 IDBCursorWithValue* cursor = nullptr; |
| 664 if (cursorAny->getType() == IDBAny::IDBCursorWithValueType) | 664 if (cursorAny->getType() == IDBAny::IDBCursorWithValueType) |
| 665 cursor = cursorAny->idbCursorWithValue(); | 665 cursor = cursorAny->idbCursorWithValue(); |
| 666 | 666 |
| 667 Vector<int64_t> indexIds; | 667 Vector<int64_t> indexIds; |
| 668 indexIds.append(indexMetadata().id); | 668 indexIds.push_back(indexMetadata().id); |
| 669 if (cursor && !cursor->isDeleted()) { | 669 if (cursor && !cursor->isDeleted()) { |
| 670 cursor->continueFunction(nullptr, nullptr, ASSERT_NO_EXCEPTION); | 670 cursor->continueFunction(nullptr, nullptr, ASSERT_NO_EXCEPTION); |
| 671 | 671 |
| 672 IDBKey* primaryKey = cursor->idbPrimaryKey(); | 672 IDBKey* primaryKey = cursor->idbPrimaryKey(); |
| 673 ScriptValue value = cursor->value(m_scriptState.get()); | 673 ScriptValue value = cursor->value(m_scriptState.get()); |
| 674 | 674 |
| 675 IndexKeys indexKeys; | 675 IndexKeys indexKeys; |
| 676 generateIndexKeysForValue(m_scriptState->isolate(), indexMetadata(), | 676 generateIndexKeysForValue(m_scriptState->isolate(), indexMetadata(), |
| 677 value, &indexKeys); | 677 value, &indexKeys); |
| 678 | 678 |
| 679 HeapVector<IndexKeys> indexKeysList; | 679 HeapVector<IndexKeys> indexKeysList; |
| 680 indexKeysList.append(indexKeys); | 680 indexKeysList.push_back(indexKeys); |
| 681 | 681 |
| 682 m_database->backend()->setIndexKeys(m_transactionId, m_objectStoreId, | 682 m_database->backend()->setIndexKeys(m_transactionId, m_objectStoreId, |
| 683 primaryKey, indexIds, indexKeysList); | 683 primaryKey, indexIds, indexKeysList); |
| 684 } else { | 684 } else { |
| 685 // Now that we are done indexing, tell the backend to go | 685 // Now that we are done indexing, tell the backend to go |
| 686 // back to processing tasks of type NormalTask. | 686 // back to processing tasks of type NormalTask. |
| 687 m_database->backend()->setIndexesReady(m_transactionId, m_objectStoreId, | 687 m_database->backend()->setIndexesReady(m_transactionId, m_objectStoreId, |
| 688 indexIds); | 688 indexIds); |
| 689 m_database.clear(); | 689 m_database.clear(); |
| 690 } | 690 } |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1092 } | 1092 } |
| 1093 } | 1093 } |
| 1094 return IDBIndexMetadata::InvalidId; | 1094 return IDBIndexMetadata::InvalidId; |
| 1095 } | 1095 } |
| 1096 | 1096 |
| 1097 WebIDBDatabase* IDBObjectStore::backendDB() const { | 1097 WebIDBDatabase* IDBObjectStore::backendDB() const { |
| 1098 return m_transaction->backendDB(); | 1098 return m_transaction->backendDB(); |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 } // namespace blink | 1101 } // namespace blink |
| OLD | NEW |