1 /* 2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef IDBBackingStore_h 27 #define IDBBackingStore_h 28 29 #if ENABLE(INDEXED_DATABASE) 30 31 #include "IDBCursor.h" 32 #include "SQLiteDatabase.h" 33 #include <wtf/PassRefPtr.h> 34 #include <wtf/RefCounted.h> 35 #include <wtf/RefPtr.h> 36 #include <wtf/Vector.h> 37 38 namespace WebCore { 39 40 class IDBFactoryBackendImpl; 41 class IDBKey; 42 class IDBKeyRange; 43 class SecurityOrigin; 44 45 class IDBBackingStore : public RefCounted<IDBBackingStore> { 46 public: ~IDBBackingStore()47 virtual ~IDBBackingStore() {}; 48 49 virtual bool extractIDBDatabaseMetaData(const String& name, String& foundVersion, int64_t& foundId) = 0; 50 virtual bool setIDBDatabaseMetaData(const String& name, const String& version, int64_t& rowId, bool invalidRowId) = 0; 51 52 virtual void getObjectStores(int64_t databaseId, Vector<int64_t>& foundIds, Vector<String>& foundNames, Vector<String>& foundKeyPaths, Vector<bool>& foundAutoIncrementFlags) = 0; 53 virtual bool createObjectStore(int64_t databaseId, const String& name, const String& keyPath, bool autoIncrement, int64_t& assignedObjectStoreId) = 0; 54 virtual void deleteObjectStore(int64_t databaseId, int64_t objectStoreId) = 0; 55 56 class ObjectStoreRecordIdentifier : public RefCounted<ObjectStoreRecordIdentifier> { 57 public: 58 virtual bool isValid() const = 0; ~ObjectStoreRecordIdentifier()59 virtual ~ObjectStoreRecordIdentifier() {} 60 }; 61 virtual PassRefPtr<ObjectStoreRecordIdentifier> createInvalidRecordIdentifier() = 0; 62 63 virtual String getObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, const IDBKey&) = 0; 64 virtual bool putObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, const IDBKey&, const String& value, ObjectStoreRecordIdentifier*) = 0; 65 virtual void clearObjectStore(int64_t databaseId, int64_t objectStoreId) = 0; 66 virtual void deleteObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, const ObjectStoreRecordIdentifier*) = 0; 67 virtual double nextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId) = 0; 68 virtual bool keyExistsInObjectStore(int64_t databaseId, int64_t objectStoreId, const IDBKey&, ObjectStoreRecordIdentifier* foundRecordIdentifier) = 0; 69 70 class ObjectStoreRecordCallback { 71 public: 72 virtual bool callback(const ObjectStoreRecordIdentifier*, const String& value) = 0; ~ObjectStoreRecordCallback()73 virtual ~ObjectStoreRecordCallback() {}; 74 }; 75 virtual bool forEachObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, ObjectStoreRecordCallback&) = 0; 76 77 virtual void getIndexes(int64_t databaseId, int64_t objectStoreId, Vector<int64_t>& foundIds, Vector<String>& foundNames, Vector<String>& foundKeyPaths, Vector<bool>& foundUniqueFlags) = 0; 78 virtual bool createIndex(int64_t databaseId, int64_t objectStoreId, const String& name, const String& keyPath, bool isUnique, int64_t& indexId) = 0; 79 virtual void deleteIndex(int64_t databaseId, int64_t objectStoreId, int64_t indexId) = 0; 80 virtual bool putIndexDataForRecord(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&, const ObjectStoreRecordIdentifier*) = 0; 81 virtual bool deleteIndexDataForRecord(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const ObjectStoreRecordIdentifier*) = 0; 82 virtual String getObjectViaIndex(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&) = 0; 83 virtual PassRefPtr<IDBKey> getPrimaryKeyViaIndex(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&) = 0; 84 virtual bool keyExistsInIndex(int64_t databaseid, int64_t objectStoreId, int64_t indexId, const IDBKey&) = 0; 85 86 class Cursor : public RefCounted<Cursor> { 87 public: 88 virtual bool continueFunction(const IDBKey* = 0) = 0; 89 virtual PassRefPtr<IDBKey> key() = 0; 90 virtual PassRefPtr<IDBKey> primaryKey() = 0; 91 virtual String value() = 0; 92 virtual PassRefPtr<ObjectStoreRecordIdentifier> objectStoreRecordIdentifier() = 0; 93 virtual int64_t indexDataId() = 0; ~Cursor()94 virtual ~Cursor() {}; 95 }; 96 97 virtual PassRefPtr<Cursor> openObjectStoreCursor(int64_t databaseId, int64_t objectStoreId, const IDBKeyRange*, IDBCursor::Direction) = 0; 98 virtual PassRefPtr<Cursor> openIndexKeyCursor(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKeyRange*, IDBCursor::Direction) = 0; 99 virtual PassRefPtr<Cursor> openIndexCursor(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKeyRange*, IDBCursor::Direction) = 0; 100 101 class Transaction : public RefCounted<Transaction> { 102 public: 103 virtual void begin() = 0; 104 virtual void commit() = 0; 105 virtual void rollback() = 0; 106 }; 107 virtual PassRefPtr<Transaction> createTransaction() = 0; 108 }; 109 110 } // namespace WebCore 111 112 #endif 113 114 #endif // IDBBackingStore_h 115