static void convertToWebIDBKeyArray(const IDBKey::KeyArray& array, WebVector<WebIDBKey>& result) { WebVector<WebIDBKey> keys(array.size()); WebVector<WebIDBKey> subkeys; for (size_t i = 0; i < array.size(); ++i) { IDBKey* key = array[i]; switch (key->getType()) { case IDBKey::ArrayType: convertToWebIDBKeyArray(key->array(), subkeys); keys[i] = WebIDBKey::createArray(subkeys); break; case IDBKey::BinaryType: keys[i] = WebIDBKey::createBinary(key->binary()); break; case IDBKey::StringType: keys[i] = WebIDBKey::createString(key->string()); break; case IDBKey::DateType: keys[i] = WebIDBKey::createDate(key->date()); break; case IDBKey::NumberType: keys[i] = WebIDBKey::createNumber(key->number()); break; case IDBKey::InvalidType: keys[i] = WebIDBKey::createInvalid(); break; case IDBKey::MinType: ASSERT_NOT_REACHED(); break; } } result.swap(keys); }
static PassRefPtr<Key> keyFromIDBKey(IDBKey* idbKey) { if (!idbKey || !idbKey->isValid()) return 0; RefPtr<Key> key; switch (idbKey->type()) { case IDBKey::InvalidType: case IDBKey::MinType: return 0; case IDBKey::NumberType: { RefPtr<Key> tmpKey = Key::create().setType(Key::Type::Number); key = tmpKey; key->setNumber(idbKey->number()); break; } case IDBKey::StringType: { RefPtr<Key> tmpKey = Key::create().setType(Key::Type::String); key = tmpKey; key->setString(idbKey->string()); break; } case IDBKey::DateType: { RefPtr<Key> tmpKey = Key::create().setType(Key::Type::Date); key = tmpKey; key->setDate(idbKey->date()); break; } case IDBKey::ArrayType: { RefPtr<Key> tmpKey = Key::create().setType(Key::Type::Array); key = tmpKey; RefPtr<TypeBuilder::Array<TypeBuilder::IndexedDB::Key> > array = TypeBuilder::Array<TypeBuilder::IndexedDB::Key>::create(); IDBKey::KeyArray keyArray = idbKey->array(); for (size_t i = 0; i < keyArray.size(); ++i) array->addItem(keyFromIDBKey(keyArray[i].get())); key->setArray(array); break; } } return key.release(); }