WebCore:
[WebKit-https.git] / WebCore / loader / icon / SQLDatabase.h
1 /*
2  * Copyright (C) 2006 Apple Computer, 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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef SQLDatabase_H
27 #define SQLDatabase_H
28
29 #include "PlatformString.h"
30 #include <sqlite3.h>
31 #include <wtf/Noncopyable.h>
32 #include <wtf/Vector.h>
33
34 namespace WebCore {
35
36 class SQLStatement;
37
38 class SQLDatabase : public Noncopyable
39 {
40     friend class SQLStatement;
41 public:
42     SQLDatabase();
43
44     bool open(const String& filename);
45     bool isOpen() { return m_db; }
46     String path(){ return m_path; }
47     void close();
48
49     bool executeCommand(const String&);
50     bool returnsAtLeastOneResult(const String&);
51     
52     bool tableExists(const String&);
53     void clearAllTables();
54     void runVacuumCommand();
55     
56     int64_t lastInsertRowID();
57
58     void setBusyTimeout(int ms);
59     void setBusyHandler(int(*)(void*, int));
60     
61     // TODO - add pragma and sqlite_master accessors here
62     void setFullsync(bool);
63     
64     // The SQLite SYNCHRONOUS pragma can be either FULL, NORMAL, or OFF
65     // FULL - Any writing calls to the DB block until the data is actually on the disk surface
66     // NORMAL - SQLite pauses at some critical moments when writing, but much less than FULL
67     // OFF - Calls return immediately after the data has been passed to disk
68     enum SynchronousPragma {
69         SyncOff = 0, SyncNormal = 1, SyncFull = 2
70     };
71     void setSynchronous(SynchronousPragma);
72     
73     int lastError() { return m_db ? sqlite3_errcode(m_db) : SQLITE_ERROR; }
74     const char* lastErrorMsg() { return sqlite3_errmsg(m_db); }
75 private:
76     String   m_path;
77     sqlite3* m_db;
78     int m_lastError;
79     
80 }; // class SQLDatabase
81
82 inline String escapeSQLString(const String& s)
83 {
84     String es = s;
85     es.replace('\'', "''");
86     return es;
87 }
88
89 } // namespace WebCore
90
91
92
93 #endif