1/*
2 * Copyright (C) 2012 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 * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
14 *     its contributors may be used to endorse or promote products derived
15 *     from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef IDBDatabaseMetadata_h
30#define IDBDatabaseMetadata_h
31
32#include "IDBObjectStoreMetadata.h"
33
34#if ENABLE(INDEXED_DATABASE)
35
36namespace WebCore {
37
38struct IDBDatabaseMetadata {
39
40    // FIXME: These are only here to support the LevelDB backend which incorrectly handles versioning.
41    // Once LevelDB supports a single, uint64_t version and throws out the old string version, these
42    // should be gotten rid of.
43    // Also, "NoIntVersion" used to be a magic number of -1, which doesn't work with the new unsigned type.
44    // Changing the value to INT64_MAX here seems like a reasonable temporary fix as the current LevelDB
45    // already cannot represent valid version numbers between INT64_MAX and UINT64_MAX.
46
47#ifndef INT64_MAX
48#define INT64_MAX 9223372036854775807LL
49#endif
50
51    enum {
52        NoIntVersion = INT64_MAX,
53        DefaultIntVersion = 0
54    };
55
56    IDBDatabaseMetadata()
57        : id(0)
58        , version(0)
59        , maxObjectStoreId(0)
60    {
61    }
62
63    IDBDatabaseMetadata(const String& name, int64_t id, uint64_t version, int64_t maxObjectStoreId)
64        : name(name)
65        , id(id)
66        , version(version)
67        , maxObjectStoreId(maxObjectStoreId)
68    {
69    }
70
71    String name;
72    int64_t id;
73    uint64_t version;
74    int64_t maxObjectStoreId;
75
76    typedef HashMap<int64_t, IDBObjectStoreMetadata> ObjectStoreMap;
77    ObjectStoreMap objectStores;
78
79    IDBDatabaseMetadata isolatedCopy() const;
80};
81
82} // namespace WebCore
83
84#endif // ENABLE(INDEXED_DATABASE)
85#endif // IDBDatabaseMetadata_h
86