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) |
