Reviewed by Hyatt
[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     int lastChanges();
58
59     void setBusyTimeout(int ms);
60     void setBusyHandler(int(*)(void*, int));
61     
62     // TODO - add pragma and sqlite_master accessors here
63     void setFullsync(bool);
64     
65     // The SQLite SYNCHRONOUS pragma can be either FULL, NORMAL, or OFF
66     // FULL - Any writing calls to the DB block until the data is actually on the disk surface
67     // NORMAL - SQLite pauses at some critical moments when writing, but much less than FULL
68     // OFF - Calls return immediately after the data has been passed to disk
69     enum SynchronousPragma {
70         SyncOff = 0, SyncNormal = 1, SyncFull = 2
71     };
72     void setSynchronous(SynchronousPragma);
73     
74     int lastError() { return m_db ? sqlite3_errcode(m_db) : SQLITE_ERROR; }
75     const char* lastErrorMsg() { return sqlite3_errmsg(m_db); }
76 private:
77     String   m_path;
78     sqlite3* m_db;
79     int m_lastError;
80     
81 }; // class SQLDatabase
82
83 inline String escapeSQLString(const String& s)
84 {
85     String es = s;
86     es.replace('\'', "''");
87     return es;
88 }
89
90 } // namespace WebCore
91
92
93
94 #endif