Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(938)

Unified Diff: chrome/browser/history/history_database.cc

Issue 173296: Convert internal time format to Windows 1601 epoch on Linux & Mac.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/history/history_database.cc
===================================================================
--- chrome/browser/history/history_database.cc (revision 24094)
+++ chrome/browser/history/history_database.cc (working copy)
@@ -16,8 +16,10 @@
namespace {
-// Current version number.
-static const int kCurrentVersionNumber = 16;
+// Current version number. We write databases at the "current" version number,
+// but any previous version that can read the "compatible" one can make do with
+// or database without *too* many bad effects.
+static const int kCurrentVersionNumber = 17;
static const int kCompatibleVersionNumber = 16;
static const char kEarlyExpirationThresholdKey[] = "early_expiration_threshold";
@@ -25,7 +27,8 @@
HistoryDatabase::HistoryDatabase()
: transaction_nesting_(0),
- db_(NULL) {
+ db_(NULL),
+ needs_version_17_migration_(false) {
}
HistoryDatabase::~HistoryDatabase() {
@@ -235,6 +238,20 @@
std::min(cur_version, kCompatibleVersionNumber));
}
+ if (cur_version == 16) {
+#if !defined(OS_WIN)
+ // In this version we bring the time format on Mac & Linux in sync with the
+ // Windows version so that profiles can be moved between computers.
+ MigrateTimeEpoch();
+#endif
+ // On all platforms we bump the version number, so on Windows this
+ // migration is a NOP. We keep the compatible version at 16 since things
+ // will basically still work, just history will be in the future if an
+ // old version reads it.
+ ++cur_version;
+ meta_table_.SetVersionNumber(cur_version);
+ }
+
// When the version is too old, we just try to continue anyway, there should
// not be a released product that makes a database too old for us to handle.
LOG_IF(WARNING, cur_version < kCurrentVersionNumber) <<
@@ -243,4 +260,32 @@
return INIT_OK;
}
+#if !defined(OS_WIN)
+void HistoryDatabase::MigrateTimeEpoch() {
+ // Update all the times in the URLs and visits table in the main database.
+ // For visits, clear the indexed flag since we'll delete the FTS databases in
+ // the next step.
+ sqlite3_exec(GetDB(),
+ "UPDATE urls "
+ "SET last_visit_time = last_visit_time + 11644473600000000 "
+ "WHERE id IN (SELECT id FROM urls WHERE last_visit_time > 0);",
+ NULL, NULL, NULL);
+ sqlite3_exec(GetDB(),
+ "UPDATE visits "
+ "SET visit_time = visit_time + 11644473600000000, is_indexed = 0 "
+ "WHERE id IN (SELECT id FROM visits WHERE visit_time > 0);",
+ NULL, NULL, NULL);
+ sqlite3_exec(GetDB(),
+ "UPDATE segment_usage "
+ "SET time_slot = time_slot + 11644473600000000 "
+ "WHERE id IN (SELECT id FROM segment_usage WHERE time_slot > 0);",
+ NULL, NULL, NULL);
+
+ // Erase all the full text index files. These will take a while to update and
+ // are less important, so we just blow them away. Same with the archived
+ // database.
+ needs_version_17_migration_ = true;
+}
+#endif
+
} // namespace history
« no previous file with comments | « chrome/browser/history/history_database.h ('k') | chrome/browser/password_manager/password_store_mac_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698