diff options
Diffstat (limited to 'hkutil/database.h')
| -rw-r--r-- | hkutil/database.h | 23 |
1 files changed, 23 insertions, 0 deletions
| diff --git a/hkutil/database.h b/hkutil/database.h index f4e7a9a..7425756 100644 --- a/hkutil/database.h +++ b/hkutil/database.h | |||
| @@ -194,6 +194,11 @@ namespace hatkirby { | |||
| 194 | std::string queryString, | 194 | std::string queryString, |
| 195 | std::list<binding> bindings = {}) | 195 | std::list<binding> bindings = {}) |
| 196 | { | 196 | { |
| 197 | if (timeout_ > 0) | ||
| 198 | { | ||
| 199 | deadline_ = static_cast<long long>(std::time(nullptr)) + timeout_; | ||
| 200 | } | ||
| 201 | |||
| 197 | sqlite3_stmt* tempStmt; | 202 | sqlite3_stmt* tempStmt; |
| 198 | 203 | ||
| 199 | int ret = sqlite3_prepare_v2( | 204 | int ret = sqlite3_prepare_v2( |
| @@ -310,6 +315,22 @@ namespace hatkirby { | |||
| 310 | return result; | 315 | return result; |
| 311 | } | 316 | } |
| 312 | 317 | ||
| 318 | void setTimeout(int seconds) | ||
| 319 | { | ||
| 320 | timeout_ = seconds; | ||
| 321 | if (timeout_ > 0) | ||
| 322 | { | ||
| 323 | sqlite3_progress_handler(ppdb_.get(), 1000, [](void* db){ | ||
| 324 | if (static_cast<long long>(std::time(nullptr)) > static_cast<database*>(db)->deadline_) { | ||
| 325 | return 1; | ||
| 326 | } | ||
| 327 | return 0; | ||
| 328 | }, this); | ||
| 329 | } else { | ||
| 330 | sqlite3_progress_handler(ppdb_.get(), 0, nullptr, nullptr); | ||
| 331 | } | ||
| 332 | } | ||
| 333 | |||
| 313 | private: | 334 | private: |
| 314 | 335 | ||
| 315 | class sqlite3_deleter { | 336 | class sqlite3_deleter { |
| @@ -392,6 +413,8 @@ namespace hatkirby { | |||
| 392 | } | 413 | } |
| 393 | 414 | ||
| 394 | ppdb_type ppdb_; | 415 | ppdb_type ppdb_; |
| 416 | long long timeout_ = -1; | ||
| 417 | long long deadline_ = 0; | ||
| 395 | 418 | ||
| 396 | }; | 419 | }; |
| 397 | 420 | ||
