| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |