92e7daf57a07c6e5afb321ae1ce3ccc43b3c0a4c
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / client / IDBObjectStoreImpl.h
1 /*
2  * Copyright (C) 2015 Apple 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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef IDBObjectStoreImpl_h
27 #define IDBObjectStoreImpl_h
28
29 #if ENABLE(INDEXED_DATABASE)
30
31 #include "IDBIndexImpl.h"
32 #include "IDBObjectStore.h"
33 #include "IDBObjectStoreInfo.h"
34 #include "IndexedDB.h"
35
36 namespace WebCore {
37
38 class IDBKey;
39
40 struct IDBKeyRangeData;
41
42 namespace IDBClient {
43
44 class IDBTransaction;
45
46 class IDBObjectStore : public WebCore::IDBObjectStore {
47 public:
48     static Ref<IDBObjectStore> create(const IDBObjectStoreInfo&, IDBTransaction&);
49
50     virtual ~IDBObjectStore() override final;
51
52     // Implement the IDBObjectStore IDL
53     virtual const String name() const override final;
54     virtual RefPtr<WebCore::IDBAny> keyPathAny() const override final;
55     virtual const IDBKeyPath keyPath() const override final;
56     virtual RefPtr<DOMStringList> indexNames() const override final;
57     virtual RefPtr<WebCore::IDBTransaction> transaction() override final;
58     virtual bool autoIncrement() const override final;
59
60     virtual RefPtr<WebCore::IDBRequest> add(JSC::ExecState&, JSC::JSValue, ExceptionCode&) override final;
61     virtual RefPtr<WebCore::IDBRequest> put(JSC::ExecState&, JSC::JSValue, ExceptionCode&) override final;
62     virtual RefPtr<WebCore::IDBRequest> openCursor(ScriptExecutionContext*, ExceptionCode&) override final;
63     virtual RefPtr<WebCore::IDBRequest> openCursor(ScriptExecutionContext*, IDBKeyRange*, ExceptionCode&) override final;
64     virtual RefPtr<WebCore::IDBRequest> openCursor(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&) override final;
65     virtual RefPtr<WebCore::IDBRequest> openCursor(ScriptExecutionContext*, IDBKeyRange*, const String& direction, ExceptionCode&) override final;
66     virtual RefPtr<WebCore::IDBRequest> openCursor(ScriptExecutionContext*, const Deprecated::ScriptValue& key, const String& direction, ExceptionCode&) override final;
67     virtual RefPtr<WebCore::IDBRequest> get(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&) override final;
68     virtual RefPtr<WebCore::IDBRequest> get(ScriptExecutionContext*, IDBKeyRange*, ExceptionCode&) override final;
69     virtual RefPtr<WebCore::IDBRequest> add(JSC::ExecState&, JSC::JSValue, JSC::JSValue key, ExceptionCode&) override final;
70     virtual RefPtr<WebCore::IDBRequest> put(JSC::ExecState&, JSC::JSValue, JSC::JSValue key, ExceptionCode&) override final;
71     virtual RefPtr<WebCore::IDBRequest> deleteFunction(ScriptExecutionContext*, IDBKeyRange*, ExceptionCode&) override final;
72     virtual RefPtr<WebCore::IDBRequest> deleteFunction(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&) override final;
73     virtual RefPtr<WebCore::IDBRequest> clear(ScriptExecutionContext*, ExceptionCode&) override final;
74     virtual RefPtr<WebCore::IDBIndex> createIndex(ScriptExecutionContext*, const String& name, const IDBKeyPath&, bool unique, bool multiEntry, ExceptionCode&) override final;
75     virtual RefPtr<WebCore::IDBIndex> index(const String& name, ExceptionCode&) override final;
76     virtual void deleteIndex(const String& name, ExceptionCode&) override final;
77     virtual RefPtr<WebCore::IDBRequest> count(ScriptExecutionContext*, ExceptionCode&) override final;
78     virtual RefPtr<WebCore::IDBRequest> count(ScriptExecutionContext*, IDBKeyRange*, ExceptionCode&) override final;
79     virtual RefPtr<WebCore::IDBRequest> count(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&) override final;
80
81     void markAsDeleted();
82     bool isDeleted() const { return m_deleted; }
83
84     const IDBObjectStoreInfo& info() const { return m_info; }
85
86     // FIXME: After removing LegacyIDB and folding abstract/implementation classes together,
87     // this will no longer be necessary.
88     IDBTransaction& modernTransaction() { return m_transaction.get(); }
89
90 private:
91     IDBObjectStore(const IDBObjectStoreInfo&, IDBTransaction&);
92
93     RefPtr<WebCore::IDBRequest> putOrAdd(JSC::ExecState&, JSC::JSValue, RefPtr<IDBKey>, IndexedDB::ObjectStoreOverwriteMode, ExceptionCode&);
94     RefPtr<WebCore::IDBRequest> doCount(ScriptExecutionContext&, const IDBKeyRangeData&, ExceptionCode&);
95
96     IDBObjectStoreInfo m_info;
97     Ref<IDBTransaction> m_transaction;
98
99     bool m_deleted { false };
100
101     HashMap<String, RefPtr<IDBIndex>> m_referencedIndexes;
102 };
103
104 } // namespace IDBClient
105 } // namespace WebCore
106
107 #endif // ENABLE(INDEXED_DATABASE)
108 #endif // IDBObjectStoreImpl_h