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 #ifndef SQL_CONNECTION_H_ | 5 #ifndef SQL_CONNECTION_H_ |
6 #define SQL_CONNECTION_H_ | 6 #define SQL_CONNECTION_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 EVENT_CHANGES_AUTOCOMMIT, | 197 EVENT_CHANGES_AUTOCOMMIT, |
198 | 198 |
199 // Number of rows changed by statements in transactions. | 199 // Number of rows changed by statements in transactions. |
200 EVENT_CHANGES, | 200 EVENT_CHANGES, |
201 | 201 |
202 // Count actual SQLite transaction statements (not including nesting). | 202 // Count actual SQLite transaction statements (not including nesting). |
203 EVENT_BEGIN, | 203 EVENT_BEGIN, |
204 EVENT_COMMIT, | 204 EVENT_COMMIT, |
205 EVENT_ROLLBACK, | 205 EVENT_ROLLBACK, |
206 | 206 |
| 207 // Track success and failure in GetAppropriateMmapSize(). |
| 208 // GetAppropriateMmapSize() should record at most one of these per run. The |
| 209 // case of mapping everything is not recorded. |
| 210 EVENT_MMAP_META_MISSING, // No meta table present. |
| 211 EVENT_MMAP_META_FAILURE_READ, // Failed reading meta table. |
| 212 EVENT_MMAP_META_FAILURE_UPDATE, // Failed updating meta table. |
| 213 EVENT_MMAP_VFS_FAILURE, // Failed to access VFS. |
| 214 EVENT_MMAP_FAILED, // Failure from past run. |
| 215 EVENT_MMAP_FAILED_NEW, // Read error in this run. |
| 216 EVENT_MMAP_SUCCESS_NEW, // Read to EOF in this run. |
| 217 EVENT_MMAP_SUCCESS_PARTIAL, // Read but did not reach EOF. |
| 218 EVENT_MMAP_SUCCESS_NO_PROGRESS, // Read quota exhausted. |
| 219 |
207 // Leave this at the end. | 220 // Leave this at the end. |
208 // TODO(shess): |EVENT_MAX| causes compile fail on Windows. | 221 // TODO(shess): |EVENT_MAX| causes compile fail on Windows. |
209 EVENT_MAX_VALUE | 222 EVENT_MAX_VALUE |
210 }; | 223 }; |
211 void RecordEvent(Events event, size_t count); | 224 void RecordEvent(Events event, size_t count); |
212 void RecordOneEvent(Events event) { | 225 void RecordOneEvent(Events event) { |
213 RecordEvent(event, 1); | 226 RecordEvent(event, 1); |
214 } | 227 } |
215 | 228 |
216 // Run "PRAGMA integrity_check" and post each line of | 229 // Run "PRAGMA integrity_check" and post each line of |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 // database is razed or recovered, or if the diagnostic code adds new | 695 // database is razed or recovered, or if the diagnostic code adds new |
683 // capabilities. | 696 // capabilities. |
684 bool RegisterIntentToUpload() const; | 697 bool RegisterIntentToUpload() const; |
685 | 698 |
686 // Helper to collect diagnostic info for a corrupt database. | 699 // Helper to collect diagnostic info for a corrupt database. |
687 std::string CollectCorruptionInfo(); | 700 std::string CollectCorruptionInfo(); |
688 | 701 |
689 // Helper to collect diagnostic info for errors. | 702 // Helper to collect diagnostic info for errors. |
690 std::string CollectErrorInfo(int error, Statement* stmt) const; | 703 std::string CollectErrorInfo(int error, Statement* stmt) const; |
691 | 704 |
| 705 // Calculates a value appropriate to pass to "PRAGMA mmap_size = ". So errors |
| 706 // can make it unsafe to map a file, so the file is read using regular I/O, |
| 707 // with any errors causing 0 (don't map anything) to be returned. If the |
| 708 // entire file is read without error, a large value is returned which will |
| 709 // allow the entire file to be mapped in most cases. |
| 710 // |
| 711 // Results are recorded in the database's meta table for future reference, so |
| 712 // the file should only be read through once. |
| 713 size_t GetAppropriateMmapSize(); |
| 714 |
692 // The actual sqlite database. Will be NULL before Init has been called or if | 715 // The actual sqlite database. Will be NULL before Init has been called or if |
693 // Init resulted in an error. | 716 // Init resulted in an error. |
694 sqlite3* db_; | 717 sqlite3* db_; |
695 | 718 |
696 // Parameters we'll configure in sqlite before doing anything else. Zero means | 719 // Parameters we'll configure in sqlite before doing anything else. Zero means |
697 // use the default value. | 720 // use the default value. |
698 int page_size_; | 721 int page_size_; |
699 int cache_size_; | 722 int cache_size_; |
700 bool exclusive_locking_; | 723 bool exclusive_locking_; |
701 bool restrict_to_user_; | 724 bool restrict_to_user_; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 // Source for timing information, provided to allow tests to inject time | 788 // Source for timing information, provided to allow tests to inject time |
766 // changes. | 789 // changes. |
767 scoped_ptr<TimeSource> clock_; | 790 scoped_ptr<TimeSource> clock_; |
768 | 791 |
769 DISALLOW_COPY_AND_ASSIGN(Connection); | 792 DISALLOW_COPY_AND_ASSIGN(Connection); |
770 }; | 793 }; |
771 | 794 |
772 } // namespace sql | 795 } // namespace sql |
773 | 796 |
774 #endif // SQL_CONNECTION_H_ | 797 #endif // SQL_CONNECTION_H_ |
OLD | NEW |