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

Side by Side Diff: chrome/browser/history/visit_database.cc

Issue 206041: Some history backend fixes for database corruption. (Closed)
Patch Set: Update to use a set to track bigger referer loops. Created 11 years, 3 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/history/history_backend.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <algorithm> 5 #include <algorithm>
6 #include <limits> 6 #include <limits>
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "chrome/browser/history/visit_database.h" 10 #include "chrome/browser/history/visit_database.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 "SELECT" HISTORY_VISIT_ROW_FIELDS "FROM visits WHERE id=?"); 152 "SELECT" HISTORY_VISIT_ROW_FIELDS "FROM visits WHERE id=?");
153 if (!statement.is_valid()) 153 if (!statement.is_valid())
154 return false; 154 return false;
155 155
156 statement->bind_int64(0, visit_id); 156 statement->bind_int64(0, visit_id);
157 AddEventToVisitLog(VisitLog::SELECT_VISIT); 157 AddEventToVisitLog(VisitLog::SELECT_VISIT);
158 if (statement->step() != SQLITE_ROW) 158 if (statement->step() != SQLITE_ROW)
159 return false; 159 return false;
160 160
161 FillVisitRow(*statement, out_visit); 161 FillVisitRow(*statement, out_visit);
162
163 // We got a different visit than we asked for, something is wrong.
164 DCHECK_EQ(visit_id, out_visit->visit_id);
165 if (visit_id != out_visit->visit_id)
166 return false;
167
162 return true; 168 return true;
163 } 169 }
164 170
165 bool VisitDatabase::UpdateVisitRow(const VisitRow& visit) { 171 bool VisitDatabase::UpdateVisitRow(const VisitRow& visit) {
172 // Don't store inconsistent data to the database.
173 DCHECK_NE(visit.visit_id, visit.referring_visit);
174 if (visit.visit_id == visit.referring_visit)
175 return false;
176
166 SQLITE_UNIQUE_STATEMENT(statement, GetStatementCache(), 177 SQLITE_UNIQUE_STATEMENT(statement, GetStatementCache(),
167 "UPDATE visits SET " 178 "UPDATE visits SET "
168 "url=?,visit_time=?,from_visit=?,transition=?,segment_id=?,is_indexed=? " 179 "url=?,visit_time=?,from_visit=?,transition=?,segment_id=?,is_indexed=? "
169 "WHERE id=?"); 180 "WHERE id=?");
170 if (!statement.is_valid()) 181 if (!statement.is_valid())
171 return false; 182 return false;
172 183
173 statement->bind_int64(0, visit.url_id); 184 statement->bind_int64(0, visit.url_id);
174 statement->bind_int64(1, visit.visit_time.ToInternalValue()); 185 statement->bind_int64(1, visit.visit_time.ToInternalValue());
175 statement->bind_int64(2, visit.referring_visit); 186 statement->bind_int64(2, visit.referring_visit);
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 if (!statement.is_valid() || statement->step() != SQLITE_ROW || 457 if (!statement.is_valid() || statement->step() != SQLITE_ROW ||
447 statement->column_int64(0) == 0) { 458 statement->column_int64(0) == 0) {
448 *first_visit = Time::Now(); 459 *first_visit = Time::Now();
449 return false; 460 return false;
450 } 461 }
451 *first_visit = Time::FromInternalValue(statement->column_int64(0)); 462 *first_visit = Time::FromInternalValue(statement->column_int64(0));
452 return true; 463 return true;
453 } 464 }
454 465
455 } // namespace history 466 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/history_backend.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698