annotate src/wxsqlite3.cpp @ 22:05f76f9f9186

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