Mercurial > mercurial > hgweb_searcher03.cgi
comparison src/wxsqlite3.cpp @ 21:a2ad87cad48b
Enhanced the convenience of Cache dialog.
author | pyon@macmini |
---|---|
date | Wed, 17 Dec 2014 00:52:43 +0900 |
parents | 0c0701a935f8 |
children |
comparison
equal
deleted
inserted
replaced
20:226774bf49fc | 21:a2ad87cad48b |
---|---|
95 rcode s_##fname farguse;\ | 95 rcode s_##fname farguse;\ |
96 }; | 96 }; |
97 #include "wx/wxsqlite3dyn.h" | 97 #include "wx/wxsqlite3dyn.h" |
98 #undef DYNFUNC | 98 #undef DYNFUNC |
99 | 99 |
100 #else | |
101 // Define Windows specific SQLite API functions (not defined in sqlite3.h) | |
102 #if SQLITE_VERSION_NUMBER >= 3007014 | |
103 #if defined(__WXMSW__) | |
104 #ifdef __cplusplus | |
105 extern "C" { | |
106 #endif | |
107 SQLITE_API int sqlite3_win32_set_directory(DWORD type, LPCWSTR zValue); | |
108 #ifdef __cplusplus | |
109 } | |
110 #endif | |
111 #endif | |
112 #endif | |
100 #endif // wxUSE_DYNAMIC_SQLITE3_LOAD | 113 #endif // wxUSE_DYNAMIC_SQLITE3_LOAD |
101 | 114 |
102 // Error messages | 115 // Error messages |
103 | 116 |
104 #if wxCHECK_VERSION(2,9,0) | 117 #if wxCHECK_VERSION(2,9,0) |
135 | 148 |
136 const char* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed"); | 149 const char* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed"); |
137 | 150 |
138 const char* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed"); | 151 const char* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed"); |
139 const char* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed"); | 152 const char* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed"); |
140 | 153 const char* wxERRMSG_TEMPDIR = wxTRANSLATE("Setting temporary directory failed"); |
141 const char* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy"); | 154 |
142 const char* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed"); | 155 const char* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy"); |
143 const char* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed"); | 156 const char* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed"); |
157 const char* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed"); | |
144 const char* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed"); | 158 const char* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed"); |
145 const char* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed"); | 159 const char* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed"); |
146 #else | 160 #else |
147 const wxChar* wxERRMSG_NODB = wxTRANSLATE("No Database opened"); | 161 const wxChar* wxERRMSG_NODB = wxTRANSLATE("No Database opened"); |
148 const wxChar* wxERRMSG_NOSTMT = wxTRANSLATE("Statement not accessible"); | 162 const wxChar* wxERRMSG_NOSTMT = wxTRANSLATE("Statement not accessible"); |
177 | 191 |
178 const wxChar* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed"); | 192 const wxChar* wxERRMSG_SHARED_CACHE = wxTRANSLATE("Setting SQLite shared cache mode failed"); |
179 | 193 |
180 const wxChar* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed"); | 194 const wxChar* wxERRMSG_INITIALIZE = wxTRANSLATE("Initialization of SQLite failed"); |
181 const wxChar* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed"); | 195 const wxChar* wxERRMSG_SHUTDOWN = wxTRANSLATE("Shutdown of SQLite failed"); |
196 const wxChar* wxERRMSG_TEMPDIR = wxTRANSLATE("Setting temporary directory failed"); | |
182 | 197 |
183 const wxChar* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy"); | 198 const wxChar* wxERRMSG_SOURCEDB_BUSY = wxTRANSLATE("Source database is busy"); |
184 const wxChar* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed"); | 199 const wxChar* wxERRMSG_DBOPEN_FAILED = wxTRANSLATE("Database open failed"); |
185 const wxChar* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed"); | 200 const wxChar* wxERRMSG_DBCLOSE_FAILED = wxTRANSLATE("Database close failed"); |
186 const wxChar* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed"); | 201 const wxChar* wxERRMSG_DBASSIGN_FAILED = wxTRANSLATE("Database assignment failed"); |
187 const wxChar* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed"); | 202 const wxChar* wxERRMSG_FINALIZE_FAILED = wxTRANSLATE("Finalize failed"); |
188 #endif | 203 #endif |
189 | 204 |
190 // Critical sections are used to make access to it thread safe if necessary. | 205 // Critical sections are used to make access to it thread safe if necessary. |
2204 #else | 2219 #else |
2205 return false; | 2220 return false; |
2206 #endif | 2221 #endif |
2207 } | 2222 } |
2208 | 2223 |
2224 int wxSQLite3Statement::Status(wxSQLite3StatementStatus opCode, bool resetFlag) | |
2225 { | |
2226 int count = 0; | |
2227 #if SQLITE_VERSION_NUMBER >= 3007000 | |
2228 CheckStmt(); | |
2229 count = sqlite3_stmt_status(m_stmt->m_stmt, (int) opCode, (resetFlag) ? 1 : 0 ); | |
2230 #endif | |
2231 return count; | |
2232 } | |
2233 | |
2209 void wxSQLite3Statement::CheckDatabase() | 2234 void wxSQLite3Statement::CheckDatabase() |
2210 { | 2235 { |
2211 if (m_db == NULL || m_db->m_db == NULL || !m_db->m_isValid) | 2236 if (m_db == NULL || m_db->m_db == NULL || !m_db->m_isValid) |
2212 { | 2237 { |
2213 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NODB); | 2238 throw wxSQLite3Exception(WXSQLITE_ERROR, wxERRMSG_NODB); |
3501 #else | 3526 #else |
3502 return wxEmptyString; | 3527 return wxEmptyString; |
3503 #endif | 3528 #endif |
3504 } | 3529 } |
3505 | 3530 |
3506 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3ScalarFunction& function) | 3531 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3ScalarFunction& function, bool isDeterministic) |
3507 { | 3532 { |
3508 CheckDatabase(); | 3533 CheckDatabase(); |
3509 wxCharBuffer strFuncName = funcName.ToUTF8(); | 3534 wxCharBuffer strFuncName = funcName.ToUTF8(); |
3510 const char* localFuncName = strFuncName; | 3535 const char* localFuncName = strFuncName; |
3536 int flags = SQLITE_UTF8; | |
3537 #if SQLITE_VERSION_NUMBER >= 3008003 | |
3538 if (isDeterministic) | |
3539 { | |
3540 flags |= SQLITE_DETERMINISTIC; | |
3541 } | |
3542 #endif | |
3511 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount, | 3543 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount, |
3512 SQLITE_UTF8, &function, | 3544 flags, &function, |
3513 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecScalarFunction, NULL, NULL); | 3545 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecScalarFunction, NULL, NULL); |
3514 return rc == SQLITE_OK; | 3546 return rc == SQLITE_OK; |
3515 } | 3547 } |
3516 | 3548 |
3517 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3AggregateFunction& function) | 3549 bool wxSQLite3Database::CreateFunction(const wxString& funcName, int argCount, wxSQLite3AggregateFunction& function, bool isDeterministic) |
3518 { | 3550 { |
3519 CheckDatabase(); | 3551 CheckDatabase(); |
3520 wxCharBuffer strFuncName = funcName.ToUTF8(); | 3552 wxCharBuffer strFuncName = funcName.ToUTF8(); |
3521 const char* localFuncName = strFuncName; | 3553 const char* localFuncName = strFuncName; |
3554 int flags = SQLITE_UTF8; | |
3555 #if SQLITE_VERSION_NUMBER >= 3008003 | |
3556 if (isDeterministic) | |
3557 { | |
3558 flags |= SQLITE_DETERMINISTIC; | |
3559 } | |
3560 #endif | |
3522 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount, | 3561 int rc = sqlite3_create_function(m_db->m_db, localFuncName, argCount, |
3523 SQLITE_UTF8, &function, | 3562 flags, &function, |
3524 NULL, | 3563 NULL, |
3525 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecAggregateStep, | 3564 (void (*)(sqlite3_context*,int,sqlite3_value**)) wxSQLite3FunctionContext::ExecAggregateStep, |
3526 (void (*)(sqlite3_context*)) wxSQLite3FunctionContext::ExecAggregateFinalize); | 3565 (void (*)(sqlite3_context*)) wxSQLite3FunctionContext::ExecAggregateFinalize); |
3527 return rc == SQLITE_OK; | 3566 return rc == SQLITE_OK; |
3528 } | 3567 } |
3914 } | 3953 } |
3915 #endif | 3954 #endif |
3916 } | 3955 } |
3917 | 3956 |
3918 /* static */ | 3957 /* static */ |
3958 bool wxSQLite3Database::SetTemporaryDirectory(const wxString& tempDirectory) | |
3959 { | |
3960 bool ok = false; | |
3961 #if SQLITE_VERSION_NUMBER >= 3007014 | |
3962 #if defined(__WXMSW__) | |
3963 DWORD SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2; | |
3964 #if wxUSE_UNICODE | |
3965 const wxChar* zValue = tempDirectory.wc_str(); | |
3966 #else | |
3967 const wxWCharBuffer zValue = tempDirectory.wc_str(wxConvLocal); | |
3968 #endif | |
3969 int rc = sqlite3_win32_set_directory(SQLITE_WIN32_TEMP_DIRECTORY_TYPE, zValue); | |
3970 ok = (rc == SQLITE_OK); | |
3971 #if 0 | |
3972 if (rc != SQLITE_OK) | |
3973 { | |
3974 throw wxSQLite3Exception(rc, wxERRMSG_TEMPDIR); | |
3975 } | |
3976 #endif | |
3977 #endif | |
3978 #endif | |
3979 return ok; | |
3980 } | |
3981 | |
3982 /* static */ | |
3919 bool wxSQLite3Database::Randomness(int n, wxMemoryBuffer& random) | 3983 bool wxSQLite3Database::Randomness(int n, wxMemoryBuffer& random) |
3920 { | 3984 { |
3921 bool ok = false; | 3985 bool ok = false; |
3922 #if SQLITE_VERSION_NUMBER >= 3005008 | 3986 #if SQLITE_VERSION_NUMBER >= 3005008 |
3923 if (n > 0) | 3987 if (n > 0) |
4230 wxT("SQLITE_DROP_TEMP_VIEW"), wxT("SQLITE_DROP_TRIGGER"), wxT("SQLITE_DROP_VIEW"), | 4294 wxT("SQLITE_DROP_TEMP_VIEW"), wxT("SQLITE_DROP_TRIGGER"), wxT("SQLITE_DROP_VIEW"), |
4231 wxT("SQLITE_INSERT"), wxT("SQLITE_PRAGMA"), wxT("SQLITE_READ"), | 4295 wxT("SQLITE_INSERT"), wxT("SQLITE_PRAGMA"), wxT("SQLITE_READ"), |
4232 wxT("SQLITE_SELECT"), wxT("SQLITE_TRANSACTION"), wxT("SQLITE_UPDATE"), | 4296 wxT("SQLITE_SELECT"), wxT("SQLITE_TRANSACTION"), wxT("SQLITE_UPDATE"), |
4233 wxT("SQLITE_ATTACH"), wxT("SQLITE_DETACH"), wxT("SQLITE_ALTER_TABLE"), | 4297 wxT("SQLITE_ATTACH"), wxT("SQLITE_DETACH"), wxT("SQLITE_ALTER_TABLE"), |
4234 wxT("SQLITE_REINDEX"), wxT("SQLITE_ANALYZE"), wxT("SQLITE_CREATE_VTABLE"), | 4298 wxT("SQLITE_REINDEX"), wxT("SQLITE_ANALYZE"), wxT("SQLITE_CREATE_VTABLE"), |
4235 wxT("SQLITE_DROP_VTABLE"), wxT("SQLITE_FUNCTION"), wxT("SQLITE_SAVEPOINT") | 4299 wxT("SQLITE_DROP_VTABLE"), wxT("SQLITE_FUNCTION"), wxT("SQLITE_SAVEPOINT"), |
4300 wxT("SQLITE_RECURSIVE") | |
4236 }; | 4301 }; |
4237 | 4302 |
4238 | 4303 |
4239 /* static */ | 4304 /* static */ |
4240 wxString wxSQLite3Authorizer::AuthorizationCodeToString(wxSQLite3Authorizer::wxAuthorizationCode type) | 4305 wxString wxSQLite3Authorizer::AuthorizationCodeToString(wxSQLite3Authorizer::wxAuthorizationCode type) |