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#pragma once
27
28#if ENABLE(INDEXED_DATABASE)
29
30#include "IDBKeyPath.h"
31#include <wtf/text/WTFString.h>
32
33namespace WebCore {
34
35class IDBIndexInfo {
36public:
37 WEBCORE_EXPORT IDBIndexInfo();
38 IDBIndexInfo(uint64_t identifier, uint64_t objectStoreIdentifier, const String& name, IDBKeyPath&&, bool unique, bool multiEntry);
39
40 IDBIndexInfo isolatedCopy() const;
41
42 uint64_t identifier() const { return m_identifier; }
43 uint64_t objectStoreIdentifier() const { return m_objectStoreIdentifier; }
44 const String& name() const { return m_name; }
45 const IDBKeyPath& keyPath() const { return m_keyPath; }
46 bool unique() const { return m_unique; }
47 bool multiEntry() const { return m_multiEntry; }
48
49 void rename(const String& newName) { m_name = newName; }
50
51 template<class Encoder> void encode(Encoder&) const;
52 template<class Decoder> static bool decode(Decoder&, IDBIndexInfo&);
53
54#if !LOG_DISABLED
55 String loggingString(int indent = 0) const;
56 String condensedLoggingString() const;
57#endif
58
59 // FIXME: Remove the need for this.
60 static const int64_t InvalidId = -1;
61
62private:
63 uint64_t m_identifier { 0 };
64 uint64_t m_objectStoreIdentifier { 0 };
65 String m_name;
66 IDBKeyPath m_keyPath;
67 bool m_unique { true };
68 bool m_multiEntry { false };
69};
70
71template<class Encoder>
72void IDBIndexInfo::encode(Encoder& encoder) const
73{
74 encoder << m_identifier << m_objectStoreIdentifier << m_name << m_keyPath << m_unique << m_multiEntry;
75}
76
77template<class Decoder>
78bool IDBIndexInfo::decode(Decoder& decoder, IDBIndexInfo& info)
79{
80 if (!decoder.decode(info.m_identifier))
81 return false;
82
83 if (!decoder.decode(info.m_objectStoreIdentifier))
84 return false;
85
86 if (!decoder.decode(info.m_name))
87 return false;
88
89 if (!decoder.decode(info.m_keyPath))
90 return false;
91
92 if (!decoder.decode(info.m_unique))
93 return false;
94
95 if (!decoder.decode(info.m_multiEntry))
96 return false;
97
98 return true;
99}
100
101} // namespace WebCore
102
103#endif // ENABLE(INDEXED_DATABASE)
104