| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sql/connection.h" | 5 #include "sql/connection.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <string.h> | 10 #include <string.h> |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "third_party/sqlite/src/ext/icu/sqliteicu.h" | 37 #include "third_party/sqlite/src/ext/icu/sqliteicu.h" |
| 38 #endif | 38 #endif |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 // Spin for up to a second waiting for the lock to clear when setting | 42 // Spin for up to a second waiting for the lock to clear when setting |
| 43 // up the database. | 43 // up the database. |
| 44 // TODO(shess): Better story on this. http://crbug.com/56559 | 44 // TODO(shess): Better story on this. http://crbug.com/56559 |
| 45 const int kBusyTimeoutSeconds = 1; | 45 const int kBusyTimeoutSeconds = 1; |
| 46 | 46 |
| 47 bool g_mmap_disabled_default = false; | |
| 48 | |
| 49 class ScopedBusyTimeout { | 47 class ScopedBusyTimeout { |
| 50 public: | 48 public: |
| 51 explicit ScopedBusyTimeout(sqlite3* db) | 49 explicit ScopedBusyTimeout(sqlite3* db) |
| 52 : db_(db) { | 50 : db_(db) { |
| 53 } | 51 } |
| 54 ~ScopedBusyTimeout() { | 52 ~ScopedBusyTimeout() { |
| 55 sqlite3_busy_timeout(db_, 0); | 53 sqlite3_busy_timeout(db_, 0); |
| 56 } | 54 } |
| 57 | 55 |
| 58 int SetTimeout(base::TimeDelta timeout) { | 56 int SetTimeout(base::TimeDelta timeout) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 int basic_error = error & 0xff; | 247 int basic_error = error & 0xff; |
| 250 | 248 |
| 251 // These errors relate more to the runtime context of the system than to | 249 // These errors relate more to the runtime context of the system than to |
| 252 // errors with a SQL statement or with the schema, so they aren't generally | 250 // errors with a SQL statement or with the schema, so they aren't generally |
| 253 // interesting to flag. This list is not comprehensive. | 251 // interesting to flag. This list is not comprehensive. |
| 254 return basic_error == SQLITE_BUSY || | 252 return basic_error == SQLITE_BUSY || |
| 255 basic_error == SQLITE_NOTADB || | 253 basic_error == SQLITE_NOTADB || |
| 256 basic_error == SQLITE_CORRUPT; | 254 basic_error == SQLITE_CORRUPT; |
| 257 } | 255 } |
| 258 | 256 |
| 259 // static | |
| 260 void Connection::set_mmap_disabled_by_default() { | |
| 261 g_mmap_disabled_default = true; | |
| 262 } | |
| 263 | |
| 264 | |
| 265 void Connection::ReportDiagnosticInfo(int extended_error, Statement* stmt) { | 257 void Connection::ReportDiagnosticInfo(int extended_error, Statement* stmt) { |
| 266 AssertIOAllowed(); | 258 AssertIOAllowed(); |
| 267 | 259 |
| 268 std::string debug_info; | 260 std::string debug_info; |
| 269 const int error = (extended_error & 0xFF); | 261 const int error = (extended_error & 0xFF); |
| 270 if (error == SQLITE_CORRUPT) { | 262 if (error == SQLITE_CORRUPT) { |
| 271 // CollectCorruptionInfo() is implemented in terms of sql::Connection, | 263 // CollectCorruptionInfo() is implemented in terms of sql::Connection, |
| 272 // prevent reentrant calls to the error callback. | 264 // prevent reentrant calls to the error callback. |
| 273 // TODO(shess): Rewrite IntegrityCheckHelper() in terms of raw SQLite. | 265 // TODO(shess): Rewrite IntegrityCheckHelper() in terms of raw SQLite. |
| 274 ErrorCallback original_callback = std::move(error_callback_); | 266 ErrorCallback original_callback = std::move(error_callback_); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 Connection::Connection() | 340 Connection::Connection() |
| 349 : db_(NULL), | 341 : db_(NULL), |
| 350 page_size_(0), | 342 page_size_(0), |
| 351 cache_size_(0), | 343 cache_size_(0), |
| 352 exclusive_locking_(false), | 344 exclusive_locking_(false), |
| 353 restrict_to_user_(false), | 345 restrict_to_user_(false), |
| 354 transaction_nesting_(0), | 346 transaction_nesting_(0), |
| 355 needs_rollback_(false), | 347 needs_rollback_(false), |
| 356 in_memory_(false), | 348 in_memory_(false), |
| 357 poisoned_(false), | 349 poisoned_(false), |
| 358 mmap_disabled_(g_mmap_disabled_default), | 350 mmap_disabled_(false), |
| 359 mmap_enabled_(false), | 351 mmap_enabled_(false), |
| 360 total_changes_at_last_release_(0), | 352 total_changes_at_last_release_(0), |
| 361 stats_histogram_(NULL), | 353 stats_histogram_(NULL), |
| 362 commit_time_histogram_(NULL), | 354 commit_time_histogram_(NULL), |
| 363 autocommit_time_histogram_(NULL), | 355 autocommit_time_histogram_(NULL), |
| 364 update_time_histogram_(NULL), | 356 update_time_histogram_(NULL), |
| 365 query_time_histogram_(NULL), | 357 query_time_histogram_(NULL), |
| 366 clock_(new TimeSource()) { | 358 clock_(new TimeSource()) { |
| 367 } | 359 } |
| 368 | 360 |
| (...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1981 ignore_result(Execute(kNoWritableSchema)); | 1973 ignore_result(Execute(kNoWritableSchema)); |
| 1982 | 1974 |
| 1983 return ret; | 1975 return ret; |
| 1984 } | 1976 } |
| 1985 | 1977 |
| 1986 base::TimeTicks TimeSource::Now() { | 1978 base::TimeTicks TimeSource::Now() { |
| 1987 return base::TimeTicks::Now(); | 1979 return base::TimeTicks::Now(); |
| 1988 } | 1980 } |
| 1989 | 1981 |
| 1990 } // namespace sql | 1982 } // namespace sql |
| OLD | NEW |