annotate src/wxsqlite3.cpp @ 22:92188f60323d default tip

Implement Masking function on Preview Dialog.
author pyon@macmini
date Sat, 04 Apr 2015 17:23:46 +0900
parents a2ad87cad48b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1 ///////////////////////////////////////////////////////////////////////////////
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2 // Name: wxsqlite3.cpp
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3 // Purpose: Implementation of wxSQLite3 classes
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4 // Author: Ulrich Telle
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5 // Modified by:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
6 // Created: 2005-07-06
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
7 // Copyright: (c) Ulrich Telle
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
8 // Licence: wxWindows licence
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
9 ///////////////////////////////////////////////////////////////////////////////
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
10
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
11 /// \file wxsqlite3.cpp Implementation of the wxSQLite3 class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
12
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
13 #if defined(__GNUG__) && !defined(__APPLE__)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
14 #pragma implementation "wxsqlite3.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
15 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
16
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
17 // For compilers that support precompilation, includes "wx/wx.h".
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
18 #include "wx/wxprec.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
19
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
20 #ifdef __BORLANDC__
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
21 #pragma hdrstop
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
22 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
23
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
24 #ifndef WX_PRECOMP
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
25 #include "wx/wx.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
26 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
27
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
28 #include "wx/regex.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
29 #include "wx/thread.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
30
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
31 #include "wx/wxsqlite3.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
32 #include "wx/wxsqlite3opt.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
33
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
34 // Suppress some Visual C++ warnings regarding the default constructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
35 // for a C struct used only in SQLite modules
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
36 #ifdef __VISUALC__
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
37 #pragma warning (disable:4510)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
38 #pragma warning (disable:4610)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
39 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
40
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
41 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
42 #define SQLITE_HAS_CODEC 1
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
43 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
44 #define SQLITE_HAS_CODEC 0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
45 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
46
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
47 #include "sqlite3.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
48
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
49 // Dynamic loading of the SQLite library
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
50
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
51 #if wxUSE_DYNAMIC_SQLITE3_LOAD
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
52
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
53 #include "wx/dynlib.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
54
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
55 #define DYNFUNC(rcode, rtype, fname, farg, farguse) \
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
56 typedef rtype (*p##fname) farg ; \
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
57 static p##fname s_##fname = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
58 #include "wx/wxsqlite3dyn.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
59 #undef DYNFUNC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
60
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
61 static wxDynamicLibrary s_dll;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
62
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
63 static void InitSQLite3DLL()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
64 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
65 if (s_dll.IsLoaded())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
66 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
67 return;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
68 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
69
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
70 #ifdef __WIN32__
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
71 if (! s_dll.Load(wxT("sqlite3")))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
72 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
73 if (! s_dll.Load(wxT("libsqlite3")))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
74 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
75 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
76 throw wxSQLite3Exception(-1, wxT("error loading dynamic library"));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
77 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
78
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
79 #define DYNFUNC(rcode, rtype, fname, farg, farguse) \
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
80 s_##fname = (p##fname) s_dll.GetSymbol(wxT(#fname));\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
81 if (! s_##fname)\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
82 {\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
83 s_dll.Unload();\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
84 throw wxSQLite3Exception(-1, wxT("error getting symbol <") wxT(#fname) wxT(">"));\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
85 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
86 #include "wx/wxsqlite3dyn.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
87 #undef DYNFUNC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
88
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
89 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
90
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
91 #define DYNFUNC(rcode, rtype, fname, farg, farguse) \
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
92 rtype fname farg \
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
93 {\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
94 InitSQLite3DLL();\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
95 rcode s_##fname farguse;\
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
96 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
97 #include "wx/wxsqlite3dyn.h"
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
98 #undef DYNFUNC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
99
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
100 #else
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
101 // Define Windows specific SQLite API functions (not defined in sqlite3.h)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
102 #if SQLITE_VERSION_NUMBER >= 3007014
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
103 #if defined(__WXMSW__)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
104 #ifdef __cplusplus
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
105 extern "C" {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
106 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
107 SQLITE_API int sqlite3_win32_set_directory(DWORD type, LPCWSTR zValue);
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
108 #ifdef __cplusplus
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
109 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
110 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
111 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
112 #endif
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
113 #endif // wxUSE_DYNAMIC_SQLITE3_LOAD
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
114
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
115 // Error messages
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
116
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
117 #if wxCHECK_VERSION(2,9,0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
118 const char* wxERRMSG_NODB = wxTRANSLATE("No Database opened");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
119 const char* wxERRMSG_NOSTMT = wxTRANSLATE("Statement not accessible");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
120 const char* wxERRMSG_NOMEM = wxTRANSLATE("Out of memory");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
121 const char* wxERRMSG_DECODE = wxTRANSLATE("Cannot decode binary");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
122 const char* wxERRMSG_INVALID_INDEX = wxTRANSLATE("Invalid field index");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
123 const char* wxERRMSG_INVALID_NAME = wxTRANSLATE("Invalid field name");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
124 const char* wxERRMSG_INVALID_ROW = wxTRANSLATE("Invalid row index");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
125 const char* wxERRMSG_INVALID_QUERY = wxTRANSLATE("Invalid scalar query");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
126 const char* wxERRMSG_INVALID_BLOB = wxTRANSLATE("Invalid BLOB handle");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
127
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
128 const char* wxERRMSG_NORESULT = wxTRANSLATE("Null Results pointer");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
129 const char* wxERRMSG_BIND_STR = wxTRANSLATE("Error binding string param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
130 const char* wxERRMSG_BIND_INT = wxTRANSLATE("Error binding int param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
131 const char* wxERRMSG_BIND_INT64 = wxTRANSLATE("Error binding int64 param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
132 const char* wxERRMSG_BIND_DBL = wxTRANSLATE("Error binding double param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
133 const char* wxERRMSG_BIND_BLOB = wxTRANSLATE("Error binding blob param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
134 const char* wxERRMSG_BIND_DATETIME = wxTRANSLATE("Error binding date/time param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
135 const char* wxERRMSG_BIND_NULL = wxTRANSLATE("Error binding NULL param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
136 const char* wxERRMSG_BIND_ZEROBLOB = wxTRANSLATE("Error binding zero blob param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
137 const char* wxERRMSG_BIND_CLEAR = wxTRANSLATE("Error clearing bindings");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
138
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
139 const char* wxERRMSG_NOMETADATA = wxTRANSLATE("Meta data support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
140 const char* wxERRMSG_NOCODEC = wxTRANSLATE("Encryption support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
141 const char* wxERRMSG_NOLOADEXT = wxTRANSLATE("Loadable extension support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
142 const char* wxERRMSG_NOINCBLOB = wxTRANSLATE("Incremental BLOB support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
143 const char* wxERRMSG_NOBLOBREBIND = wxTRANSLATE("Rebind BLOB support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
144 const char* wxERRMSG_NOSAVEPOINT = wxTRANSLATE("Savepoint support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
145 const char* wxERRMSG_NOBACKUP = wxTRANSLATE("Backup/restore support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
146 const char* wxERRMSG_NOWAL = wxTRANSLATE("Write Ahead Log support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
147 const char* wxERRMSG_NOCOLLECTIONS = wxTRANSLATE("Named collection support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
148
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
149 const char* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
150
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
151 const char* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
152 const char* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed");
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
153 const char* wxERRMSG_TEMPDIR = wxTRANSLATE("Setting temporary directory failed");
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
154
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
155 const char* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy");
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
156 const char* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed");
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
157 const char* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed");
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
158 const char* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
159 const char* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
160 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
161 const wxChar* wxERRMSG_NODB = wxTRANSLATE("No Database opened");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
162 const wxChar* wxERRMSG_NOSTMT = wxTRANSLATE("Statement not accessible");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
163 const wxChar* wxERRMSG_NOMEM = wxTRANSLATE("Out of memory");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
164 const wxChar* wxERRMSG_DECODE = wxTRANSLATE("Cannot decode binary");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
165 const wxChar* wxERRMSG_INVALID_INDEX = wxTRANSLATE("Invalid field index");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
166 const wxChar* wxERRMSG_INVALID_NAME = wxTRANSLATE("Invalid field name");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
167 const wxChar* wxERRMSG_INVALID_ROW = wxTRANSLATE("Invalid row index");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
168 const wxChar* wxERRMSG_INVALID_QUERY = wxTRANSLATE("Invalid scalar query");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
169 const wxChar* wxERRMSG_INVALID_BLOB = wxTRANSLATE("Invalid BLOB handle");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
170
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
171 const wxChar* wxERRMSG_NORESULT = wxTRANSLATE("Null Results pointer");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
172 const wxChar* wxERRMSG_BIND_STR = wxTRANSLATE("Error binding string param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
173 const wxChar* wxERRMSG_BIND_INT = wxTRANSLATE("Error binding int param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
174 const wxChar* wxERRMSG_BIND_INT64 = wxTRANSLATE("Error binding int64 param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
175 const wxChar* wxERRMSG_BIND_DBL = wxTRANSLATE("Error binding double param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
176 const wxChar* wxERRMSG_BIND_BLOB = wxTRANSLATE("Error binding blob param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
177 const wxChar* wxERRMSG_BIND_DATETIME = wxTRANSLATE("Error binding date/time param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
178 const wxChar* wxERRMSG_BIND_NULL = wxTRANSLATE("Error binding NULL param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
179 const wxChar* wxERRMSG_BIND_ZEROBLOB = wxTRANSLATE("Error binding zero blob param");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
180 const wxChar* wxERRMSG_BIND_CLEAR = wxTRANSLATE("Error clearing bindings");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
181
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
182 const wxChar* wxERRMSG_NOMETADATA = wxTRANSLATE("Meta data support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
183 const wxChar* wxERRMSG_NOCODEC = wxTRANSLATE("Encryption support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
184 const wxChar* wxERRMSG_NOLOADEXT = wxTRANSLATE("Loadable extension support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
185 const wxChar* wxERRMSG_NOINCBLOB = wxTRANSLATE("Incremental BLOB support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
186 const wxChar* wxERRMSG_NOBLOBREBIND = wxTRANSLATE("Rebind BLOB support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
187 const wxChar* wxERRMSG_NOSAVEPOINT = wxTRANSLATE("Savepoint support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
188 const wxChar* wxERRMSG_NOBACKUP = wxTRANSLATE("Backup/restore support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
189 const wxChar* wxERRMSG_NOWAL = wxTRANSLATE("Write Ahead Log support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
190 const wxChar* wxERRMSG_NOCOLLECTIONS = wxTRANSLATE("Named collection support not available");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
191
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
192 const wxChar* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
193
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
194 const wxChar* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
195 const wxChar* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed");
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
196 const wxChar* wxERRMSG_TEMPDIR = wxTRANSLATE("Setting temporary directory failed");
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
197
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
198 const wxChar* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
199 const wxChar* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed");
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
200 const wxChar* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed");
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
201 const wxChar* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
202 const wxChar* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
203 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
204
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
205 // Critical sections are used to make access to it thread safe if necessary.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
206 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
207 static wxCriticalSection gs_csDatabase;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
208 static wxCriticalSection gs_csStatment;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
209 static wxCriticalSection gs_csBlob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
210 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
211
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
212 class wxSQLite3DatabaseReference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
213 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
214 public:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
215 /// Default constructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
216 wxSQLite3DatabaseReference(sqlite3* db = NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
217 : m_db(db)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
218 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
219 m_db = db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
220 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
221 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
222 m_isValid = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
223 m_refCount = 1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
224 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
225 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
226 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
227 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
228 m_refCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
229 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
230 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
231
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
232 /// Default destructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
233 virtual ~wxSQLite3DatabaseReference()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
234 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
235 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
236
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
237 private:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
238 /// Thread safe increment of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
239 int IncrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
240 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
241 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
242 wxCriticalSectionLocker locker(gs_csDatabase);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
243 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
244 return ++m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
245 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
246
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
247 void Invalidate()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
248 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
249 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
250 wxCriticalSectionLocker locker(gs_csDatabase);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
251 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
252 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
253 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
254
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
255 /// Thread safe decrement of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
256 int DecrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
257 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
258 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
259 wxCriticalSectionLocker locker(gs_csDatabase);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
260 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
261 if (m_refCount > 0) --m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
262 return m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
263 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
264
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
265 sqlite3* m_db; ///< SQLite database reference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
266 int m_refCount; ///< Reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
267 bool m_isValid; ///< SQLite database reference is valid
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
268
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
269 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3Database;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
270 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3ResultSet;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
271 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3Statement;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
272 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3Blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
273 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
274
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
275 class wxSQLite3StatementReference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
276 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
277 public:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
278 /// Default constructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
279 wxSQLite3StatementReference(sqlite3_stmt* stmt = NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
280 : m_stmt(stmt)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
281 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
282 m_stmt = stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
283 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
284 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
285 m_isValid = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
286 m_refCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
287 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
288 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
289 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
290 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
291 m_refCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
292 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
293 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
294
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
295 /// Default destructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
296 virtual ~wxSQLite3StatementReference()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
297 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
298 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
299
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
300 private:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
301 /// Thread safe increment of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
302 int IncrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
303 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
304 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
305 wxCriticalSectionLocker locker(gs_csStatment);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
306 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
307 return ++m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
308 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
309
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
310 /// Thread safe decrement of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
311 int DecrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
312 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
313 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
314 wxCriticalSectionLocker locker(gs_csStatment);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
315 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
316 if (m_refCount > 0) --m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
317 return m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
318 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
319
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
320 void Invalidate()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
321 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
322 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
323 wxCriticalSectionLocker locker(gs_csStatment);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
324 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
325 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
326 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
327
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
328 sqlite3_stmt* m_stmt; ///< SQLite statement reference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
329 int m_refCount; ///< Reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
330 bool m_isValid; ///< SQLite statement reference is valid
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
331
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
332 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3ResultSet;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
333 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3Statement;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
334 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
335
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
336 class wxSQLite3BlobReference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
337 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
338 public:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
339 /// Default constructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
340 wxSQLite3BlobReference(sqlite3_blob* blob = NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
341 : m_blob(blob)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
342 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
343 m_blob = blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
344 if (m_blob != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
345 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
346 m_isValid = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
347 m_refCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
348 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
349 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
350 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
351 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
352 m_refCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
353 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
354 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
355
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
356 /// Default destructor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
357 virtual ~wxSQLite3BlobReference()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
358 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
359 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
360
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
361 private:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
362 /// Thread safe increment of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
363 int IncrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
364 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
365 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
366 wxCriticalSectionLocker locker(gs_csBlob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
367 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
368 return ++m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
369 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
370
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
371 /// Thread safe decrement of the reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
372 int DecrementRefCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
373 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
374 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
375 wxCriticalSectionLocker locker(gs_csBlob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
376 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
377 if (m_refCount > 0) --m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
378 return m_refCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
379 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
380
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
381 void Invalidate()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
382 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
383 #if wxUSE_THREADS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
384 wxCriticalSectionLocker locker(gs_csBlob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
385 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
386 m_isValid = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
387 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
388
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
389 sqlite3_blob* m_blob; ///< SQLite blob reference
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
390 int m_refCount; ///< Reference count
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
391 bool m_isValid; ///< SQLite statement reference is valid
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
392
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
393 friend class WXDLLIMPEXP_FWD_SQLITE3 wxSQLite3Blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
394 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
395
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
396 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
397 // inline conversion from wxString to wxLongLong
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
398 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
399
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
400 inline wxLongLong ConvertStringToLongLong(const wxString& str, wxLongLong defValue /*=0*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
401 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
402 size_t n = str.Length();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
403 size_t j = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
404 wxLongLong value = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
405 bool negative = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
406
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
407 if (str[j] == '-')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
408 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
409 negative = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
410 j++;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
411 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
412
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
413 while (j < n)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
414 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
415 if (str[j] < '0' || str[j] > '9')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
416 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
417 return defValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
418 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
419 value *= 10;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
420 value += (str[j] - '0');
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
421 j++;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
422 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
423
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
424 return negative ? -value : value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
425 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
426
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
427 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
428 // wxSQLite3Exception: class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
429 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
430
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
431 wxSQLite3Exception::wxSQLite3Exception(int errorCode, const wxString& errorMsg)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
432 : m_errorCode(errorCode)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
433 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
434 m_errorMessage = ErrorCodeAsString(errorCode) + wxT("[") +
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
435 wxString::Format(wxT("%d"), errorCode) + wxT("]: ") +
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
436 wxGetTranslation(errorMsg);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
437 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
438
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
439 wxSQLite3Exception::wxSQLite3Exception(const wxSQLite3Exception& e)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
440 : m_errorCode(e.m_errorCode), m_errorMessage(e.m_errorMessage)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
441 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
442 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
443
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
444 const wxString wxSQLite3Exception::ErrorCodeAsString(int errorCode)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
445 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
446 #if SQLITE_VERSION_NUMBER >= 3007015
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
447 if (errorCode == WXSQLITE_ERROR)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
448 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
449 return wxT("WXSQLITE_ERROR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
450 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
451 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
452 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
453 const char* errmsg = sqlite3_errstr(errorCode);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
454 return wxString::FromUTF8(errmsg);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
455 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
456 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
457 switch (errorCode)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
458 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
459 case SQLITE_OK : return wxT("SQLITE_OK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
460 case SQLITE_ERROR : return wxT("SQLITE_ERROR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
461 case SQLITE_INTERNAL : return wxT("SQLITE_INTERNAL");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
462 case SQLITE_PERM : return wxT("SQLITE_PERM");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
463 case SQLITE_ABORT : return wxT("SQLITE_ABORT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
464 case SQLITE_BUSY : return wxT("SQLITE_BUSY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
465 case SQLITE_LOCKED : return wxT("SQLITE_LOCKED");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
466 case SQLITE_NOMEM : return wxT("SQLITE_NOMEM");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
467 case SQLITE_READONLY : return wxT("SQLITE_READONLY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
468 case SQLITE_INTERRUPT : return wxT("SQLITE_INTERRUPT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
469 case SQLITE_IOERR : return wxT("SQLITE_IOERR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
470 case SQLITE_CORRUPT : return wxT("SQLITE_CORRUPT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
471 case SQLITE_NOTFOUND : return wxT("SQLITE_NOTFOUND");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
472 case SQLITE_FULL : return wxT("SQLITE_FULL");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
473 case SQLITE_CANTOPEN : return wxT("SQLITE_CANTOPEN");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
474 case SQLITE_PROTOCOL : return wxT("SQLITE_PROTOCOL");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
475 case SQLITE_EMPTY : return wxT("SQLITE_EMPTY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
476 case SQLITE_SCHEMA : return wxT("SQLITE_SCHEMA");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
477 case SQLITE_TOOBIG : return wxT("SQLITE_TOOBIG");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
478 case SQLITE_CONSTRAINT : return wxT("SQLITE_CONSTRAINT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
479 case SQLITE_MISMATCH : return wxT("SQLITE_MISMATCH");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
480 case SQLITE_MISUSE : return wxT("SQLITE_MISUSE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
481 case SQLITE_NOLFS : return wxT("SQLITE_NOLFS");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
482 case SQLITE_AUTH : return wxT("SQLITE_AUTH");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
483 case SQLITE_FORMAT : return wxT("SQLITE_FORMAT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
484 case SQLITE_RANGE : return wxT("SQLITE_RANGE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
485 case SQLITE_NOTADB : return wxT("SQLITE_NOTADB");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
486 case SQLITE_ROW : return wxT("SQLITE_ROW");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
487 case SQLITE_DONE : return wxT("SQLITE_DONE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
488 // Extended error codes
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
489 case SQLITE_IOERR_READ : return wxT("SQLITE_IOERR_READ");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
490 case SQLITE_IOERR_SHORT_READ : return wxT("SQLITE_IOERR_SHORT_READ");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
491 case SQLITE_IOERR_WRITE : return wxT("SQLITE_IOERR_WRITE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
492 case SQLITE_IOERR_FSYNC : return wxT("SQLITE_IOERR_FSYNC");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
493 case SQLITE_IOERR_DIR_FSYNC : return wxT("SQLITE_IOERR_DIR_FSYNC");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
494 case SQLITE_IOERR_TRUNCATE : return wxT("SQLITE_IOERR_TRUNCATE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
495 case SQLITE_IOERR_FSTAT : return wxT("SQLITE_IOERR_FSTAT");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
496 case SQLITE_IOERR_UNLOCK : return wxT("SQLITE_IOERR_UNLOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
497 case SQLITE_IOERR_RDLOCK : return wxT("SQLITE_IOERR_RDLOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
498 case SQLITE_IOERR_DELETE : return wxT("SQLITE_IOERR_DELETE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
499 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
500 case SQLITE_IOERR_BLOCKED : return wxT("SQLITE_IOERR_BLOCKED");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
501 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
502 #if SQLITE_VERSION_NUMBER >= 3005001
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
503 case SQLITE_IOERR_NOMEM : return wxT("SQLITE_IOERR_NOMEM");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
504 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
505 #if SQLITE_VERSION_NUMBER >= 3006000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
506 case SQLITE_IOERR_ACCESS : return wxT("SQLITE_IOERR_ACCESS");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
507 case SQLITE_IOERR_CHECKRESERVEDLOCK : return wxT("SQLITE_IOERR_CHECKRESERVEDLOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
508 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
509 #if SQLITE_VERSION_NUMBER >= 3006002
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
510 case SQLITE_IOERR_LOCK : return wxT("SQLITE_IOERR_LOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
511 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
512 #if SQLITE_VERSION_NUMBER >= 3006007
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
513 case SQLITE_IOERR_CLOSE : return wxT("SQLITE_IOERR_CLOSE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
514 case SQLITE_IOERR_DIR_CLOSE : return wxT("SQLITE_IOERR_DIR_CLOSE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
515 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
516 #if SQLITE_VERSION_NUMBER >= 3007000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
517 case SQLITE_IOERR_SHMOPEN : return wxT("SQLITE_IOERR_SHMOPEN");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
518 case SQLITE_IOERR_SHMSIZE : return wxT("SQLITE_IOERR_SHMSIZE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
519 case SQLITE_IOERR_SHMLOCK : return wxT("SQLITE_IOERR_SHMLOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
520 case SQLITE_LOCKED_SHAREDCACHE : return wxT("SQLITE_LOCKED_SHAREDCACHE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
521 case SQLITE_BUSY_RECOVERY : return wxT("SQLITE_BUSY_RECOVERY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
522 case SQLITE_CANTOPEN_NOTEMPDIR : return wxT("SQLITE_CANTOPEN_NOTEMPDIR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
523 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
524 #if SQLITE_VERSION_NUMBER >= 3007007
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
525 case SQLITE_CORRUPT_VTAB : return wxT("SQLITE_CORRUPT_VTAB");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
526 case SQLITE_READONLY_RECOVERY : return wxT("SQLITE_READONLY_RECOVERY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
527 case SQLITE_READONLY_CANTLOCK : return wxT("SQLITE_READONLY_CANTLOCK");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
528 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
529
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
530 case WXSQLITE_ERROR : return wxT("WXSQLITE_ERROR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
531 default : return wxT("UNKNOWN_ERROR");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
532 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
533 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
534 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
535
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
536 wxSQLite3Exception::~wxSQLite3Exception()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
537 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
538 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
539
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
540 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
541 // wxSQLite3StatementBuffer: class providing a statement buffer
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
542 // for use with the SQLite3 vmprintf function
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
543 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
544
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
545 wxSQLite3StatementBuffer::wxSQLite3StatementBuffer()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
546 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
547 m_buffer = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
548 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
549
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
550 wxSQLite3StatementBuffer::~wxSQLite3StatementBuffer()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
551 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
552 Clear();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
553 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
554
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
555 void wxSQLite3StatementBuffer::Clear()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
556 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
557 if (m_buffer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
558 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
559 sqlite3_free(m_buffer);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
560 m_buffer = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
561 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
562 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
563
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
564 const char* wxSQLite3StatementBuffer::Format(const char* format, ...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
565 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
566 Clear();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
567 va_list va;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
568 va_start(va, format);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
569 m_buffer = sqlite3_vmprintf(format, va);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
570 va_end(va);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
571 return m_buffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
572 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
573
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
574 const char* wxSQLite3StatementBuffer::FormatV(const char* format, va_list va)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
575 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
576 Clear();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
577 m_buffer = sqlite3_vmprintf(format, va);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
578 return m_buffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
579 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
580
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
581 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
582 // wxSQLite3ResultSet: class providing access to the result set of a query
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
583 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
584
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
585 wxSQLite3ResultSet::wxSQLite3ResultSet()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
586 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
587 m_db = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
588 m_stmt = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
589 m_eof = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
590 m_first = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
591 m_cols = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
592 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
593
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
594 wxSQLite3ResultSet::wxSQLite3ResultSet(const wxSQLite3ResultSet& resultSet)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
595 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
596 m_db = resultSet.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
597 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
598 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
599 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
600 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
601 m_stmt = resultSet.m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
602 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
603 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
604 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
605 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
606 m_eof = resultSet.m_eof;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
607 m_first = resultSet.m_first;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
608 m_cols = resultSet.m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
609 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
610
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
611 wxSQLite3ResultSet::wxSQLite3ResultSet(wxSQLite3DatabaseReference* db,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
612 wxSQLite3StatementReference* stmt,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
613 bool eof,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
614 bool first)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
615 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
616 m_db = db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
617 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
618 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
619 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
620 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
621 m_stmt = stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
622 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
623 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
624 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
625 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
626 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
627 m_eof = eof;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
628 m_first = first;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
629 m_cols = sqlite3_column_count(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
630 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
631
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
632 wxSQLite3ResultSet::~wxSQLite3ResultSet()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
633 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
634 if (m_stmt != NULL && m_stmt->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
635 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
636 if (m_stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
637 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
638 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
639 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
640 Finalize(m_db, m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
641 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
642 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
643 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
644 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
645 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
646 delete m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
647 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
648 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
649 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
650 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
651 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
652 sqlite3_close(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
653 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
654 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
655 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
656 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
657
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
658 wxSQLite3ResultSet& wxSQLite3ResultSet::operator=(const wxSQLite3ResultSet& resultSet)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
659 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
660 if (this != &resultSet)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
661 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
662 wxSQLite3DatabaseReference* dbPrev = m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
663 wxSQLite3StatementReference* stmtPrev = m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
664 m_db = resultSet.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
665 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
666 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
667 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
668 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
669 m_stmt = resultSet.m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
670 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
671 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
672 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
673 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
674 m_eof = resultSet.m_eof;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
675 m_first = resultSet.m_first;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
676 m_cols = resultSet.m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
677 if (stmtPrev != NULL && stmtPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
678 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
679 Finalize(dbPrev, stmtPrev);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
680 delete stmtPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
681 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
682 if (dbPrev != NULL && dbPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
683 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
684 delete dbPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
685 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
686 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
687 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
688 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
689
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
690 int wxSQLite3ResultSet::GetColumnCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
691 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
692 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
693 return m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
694 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
695
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
696 wxString wxSQLite3ResultSet::GetAsString(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
697 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
698 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
699
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
700 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
701 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
702 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
703 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
704
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
705 const char* localValue = (const char*) sqlite3_column_text(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
706 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
707 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
708
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
709 wxString wxSQLite3ResultSet::GetAsString(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
710 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
711 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
712 const char* localValue = (const char*) sqlite3_column_text(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
713 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
714 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
715
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
716 int wxSQLite3ResultSet::GetInt(int columnIndex, int nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
717 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
718 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
719 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
720 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
721 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
722 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
723 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
724 return sqlite3_column_int(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
725 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
726 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
727
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
728
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
729 int wxSQLite3ResultSet::GetInt(const wxString& columnName, int nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
730 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
731 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
732 return GetInt(columnIndex, nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
733 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
734
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
735 wxLongLong wxSQLite3ResultSet::GetInt64(int columnIndex, wxLongLong nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
736 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
737 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
738 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
739 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
740 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
741 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
742 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
743 return wxLongLong(sqlite3_column_int64(m_stmt->m_stmt, columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
744 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
745 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
746
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
747 wxLongLong wxSQLite3ResultSet::GetInt64(const wxString& columnName, wxLongLong nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
748 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
749 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
750 return GetInt64(columnIndex, nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
751 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
752
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
753 double wxSQLite3ResultSet::GetDouble(int columnIndex, double nullValue /* = 0.0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
754 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
755 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
756 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
757 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
758 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
759 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
760 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
761 return sqlite3_column_double(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
762 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
763 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
764
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
765 double wxSQLite3ResultSet::GetDouble(const wxString& columnName, double nullValue /* = 0.0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
766 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
767 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
768 return GetDouble(columnIndex, nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
769 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
770
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
771 wxString wxSQLite3ResultSet::GetString(int columnIndex, const wxString& nullValue /* = wxEmptyString */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
772 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
773 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
774 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
775 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
776 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
777 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
778 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
779 const char* localValue = (const char*) sqlite3_column_text(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
780 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
781 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
782 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
783
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
784 wxString wxSQLite3ResultSet::GetString(const wxString& columnName, const wxString& nullValue /* = wxEmptyString */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
785 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
786 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
787 return GetString(columnIndex, nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
788 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
789
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
790 const unsigned char* wxSQLite3ResultSet::GetBlob(int columnIndex, int& len)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
791 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
792 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
793
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
794 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
795 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
796 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
797 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
798
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
799 len = sqlite3_column_bytes(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
800 return (const unsigned char*) sqlite3_column_blob(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
801 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
802
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
803 const unsigned char* wxSQLite3ResultSet::GetBlob(const wxString& columnName, int& len)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
804 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
805 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
806 return GetBlob(columnIndex, len);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
807 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
808
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
809 wxMemoryBuffer& wxSQLite3ResultSet::GetBlob(int columnIndex, wxMemoryBuffer& buffer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
810 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
811 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
812
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
813 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
814 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
815 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
816 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
817
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
818 int len = sqlite3_column_bytes(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
819 const void* blob = sqlite3_column_blob(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
820 buffer.AppendData((void*) blob, (size_t) len);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
821 return buffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
822 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
823
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
824 wxMemoryBuffer& wxSQLite3ResultSet::GetBlob(const wxString& columnName, wxMemoryBuffer& buffer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
825 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
826 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
827 return GetBlob(columnIndex, buffer);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
828 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
829
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
830 wxDateTime wxSQLite3ResultSet::GetDate(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
831 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
832 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
833 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
834 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
835 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
836 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
837 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
838 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
839 const wxChar* result = date.ParseDate(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
840 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
841 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
842 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
843 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
844 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
845 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
846 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
847 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
848 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
849 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
850
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
851 wxDateTime wxSQLite3ResultSet::GetDate(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
852 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
853 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
854 return GetDate(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
855 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
856
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
857
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
858 wxDateTime wxSQLite3ResultSet::GetTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
859 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
860 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
861 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
862 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
863 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
864 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
865 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
866 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
867 const wxChar* result = date.ParseTime(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
868 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
869 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
870 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
871 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
872 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
873 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
874 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
875 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
876 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
877 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
878
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
879 wxDateTime wxSQLite3ResultSet::GetTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
880 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
881 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
882 return GetTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
883 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
884
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
885 wxDateTime wxSQLite3ResultSet::GetDateTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
886 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
887 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
888 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
889 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
890 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
891 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
892 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
893 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
894 const wxChar* result = date.ParseDateTime(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
895 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
896 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
897 date.SetMillisecond(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
898 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
899 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
900 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
901 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
902 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
903 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
904 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
905 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
906
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
907 wxDateTime wxSQLite3ResultSet::GetDateTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
908 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
909 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
910 return GetDateTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
911 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
912
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
913 wxDateTime wxSQLite3ResultSet::GetTimestamp(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
914 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
915 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
916 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
917 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
918 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
919 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
920 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
921 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
922 const wxChar* result = date.ParseDateTime(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
923 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
924 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
925 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
926 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
927 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
928 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
929 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
930 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
931 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
932 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
933
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
934 wxDateTime wxSQLite3ResultSet::GetTimestamp(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
935 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
936 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
937 return GetTimestamp(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
938 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
939
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
940 wxDateTime wxSQLite3ResultSet::GetNumericDateTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
941 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
942 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
943 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
944 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
945 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
946 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
947 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
948 wxLongLong value = GetInt64(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
949 return wxDateTime(value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
950 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
951 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
952
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
953 wxDateTime wxSQLite3ResultSet::GetNumericDateTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
954 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
955 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
956 return GetNumericDateTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
957 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
958
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
959 wxDateTime wxSQLite3ResultSet::GetUnixDateTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
960 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
961 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
962 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
963 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
964 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
965 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
966 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
967 wxLongLong value = GetInt64(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
968 return wxDateTime((time_t) value.GetValue());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
969 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
970 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
971
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
972 wxDateTime wxSQLite3ResultSet::GetUnixDateTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
973 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
974 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
975 return GetUnixDateTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
976 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
977
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
978 wxDateTime wxSQLite3ResultSet::GetJulianDayNumber(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
979 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
980 if (GetColumnType(columnIndex) == SQLITE_NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
981 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
982 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
983 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
984 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
985 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
986 double value = GetDouble(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
987 return wxDateTime(value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
988 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
989 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
990
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
991 wxDateTime wxSQLite3ResultSet::GetJulianDayNumber(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
992 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
993 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
994 return GetJulianDayNumber(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
995 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
996
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
997 bool wxSQLite3ResultSet::GetBool(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
998 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
999 return GetInt(columnIndex) != 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1000 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1001
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1002 wxDateTime wxSQLite3ResultSet::GetAutomaticDateTime(int columnIndex, bool milliSeconds)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1003 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1004 wxDateTime result;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1005 int columnType = GetColumnType(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1006 switch (columnType)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1007 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1008 case SQLITE3_TEXT:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1009 result = GetDateTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1010 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1011 case SQLITE_INTEGER:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1012 if (milliSeconds)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1013 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1014 wxLongLong value = GetInt64(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1015 result = wxDateTime(value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1016 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1017 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1018 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1019 time_t value = GetInt64(columnIndex).GetValue();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1020 result = wxDateTime(value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1021 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1022 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1023 case SQLITE_FLOAT:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1024 result = GetJulianDayNumber(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1025 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1026 case SQLITE_NULL:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1027 default:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1028 result = wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1029 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1030 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1031 return result;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1032 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1033
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1034 wxDateTime wxSQLite3ResultSet::GetAutomaticDateTime(const wxString& columnName, bool milliSeconds)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1035 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1036 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1037 return GetAutomaticDateTime(columnIndex, milliSeconds);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1038 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1039
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1040 bool wxSQLite3ResultSet::GetBool(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1041 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1042 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1043 return GetBool(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1044 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1045
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1046 bool wxSQLite3ResultSet::IsNull(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1047 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1048 return (GetColumnType(columnIndex) == SQLITE_NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1049 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1050
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1051 bool wxSQLite3ResultSet::IsNull(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1052 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1053 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1054 return (GetColumnType(columnIndex) == SQLITE_NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1055 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1056
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1057 int wxSQLite3ResultSet::FindColumnIndex(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1058 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1059 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1060
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1061 wxCharBuffer strColumnName = columnName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1062 const char* localColumnName = strColumnName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1063
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1064 if (columnName.Len() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1065 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1066 for (int columnIndex = 0; columnIndex < m_cols; columnIndex++)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1067 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1068 const char* temp = sqlite3_column_name(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1069
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1070 if (strcmp(localColumnName, temp) == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1071 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1072 return columnIndex;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1073 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1074 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1075 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1076
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1077 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1078 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1079
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1080 wxString wxSQLite3ResultSet::GetColumnName(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1081 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1082 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1083
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1084 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1085 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1086 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1087 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1088
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1089 const char* localValue = sqlite3_column_name(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1090 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1091 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1092
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1093 wxString wxSQLite3ResultSet::GetDeclaredColumnType(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1094 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1095 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1096
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1097 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1098 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1099 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1100 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1101
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1102 const char* localValue = sqlite3_column_decltype(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1103 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1104 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1105
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1106 int wxSQLite3ResultSet::GetColumnType(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1107 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1108 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1109
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1110 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1111 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1112 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1113 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1114
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1115 return sqlite3_column_type(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1116 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1117
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1118 bool wxSQLite3ResultSet::Eof()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1119 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1120 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1121 return m_eof;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1122 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1123
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1124 bool wxSQLite3ResultSet::CursorMoved()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1125 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1126 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1127 return !m_first;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1128 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1129
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1130 bool wxSQLite3ResultSet::NextRow()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1131 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1132 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1133
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1134 int rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1135 if (m_first)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1136 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1137 m_first = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1138 rc = (m_eof) ? SQLITE_DONE : SQLITE_ROW;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1139 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1140 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1141 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1142 rc = sqlite3_step(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1143 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1144
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1145 if (rc == SQLITE_DONE) // no more rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1146 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1147 m_eof = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1148 return false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1149 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1150 else if (rc == SQLITE_ROW) // more rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1151 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1152 return true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1153 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1154 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1155 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1156 rc = sqlite3_finalize(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1157 m_stmt->Invalidate();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1158 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1159 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1160 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1161 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1162
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1163 void wxSQLite3ResultSet::Finalize()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1164 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1165 Finalize(m_db, m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1166 if (m_stmt != NULL && m_stmt->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1167 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1168 delete m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1169 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1170 m_stmt = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1171 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1172 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1173 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1174 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1175 sqlite3_close(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1176 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1177 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1178 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1179 m_db = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1180 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1181
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1182 void wxSQLite3ResultSet::Finalize(wxSQLite3DatabaseReference* db,wxSQLite3StatementReference* stmt)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1183 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1184 if (stmt != NULL && stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1185 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1186 int rc = sqlite3_finalize(stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1187 stmt->Invalidate();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1188 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1189 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1190 if (db != NULL && db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1191 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1192 const char* localError = sqlite3_errmsg(db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1193 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1194 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1195 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1196 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1197 throw wxSQLite3Exception(rc, wxERRMSG_FINALIZE_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1198 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1199 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1200 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1201 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1202
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1203 wxString wxSQLite3ResultSet::GetSQL()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1204 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1205 wxString sqlString = wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1206 #if SQLITE_VERSION_NUMBER >= 3005003
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1207 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1208 const char* sqlLocal = sqlite3_sql(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1209 if (sqlLocal != NULL) sqlString = wxString::FromUTF8(sqlLocal);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1210 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1211 return sqlString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1212 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1213
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1214 bool wxSQLite3ResultSet::IsOk()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1215 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1216 return (m_db != NULL) && (m_db->m_isValid) && (m_stmt != NULL) && (m_stmt->m_isValid);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1217 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1218
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1219 void wxSQLite3ResultSet::CheckStmt()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1220 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1221 if (m_stmt == NULL || m_stmt->m_stmt == NULL || !m_stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1222 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1223 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOSTMT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1224 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1225 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1226
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1227 wxString wxSQLite3ResultSet::GetDatabaseName(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1228 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1229 #if WXSQLITE3_HAVE_METADATA
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1230 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1231 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1232 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1233 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1234 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1235
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1236 const char* localValue = sqlite3_column_database_name(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1237 if (localValue != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1238 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1239 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1240 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1241 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1242 wxUnusedVar(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1243 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMETADATA);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1244 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1245 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1246
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1247 wxString wxSQLite3ResultSet::GetTableName(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1248 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1249 #if WXSQLITE3_HAVE_METADATA
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1250 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1251 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1252 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1253 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1254 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1255
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1256 const char* localValue = sqlite3_column_table_name(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1257 if (localValue != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1258 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1259 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1260 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1261 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1262 wxUnusedVar(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1263 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMETADATA);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1264 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1265 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1266
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1267 wxString wxSQLite3ResultSet::GetOriginName(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1268 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1269 #if WXSQLITE3_HAVE_METADATA
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1270 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1271 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1272 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1273 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1274 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1275
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1276 const char* localValue = sqlite3_column_origin_name(m_stmt->m_stmt, columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1277 if (localValue != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1278 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1279 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1280 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1281 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1282 wxUnusedVar(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1283 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMETADATA);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1284 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1285 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1286
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1287 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1288 // wxSQLite3Table: class holding the complete result set of a query
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1289 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1290
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1291 wxSQLite3Table::wxSQLite3Table()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1292 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1293 m_results = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1294 m_rows = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1295 m_cols = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1296 m_currentRow = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1297 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1298
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1299 wxSQLite3Table::wxSQLite3Table(const wxSQLite3Table& table)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1300 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1301 m_results = table.m_results;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1302 // Only one object can own the results
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1303 const_cast<wxSQLite3Table&>(table).m_results = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1304 m_rows = table.m_rows;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1305 m_cols = table.m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1306 m_currentRow = table.m_currentRow;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1307 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1308
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1309 wxSQLite3Table::wxSQLite3Table(char** results, int rows, int cols)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1310 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1311 m_results = results;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1312 m_rows = rows;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1313 m_cols = cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1314 m_currentRow = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1315 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1316
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1317 wxSQLite3Table::~wxSQLite3Table()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1318 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1319 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1320 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1321 Finalize();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1322 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1323 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1324 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1325 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1326 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1327
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1328 wxSQLite3Table& wxSQLite3Table::operator=(const wxSQLite3Table& table)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1329 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1330 if (this != &table)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1331 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1332 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1333 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1334 Finalize();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1335 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1336 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1337 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1338 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1339 m_results = table.m_results;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1340 // Only one object can own the results
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1341 const_cast<wxSQLite3Table&>(table).m_results = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1342 m_rows = table.m_rows;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1343 m_cols = table.m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1344 m_currentRow = table.m_currentRow;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1345 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1346 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1347 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1348
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1349 void wxSQLite3Table::Finalize()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1350 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1351 if (m_results)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1352 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1353 sqlite3_free_table(m_results);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1354 m_results = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1355 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1356 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1357
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1358 int wxSQLite3Table::GetColumnCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1359 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1360 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1361 return m_cols;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1362 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1363
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1364 int wxSQLite3Table::GetRowCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1365 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1366 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1367 return m_rows;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1368 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1369
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1370 int wxSQLite3Table::FindColumnIndex(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1371 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1372 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1373
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1374 wxCharBuffer strColumnName = columnName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1375 const char* localColumnName = strColumnName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1376
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1377 if (columnName.Len() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1378 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1379 for (int columnIndex = 0; columnIndex < m_cols; columnIndex++)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1380 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1381 if (strcmp(localColumnName, m_results[columnIndex]) == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1382 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1383 return columnIndex;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1384 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1385 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1386 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1387
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1388 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_NAME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1389 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1390
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1391 wxString wxSQLite3Table::GetAsString(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1392 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1393 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1394 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1395 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1396 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1397
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1398 int nIndex = (m_currentRow*m_cols) + m_cols + columnIndex;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1399 const char* localValue = m_results[nIndex];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1400 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1401 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1402
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1403 wxString wxSQLite3Table::GetAsString(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1404 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1405 int index = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1406 return GetAsString(index);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1407 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1408
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1409 int wxSQLite3Table::GetInt(int columnIndex, int nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1410 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1411 if (IsNull(columnIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1412 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1413 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1414 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1415 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1416 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1417 long value = nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1418 GetAsString(columnIndex).ToLong(&value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1419 return (int) value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1420 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1421 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1422
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1423 int wxSQLite3Table::GetInt(const wxString& columnName, int nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1424 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1425 if (IsNull(columnName))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1426 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1427 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1428 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1429 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1430 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1431 long value = nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1432 GetAsString(columnName).ToLong(&value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1433 return (int) value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1434 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1435 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1436
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1437 wxLongLong wxSQLite3Table::GetInt64(int columnIndex, wxLongLong nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1438 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1439 if (IsNull(columnIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1440 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1441 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1442 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1443 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1444 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1445 return ConvertStringToLongLong(GetAsString(columnIndex), nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1446 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1447 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1448
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1449 wxLongLong wxSQLite3Table::GetInt64(const wxString& columnName, wxLongLong nullValue /* = 0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1450 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1451 if (IsNull(columnName))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1452 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1453 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1454 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1455 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1456 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1457 return ConvertStringToLongLong(GetAsString(columnName), nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1458 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1459 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1460
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1461 // Since SQLite uses internally a locale independent string representation
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1462 // of double values, we need to provide our own conversion procedure using
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1463 // always a point as the decimal separator.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1464 // The following code duplicates a SQLite utility function with minor modifications.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1465
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1466 static double wxSQLite3AtoF(const char *z)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1467 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1468 int sign = 1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1469 long double v1 = 0.0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1470 int nSignificant = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1471 while (isspace(*(unsigned char*)z))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1472 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1473 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1474 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1475 if (*z == '-')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1476 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1477 sign = -1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1478 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1479 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1480 else if (*z == '+')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1481 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1482 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1483 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1484 while (*z == '0')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1485 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1486 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1487 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1488 while (isdigit(*(unsigned char*)z))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1489 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1490 v1 = v1*10.0 + (*z - '0');
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1491 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1492 ++nSignificant;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1493 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1494 if (*z == '.')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1495 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1496 long double divisor = 1.0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1497 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1498 if (nSignificant == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1499 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1500 while (*z == '0')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1501 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1502 divisor *= 10.0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1503 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1504 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1505 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1506 while (isdigit(*(unsigned char*)z))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1507 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1508 if (nSignificant < 18)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1509 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1510 v1 = v1*10.0 + (*z - '0');
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1511 divisor *= 10.0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1512 ++nSignificant;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1513 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1514 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1515 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1516 v1 /= divisor;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1517 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1518 if (*z=='e' || *z=='E')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1519 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1520 int esign = 1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1521 int eval = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1522 long double scale = 1.0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1523 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1524 if (*z == '-')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1525 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1526 esign = -1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1527 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1528 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1529 else if (*z == '+')
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1530 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1531 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1532 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1533 while (isdigit(*(unsigned char*)z))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1534 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1535 eval = eval*10 + *z - '0';
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1536 ++z;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1537 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1538 while (eval >= 64) { scale *= 1.0e+64; eval -= 64; }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1539 while (eval >= 16) { scale *= 1.0e+16; eval -= 16; }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1540 while (eval >= 4) { scale *= 1.0e+4; eval -= 4; }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1541 while (eval >= 1) { scale *= 1.0e+1; eval -= 1; }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1542 if (esign < 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1543 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1544 v1 /= scale;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1545 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1546 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1547 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1548 v1 *= scale;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1549 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1550 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1551 return (double) ((sign < 0) ? -v1 : v1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1552 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1553
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1554 double wxSQLite3Table::GetDouble(int columnIndex, double nullValue /* = 0.0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1555 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1556 if (IsNull(columnIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1557 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1558 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1559 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1560 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1561 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1562 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1563 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1564 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1565 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1566 int nIndex = (m_currentRow*m_cols) + m_cols + columnIndex;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1567 return wxSQLite3AtoF(m_results[nIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1568 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1569 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1570
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1571 double wxSQLite3Table::GetDouble(const wxString& columnName, double nullValue /* = 0.0 */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1572 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1573 int index = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1574 return GetDouble(index, nullValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1575 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1576
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1577 wxString wxSQLite3Table::GetString(int columnIndex, const wxString& nullValue /* = wxEmptyString */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1578 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1579 if (IsNull(columnIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1580 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1581 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1582 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1583 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1584 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1585 return GetAsString(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1586 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1587 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1588
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1589 wxString wxSQLite3Table::GetString(const wxString& columnName, const wxString& nullValue /* = wxEmptyString */)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1590 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1591 if (IsNull(columnName))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1592 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1593 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1594 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1595 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1596 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1597 return GetAsString(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1598 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1599 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1600
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1601 wxDateTime wxSQLite3Table::GetDate(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1602 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1603 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1604 const wxChar* result = date.ParseDate(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1605 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1606 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1607 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1608 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1609 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1610 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1611 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1612 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1613 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1614
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1615 wxDateTime wxSQLite3Table::GetDate(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1616 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1617 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1618 return GetDate(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1619 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1620
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1621 wxDateTime wxSQLite3Table::GetTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1622 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1623 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1624 const wxChar* result = date.ParseTime(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1625 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1626 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1627 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1628 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1629 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1630 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1631 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1632 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1633 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1634
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1635 wxDateTime wxSQLite3Table::GetTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1636 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1637 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1638 return GetTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1639 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1640
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1641 wxDateTime wxSQLite3Table::GetDateTime(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1642 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1643 wxDateTime date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1644 const wxChar* result = date.ParseDateTime(GetString(columnIndex));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1645 if (result != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1646 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1647 return date;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1648 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1649 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1650 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1651 return wxInvalidDateTime;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1652 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1653 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1654
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1655 wxDateTime wxSQLite3Table::GetDateTime(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1656 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1657 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1658 return GetDateTime(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1659 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1660
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1661 bool wxSQLite3Table::GetBool(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1662 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1663 return GetInt(columnIndex) != 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1664 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1665
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1666 bool wxSQLite3Table::GetBool(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1667 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1668 int columnIndex = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1669 return GetBool(columnIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1670 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1671
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1672 bool wxSQLite3Table::IsNull(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1673 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1674 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1675
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1676 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1677 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1678 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1679 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1680
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1681 int index = (m_currentRow*m_cols) + m_cols + columnIndex;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1682 const char* localValue = m_results[index];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1683 return (localValue == 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1684 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1685
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1686 bool wxSQLite3Table::IsNull(const wxString& columnName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1687 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1688 int index = FindColumnIndex(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1689 return IsNull(index);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1690 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1691
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1692 wxString wxSQLite3Table::GetColumnName(int columnIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1693 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1694 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1695
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1696 if (columnIndex < 0 || columnIndex > m_cols-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1697 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1698 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_INDEX);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1699 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1700
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1701 const char* localValue = m_results[columnIndex];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1702 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1703 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1704
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1705 void wxSQLite3Table::SetRow(int row)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1706 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1707 CheckResults();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1708
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1709 if (row < 0 || row > m_rows-1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1710 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1711 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_ROW);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1712 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1713
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1714 m_currentRow = row;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1715 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1716
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1717 bool wxSQLite3Table::IsOk()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1718 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1719 return (m_results != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1720 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1721
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1722 void wxSQLite3Table::CheckResults()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1723 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1724 if (m_results == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1725 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1726 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NORESULT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1727 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1728 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1729
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1730 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1731 // wxSQLite3Statement: class holding a prepared statement
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1732 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1733
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1734 wxSQLite3Statement::wxSQLite3Statement()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1735 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1736 m_db = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1737 m_stmt = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1738 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1739
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1740 wxSQLite3Statement::wxSQLite3Statement(const wxSQLite3Statement& statement)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1741 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1742 m_db = statement.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1743 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1744 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1745 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1746 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1747 m_stmt = statement.m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1748 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1749 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1750 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1751 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1752 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1753
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1754 wxSQLite3Statement::wxSQLite3Statement(wxSQLite3DatabaseReference* db, wxSQLite3StatementReference* stmt)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1755 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1756 m_db = db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1757 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1758 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1759 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1760 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1761 m_stmt = stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1762 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1763 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1764 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1765 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1766 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1767
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1768 wxSQLite3Statement::~wxSQLite3Statement()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1769 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1770 if (m_stmt != NULL && m_stmt->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1771 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1772 if (m_stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1773 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1774 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1775 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1776 Finalize(m_db, m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1777 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1778 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1779 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1780 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1781 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1782 delete m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1783 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1784 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1785 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1786 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1787 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1788 sqlite3_close(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1789 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1790 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1791 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1792 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1793
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1794 wxSQLite3Statement& wxSQLite3Statement::operator=(const wxSQLite3Statement& statement)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1795 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1796 if (this != &statement)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1797 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1798 wxSQLite3DatabaseReference* dbPrev = m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1799 wxSQLite3StatementReference* stmtPrev = m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1800 m_db = statement.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1801 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1802 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1803 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1804 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1805 m_stmt = statement.m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1806 if (m_stmt != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1807 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1808 m_stmt->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1809 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1810 if (stmtPrev != NULL && stmtPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1811 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1812 Finalize(dbPrev, stmtPrev);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1813 delete stmtPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1814 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1815 if (dbPrev != NULL && dbPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1816 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1817 delete dbPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1818 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1819 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1820 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1821 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1822
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1823 int wxSQLite3Statement::ExecuteUpdate()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1824 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1825 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1826 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1827
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1828 const char* localError=0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1829
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1830 int rc = sqlite3_step(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1831
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1832 if (rc == SQLITE_DONE)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1833 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1834 int rowsChanged = sqlite3_changes(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1835
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1836 rc = sqlite3_reset(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1837
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1838 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1839 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1840 localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1841 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1842 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1843
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1844 return rowsChanged;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1845 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1846 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1847 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1848 rc = sqlite3_reset(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1849 localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1850 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1851 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1852 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1853
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1854 wxSQLite3ResultSet wxSQLite3Statement::ExecuteQuery()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1855 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1856 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1857 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1858
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1859 int rc = sqlite3_step(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1860
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1861 if (rc == SQLITE_DONE) // no more rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1862 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1863 return wxSQLite3ResultSet(m_db, m_stmt, true/*eof*/, true/*first*/);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1864 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1865 else if (rc == SQLITE_ROW) // one or more rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1866 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1867 return wxSQLite3ResultSet(m_db, m_stmt, false/*eof*/, true/*first*/);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1868 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1869 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1870 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1871 rc = sqlite3_reset(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1872 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1873 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1874 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1875 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1876
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1877 int wxSQLite3Statement::ExecuteScalar()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1878 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1879 wxSQLite3ResultSet resultSet = ExecuteQuery();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1880
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1881 if (resultSet.Eof() || resultSet.GetColumnCount() < 1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1882 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1883 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_QUERY);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1884 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1885
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1886 long value = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1887 resultSet.GetAsString(0).ToLong(&value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1888 return (int) value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1889 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1890
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1891 int wxSQLite3Statement::GetParamCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1892 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1893 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1894 return sqlite3_bind_parameter_count(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1895 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1896
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1897 int wxSQLite3Statement::GetParamIndex(const wxString& paramName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1898 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1899 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1900
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1901 wxCharBuffer strParamName = paramName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1902 const char* localParamName = strParamName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1903
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1904 return sqlite3_bind_parameter_index(m_stmt->m_stmt, localParamName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1905 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1906
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1907 wxString wxSQLite3Statement::GetParamName(int paramIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1908 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1909 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1910 const char* localParamName = sqlite3_bind_parameter_name(m_stmt->m_stmt, paramIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1911 return wxString::FromUTF8(localParamName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1912 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1913
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1914 void wxSQLite3Statement::Bind(int paramIndex, const wxString& stringValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1915 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1916 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1917
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1918 wxCharBuffer strStringValue = stringValue.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1919 const char* localStringValue = strStringValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1920
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1921 int rc = sqlite3_bind_text(m_stmt->m_stmt, paramIndex, localStringValue, -1, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1922
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1923 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1924 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1925 throw wxSQLite3Exception(rc, wxERRMSG_BIND_STR);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1926 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1927 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1928
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1929 void wxSQLite3Statement::Bind(int paramIndex, int intValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1930 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1931 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1932 int rc = sqlite3_bind_int(m_stmt->m_stmt, paramIndex, intValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1933
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1934 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1935 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1936 throw wxSQLite3Exception(rc, wxERRMSG_BIND_INT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1937 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1938 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1939
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1940 void wxSQLite3Statement::Bind(int paramIndex, wxLongLong int64Value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1941 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1942 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1943 int rc = sqlite3_bind_int64(m_stmt->m_stmt, paramIndex, int64Value.GetValue());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1944
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1945 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1946 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1947 throw wxSQLite3Exception(rc, wxERRMSG_BIND_INT64);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1948 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1949 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1950
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1951 void wxSQLite3Statement::Bind(int paramIndex, double doubleValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1952 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1953 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1954 int rc = sqlite3_bind_double(m_stmt->m_stmt, paramIndex, doubleValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1955
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1956 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1957 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1958 throw wxSQLite3Exception(rc, wxERRMSG_BIND_DBL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1959 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1960 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1961
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1962 void wxSQLite3Statement::Bind(int paramIndex, const char* charValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1963 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1964 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1965 int rc = sqlite3_bind_text(m_stmt->m_stmt, paramIndex, charValue, -1, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1966
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1967 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1968 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1969 throw wxSQLite3Exception(rc, wxERRMSG_BIND_STR);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1970 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1971 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1972
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1973 void wxSQLite3Statement::Bind(int paramIndex, const unsigned char* blobValue, int blobLen)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1974 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1975 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1976 int rc = sqlite3_bind_blob(m_stmt->m_stmt, paramIndex,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1977 (const void*)blobValue, blobLen, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1978
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1979 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1980 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1981 throw wxSQLite3Exception(rc, wxERRMSG_BIND_BLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1982 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1983 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1984
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1985 void wxSQLite3Statement::Bind(int paramIndex, const wxMemoryBuffer& blobValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1986 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1987 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1988 int blobLen = (int) blobValue.GetDataLen();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1989 int rc = sqlite3_bind_blob(m_stmt->m_stmt, paramIndex,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1990 (const void*)blobValue.GetData(), blobLen, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1991
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1992 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1993 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1994 throw wxSQLite3Exception(rc, wxERRMSG_BIND_BLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1995 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1996 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1997
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1998 void wxSQLite3Statement::BindDate(int paramIndex, const wxDateTime& date)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
1999 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2000 if (date.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2001 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2002 Bind(paramIndex,date.FormatISODate());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2003 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2004 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2005 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2006 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2007 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2008 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2009
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2010 void wxSQLite3Statement::BindTime(int paramIndex, const wxDateTime& time)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2011 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2012 if (time.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2013 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2014 Bind(paramIndex,time.FormatISOTime());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2015 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2016 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2017 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2018 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2019 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2020 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2021
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2022 void wxSQLite3Statement::BindDateTime(int paramIndex, const wxDateTime& datetime)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2023 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2024 if (datetime.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2025 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2026 Bind(paramIndex,datetime.Format(wxT("%Y-%m-%d %H:%M:%S")));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2027 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2028 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2029 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2030 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2031 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2032 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2033
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2034 void wxSQLite3Statement::BindTimestamp(int paramIndex, const wxDateTime& timestamp)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2035 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2036 if (timestamp.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2037 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2038 Bind(paramIndex,timestamp.Format(wxT("%Y-%m-%d %H:%M:%S.%l")));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2039 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2040 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2041 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2042 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2043 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2044 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2045
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2046 void wxSQLite3Statement::BindNumericDateTime(int paramIndex, const wxDateTime& datetime)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2047 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2048 if (datetime.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2049 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2050 Bind(paramIndex, datetime.GetValue());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2051 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2052 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2053 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2054 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2055 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2056 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2057
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2058 void wxSQLite3Statement::BindUnixDateTime(int paramIndex, const wxDateTime& datetime)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2059 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2060 if (datetime.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2061 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2062 wxLongLong ticks = datetime.GetTicks();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2063 Bind(paramIndex, ticks);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2064 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2065 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2066 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2067 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2068 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2069 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2070
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2071 void wxSQLite3Statement::BindJulianDayNumber(int paramIndex, const wxDateTime& datetime)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2072 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2073 if (datetime.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2074 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2075 Bind(paramIndex, datetime.GetJulianDayNumber());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2076 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2077 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2078 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2079 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_BIND_DATETIME);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2080 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2081 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2082
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2083 void wxSQLite3Statement::BindBool(int paramIndex, bool value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2084 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2085 Bind(paramIndex, value ? 1 : 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2086 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2087
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2088 void wxSQLite3Statement::BindNull(int paramIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2089 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2090 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2091 int rc = sqlite3_bind_null(m_stmt->m_stmt, paramIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2092
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2093 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2094 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2095 throw wxSQLite3Exception(rc, wxERRMSG_BIND_NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2096 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2097 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2098
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2099 void wxSQLite3Statement::BindZeroBlob(int paramIndex, int blobSize)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2100 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2101 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2102 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2103 int rc = sqlite3_bind_zeroblob(m_stmt->m_stmt, paramIndex, blobSize);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2104 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2105 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2106 throw wxSQLite3Exception(rc, wxERRMSG_BIND_ZEROBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2107 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2108 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2109 wxUnusedVar(paramIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2110 wxUnusedVar(blobSize);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2111 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2112 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2113 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2114
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2115 void wxSQLite3Statement::ClearBindings()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2116 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2117 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2118 #if 0 // missing in SQLite DLL
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2119 int rc = sqlite3_clear_bindings(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2120
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2121 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2122 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2123 throw wxSQLite3Exception(rc, wxERRMSG_BIND_CLEAR);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2124 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2125 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2126 for (int paramIndex = 1; paramIndex <= GetParamCount(); paramIndex++)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2127 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2128 BindNull(paramIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2129 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2130 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2131 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2132
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2133 wxString wxSQLite3Statement::GetSQL()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2134 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2135 wxString sqlString = wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2136 #if SQLITE_VERSION_NUMBER >= 3005003
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2137 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2138 const char* sqlLocal = sqlite3_sql(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2139 if (sqlLocal != NULL) sqlString = wxString::FromUTF8(sqlLocal);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2140 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2141 return sqlString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2142 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2143
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2144 void wxSQLite3Statement::Reset()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2145 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2146 if (m_stmt != NULL && m_stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2147 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2148 int rc = sqlite3_reset(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2149
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2150 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2151 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2152 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2153 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2154 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2155 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2156 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2157
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2158 bool wxSQLite3Statement::IsReadOnly()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2159 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2160 #if SQLITE_VERSION_NUMBER >= 3007004
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2161 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2162 return sqlite3_stmt_readonly(m_stmt->m_stmt) != 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2163 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2164 return false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2165 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2166 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2167
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2168 void wxSQLite3Statement::Finalize()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2169 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2170 Finalize(m_db, m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2171 if (m_stmt != NULL && m_stmt->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2172 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2173 delete m_stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2174 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2175 m_stmt = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2176 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2177 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2178 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2179 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2180 sqlite3_close(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2181 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2182 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2183 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2184 m_db = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2185 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2186
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2187 void wxSQLite3Statement::Finalize(wxSQLite3DatabaseReference* db,wxSQLite3StatementReference* stmt)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2188 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2189 if (stmt != NULL && stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2190 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2191 int rc = sqlite3_finalize(stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2192 stmt->Invalidate();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2193 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2194 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2195 if (db != NULL && db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2196 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2197 const char* localError = sqlite3_errmsg(db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2198 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2199 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2200 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2201 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2202 throw wxSQLite3Exception(rc, wxERRMSG_FINALIZE_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2203 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2204 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2205 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2206 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2207
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2208 bool wxSQLite3Statement::IsOk()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2209 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2210 return (m_db != 0) && (m_stmt != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2211 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2212
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2213 bool wxSQLite3Statement::IsBusy()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2214 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2215 #if SQLITE_VERSION_NUMBER >= 3007010
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2216 CheckStmt();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2217 int rc = sqlite3_stmt_busy(m_stmt->m_stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2218 return (rc != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2219 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2220 return false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2221 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2222 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2223
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2224 int wxSQLite3Statement::Status(wxSQLite3StatementStatus opCode, bool resetFlag)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2225 {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2226 int count = 0;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2227 #if SQLITE_VERSION_NUMBER >= 3007000
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2228 CheckStmt();
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2229 count = sqlite3_stmt_status(m_stmt->m_stmt, (int) opCode, (resetFlag) ? 1 : 0 );
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2230 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2231 return count;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2232 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
2233
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2234 void wxSQLite3Statement::CheckDatabase()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2235 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2236 if (m_db == NULL || m_db->m_db == NULL || !m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2237 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2238 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NODB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2239 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2240 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2241
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2242 void wxSQLite3Statement::CheckStmt()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2243 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2244 if (m_stmt == NULL || m_stmt->m_stmt == NULL || !m_stmt->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2245 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2246 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOSTMT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2247 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2248 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2249
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2250 //
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2251
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2252 wxSQLite3Blob::wxSQLite3Blob()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2253 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2254 m_db = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2255 m_blob = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2256 m_writable = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2257 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2258
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2259 wxSQLite3Blob::wxSQLite3Blob(const wxSQLite3Blob& blob)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2260 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2261 m_db = blob.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2262 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2263 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2264 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2265 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2266 m_blob = blob.m_blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2267 if (m_blob != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2268 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2269 m_blob->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2270 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2271 m_writable = blob.m_writable;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2272 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2273
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2274 wxSQLite3Blob& wxSQLite3Blob::operator=(const wxSQLite3Blob& blob)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2275 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2276 if (this != &blob)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2277 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2278 wxSQLite3DatabaseReference* dbPrev = m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2279 wxSQLite3BlobReference* blobPrev = m_blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2280 m_db = blob.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2281 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2282 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2283 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2284 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2285 m_blob = blob.m_blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2286 if (m_blob != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2287 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2288 m_blob->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2289 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2290 m_writable = blob.m_writable;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2291 if (blobPrev != NULL && blobPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2292 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2293 Finalize(dbPrev, blobPrev);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2294 delete blobPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2295 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2296 if (dbPrev != NULL && dbPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2297 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2298 delete dbPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2299 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2300 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2301 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2302 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2303
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2304 wxSQLite3Blob::wxSQLite3Blob(wxSQLite3DatabaseReference* db, wxSQLite3BlobReference* blob, bool writable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2305 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2306 m_db = db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2307 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2308 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2309 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2310 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2311 m_blob = blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2312 if (m_blob != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2313 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2314 m_blob->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2315 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2316 m_writable = writable;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2317 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2318
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2319 wxSQLite3Blob::~wxSQLite3Blob()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2320 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2321 if (m_blob != NULL && m_blob->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2322 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2323 Finalize(m_db, m_blob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2324 delete m_blob;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2325 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2326 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2327 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2328 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2329 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2330 sqlite3_close(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2331 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2332 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2333 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2334 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2335
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2336 wxMemoryBuffer& wxSQLite3Blob::Read(wxMemoryBuffer& blobValue, int length, int offset)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2337 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2338 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2339 CheckBlob();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2340 char* localBuffer = (char*) blobValue.GetAppendBuf((size_t) length);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2341 int rc = sqlite3_blob_read(m_blob->m_blob, localBuffer, length, offset);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2342
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2343 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2344 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2345 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2346 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2347 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2348
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2349 blobValue.UngetAppendBuf((size_t) length);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2350 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2351 wxUnusedVar(blobValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2352 wxUnusedVar(length);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2353 wxUnusedVar(offset);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2354 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2355 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2356 return blobValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2357 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2358
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2359 void wxSQLite3Blob::Write(const wxMemoryBuffer& blobValue, int offset)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2360 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2361 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2362 CheckBlob();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2363 if (m_writable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2364 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2365 int blobLen = (int) blobValue.GetDataLen();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2366 int rc = sqlite3_blob_write(m_blob->m_blob,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2367 (const void*) blobValue.GetData(), blobLen, offset);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2368
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2369 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2370 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2371 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2372 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2373 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2374 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2375 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2376 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2377 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_BLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2378 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2379 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2380 wxUnusedVar(blobValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2381 wxUnusedVar(offset);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2382 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2383 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2384 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2385
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2386 bool wxSQLite3Blob::IsOk()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2387 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2388 return (m_blob != NULL && m_blob->m_isValid);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2389 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2390
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2391 bool wxSQLite3Blob::IsReadOnly()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2392 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2393 return !m_writable;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2394 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2395
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2396 int wxSQLite3Blob::GetSize()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2397 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2398 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2399 CheckBlob();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2400 return sqlite3_blob_bytes(m_blob->m_blob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2401 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2402 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2403 return 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2404 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2405 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2406
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2407 void wxSQLite3Blob::Rebind(wxLongLong rowid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2408 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2409 #if SQLITE_VERSION_NUMBER >= 3007004
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2410 CheckBlob();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2411 int rc = sqlite3_blob_reopen(m_blob->m_blob, rowid.GetValue());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2412 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2413 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2414 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2415 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2416 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2417 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2418 wxUnusedVar(rowid);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2419 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOBLOBREBIND);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2420 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2421 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2422
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2423 void wxSQLite3Blob::Finalize()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2424 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2425 Finalize(m_db, m_blob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2426 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2427
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2428 void wxSQLite3Blob::Finalize(wxSQLite3DatabaseReference* db, wxSQLite3BlobReference* blob)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2429 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2430 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2431 if (blob != NULL && blob->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2432 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2433 int rc = sqlite3_blob_close(blob->m_blob);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2434 blob->Invalidate();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2435 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2436 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2437 if (db != NULL && db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2438 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2439 const char* localError = sqlite3_errmsg(db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2440 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2441 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2442 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2443 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2444 throw wxSQLite3Exception(rc, wxERRMSG_FINALIZE_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2445 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2446 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2447 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2448 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2449 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2450 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2451 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2452
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2453 void wxSQLite3Blob::CheckBlob()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2454 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2455 if (m_db == NULL || !m_db->m_isValid || m_blob == NULL || !m_blob->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2456 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2457 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_BLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2458 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2459 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2460
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2461 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2462 // wxSQLite3Database: class holding a SQLite3 database object
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2463 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2464
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2465 bool wxSQLite3Database::ms_sharedCacheEnabled = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2466
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2467 void
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2468 wxSQLite3Database::SetSharedCache(bool enable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2469 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2470 int flag = (enable) ? 1 : 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2471 int rc = sqlite3_enable_shared_cache(flag);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2472 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2473 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2474 throw wxSQLite3Exception(rc, wxERRMSG_SHARED_CACHE);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2475 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2476 ms_sharedCacheEnabled = enable;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2477 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2478
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2479 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2480 bool wxSQLite3Database::ms_hasEncryptionSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2481 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2482 bool wxSQLite3Database::ms_hasEncryptionSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2483 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2484
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2485 #if WXSQLITE3_HAVE_METADATA
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2486 bool wxSQLite3Database::ms_hasMetaDataSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2487 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2488 bool wxSQLite3Database::ms_hasMetaDataSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2489 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2490
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2491 #if WXSQLITE3_HAVE_LOAD_EXTENSION
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2492 bool wxSQLite3Database::ms_hasLoadExtSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2493 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2494 bool wxSQLite3Database::ms_hasLoadExtSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2495 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2496
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2497 #if WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2498 bool wxSQLite3Database::ms_hasNamedCollectionSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2499 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2500 bool wxSQLite3Database::ms_hasNamedCollectionSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2501 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2502
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2503 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2504 bool wxSQLite3Database::ms_hasIncrementalBlobSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2505 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2506 bool wxSQLite3Database::ms_hasIncrementalBlobSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2507 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2508
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2509 #if SQLITE_VERSION_NUMBER >= 3006008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2510 bool wxSQLite3Database::ms_hasSavepointSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2511 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2512 bool wxSQLite3Database::ms_hasSavepointSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2513 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2514
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2515 #if SQLITE_VERSION_NUMBER >= 3006011
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2516 bool wxSQLite3Database::ms_hasBackupSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2517 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2518 bool wxSQLite3Database::ms_hasBackupSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2519 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2520
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2521 #if SQLITE_VERSION_NUMBER >= 3007000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2522 bool wxSQLite3Database::ms_hasWriteAheadLogSupport = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2523 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2524 bool wxSQLite3Database::ms_hasWriteAheadLogSupport = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2525 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2526
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2527 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2528 wxSQLite3Database::HasEncryptionSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2529 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2530 return ms_hasEncryptionSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2531 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2532
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2533 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2534 wxSQLite3Database::HasMetaDataSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2535 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2536 return ms_hasMetaDataSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2537 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2538
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2539 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2540 wxSQLite3Database::HasLoadExtSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2541 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2542 return ms_hasLoadExtSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2543 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2544
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2545 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2546 wxSQLite3Database::HasNamedCollectionSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2547 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2548 return ms_hasNamedCollectionSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2549 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2550
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2551 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2552 wxSQLite3Database::HasIncrementalBlobSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2553 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2554 return ms_hasIncrementalBlobSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2555 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2556
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2557 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2558 wxSQLite3Database::HasSavepointSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2559 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2560 return ms_hasSavepointSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2561 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2562
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2563 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2564 wxSQLite3Database::HasBackupSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2565 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2566 return ms_hasBackupSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2567 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2568
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2569 bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2570 wxSQLite3Database::HasWriteAheadLogSupport()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2571 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2572 return ms_hasWriteAheadLogSupport;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2573 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2574
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2575 wxSQLite3Database::wxSQLite3Database()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2576 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2577 m_db = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2578 m_isOpen = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2579 m_busyTimeoutMs = 60000; // 60 seconds
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2580 m_isEncrypted = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2581 m_lastRollbackRC = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2582 m_backupPageCount = 10;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2583 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2584
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2585 wxSQLite3Database::wxSQLite3Database(const wxSQLite3Database& db)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2586 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2587 m_db = db.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2588 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2589 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2590 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2591 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2592 m_isOpen = db.m_isOpen;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2593 m_busyTimeoutMs = 60000; // 60 seconds
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2594 m_isEncrypted = db.m_isEncrypted;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2595 m_lastRollbackRC = db.m_lastRollbackRC;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2596 m_backupPageCount = db.m_backupPageCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2597 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2598
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2599 wxSQLite3Database::~wxSQLite3Database()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2600 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2601 if (m_db != NULL && m_db->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2602 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2603 if (m_db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2604 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2605 Close(m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2606 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2607 delete m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2608 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2609 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2610
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2611 wxSQLite3Database& wxSQLite3Database::operator=(const wxSQLite3Database& db)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2612 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2613 if (this != &db)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2614 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2615 wxSQLite3DatabaseReference* dbPrev = m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2616 m_db = db.m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2617 if (m_db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2618 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2619 m_db->IncrementRefCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2620 m_isOpen = db.m_isOpen;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2621 m_busyTimeoutMs = 60000; // 60 seconds
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2622 m_isEncrypted = db.m_isEncrypted;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2623 m_lastRollbackRC = db.m_lastRollbackRC;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2624 m_backupPageCount = db.m_backupPageCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2625 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2626 if (dbPrev != NULL && dbPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2627 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2628 Close(dbPrev);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2629 delete dbPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2630 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2631
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2632 if (m_db == NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2633 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2634 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_DBASSIGN_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2635 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2636 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2637 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2638 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2639
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2640 void wxSQLite3Database::Open(const wxString& fileName, const wxString& key, int flags)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2641 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2642 wxCharBuffer strLocalKey = key.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2643 const char* localKey = strLocalKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2644 wxMemoryBuffer binaryKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2645 if (key.Length() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2646 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2647 binaryKey.AppendData((void*) localKey, strlen(localKey));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2648 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2649 Open(fileName, binaryKey, flags);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2650 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2651
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2652 void wxSQLite3Database::Open(const wxString& fileName, const wxMemoryBuffer& key, int flags)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2653 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2654 wxCharBuffer strFileName = fileName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2655 const char* localFileName = strFileName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2656 sqlite3* db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2657
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2658 int rc = sqlite3_open_v2((const char*) localFileName, &db, flags, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2659
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2660 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2661 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2662 const char* localError = "Out of memory";
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2663 if (db != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2664 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2665 localError = sqlite3_errmsg(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2666 sqlite3_close(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2667 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2668 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2669 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2670
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2671 rc = sqlite3_extended_result_codes(db, 1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2672 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2673 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2674 const char* localError = sqlite3_errmsg(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2675 sqlite3_close(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2676 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2677 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2678
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2679 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2680 if (key.GetDataLen() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2681 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2682 rc = sqlite3_key(db, key.GetData(), (int) key.GetDataLen());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2683 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2684 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2685 const char* localError = sqlite3_errmsg(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2686 sqlite3_close(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2687 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2688 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2689 m_isEncrypted = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2690 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2691 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2692 wxUnusedVar(key);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2693 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2694
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2695 wxSQLite3DatabaseReference* dbPrev = m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2696 m_db = new wxSQLite3DatabaseReference(db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2697 m_isOpen = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2698 SetBusyTimeout(m_busyTimeoutMs);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2699 if (dbPrev != NULL && dbPrev->DecrementRefCount() == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2700 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2701 delete dbPrev;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2702 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2703 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2704
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2705 bool wxSQLite3Database::IsOpen() const
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2706 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2707 return (m_db != NULL && m_db->m_isValid && m_isOpen);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2708 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2709
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2710 bool wxSQLite3Database::IsReadOnly(const wxString& databaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2711 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2712 #if SQLITE_VERSION_NUMBER >= 3007011
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2713 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2714 wxCharBuffer strDatabaseName = databaseName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2715 const char* localDatabaseName = strDatabaseName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2716 return sqlite3_db_readonly(m_db->m_db, localDatabaseName) > 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2717 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2718 return false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2719 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2720 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2721
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2722 void wxSQLite3Database::Close()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2723 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2724 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2725 Close(m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2726 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2727
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2728 void wxSQLite3Database::Close(wxSQLite3DatabaseReference* db)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2729 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2730 if (db != NULL && db->m_isValid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2731 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2732 #if SQLITE_VERSION_NUMBER >= 3006000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2733 // Unfortunately the following code leads to a crash if the RTree module is used
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2734 // therefore it is disabled for now
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2735 #if 0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2736 // Finalize all unfinalized prepared statements
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2737 sqlite3_stmt *pStmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2738 while( (pStmt = sqlite3_next_stmt(db->m_db, 0))!=0 )
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2739 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2740 sqlite3_finalize(pStmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2741 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2742 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2743 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2744 if (db->m_refCount <= 1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2745 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2746 sqlite3_close(db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2747 db->Invalidate();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2748 m_isEncrypted = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2749 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2750 m_isOpen = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2751 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2752 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2753
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2754 static bool
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2755 BackupRestoreCallback(int total, int remaining, wxSQLite3BackupProgress* progressCallback)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2756 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2757 return progressCallback->Progress(total, remaining);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2758 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2759
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2760 void wxSQLite3Database::Backup(const wxString& targetFileName, const wxString& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2761 const wxString& sourceDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2762 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2763 Backup(NULL, targetFileName, key, sourceDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2764 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2765
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2766 void wxSQLite3Database::Backup(wxSQLite3BackupProgress* progressCallback,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2767 const wxString& targetFileName, const wxString& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2768 const wxString& sourceDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2769 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2770 wxCharBuffer strLocalKey = key.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2771 const char* localKey = strLocalKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2772 wxMemoryBuffer binaryKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2773 if (key.Length() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2774 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2775 binaryKey.AppendData((void*) localKey, strlen(localKey));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2776 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2777 Backup(progressCallback, targetFileName, binaryKey, sourceDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2778 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2779
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2780 void wxSQLite3Database::Backup(const wxString& targetFileName, const wxMemoryBuffer& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2781 const wxString& sourceDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2782 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2783 Backup(NULL, targetFileName, key, sourceDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2784 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2785
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2786 void wxSQLite3Database::Backup(wxSQLite3BackupProgress* progressCallback,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2787 const wxString& targetFileName, const wxMemoryBuffer& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2788 const wxString& sourceDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2789 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2790 #if SQLITE_VERSION_NUMBER >= 3006011
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2791 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2792
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2793 wxCharBuffer strFileName = targetFileName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2794 const char* localTargetFileName = strFileName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2795 wxCharBuffer strDatabaseName = sourceDatabaseName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2796 const char* localSourceDatabaseName = strDatabaseName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2797
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2798 sqlite3* pDest;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2799 sqlite3_backup* pBackup;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2800 int rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2801 rc = sqlite3_open(localTargetFileName, &pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2802 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2803 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2804 sqlite3_close(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2805 throw wxSQLite3Exception(rc, wxERRMSG_DBOPEN_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2806 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2807 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2808 if (key.GetDataLen() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2809 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2810 rc = sqlite3_key(pDest, key.GetData(), (int) key.GetDataLen());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2811 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2812 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2813 const char* localError = sqlite3_errmsg(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2814 sqlite3_close(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2815 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2816 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2817 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2818 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2819 wxUnusedVar(key);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2820 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2821
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2822 pBackup = sqlite3_backup_init(pDest, "main", m_db->m_db, localSourceDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2823 if (pBackup == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2824 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2825 const char* localError = sqlite3_errmsg(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2826 sqlite3_close(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2827 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2828 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2829
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2830 do
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2831 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2832 rc = sqlite3_backup_step(pBackup, m_backupPageCount);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2833 if (progressCallback != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2834 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2835 if (!BackupRestoreCallback(sqlite3_backup_pagecount(pBackup),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2836 sqlite3_backup_remaining(pBackup),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2837 progressCallback))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2838 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2839 rc = SQLITE_DONE;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2840 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2841 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2842 #if 0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2843 xProgress(sqlite3_backup_remaining(pBackup),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2844 sqlite3_backup_pagecount(pBackup));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2845 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2846 if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2847 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2848 sqlite3_sleep(250);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2849 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2850 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2851 while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2852
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2853 sqlite3_backup_finish(pBackup);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2854 if (rc == SQLITE_DONE)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2855 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2856 sqlite3_close(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2857 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2858 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2859 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2860 const char* localError = sqlite3_errmsg(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2861 sqlite3_close(pDest);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2862 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2863 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2864 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2865 wxUnusedVar(targetFileName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2866 wxUnusedVar(sourceDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2867 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOBACKUP);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2868 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2869 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2870
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2871 void wxSQLite3Database::Restore(const wxString& sourceFileName, const wxString& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2872 const wxString& targetDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2873 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2874 Restore(NULL, sourceFileName, key, targetDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2875 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2876
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2877 void wxSQLite3Database::Restore(wxSQLite3BackupProgress* progressCallback,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2878 const wxString& sourceFileName, const wxString& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2879 const wxString& targetDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2880 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2881 wxCharBuffer strLocalKey = key.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2882 const char* localKey = strLocalKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2883 wxMemoryBuffer binaryKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2884 if (key.Length() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2885 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2886 binaryKey.AppendData((void*) localKey, strlen(localKey));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2887 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2888 Restore(progressCallback, sourceFileName, binaryKey, targetDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2889 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2890
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2891 void wxSQLite3Database::Restore(const wxString& sourceFileName, const wxMemoryBuffer& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2892 const wxString& targetDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2893 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2894 Restore(NULL, sourceFileName, key, targetDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2895 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2896
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2897 void wxSQLite3Database::Restore(wxSQLite3BackupProgress* progressCallback,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2898 const wxString& sourceFileName, const wxMemoryBuffer& key,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2899 const wxString& targetDatabaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2900 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2901 #if SQLITE_VERSION_NUMBER >= 3006011
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2902 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2903
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2904 wxCharBuffer strFileName = sourceFileName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2905 const char* localSourceFileName = strFileName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2906 wxCharBuffer strDatabaseName = targetDatabaseName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2907 const char* localTargetDatabaseName = strDatabaseName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2908
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2909 sqlite3* pSrc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2910 sqlite3_backup* pBackup;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2911 int rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2912 int nTimeout = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2913
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2914 rc = sqlite3_open(localSourceFileName, &pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2915 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2916 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2917 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2918 throw wxSQLite3Exception(rc, wxERRMSG_DBOPEN_FAILED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2919 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2920 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2921 if (key.GetDataLen() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2922 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2923 rc = sqlite3_key(pSrc, key.GetData(), (int) key.GetDataLen());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2924 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2925 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2926 const char* localError = sqlite3_errmsg(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2927 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2928 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2929 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2930 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2931 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2932 wxUnusedVar(key);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2933 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2934
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2935 pBackup = sqlite3_backup_init(m_db->m_db, localTargetDatabaseName, pSrc, "main");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2936 if (pBackup == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2937 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2938 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2939 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2940 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2941 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2942
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2943 do
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2944 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2945 rc = sqlite3_backup_step(pBackup, m_backupPageCount);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2946 if (progressCallback != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2947 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2948 if (!BackupRestoreCallback(sqlite3_backup_pagecount(pBackup),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2949 sqlite3_backup_remaining(pBackup), progressCallback))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2950 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2951 rc = SQLITE_DONE;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2952 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2953 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2954 if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2955 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2956 if (nTimeout++ >= 20) break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2957 sqlite3_sleep(250);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2958 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2959 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2960 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2961 nTimeout = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2962 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2963 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2964 while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2965
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2966 sqlite3_backup_finish(pBackup);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2967 if (rc == SQLITE_DONE)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2968 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2969 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2970 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2971 else if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2972 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2973 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2974 throw wxSQLite3Exception(rc, wxERRMSG_SOURCEDB_BUSY);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2975 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2976 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2977 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2978 const char* localError = sqlite3_errmsg(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2979 sqlite3_close(pSrc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2980 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2981 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2982 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2983 wxUnusedVar(sourceFileName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2984 wxUnusedVar(targetDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2985 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOBACKUP);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2986 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2987 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2988
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2989 void wxSQLite3Database::SetBackupRestorePageCount(int pageCount)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2990 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2991 m_backupPageCount = pageCount;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2992 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2993
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2994 void wxSQLite3Database::Vacuum()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2995 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2996 ExecuteUpdate("vacuum");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2997 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2998
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
2999 void wxSQLite3Database::Begin(wxSQLite3TransactionType transactionType)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3000 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3001 wxString sql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3002 switch (transactionType)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3003 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3004 case WXSQLITE_TRANSACTION_DEFERRED:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3005 sql << wxT("begin deferred transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3006 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3007 case WXSQLITE_TRANSACTION_IMMEDIATE:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3008 sql << wxT("begin immediate transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3009 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3010 case WXSQLITE_TRANSACTION_EXCLUSIVE:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3011 sql << wxT("begin exclusive transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3012 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3013 default:
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3014 sql << wxT("begin transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3015 break;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3016 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3017 ExecuteUpdate(sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3018 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3019
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3020 void wxSQLite3Database::Commit()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3021 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3022 ExecuteUpdate("commit transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3023 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3024
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3025 void wxSQLite3Database::Rollback(const wxString& savepointName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3026 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3027 #if SQLITE_VERSION_NUMBER >= 3006008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3028 if (savepointName.IsEmpty())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3029 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3030 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3031 ExecuteUpdate("rollback transaction");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3032 #if SQLITE_VERSION_NUMBER >= 3006008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3033 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3034 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3035 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3036 ExecuteUpdate(wxString(wxT("rollback transaction to savepoint "))+savepointName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3037 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3038 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3039 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3040
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3041 bool wxSQLite3Database::GetAutoCommit()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3042 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3043 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3044 return sqlite3_get_autocommit(m_db->m_db) != 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3045 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3046
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3047 int wxSQLite3Database::QueryRollbackState()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3048 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3049 return m_lastRollbackRC;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3050 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3051
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3052 void wxSQLite3Database::Savepoint(const wxString& savepointName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3053 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3054 #if SQLITE_VERSION_NUMBER >= 3006008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3055 ExecuteUpdate(wxString(wxT("savepoint "))+savepointName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3056 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3057 wxUnusedVar(savepointName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3058 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOSAVEPOINT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3059 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3060 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3061
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3062 void wxSQLite3Database::ReleaseSavepoint(const wxString& savepointName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3063 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3064 #if SQLITE_VERSION_NUMBER >= 3006008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3065 ExecuteUpdate(wxString(wxT("release savepoint "))+savepointName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3066 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3067 wxUnusedVar(savepointName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3068 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOSAVEPOINT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3069 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3070 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3071
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3072 wxSQLite3Statement wxSQLite3Database::PrepareStatement(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3073 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3074 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3075 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3076 return PrepareStatement(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3077 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3078
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3079 wxSQLite3Statement wxSQLite3Database::PrepareStatement(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3080 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3081 return PrepareStatement((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3082 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3083
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3084 wxSQLite3Statement wxSQLite3Database::PrepareStatement(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3085 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3086 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3087 sqlite3_stmt* stmt = (sqlite3_stmt*) Prepare(sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3088 wxSQLite3StatementReference* stmtRef = new wxSQLite3StatementReference(stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3089 return wxSQLite3Statement(m_db, stmtRef);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3090 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3091
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3092 bool wxSQLite3Database::TableExists(const wxString& tableName, const wxString& databaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3093 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3094 wxString sql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3095 if (databaseName.IsEmpty())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3096 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3097 sql = wxT("select count(*) from sqlite_master where type='table' and name like ?");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3098 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3099 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3100 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3101 sql = wxString(wxT("select count(*) from ")) + databaseName + wxString(wxT(".sqlite_master where type='table' and name like ?"));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3102 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3103 wxSQLite3Statement stmt = PrepareStatement(sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3104 stmt.Bind(1, tableName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3105 wxSQLite3ResultSet resultSet = stmt.ExecuteQuery();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3106 long value = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3107 resultSet.GetAsString(0).ToLong(&value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3108 return (value > 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3109 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3110
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3111 bool wxSQLite3Database::TableExists(const wxString& tableName, wxArrayString& databaseNames)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3112 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3113 wxArrayString databaseList;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3114 GetDatabaseList(databaseList);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3115
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3116 bool found = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3117 size_t count = databaseList.GetCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3118 if (count > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3119 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3120 size_t j;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3121 for (j = 0; j < count; j++)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3122 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3123 if (TableExists(tableName, databaseList.Item(j)))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3124 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3125 found = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3126 databaseNames.Add(databaseList.Item(j));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3127 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3128 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3129 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3130 return found;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3131 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3132
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3133 void wxSQLite3Database::GetDatabaseList(wxArrayString& databaseNames)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3134 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3135 databaseNames.Empty();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3136 wxSQLite3ResultSet resultSet = ExecuteQuery("PRAGMA database_list;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3137 while (resultSet.NextRow())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3138 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3139 databaseNames.Add(resultSet.GetString(1));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3140 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3141 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3142
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3143 void wxSQLite3Database::GetDatabaseList(wxArrayString& databaseNames, wxArrayString& databaseFiles)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3144 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3145 databaseNames.Empty();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3146 databaseFiles.Empty();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3147 wxSQLite3ResultSet resultSet = ExecuteQuery("PRAGMA database_list;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3148 while (resultSet.NextRow())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3149 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3150 databaseNames.Add(resultSet.GetString(1));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3151 databaseFiles.Add(resultSet.GetString(2));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3152 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3153 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3154
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3155 wxString wxSQLite3Database::GetDatabaseFilename(const wxString& databaseName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3156 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3157 #if SQLITE_VERSION_NUMBER >= 3007010
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3158 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3159 wxCharBuffer strDatabaseName = databaseName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3160 const char* localDatabaseName = strDatabaseName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3161 const char* localFilename = sqlite3_db_filename(m_db->m_db, localDatabaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3162 return wxString::FromUTF8(localFilename);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3163 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3164 wxUnusedVar(databaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3165 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3166 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3167 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3168
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3169 bool wxSQLite3Database::EnableForeignKeySupport(bool enable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3170 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3171 if (enable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3172 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3173 ExecuteUpdate("PRAGMA foreign_keys=ON;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3174 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3175 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3176 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3177 ExecuteUpdate("PRAGMA foreign_keys=OFF;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3178 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3179 bool enabled = IsForeignKeySupportEnabled();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3180 return (enable && enabled) || (!enable && !enabled);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3181 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3182
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3183 bool wxSQLite3Database::IsForeignKeySupportEnabled()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3184 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3185 bool enabled = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3186 wxSQLite3ResultSet resultSet = ExecuteQuery("PRAGMA foreign_keys;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3187 if (resultSet.NextRow())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3188 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3189 enabled = (resultSet.GetInt(0) == 1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3190 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3191 return enabled;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3192 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3193
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3194 wxSQLite3JournalMode
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3195 wxSQLite3Database::SetJournalMode(wxSQLite3JournalMode journalMode, const wxString& database)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3196 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3197 wxString mode = ConvertJournalMode(journalMode);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3198 wxString query = wxT("PRAGMA ");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3199 if (!database.IsEmpty())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3200 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3201 query += database;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3202 query += wxT(".");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3203 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3204 query += wxT("journal_mode=");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3205 query += mode;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3206 query += wxT(";");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3207 wxSQLite3ResultSet resultSet = ExecuteQuery(query);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3208 if (resultSet.NextRow())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3209 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3210 mode = resultSet.GetString(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3211 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3212 return ConvertJournalMode(mode);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3213 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3214
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3215 wxSQLite3JournalMode
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3216 wxSQLite3Database::GetJournalMode(const wxString& database)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3217 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3218 wxString mode = wxT("DELETE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3219 wxString query = wxT("PRAGMA ");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3220 if (!database.IsEmpty())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3221 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3222 query += database;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3223 query += wxT(".");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3224 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3225 query += wxT("journal_mode;");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3226 wxSQLite3ResultSet resultSet = ExecuteQuery(query);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3227 if (resultSet.NextRow())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3228 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3229 mode = resultSet.GetString(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3230 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3231 return ConvertJournalMode(mode);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3232 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3233
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3234 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3235 wxString wxSQLite3Database::ConvertJournalMode(wxSQLite3JournalMode mode)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3236 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3237 wxString journalMode;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3238 if (mode == WXSQLITE_JOURNALMODE_DELETE) journalMode = wxT("DELETE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3239 else if (mode == WXSQLITE_JOURNALMODE_PERSIST) journalMode = wxT("PERSIST");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3240 else if (mode == WXSQLITE_JOURNALMODE_OFF) journalMode = wxT("OFF");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3241 else if (mode == WXSQLITE_JOURNALMODE_TRUNCATE) journalMode = wxT("TRUNCATE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3242 else if (mode == WXSQLITE_JOURNALMODE_MEMORY) journalMode = wxT("MEMORY");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3243 else if (mode == WXSQLITE_JOURNALMODE_WAL) journalMode = wxT("WAL");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3244 else journalMode = wxT("DELETE");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3245 return journalMode;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3246 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3247
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3248 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3249 wxSQLite3JournalMode wxSQLite3Database::ConvertJournalMode(const wxString& mode)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3250 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3251 wxSQLite3JournalMode journalMode;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3252 if (mode.IsSameAs(wxT("DELETE"))) journalMode = WXSQLITE_JOURNALMODE_DELETE;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3253 else if (mode.IsSameAs(wxT("PERSIST"))) journalMode = WXSQLITE_JOURNALMODE_PERSIST;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3254 else if (mode.IsSameAs(wxT("OFF"))) journalMode = WXSQLITE_JOURNALMODE_OFF;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3255 else if (mode.IsSameAs(wxT("TRUNCATE"))) journalMode = WXSQLITE_JOURNALMODE_TRUNCATE;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3256 else if (mode.IsSameAs(wxT("MEMORY"))) journalMode = WXSQLITE_JOURNALMODE_MEMORY;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3257 else if (mode.IsSameAs(wxT("WAL"))) journalMode = WXSQLITE_JOURNALMODE_WAL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3258 else journalMode = WXSQLITE_JOURNALMODE_DELETE;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3259 return journalMode;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3260 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3261
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3262 bool wxSQLite3Database::CheckSyntax(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3263 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3264 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3265 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3266 return CheckSyntax(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3267 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3268
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3269 bool wxSQLite3Database::CheckSyntax(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3270 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3271 return CheckSyntax((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3272 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3273
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3274 bool wxSQLite3Database::CheckSyntax(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3275 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3276 return sqlite3_complete(sql) != 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3277 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3278
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3279 int wxSQLite3Database::ExecuteUpdate(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3280 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3281 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3282 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3283 return ExecuteUpdate(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3284 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3285
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3286 int wxSQLite3Database::ExecuteUpdate(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3287 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3288 return ExecuteUpdate((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3289 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3290
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3291 int wxSQLite3Database::ExecuteUpdate(const char* sql, bool saveRC)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3292 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3293 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3294
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3295 char* localError = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3296
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3297 int rc = sqlite3_exec(m_db->m_db, sql, 0, 0, &localError);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3298 if (saveRC)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3299 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3300 if (strncmp(sql, "rollback transaction", 20) == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3301 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3302 m_lastRollbackRC = rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3303 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3304 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3305
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3306 if (rc == SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3307 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3308 return sqlite3_changes(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3309 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3310 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3311 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3312 wxString errmsg = wxString::FromUTF8(localError);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3313 sqlite3_free(localError);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3314 throw wxSQLite3Exception(rc, errmsg);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3315 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3316 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3317
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3318 wxSQLite3ResultSet wxSQLite3Database::ExecuteQuery(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3319 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3320 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3321 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3322 return ExecuteQuery(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3323 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3324
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3325 wxSQLite3ResultSet wxSQLite3Database::ExecuteQuery(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3326 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3327 return ExecuteQuery((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3328 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3329
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3330 wxSQLite3ResultSet wxSQLite3Database::ExecuteQuery(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3331 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3332 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3333
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3334 sqlite3_stmt* stmt = (sqlite3_stmt*) Prepare(sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3335
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3336 int rc = sqlite3_step(stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3337
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3338 if (rc == SQLITE_DONE) // no rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3339 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3340 wxSQLite3StatementReference* stmtRef = new wxSQLite3StatementReference(stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3341 return wxSQLite3ResultSet(m_db, stmtRef, true /* eof */);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3342 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3343 else if (rc == SQLITE_ROW) // one or more rows
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3344 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3345 wxSQLite3StatementReference* stmtRef = new wxSQLite3StatementReference(stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3346 return wxSQLite3ResultSet(m_db, stmtRef, false /* eof */);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3347 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3348 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3349 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3350 rc = sqlite3_finalize(stmt);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3351 const char* localError= sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3352 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3353 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3354 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3355
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3356 int wxSQLite3Database::ExecuteScalar(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3357 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3358 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3359 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3360 return ExecuteScalar(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3361 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3362
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3363 int wxSQLite3Database::ExecuteScalar(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3364 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3365 return ExecuteScalar((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3366 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3367
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3368 int wxSQLite3Database::ExecuteScalar(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3369 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3370 wxSQLite3ResultSet resultSet = ExecuteQuery(sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3371
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3372 if (resultSet.Eof() || resultSet.GetColumnCount() < 1)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3373 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3374 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_INVALID_QUERY);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3375 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3376
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3377 long value = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3378 resultSet.GetAsString(0).ToLong(&value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3379 return (int) value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3380 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3381
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3382 wxSQLite3Table wxSQLite3Database::GetTable(const wxString& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3383 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3384 wxCharBuffer strSql = sql.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3385 const char* localSql = strSql;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3386 return GetTable(localSql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3387 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3388
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3389 wxSQLite3Table wxSQLite3Database::GetTable(const wxSQLite3StatementBuffer& sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3390 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3391 return GetTable((const char*) sql);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3392 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3393
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3394 wxSQLite3Table wxSQLite3Database::GetTable(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3395 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3396 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3397
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3398 char* localError=0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3399 char** results=0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3400 int rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3401 int rows(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3402 int cols(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3403
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3404 rc = sqlite3_get_table(m_db->m_db, sql, &results, &rows, &cols, &localError);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3405
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3406 if (rc == SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3407 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3408 return wxSQLite3Table(results, rows, cols);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3409 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3410 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3411 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3412 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3413 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3414 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3415
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3416 wxLongLong wxSQLite3Database::GetLastRowId()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3417 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3418 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3419 return wxLongLong(sqlite3_last_insert_rowid(m_db->m_db));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3420 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3421
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3422 wxSQLite3Blob wxSQLite3Database::GetReadOnlyBlob(wxLongLong rowId,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3423 const wxString& columnName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3424 const wxString& tableName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3425 const wxString& dbName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3426 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3427 return GetBlob(rowId, columnName, tableName, dbName, false);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3428 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3429
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3430 wxSQLite3Blob wxSQLite3Database::GetWritableBlob(wxLongLong rowId,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3431 const wxString& columnName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3432 const wxString& tableName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3433 const wxString& dbName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3434 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3435 return GetBlob(rowId, columnName, tableName, dbName, true);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3436 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3437
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3438 wxSQLite3Blob wxSQLite3Database::GetBlob(wxLongLong rowId,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3439 const wxString& columnName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3440 const wxString& tableName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3441 const wxString& dbName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3442 bool writable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3443 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3444 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3445 wxCharBuffer strColumnName = columnName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3446 const char* localColumnName = strColumnName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3447 wxCharBuffer strTableName = tableName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3448 const char* localTableName = strTableName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3449 wxCharBuffer strDbName = dbName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3450 const char* localDbName = (!dbName.IsEmpty()) ? (const char*) strDbName : (const char*) NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3451 int flags = (writable) ? 1 : 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3452 sqlite3_blob* blobHandle;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3453 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3454 int rc = sqlite3_blob_open(m_db->m_db, localDbName, localTableName, localColumnName, rowId.GetValue(), flags, &blobHandle);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3455 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3456 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3457 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3458 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3459 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3460 wxSQLite3BlobReference* blobRef = new wxSQLite3BlobReference(blobHandle);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3461 return wxSQLite3Blob(m_db, blobRef, writable);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3462 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3463 wxUnusedVar(rowId);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3464 wxUnusedVar(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3465 wxUnusedVar(tableName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3466 wxUnusedVar(dbName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3467 wxUnusedVar(writable);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3468 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOINCBLOB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3469 return NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3470 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3471 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3472
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3473 void wxSQLite3Database::Interrupt()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3474 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3475 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3476 sqlite3_interrupt(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3477 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3478
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3479 void wxSQLite3Database::SetBusyTimeout(int nMillisecs)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3480 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3481 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3482 m_busyTimeoutMs = nMillisecs;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3483 sqlite3_busy_timeout(m_db->m_db, m_busyTimeoutMs);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3484 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3485
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3486 wxString wxSQLite3Database::GetWrapperVersion()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3487 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3488 return wxString(wxSQLITE3_VERSION_STRING);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3489 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3490
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3491 wxString wxSQLite3Database::GetVersion()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3492 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3493 return wxString::FromUTF8(sqlite3_libversion());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3494 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3495
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3496 wxString wxSQLite3Database::GetSourceId()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3497 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3498 #if SQLITE_VERSION_NUMBER >= 3006018
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3499 return wxString::FromUTF8(sqlite3_sourceid());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3500 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3501 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3502 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3503 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3504
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3505 bool wxSQLite3Database::CompileOptionUsed(const wxString& optionName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3506 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3507 #if SQLITE_VERSION_NUMBER >= 3006023
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3508 wxCharBuffer strOption = optionName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3509 const char* localOption = strOption;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3510 return sqlite3_compileoption_used(localOption) == 1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3511 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3512 return false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3513 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3514 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3515
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3516 wxString wxSQLite3Database::GetCompileOptionName(int optionIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3517 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3518 #if SQLITE_VERSION_NUMBER >= 3006023
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3519 const char* unknownOption = "";
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3520 const char* optionName = sqlite3_compileoption_get(optionIndex);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3521 if (optionName == NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3522 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3523 optionName = unknownOption;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3524 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3525 return wxString::FromUTF8(optionName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3526 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3527 return wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3528 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3529 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3530
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3531 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3ScalarFunction& function, bool isDeterministic)
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3532 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3533 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3534 wxCharBuffer strFuncName = funcName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3535 const char* localFuncName = strFuncName;
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3536 int flags = SQLITE_UTF8;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3537 #if SQLITE_VERSION_NUMBER >= 3008003
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3538 if (isDeterministic)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3539 {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3540 flags |= SQLITE_DETERMINISTIC;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3541 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3542 #endif
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3543 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount,
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3544 flags, &function,
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3545 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecScalarFunction, NULL, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3546 return rc == SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3547 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3548
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3549 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3AggregateFunction& function, bool isDeterministic)
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3550 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3551 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3552 wxCharBuffer strFuncName = funcName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3553 const char* localFuncName = strFuncName;
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3554 int flags = SQLITE_UTF8;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3555 #if SQLITE_VERSION_NUMBER >= 3008003
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3556 if (isDeterministic)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3557 {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3558 flags |= SQLITE_DETERMINISTIC;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3559 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3560 #endif
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3561 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount,
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3562 flags, &function,
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3563 NULL,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3564 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecAggregateStep,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3565 (void (*)(sqlite3_context*)) wxSQLite3FunctionContext::ExecAggregateFinalize);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3566 return rc == SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3567 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3568
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3569 bool wxSQLite3Database::SetAuthorizer(wxSQLite3Authorizer& authorizer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3570 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3571 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3572 int rc = sqlite3_set_authorizer(m_db->m_db, wxSQLite3FunctionContext::ExecAuthorizer, &authorizer);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3573 return rc == SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3574 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3575
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3576 void wxSQLite3Database::SetCommitHook(wxSQLite3Hook* commitHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3577 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3578 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3579 if (commitHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3580 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3581 sqlite3_commit_hook(m_db->m_db, (int(*)(void*)) wxSQLite3FunctionContext::ExecCommitHook, commitHook);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3582 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3583 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3584 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3585 sqlite3_commit_hook(m_db->m_db, (int(*)(void*)) NULL, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3586 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3587 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3588
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3589 void wxSQLite3Database::SetRollbackHook(wxSQLite3Hook* rollbackHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3590 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3591 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3592 if (rollbackHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3593 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3594 sqlite3_rollback_hook(m_db->m_db, (void(*)(void*)) wxSQLite3FunctionContext::ExecRollbackHook, rollbackHook);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3595 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3596 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3597 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3598 sqlite3_rollback_hook(m_db->m_db, (void(*)(void*)) NULL, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3599 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3600 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3601
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3602 void wxSQLite3Database::SetUpdateHook(wxSQLite3Hook* updateHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3603 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3604 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3605 if (updateHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3606 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3607 sqlite3_update_hook(m_db->m_db, (void(*)(void*,int,const char*,const char*, wxsqlite_int64)) wxSQLite3FunctionContext::ExecUpdateHook, updateHook);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3608 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3609 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3610 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3611 sqlite3_update_hook(m_db->m_db, (void(*)(void*,int,const char*,const char*, wxsqlite_int64)) NULL, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3612 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3613 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3614
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3615 void wxSQLite3Database::SetWriteAheadLogHook(wxSQLite3Hook* walHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3616 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3617 #if SQLITE_VERSION_NUMBER >= 3007000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3618 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3619 if (walHook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3620 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3621 walHook->SetDatabase(this);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3622 sqlite3_wal_hook(m_db->m_db, (int(*)(void *,sqlite3*,const char*,int)) wxSQLite3FunctionContext::ExecWriteAheadLogHook, walHook);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3623 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3624 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3625 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3626 sqlite3_wal_hook(m_db->m_db, (int(*)(void *,sqlite3*,const char*,int)) NULL, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3627 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3628 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3629 wxUnusedVar(walHook);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3630 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOWAL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3631 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3632 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3633
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3634 void wxSQLite3Database::WriteAheadLogCheckpoint(const wxString& database, int mode,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3635 int* logFrameCount, int* ckptFrameCount)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3636 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3637 #if SQLITE_VERSION_NUMBER >= 3007000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3638 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3639 wxCharBuffer strDatabase = database.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3640 const char* localDatabase = strDatabase;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3641 #if SQLITE_VERSION_NUMBER >= 3007006
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3642 int rc = sqlite3_wal_checkpoint_v2(m_db->m_db, localDatabase, mode, logFrameCount, ckptFrameCount);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3643 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3644 int rc = sqlite3_wal_checkpoint(m_db->m_db, localDatabase);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3645 if (logFrameCount != NULL) *logFrameCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3646 if (ckptFrameCount != NULL) *ckptFrameCount = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3647 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3648
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3649 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3650 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3651 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3652 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3653 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3654 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3655 wxUnusedVar(database);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3656 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOWAL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3657 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3658 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3659
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3660 void wxSQLite3Database::AutoWriteAheadLogCheckpoint(int frameCount)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3661 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3662 #if SQLITE_VERSION_NUMBER >= 3007000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3663 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3664 int rc = sqlite3_wal_autocheckpoint(m_db->m_db, frameCount);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3665
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3666 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3667 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3668 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3669 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3670 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3671 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3672 wxUnusedVar(frameCount);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3673 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOWAL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3674 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3675 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3676
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3677 void wxSQLite3Database::SetCollation(const wxString& collationName, wxSQLite3Collation* collation)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3678 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3679 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3680 wxCharBuffer strCollationName = collationName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3681 const char* localCollationName = strCollationName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3682 int rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3683 if (collation)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3684 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3685 rc = sqlite3_create_collation(m_db->m_db, localCollationName, SQLITE_UTF8, collation, (int(*)(void*,int,const void*,int,const void*)) wxSQLite3Database::ExecComparisonWithCollation);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3686 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3687 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3688 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3689 rc = sqlite3_create_collation(m_db->m_db, localCollationName, SQLITE_UTF8, NULL, (int(*)(void*,int,const void*,int,const void*)) NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3690 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3691 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3692
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3693 void* wxSQLite3Database::GetDatabaseHandle()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3694 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3695 return m_db->m_db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3696 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3697
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3698 void wxSQLite3Database::SetCollationNeededCallback()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3699 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3700 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3701 int rc = sqlite3_collation_needed(m_db->m_db, this, (void(*)(void*,sqlite3*,int,const char*)) wxSQLite3Database::ExecCollationNeeded);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3702 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3703 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3704 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3705 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3706 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3707 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3708
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3709 void wxSQLite3Database::CheckDatabase()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3710 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3711 if (m_db == NULL || m_db->m_db == NULL || !m_db->m_isValid || !m_isOpen)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3712 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3713 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NODB);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3714 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3715 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3716
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3717 void* wxSQLite3Database::Prepare(const char* sql)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3718 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3719 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3720
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3721 const char* tail=0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3722 sqlite3_stmt* stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3723
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3724 int rc = sqlite3_prepare_v2(m_db->m_db, sql, -1, &stmt, &tail);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3725
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3726 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3727 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3728 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3729 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3730 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3731
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3732 return stmt;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3733 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3734
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3735 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3736 int wxSQLite3Database::ExecComparisonWithCollation(void* collation,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3737 int len1, const void* text1,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3738 int len2, const void* text2)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3739 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3740 wxString locText1 = wxString::FromUTF8((const char*) text1, (size_t) len1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3741 wxString locText2 = wxString::FromUTF8((const char*) text2, (size_t) len2);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3742 return ((wxSQLite3Collation*) collation)->Compare(locText1, locText2);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3743 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3744
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3745 void wxSQLite3Database::ExecCollationNeeded(void* db, void*, int, const char* collationName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3746 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3747 wxString locCollation = wxString::FromUTF8((const char*) collationName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3748 ((wxSQLite3Database*) db)->SetNeededCollation(locCollation);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3749 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3750
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3751 void wxSQLite3Database::GetMetaData(const wxString& databaseName, const wxString& tableName, const wxString& columnName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3752 wxString* dataType, wxString* collation, bool* notNull, bool* primaryKey, bool* autoIncrement)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3753 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3754 #if WXSQLITE3_HAVE_METADATA
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3755 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3756 wxCharBuffer strDatabaseName = databaseName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3757 const char* localDatabaseName = strDatabaseName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3758 if (databaseName == wxEmptyString) localDatabaseName = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3759 wxCharBuffer strTableName = tableName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3760 const char* localTableName = strTableName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3761 wxCharBuffer strColumnName = columnName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3762 const char* localColumnName = strColumnName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3763 const char* localDataType;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3764 const char* localCollation;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3765 int localNotNull;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3766 int localPrimaryKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3767 int localAutoIncrement;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3768 int rc = sqlite3_table_column_metadata(m_db->m_db, localDatabaseName, localTableName, localColumnName,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3769 &localDataType, &localCollation, &localNotNull, &localPrimaryKey, &localAutoIncrement);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3770
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3771 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3772 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3773 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3774 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3775 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3776
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3777 if (dataType != NULL) *dataType = wxString::FromUTF8(localDataType);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3778 if (collation != NULL) *collation = wxString::FromUTF8(localCollation);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3779
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3780 if (notNull != NULL) *notNull = (localNotNull != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3781 if (primaryKey != NULL) *primaryKey = (localPrimaryKey != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3782 if (autoIncrement != NULL) *autoIncrement = (localAutoIncrement != 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3783 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3784 wxUnusedVar(databaseName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3785 wxUnusedVar(tableName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3786 wxUnusedVar(columnName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3787 wxUnusedVar(dataType);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3788 wxUnusedVar(collation);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3789 wxUnusedVar(notNull);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3790 wxUnusedVar(primaryKey);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3791 wxUnusedVar(autoIncrement);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3792 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMETADATA);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3793 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3794 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3795
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3796 void wxSQLite3Database::LoadExtension(const wxString& fileName, const wxString& entryPoint)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3797 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3798 #if WXSQLITE3_HAVE_LOAD_EXTENSION
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3799 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3800 wxCharBuffer strFileName = fileName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3801 const char* localFileName = strFileName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3802 wxCharBuffer strEntryPoint = entryPoint.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3803 const char* localEntryPoint = strEntryPoint;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3804
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3805 int rc = sqlite3_load_extension(m_db->m_db, localFileName, localEntryPoint, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3806 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3807 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3808 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3809 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3810 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3811 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3812 wxUnusedVar(fileName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3813 wxUnusedVar(entryPoint);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3814 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOLOADEXT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3815 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3816 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3817
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3818 void wxSQLite3Database::EnableLoadExtension(bool enable)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3819 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3820 #if WXSQLITE3_HAVE_LOAD_EXTENSION
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3821 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3822 int onoff = (enable) ? 1 : 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3823 int rc = sqlite3_enable_load_extension(m_db->m_db, onoff);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3824 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3825 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3826 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3827 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3828 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3829 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3830 wxUnusedVar(enable);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3831 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOLOADEXT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3832 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3833 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3834
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3835 void wxSQLite3Database::ReKey(const wxString& newKey)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3836 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3837 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3838 wxCharBuffer strLocalNewKey = newKey.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3839 const char* localNewKey = strLocalNewKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3840 wxMemoryBuffer binaryNewKey;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3841 if (newKey.Length() > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3842 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3843 binaryNewKey.AppendData((void*) localNewKey, strlen(localNewKey));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3844 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3845 ReKey(binaryNewKey);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3846 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3847 wxUnusedVar(newKey);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3848 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOCODEC);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3849 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3850 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3851
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3852 void wxSQLite3Database::ReKey(const wxMemoryBuffer& newKey)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3853 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3854 #if WXSQLITE3_HAVE_CODEC
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3855 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3856 int rc = sqlite3_rekey(m_db->m_db, newKey.GetData(), (int) newKey.GetDataLen());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3857 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3858 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3859 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3860 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3861 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3862 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3863 wxUnusedVar(newKey);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3864 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOCODEC);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3865 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3866 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3867
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3868 int wxSQLite3Database::GetLimit(wxSQLite3LimitType id)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3869 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3870 int value = -1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3871 #if SQLITE_VERSION_NUMBER >= 3005008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3872 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3873 if (id >= WXSQLITE_LIMIT_LENGTH && id <= WXSQLITE_LIMIT_VARIABLE_NUMBER)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3874 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3875 value = sqlite3_limit(m_db->m_db, id, -1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3876 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3877 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3878 wxUnusedVar(id);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3879 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3880 return value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3881 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3882
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3883 int wxSQLite3Database::SetLimit(wxSQLite3LimitType id, int newValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3884 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3885 int value = -1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3886 #if SQLITE_VERSION_NUMBER >= 3005008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3887 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3888 if (id >= WXSQLITE_LIMIT_LENGTH && id <= WXSQLITE_LIMIT_VARIABLE_NUMBER)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3889 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3890 value = sqlite3_limit(m_db->m_db, id, newValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3891 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3892 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3893 wxUnusedVar(id);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3894 wxUnusedVar(newValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3895 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3896 return value;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3897 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3898
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3899 void wxSQLite3Database::ReleaseMemory()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3900 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3901 #if SQLITE_VERSION_NUMBER >= 3007010
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3902 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3903 int rc = sqlite3_db_release_memory(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3904 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3905 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3906 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3907 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3908 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3909 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3910 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3911
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3912 static const wxChar* limitCodeString[] =
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3913 { wxT("SQLITE_LIMIT_LENGTH"), wxT("SQLITE_LIMIT_SQL_LENGTH"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3914 wxT("SQLITE_LIMIT_COLUMN"), wxT("SQLITE_LIMIT_EXPR_DEPTH"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3915 wxT("SQLITE_LIMIT_COMPOUND_SELECT"), wxT("SQLITE_LIMIT_VDBE_OP"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3916 wxT("SQLITE_LIMIT_FUNCTION_ARG"), wxT("SQLITE_LIMIT_ATTACHED"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3917 wxT("SQLITE_LIMIT_LIKE_PATTERN_LENGTH"), wxT("SQLITE_LIMIT_VARIABLE_NUMBER"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3918 wxT("SQLITE_LIMIT_TRIGGER_DEPTH")
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3919 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3920
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3921
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3922 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3923 wxString wxSQLite3Database::LimitTypeToString(wxSQLite3LimitType type)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3924 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3925 const wxChar* limitString = wxT("Unknown");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3926 if (type >= WXSQLITE_LIMIT_LENGTH && type <= WXSQLITE_LIMIT_VARIABLE_NUMBER)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3927 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3928 limitString = limitCodeString[type];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3929 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3930 return wxString(limitString);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3931 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3932
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3933 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3934 void wxSQLite3Database::InitializeSQLite()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3935 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3936 #if SQLITE_VERSION_NUMBER >= 3006000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3937 int rc = sqlite3_initialize();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3938 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3939 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3940 throw wxSQLite3Exception(rc, wxERRMSG_INITIALIZE);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3941 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3942 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3943 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3944
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3945 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3946 void wxSQLite3Database::ShutdownSQLite()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3947 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3948 #if SQLITE_VERSION_NUMBER >= 3006000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3949 int rc = sqlite3_shutdown();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3950 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3951 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3952 throw wxSQLite3Exception(rc, wxERRMSG_SHUTDOWN);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3953 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3954 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3955 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3956
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3957 /* static */
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3958 bool wxSQLite3Database::SetTemporaryDirectory(const wxString& tempDirectory)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3959 {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3960 bool ok = false;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3961 #if SQLITE_VERSION_NUMBER >= 3007014
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3962 #if defined(__WXMSW__)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3963 DWORD SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3964 #if wxUSE_UNICODE
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3965 const wxChar* zValue = tempDirectory.wc_str();
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3966 #else
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3967 const wxWCharBuffer zValue = tempDirectory.wc_str(wxConvLocal);
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3968 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3969 int rc = sqlite3_win32_set_directory(SQLITE_WIN32_TEMP_DIRECTORY_TYPE, zValue);
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3970 ok = (rc == SQLITE_OK);
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3971 #if 0
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3972 if (rc != SQLITE_OK)
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3973 {
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3974 throw wxSQLite3Exception(rc, wxERRMSG_TEMPDIR);
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3975 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3976 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3977 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3978 #endif
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3979 return ok;
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3980 }
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3981
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
3982 /* static */
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3983 bool wxSQLite3Database::Randomness(int n, wxMemoryBuffer& random)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3984 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3985 bool ok = false;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3986 #if SQLITE_VERSION_NUMBER >= 3005008
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3987 if (n > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3988 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3989 void* buffer = random.GetWriteBuf(n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3990 sqlite3_randomness(n, buffer);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3991 random.UngetWriteBuf(n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3992 ok = true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3993 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3994 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3995 wxUnusedVar(n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3996 wxUnusedVar(random);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3997 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3998 return ok;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
3999 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4001 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4002 // wxSQLite3FunctionContext: class providing the function context
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4003 // for user defined functions
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4004 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4005
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4006 int wxSQLite3FunctionContext::GetArgCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4007 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4008 return m_argc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4009 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4010
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4011 int wxSQLite3FunctionContext::GetArgType(int argIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4012 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4013 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4014 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4015 return sqlite3_value_type((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4016 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4017 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4018 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4019 return SQLITE_NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4020 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4021 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4022
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4023 bool wxSQLite3FunctionContext::IsNull(int argIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4024 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4025 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4026 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4027 return sqlite3_value_type((sqlite3_value*) m_argv[argIndex]) == SQLITE_NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4028 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4029 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4030 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4031 return true;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4032 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4033 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4034
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4035 int wxSQLite3FunctionContext::GetInt(int argIndex, int nullValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4036 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4037 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4038 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4039 if (!IsNull(argIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4040 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4041 return sqlite3_value_int((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4042 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4043 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4044 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4045 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4046 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4047 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4048 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4049 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4050 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4051 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4052 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4053
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4054 wxLongLong wxSQLite3FunctionContext::GetInt64(int argIndex, wxLongLong nullValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4055 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4056 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4057 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4058 if (!IsNull(argIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4059 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4060 return wxLongLong(sqlite3_value_int64((sqlite3_value*) m_argv[argIndex]));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4061 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4062 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4063 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4064 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4065 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4066 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4067 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4068 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4069 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4070 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4071 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4072
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4073 double wxSQLite3FunctionContext::GetDouble(int argIndex, double nullValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4074 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4075 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4076 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4077 if (!IsNull(argIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4078 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4079 return sqlite3_value_double((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4080 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4081 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4082 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4083 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4084 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4085 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4086 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4087 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4088 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4089 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4090 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4091
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4092 wxString wxSQLite3FunctionContext::GetString(int argIndex, const wxString& nullValue)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4093 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4094 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4095 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4096 if (!IsNull(argIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4097 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4098 const char* localValue = (const char*) sqlite3_value_text((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4099 return wxString::FromUTF8(localValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4100 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4101 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4102 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4103 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4104 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4105 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4106 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4107 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4108 return nullValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4109 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4110 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4111
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4112 wxMemoryBuffer& wxSQLite3FunctionContext::GetBlob(int argIndex, wxMemoryBuffer& buffer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4113 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4114 if (argIndex >= 0 && argIndex < m_argc)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4115 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4116 if (!IsNull(argIndex))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4117 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4118 int len = sqlite3_value_bytes((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4119 const void* blob = sqlite3_value_blob((sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4120 buffer.AppendData((void*) blob, (size_t) len);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4121 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4122 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4123 return buffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4124 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4125
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4126 void wxSQLite3FunctionContext::SetResult(int value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4127 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4128 sqlite3_result_int((sqlite3_context*) m_ctx, value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4129 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4130
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4131 void wxSQLite3FunctionContext::SetResult(wxLongLong value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4132 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4133 sqlite3_result_int64((sqlite3_context*) m_ctx, value.GetValue());
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4134 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4135
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4136 void wxSQLite3FunctionContext::SetResult(double value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4137 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4138 sqlite3_result_double((sqlite3_context*) m_ctx, value);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4139 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4140
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4141 void wxSQLite3FunctionContext::SetResult(const wxString& value)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4142 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4143 wxCharBuffer strValue = value.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4144 const char* localValue = strValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4145 sqlite3_result_text((sqlite3_context*) m_ctx, localValue, -1, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4146 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4147
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4148 void wxSQLite3FunctionContext::SetResult(unsigned char* value, int len)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4149 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4150 sqlite3_result_blob((sqlite3_context*) m_ctx, value, len, SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4151 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4152
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4153 void wxSQLite3FunctionContext::SetResult(const wxMemoryBuffer& buffer)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4154 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4155 sqlite3_result_blob((sqlite3_context*) m_ctx, buffer.GetData(), (int) buffer.GetDataLen(), SQLITE_TRANSIENT);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4156 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4157
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4158 void wxSQLite3FunctionContext::SetResultNull()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4159 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4160 sqlite3_result_null((sqlite3_context*) m_ctx);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4161 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4162
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4163 void wxSQLite3FunctionContext::SetResultZeroBlob(int blobSize)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4164 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4165 #if SQLITE_VERSION_NUMBER >= 3004000
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4166 sqlite3_result_zeroblob((sqlite3_context*) m_ctx, blobSize);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4167 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4168 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4169
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4170 void wxSQLite3FunctionContext::SetResultArg(int argIndex)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4171 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4172 if (argIndex >= 0 && argIndex < m_argc) {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4173 sqlite3_result_value((sqlite3_context*) m_ctx, (sqlite3_value*) m_argv[argIndex]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4174 } else {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4175 sqlite3_result_null((sqlite3_context*) m_ctx);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4176 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4177 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4178
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4179 void wxSQLite3FunctionContext::SetResultError(const wxString& errmsg)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4180 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4181 wxCharBuffer strErrmsg = errmsg.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4182 const char* localErrmsg = strErrmsg;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4183 sqlite3_result_error((sqlite3_context*) m_ctx, localErrmsg, -1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4184 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4185
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4186 int wxSQLite3FunctionContext::GetAggregateCount()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4187 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4188 if (m_isAggregate)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4189 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4190 return m_count;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4191 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4192 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4193 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4194 return 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4195 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4196 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4197
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4198 void* wxSQLite3FunctionContext::GetAggregateStruct(int len)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4199 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4200 if (m_isAggregate)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4201 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4202 return sqlite3_aggregate_context((sqlite3_context*) m_ctx, len);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4203 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4204 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4205 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4206 return NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4207 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4208 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4209
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4210 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4211 void wxSQLite3FunctionContext::ExecScalarFunction(void* ctx, int argc, void** argv)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4212 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4213 wxSQLite3FunctionContext context(ctx, false, argc, argv);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4214 wxSQLite3ScalarFunction* func = (wxSQLite3ScalarFunction*) sqlite3_user_data((sqlite3_context*) ctx);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4215 func->Execute(context);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4216 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4217
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4218 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4219 void wxSQLite3FunctionContext::ExecAggregateStep(void* ctx, int argc, void** argv)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4220 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4221 wxSQLite3FunctionContext context(ctx, true, argc, argv);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4222 wxSQLite3AggregateFunction* func = (wxSQLite3AggregateFunction*) sqlite3_user_data((sqlite3_context*) ctx);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4223 func->m_count++;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4224 context.m_count = func->m_count;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4225 func->Aggregate(context);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4226 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4227
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4228 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4229 void wxSQLite3FunctionContext::ExecAggregateFinalize(void* ctx)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4230 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4231 wxSQLite3FunctionContext context(ctx, true, 0, NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4232 wxSQLite3AggregateFunction* func = (wxSQLite3AggregateFunction*) sqlite3_user_data((sqlite3_context*) ctx);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4233 context.m_count = func->m_count;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4234 func->Finalize(context);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4235 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4236
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4237 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4238 int wxSQLite3FunctionContext::ExecAuthorizer(void* func, int type,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4239 const char* arg1, const char* arg2,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4240 const char* arg3, const char* arg4)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4241 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4242 wxString locArg1 = wxString::FromUTF8(arg1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4243 wxString locArg2 = wxString::FromUTF8(arg2);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4244 wxString locArg3 = wxString::FromUTF8(arg3);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4245 wxString locArg4 = wxString::FromUTF8(arg4);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4246 wxSQLite3Authorizer::wxAuthorizationCode localType = (wxSQLite3Authorizer::wxAuthorizationCode) type;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4247 return (int) ((wxSQLite3Authorizer*) func)->Authorize(localType, locArg1, locArg2, locArg3, locArg3);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4248 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4249
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4250 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4251 int wxSQLite3FunctionContext::ExecCommitHook(void* hook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4252 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4253 return (int) ((wxSQLite3Hook*) hook)->CommitCallback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4254 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4255
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4256 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4257 void wxSQLite3FunctionContext::ExecRollbackHook(void* hook)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4258 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4259 ((wxSQLite3Hook*) hook)->RollbackCallback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4260 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4261
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4262 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4263 void wxSQLite3FunctionContext::ExecUpdateHook(void* hook, int type,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4264 const char* database, const char* table,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4265 wxsqlite_int64 rowid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4266 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4267 wxString locDatabase = wxString::FromUTF8(database);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4268 wxString locTable = wxString::FromUTF8(table);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4269 wxSQLite3Hook::wxUpdateType locType = (wxSQLite3Hook::wxUpdateType) type;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4270 wxLongLong locRowid = rowid;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4271 ((wxSQLite3Hook*) hook)->UpdateCallback(locType, locDatabase, locTable, locRowid);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4272 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4273
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4274 wxSQLite3FunctionContext::wxSQLite3FunctionContext(void* ctx, bool isAggregate, int argc, void** argv)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4275 : m_ctx(ctx), m_isAggregate(isAggregate), m_count(0), m_argc(argc), m_argv(argv)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4276 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4277 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4278
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4279 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4280 int wxSQLite3FunctionContext::ExecWriteAheadLogHook(void* hook, void* dbHandle,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4281 const char* database, int numPages)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4282 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4283 wxString locDatabase = wxString::FromUTF8(database);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4284 wxUnusedVar(dbHandle);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4285 return (int) ((wxSQLite3Hook*) hook)->WriteAheadLogCallback(locDatabase, numPages);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4286 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4287
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4288 static const wxChar* authCodeString[] =
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4289 { wxT("SQLITE_COPY"), wxT("SQLITE_CREATE_INDEX"), wxT("SQLITE_CREATE_TABLE"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4290 wxT("SQLITE_CREATE_TEMP_INDEX"), wxT("SQLITE_CREATE_TEMP_TABLE"), wxT("SQLITE_CREATE_TEMP_TRIGGER"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4291 wxT("SQLITE_CREATE_TEMP_VIEW"), wxT("SQLITE_CREATE_TRIGGER"), wxT("SQLITE_CREATE_VIEW"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4292 wxT("SQLITE_DELETE"), wxT("SQLITE_DROP_INDEX"), wxT("SQLITE_DROP_TABLE"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4293 wxT("SQLITE_DROP_TEMP_INDEX"), wxT("SQLITE_DROP_TEMP_TABLE"), wxT("SQLITE_DROP_TEMP_TRIGGER"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4294 wxT("SQLITE_DROP_TEMP_VIEW"), wxT("SQLITE_DROP_TRIGGER"), wxT("SQLITE_DROP_VIEW"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4295 wxT("SQLITE_INSERT"), wxT("SQLITE_PRAGMA"), wxT("SQLITE_READ"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4296 wxT("SQLITE_SELECT"), wxT("SQLITE_TRANSACTION"), wxT("SQLITE_UPDATE"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4297 wxT("SQLITE_ATTACH"), wxT("SQLITE_DETACH"), wxT("SQLITE_ALTER_TABLE"),
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4298 wxT("SQLITE_REINDEX"), wxT("SQLITE_ANALYZE"), wxT("SQLITE_CREATE_VTABLE"),
21
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
4299 wxT("SQLITE_DROP_VTABLE"), wxT("SQLITE_FUNCTION"), wxT("SQLITE_SAVEPOINT"),
a2ad87cad48b Enhanced the convenience of Cache dialog.
pyon@macmini
parents: 0
diff changeset
4300 wxT("SQLITE_RECURSIVE")
0
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4301 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4302
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4303
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4304 /* static */
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4305 wxString wxSQLite3Authorizer::AuthorizationCodeToString(wxSQLite3Authorizer::wxAuthorizationCode type)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4306 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4307 const wxChar* authString = wxT("Unknown");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4308 if (type >= SQLITE_COPY && type <= SQLITE_MAX_CODE)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4309 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4310 authString = authCodeString[type];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4311 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4312 return wxString(authString);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4313 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4314
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4315 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4316 // wxSQLite3Transaction
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4317 // ----------------------------------------------------------------------------
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4318
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4319 wxSQLite3Transaction::wxSQLite3Transaction(wxSQLite3Database* db, wxSQLite3TransactionType transactionType)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4320 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4321 wxASSERT(db != NULL);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4322 m_database = db;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4323 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4324 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4325 m_database->Begin(transactionType);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4326 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4327 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4328 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4329 m_database = NULL; // Flag that transaction is not active
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4330 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4331 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4332
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4333 wxSQLite3Transaction::~wxSQLite3Transaction()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4334 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4335 if (m_database != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4336 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4337 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4338 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4339 m_database->Rollback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4340 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4341 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4342 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4343 // Intentionally do nothing
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4344 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4345 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4346 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4347
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4348 void wxSQLite3Transaction::Commit()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4349 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4350 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4351 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4352 m_database->Commit();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4353 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4354 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4355 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4356 m_database->Rollback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4357 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4358 m_database = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4359 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4360
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4361 void wxSQLite3Transaction::Rollback()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4362 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4363 try
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4364 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4365 m_database->Rollback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4366 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4367 catch (...)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4368 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4369 m_database->Rollback();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4370 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4371 m_database = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4372 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4373
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4374 // --- User defined function classes
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4375
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4376 #if wxUSE_REGEX
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4377
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4378 wxSQLite3RegExpOperator::wxSQLite3RegExpOperator(int flags) : m_flags(flags)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4379 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4380 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4381
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4382 wxSQLite3RegExpOperator::~wxSQLite3RegExpOperator()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4383 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4384 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4385
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4386 void wxSQLite3RegExpOperator::Execute(wxSQLite3FunctionContext& ctx)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4387 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4388 int argCount = ctx.GetArgCount();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4389 if (argCount == 2)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4390 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4391 wxString exprStr = ctx.GetString(0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4392 wxString textStr = ctx.GetString(1);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4393 if (!m_exprStr.IsSameAs(exprStr))
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4394 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4395 m_exprStr = exprStr;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4396 m_regEx.Compile(m_exprStr, m_flags);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4397 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4398 if (m_regEx.IsValid())
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4399 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4400 int rc = (m_regEx.Matches(textStr)) ? 1 : 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4401 ctx.SetResult(rc);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4402 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4403 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4404 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4405 ctx.SetResultError(wxString(_("Regular expression invalid: '"))+exprStr+_T("'."));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4406 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4407 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4408 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4409 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4410 ctx.SetResultError(wxString::Format(_("REGEXP called with wrong number of arguments: %d instead of 2."), argCount));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4411 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4412 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4413
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4414 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4415
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4416 // --- Support for named collections
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4417
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4418 #if WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4419
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4420 // The following code is based on the SQLite test_intarray source code.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4421
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4422 #include <string.h>
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4423 #include <assert.h>
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4424
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4425 /// Definition of the sqlite3_intarray object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4426 struct sqlite3_intarray
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4427 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4428 int n; // Number of elements in the array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4429 sqlite3_int64* a; // Contents of the array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4430 void (*xFree)(void*); // Function used to free a[]
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4431 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4432
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4433 // Objects used internally by the virtual table implementation
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4434 typedef struct intarray_vtab intarray_vtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4435 typedef struct intarray_cursor intarray_cursor;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4436
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4437 /// Definition of intarray table object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4438 struct intarray_vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4439 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4440 sqlite3_vtab base; // Base class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4441 sqlite3_intarray* pContent; // Content of the integer array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4442 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4443
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4444 /// Definition of intarray cursor object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4445 struct intarray_cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4446 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4447 sqlite3_vtab_cursor base; // Base class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4448 int i; // Current cursor position
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4449 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4450
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4451 // Free an sqlite3_intarray object.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4452 static void intarrayFree(sqlite3_intarray* p)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4453 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4454 if (p->a != NULL && p->xFree)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4455 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4456 p->xFree(p->a);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4457 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4458 sqlite3_free(p);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4459 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4460
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4461 // Table destructor for the intarray module.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4462 static int intarrayDestroy(sqlite3_vtab* p)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4463 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4464 intarray_vtab* pVtab = (intarray_vtab*)p;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4465 sqlite3_free(pVtab);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4466 return 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4467 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4468
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4469 // Table constructor for the intarray module.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4470 static int intarrayCreate(sqlite3* db, // Database where module is created
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4471 void* pAux, // clientdata for the module
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4472 int /*argc*/, // Number of arguments
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4473 const char* const* /*argv*/, // Value for all arguments
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4474 sqlite3_vtab** ppVtab, // Write the new virtual table object here
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4475 char** /*pzErr*/) // Put error message text here
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4476 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4477 int rc = SQLITE_NOMEM;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4478 intarray_vtab* pVtab = (intarray_vtab*) sqlite3_malloc(sizeof(intarray_vtab));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4479
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4480 if (pVtab)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4481 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4482 memset(pVtab, 0, sizeof(intarray_vtab));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4483 pVtab->pContent = (sqlite3_intarray*)pAux;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4484 rc = sqlite3_declare_vtab(db, "CREATE TABLE x(value INTEGER PRIMARY KEY)");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4485 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4486 *ppVtab = (sqlite3_vtab*)pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4487 return rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4488 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4489
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4490 // Open a new cursor on the intarray table.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4491 static int intarrayOpen(sqlite3_vtab* /*pVTab*/, sqlite3_vtab_cursor** ppCursor)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4492 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4493 int rc = SQLITE_NOMEM;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4494 intarray_cursor* pCur = (intarray_cursor*) sqlite3_malloc(sizeof(intarray_cursor));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4495 if (pCur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4496 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4497 memset(pCur, 0, sizeof(intarray_cursor));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4498 *ppCursor = (sqlite3_vtab_cursor *)pCur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4499 rc = SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4500 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4501 return rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4502 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4503
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4504 // Close a intarray table cursor.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4505 static int intarrayClose(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4506 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4507 intarray_cursor* pCur = (intarray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4508 sqlite3_free(pCur);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4509 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4510 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4511
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4512 // Retrieve a column of data.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4513 static int intarrayColumn(sqlite3_vtab_cursor* cur, sqlite3_context* ctx, int /*i*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4514 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4515 intarray_cursor* pCur = (intarray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4516 intarray_vtab* pVtab = (intarray_vtab*)cur->pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4517 if (pCur->i >= 0 && pCur->i < pVtab->pContent->n)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4518 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4519 sqlite3_result_int64(ctx, pVtab->pContent->a[pCur->i]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4520 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4521 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4522 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4523
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4524 // Retrieve the current rowid.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4525 static int intarrayRowid(sqlite3_vtab_cursor* cur, sqlite_int64* pRowid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4526 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4527 intarray_cursor* pCur = (intarray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4528 *pRowid = pCur->i;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4529 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4530 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4531
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4532 static int intarrayEof(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4533 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4534 intarray_cursor* pCur = (intarray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4535 intarray_vtab* pVtab = (intarray_vtab*)cur->pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4536 return pCur->i >= pVtab->pContent->n;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4537 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4538
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4539 // Advance the cursor to the next row.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4540 static int intarrayNext(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4541 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4542 intarray_cursor* pCur = (intarray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4543 pCur->i++;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4544 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4545 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4546
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4547 // Reset a intarray table cursor.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4548 static int intarrayFilter(sqlite3_vtab_cursor* pVtabCursor,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4549 int /*idxNum*/, const char* /*idxStr*/,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4550 int /*argc*/, sqlite3_value** /*argv*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4551 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4552 intarray_cursor* pCur = (intarray_cursor*) pVtabCursor;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4553 pCur->i = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4554 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4555 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4556
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4557 // Analyse the WHERE condition.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4558 static int intarrayBestIndex(sqlite3_vtab* /*tab*/, sqlite3_index_info* /*pIdxInfo*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4559 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4560 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4561 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4562
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4563 // Definition of a virtual table module for integer collections
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4564 static sqlite3_module intarrayModule =
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4565 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4566 0, // iVersion
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4567 intarrayCreate, // xCreate - create a new virtual table
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4568 intarrayCreate, // xConnect - connect to an existing vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4569 intarrayBestIndex, // xBestIndex - find the best query index
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4570 intarrayDestroy, // xDisconnect - disconnect a vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4571 intarrayDestroy, // xDestroy - destroy a vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4572 intarrayOpen, // xOpen - open a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4573 intarrayClose, // xClose - close a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4574 intarrayFilter, // xFilter - configure scan constraints
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4575 intarrayNext, // xNext - advance a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4576 intarrayEof, // xEof
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4577 intarrayColumn, // xColumn - read data
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4578 intarrayRowid, // xRowid - read data
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4579 0, // xUpdate
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4580 0, // xBegin
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4581 0, // xSync
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4582 0, // xCommit
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4583 0, // xRollback
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4584 0, // xFindMethod
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4585 0, // xRename
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4586 #if SQLITE_VERSION_NUMBER >= 3007007
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4587 0, // xSavepoint
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4588 0, // xRelease
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4589 0 // xRollbackTo
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4590 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4591 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4592
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4593 /// Definition of the sqlite3_chararray object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4594 struct sqlite3_chararray
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4595 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4596 int n; // Number of elements in the array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4597 char** a; // Contents of the array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4598 void (*xFree)(void*); // Function used to free a[]
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4599 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4600
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4601 // Objects used internally by the virtual table implementation
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4602 typedef struct chararray_vtab chararray_vtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4603 typedef struct chararray_cursor chararray_cursor;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4604
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4605 /// Definition of chararray table object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4606 struct chararray_vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4607 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4608 sqlite3_vtab base; // Base class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4609 sqlite3_chararray* pContent; // Content of the char array
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4610 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4611
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4612 /// Definition of chararray cursor object (internal)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4613 struct chararray_cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4614 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4615 sqlite3_vtab_cursor base; // Base class
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4616 int i; // Current cursor position
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4617 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4618
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4619 // Free an sqlite3_chararray object.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4620 static void chararrayFree(sqlite3_chararray* p)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4621 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4622 if (p->a != NULL && p->xFree)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4623 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4624 int j;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4625 for (j = 0; j < p->n; ++j)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4626 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4627 p->xFree(p->a[j]);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4628 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4629 p->xFree(p->a);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4630 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4631 sqlite3_free(p);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4632 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4633
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4634 // Table destructor for the chararray module.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4635 static int chararrayDestroy(sqlite3_vtab* p)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4636 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4637 chararray_vtab* pVtab = (chararray_vtab*)p;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4638 sqlite3_free(pVtab);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4639 return 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4640 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4641
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4642 // Table constructor for the chararray module.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4643 static int chararrayCreate(sqlite3* db, // Database where module is created
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4644 void* pAux, // clientdata for the module
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4645 int /*argc*/, // Number of arguments
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4646 const char* const* /*argv*/, // Value for all arguments
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4647 sqlite3_vtab** ppVtab, // Write the new virtual table object here
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4648 char** /*pzErr*/) // Put error message text here
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4649 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4650 int rc = SQLITE_NOMEM;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4651 chararray_vtab* pVtab = (chararray_vtab*) sqlite3_malloc(sizeof(chararray_vtab));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4652
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4653 if (pVtab)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4654 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4655 memset(pVtab, 0, sizeof(chararray_vtab));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4656 pVtab->pContent = (sqlite3_chararray*) pAux;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4657 rc = sqlite3_declare_vtab(db, "CREATE TABLE x(value CHAR PRIMARY KEY)");
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4658 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4659 *ppVtab = (sqlite3_vtab*) pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4660 return rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4661 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4662
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4663 // Open a new cursor on the chararray table.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4664 static int chararrayOpen(sqlite3_vtab* /*pVTab*/, sqlite3_vtab_cursor** ppCursor)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4665 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4666 int rc = SQLITE_NOMEM;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4667 chararray_cursor* pCur = (chararray_cursor*) sqlite3_malloc(sizeof(chararray_cursor));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4668 if (pCur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4669 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4670 memset(pCur, 0, sizeof(chararray_cursor));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4671 *ppCursor = (sqlite3_vtab_cursor *)pCur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4672 rc = SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4673 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4674 return rc;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4675 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4676
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4677 // Close a chararray table cursor.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4678 static int chararrayClose(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4679 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4680 chararray_cursor* pCur = (chararray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4681 sqlite3_free(pCur);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4682 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4683 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4684
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4685 // Retrieve a column of data.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4686 static int chararrayColumn(sqlite3_vtab_cursor* cur, sqlite3_context* ctx, int /*i*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4687 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4688 chararray_cursor* pCur = (chararray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4689 chararray_vtab* pVtab = (chararray_vtab*)cur->pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4690 if (pCur->i >= 0 && pCur->i < pVtab->pContent->n)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4691 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4692 sqlite3_result_text(ctx, pVtab->pContent->a[pCur->i], -1, SQLITE_STATIC);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4693 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4694 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4695 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4696
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4697 // Retrieve the current rowid.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4698 static int chararrayRowid(sqlite3_vtab_cursor* cur, sqlite_int64* pRowid)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4699 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4700 chararray_cursor* pCur = (chararray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4701 *pRowid = pCur->i;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4702 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4703 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4704
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4705 static int chararrayEof(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4706 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4707 chararray_cursor* pCur = (chararray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4708 chararray_vtab* pVtab = (chararray_vtab*)cur->pVtab;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4709 return pCur->i >= pVtab->pContent->n;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4710 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4711
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4712 // Advance the cursor to the next row.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4713 static int chararrayNext(sqlite3_vtab_cursor* cur)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4714 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4715 chararray_cursor* pCur = (chararray_cursor*)cur;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4716 pCur->i++;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4717 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4718 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4719
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4720 // Reset a chararray table cursor.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4721 static int chararrayFilter(sqlite3_vtab_cursor* pVtabCursor,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4722 int /*idxNum*/, const char* /*idxStr*/,
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4723 int /*argc*/, sqlite3_value** /*argv*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4724 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4725 chararray_cursor *pCur = (chararray_cursor *)pVtabCursor;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4726 pCur->i = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4727 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4728 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4729
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4730 // Analyse the WHERE condition.
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4731 static int chararrayBestIndex(sqlite3_vtab* /*tab*/, sqlite3_index_info* /*pIdxInfo*/)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4732 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4733 return SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4734 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4735
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4736 // Definition of a virtual table module for string collections
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4737 static sqlite3_module chararrayModule =
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4738 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4739 0, // iVersion
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4740 chararrayCreate, // xCreate - create a new virtual table
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4741 chararrayCreate, // xConnect - connect to an existing vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4742 chararrayBestIndex, // xBestIndex - find the best query index
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4743 chararrayDestroy, // xDisconnect - disconnect a vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4744 chararrayDestroy, // xDestroy - destroy a vtab
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4745 chararrayOpen, // xOpen - open a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4746 chararrayClose, // xClose - close a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4747 chararrayFilter, // xFilter - configure scan constraints
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4748 chararrayNext, // xNext - advance a cursor
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4749 chararrayEof, // xEof
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4750 chararrayColumn, // xColumn - read data
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4751 chararrayRowid, // xRowid - read data
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4752 0, // xUpdate
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4753 0, // xBegin
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4754 0, // xSync
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4755 0, // xCommit
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4756 0, // xRollback
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4757 0, // xFindMethod
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4758 0, // xRename
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4759 #if SQLITE_VERSION_NUMBER >= 3007007
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4760 0, // xSavepoint
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4761 0, // xRelease
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4762 0 // xRollbackTo
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4763 #endif
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4764 };
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4765
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4766 #endif // WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4767
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4768 wxSQLite3NamedCollection::wxSQLite3NamedCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4769 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4770 m_name = wxEmptyString;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4771 m_data = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4772 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4773
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4774 wxSQLite3NamedCollection::wxSQLite3NamedCollection(const wxString& collectionName, void* collectionData)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4775 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4776 m_name = collectionName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4777 m_data = collectionData;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4778 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4779
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4780 wxSQLite3NamedCollection::wxSQLite3NamedCollection(const wxSQLite3NamedCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4781 : m_name(collection.m_name), m_data(collection.m_data)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4782 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4783 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4784
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4785 wxSQLite3NamedCollection&
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4786 wxSQLite3NamedCollection::operator=(const wxSQLite3NamedCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4787 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4788 if (this != &collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4789 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4790 m_name = collection.m_name;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4791 m_data = collection.m_data;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4792 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4793 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4794 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4795
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4796 wxSQLite3NamedCollection::~wxSQLite3NamedCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4797 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4798 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4799
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4800 wxSQLite3IntegerCollection::wxSQLite3IntegerCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4801 : wxSQLite3NamedCollection(wxEmptyString, NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4802 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4803 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4804
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4805 wxSQLite3IntegerCollection::wxSQLite3IntegerCollection(const wxSQLite3IntegerCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4806 : wxSQLite3NamedCollection(collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4807 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4808 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4809
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4810 wxSQLite3IntegerCollection&
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4811 wxSQLite3IntegerCollection::operator=(const wxSQLite3IntegerCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4812 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4813 if (this != &collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4814 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4815 wxSQLite3NamedCollection::operator=(collection);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4816 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4817 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4818 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4819
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4820 wxSQLite3IntegerCollection::wxSQLite3IntegerCollection(const wxString& collectionName, void* collectionData)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4821 : wxSQLite3NamedCollection(collectionName, collectionData)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4822 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4823 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4824
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4825 wxSQLite3IntegerCollection::~wxSQLite3IntegerCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4826 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4827 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4828
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4829 void
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4830 wxSQLite3IntegerCollection::Bind(const wxArrayInt& integerCollection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4831 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4832 size_t n = integerCollection.Count();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4833 sqlite3_intarray* pIntArray = (sqlite3_intarray*) m_data;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4834 if (m_data != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4835 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4836 if (pIntArray->a != NULL && pIntArray->xFree)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4837 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4838 pIntArray->xFree(pIntArray->a);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4839 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4840 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4841 pIntArray->n = n;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4842 if (n > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4843 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4844 pIntArray->a = (sqlite3_int64*) sqlite3_malloc(sizeof(sqlite3_int64)*n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4845 pIntArray->xFree = sqlite3_free;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4846 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4847 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4848 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4849 pIntArray->a = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4850 pIntArray->xFree = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4851 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4852
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4853 size_t j;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4854 for (j = 0; j < n; ++j)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4855 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4856 pIntArray->a[j] = integerCollection[j];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4857 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4858 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4859
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4860 void
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4861 wxSQLite3IntegerCollection::Bind(int n, int* integerCollection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4862 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4863 sqlite3_intarray* pIntArray = (sqlite3_intarray*) m_data;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4864 if (m_data != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4865 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4866 if (pIntArray->a != NULL && pIntArray->xFree)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4867 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4868 pIntArray->xFree(pIntArray->a);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4869 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4870 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4871 pIntArray->n = n;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4872 if (n > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4873 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4874 pIntArray->a = (sqlite3_int64*) sqlite3_malloc(sizeof(sqlite3_int64)*n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4875 pIntArray->xFree = sqlite3_free;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4876 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4877 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4878 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4879 pIntArray->a = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4880 pIntArray->xFree = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4881 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4882
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4883 int j;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4884 for (j = 0; j < n; ++j)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4885 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4886 pIntArray->a[j] = integerCollection[j];
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4887 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4888 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4889
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4890 wxSQLite3IntegerCollection
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4891 wxSQLite3Database::CreateIntegerCollection(const wxString& collectionName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4892 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4893 #if WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4894 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4895 int rc = SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4896 wxCharBuffer strCollectionName = collectionName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4897 const char* zName = strCollectionName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4898 sqlite3_intarray* p = (sqlite3_intarray*) sqlite3_malloc( sizeof(*p) );
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4899 if (p == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4900 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4901 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMEM);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4902 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4903 p->n = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4904 p->a= NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4905 p->xFree = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4906 rc = sqlite3_create_module_v2(m_db->m_db, zName, &intarrayModule, p, (void(*)(void*))intarrayFree);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4907 if (rc == SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4908 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4909 wxSQLite3StatementBuffer zBuffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4910 const char* zSql = zBuffer.Format("CREATE VIRTUAL TABLE temp.%Q USING %Q", zName, zName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4911 rc = sqlite3_exec(m_db->m_db, zSql, 0, 0, 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4912 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4913 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4914 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4915 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4916 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4917 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4918 return wxSQLite3IntegerCollection(collectionName, p);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4919 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4920 wxUnusedVar(collectionName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4921 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOCOLLECTIONS);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4922 #endif // WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4923 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4924
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4925 wxSQLite3StringCollection::wxSQLite3StringCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4926 : wxSQLite3NamedCollection(wxEmptyString, NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4927 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4928 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4929
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4930 wxSQLite3StringCollection::wxSQLite3StringCollection(const wxSQLite3StringCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4931 : wxSQLite3NamedCollection(collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4932 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4933 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4934
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4935 wxSQLite3StringCollection&
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4936 wxSQLite3StringCollection::operator=(const wxSQLite3StringCollection& collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4937 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4938 if (this != &collection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4939 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4940 wxSQLite3StringCollection::operator=(collection);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4941 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4942 return *this;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4943 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4944
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4945 wxSQLite3StringCollection::wxSQLite3StringCollection(const wxString& collectionName, void* collectionData)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4946 : wxSQLite3NamedCollection(collectionName, collectionData)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4947 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4948 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4949
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4950 wxSQLite3StringCollection::~wxSQLite3StringCollection()
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4951 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4952 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4953
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4954 void
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4955 wxSQLite3StringCollection::Bind(const wxArrayString& stringCollection)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4956 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4957 size_t n = stringCollection.Count();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4958 sqlite3_chararray* pCharArray = (sqlite3_chararray*) m_data;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4959 if (m_data != NULL)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4960 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4961 if (pCharArray->a != NULL && pCharArray->xFree)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4962 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4963 pCharArray->xFree(pCharArray->a);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4964 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4965 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4966 pCharArray->n = n;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4967 if (n > 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4968 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4969 pCharArray->a = (char**) sqlite3_malloc(sizeof(char*)*n);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4970 pCharArray->xFree = sqlite3_free;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4971 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4972 else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4973 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4974 pCharArray->a = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4975 pCharArray->xFree = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4976 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4977
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4978 size_t j;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4979 for (j = 0; j < n; ++j)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4980 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4981 wxCharBuffer strValue = stringCollection[j].ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4982 const char* zValue = strValue;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4983 size_t k = strlen(zValue) + 1;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4984 pCharArray->a[j] = (char*) sqlite3_malloc(sizeof(char)*k);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4985 strcpy(pCharArray->a[j], zValue);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4986 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4987 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4988
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4989 wxSQLite3StringCollection
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4990 wxSQLite3Database::CreateStringCollection(const wxString& collectionName)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4991 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4992 #if WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4993 CheckDatabase();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4994 int rc = SQLITE_OK;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4995 wxCharBuffer strCollectionName = collectionName.ToUTF8();
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4996 const char* zName = strCollectionName;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4997 sqlite3_chararray* p = (sqlite3_chararray*) sqlite3_malloc( sizeof(*p) );
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4998 if (p == 0)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
4999 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5000 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOMEM);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5001 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5002 p->n = 0;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5003 p->a= NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5004 p->xFree = NULL;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5005 rc = sqlite3_create_module_v2(m_db->m_db, zName, &chararrayModule, p, (void(*)(void*))chararrayFree);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5006 if (rc == SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5007 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5008 wxSQLite3StatementBuffer zBuffer;
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5009 const char* zSql = zBuffer.Format("CREATE VIRTUAL TABLE temp.%Q USING %Q", zName, zName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5010 rc = sqlite3_exec(m_db->m_db, zSql, 0, 0, 0);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5011 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5012 if (rc != SQLITE_OK)
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5013 {
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5014 const char* localError = sqlite3_errmsg(m_db->m_db);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5015 throw wxSQLite3Exception(rc, wxString::FromUTF8(localError));
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5016 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5017 return wxSQLite3StringCollection(collectionName, p);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5018 #else
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5019 wxUnusedVar(collectionName);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5020 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NOCOLLECTIONS);
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5021 #endif // WXSQLITE3_USE_NAMED_COLLECTIONS
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5022 }
0c0701a935f8 Start Development.
pyon@macmini
parents:
diff changeset
5023