| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/history/visit_database.h" | 5 #include "chrome/browser/history/visit_database.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 // save space, we do not record those user browsed visits which would be the | 55 // save space, we do not record those user browsed visits which would be the |
| 56 // majority in this table. Only other sources are recorded. | 56 // majority in this table. Only other sources are recorded. |
| 57 // Due to the tight relationship between visit_source and visits table, they | 57 // Due to the tight relationship between visit_source and visits table, they |
| 58 // should be created and dropped at the same time. | 58 // should be created and dropped at the same time. |
| 59 if (!GetDB().DoesTableExist("visit_source")) { | 59 if (!GetDB().DoesTableExist("visit_source")) { |
| 60 if (!GetDB().Execute("CREATE TABLE visit_source(" | 60 if (!GetDB().Execute("CREATE TABLE visit_source(" |
| 61 "id INTEGER PRIMARY KEY,source INTEGER NOT NULL)")) | 61 "id INTEGER PRIMARY KEY,source INTEGER NOT NULL)")) |
| 62 return false; | 62 return false; |
| 63 } | 63 } |
| 64 | 64 |
| 65 // Index over url so we can quickly find visits for a page. This will just | 65 // Index over url so we can quickly find visits for a page. |
| 66 // fail if it already exists and we'll ignore it. | 66 if (!GetDB().Execute( |
| 67 GetDB().Execute("CREATE INDEX visits_url_index ON visits (url)"); | 67 "CREATE INDEX IF NOT EXISTS visits_url_index ON visits (url)")) |
| 68 return false; |
| 68 | 69 |
| 69 // Create an index over from visits so that we can efficiently find | 70 // Create an index over from visits so that we can efficiently find |
| 70 // referrers and redirects. Ignore failures because it likely already exists. | 71 // referrers and redirects. |
| 71 GetDB().Execute("CREATE INDEX visits_from_index ON visits (from_visit)"); | 72 if (!GetDB().Execute( |
| 73 "CREATE INDEX IF NOT EXISTS visits_from_index ON " |
| 74 "visits (from_visit)")) |
| 75 return false; |
| 72 | 76 |
| 73 // Create an index over time so that we can efficiently find the visits in a | 77 // Create an index over time so that we can efficiently find the visits in a |
| 74 // given time range (most history views are time-based). Ignore failures | 78 // given time range (most history views are time-based). |
| 75 // because it likely already exists. | 79 if (!GetDB().Execute( |
| 76 GetDB().Execute("CREATE INDEX visits_time_index ON visits (visit_time)"); | 80 "CREATE INDEX IF NOT EXISTS visits_time_index ON " |
| 81 "visits (visit_time)")) |
| 82 return false; |
| 77 | 83 |
| 78 return true; | 84 return true; |
| 79 } | 85 } |
| 80 | 86 |
| 81 bool VisitDatabase::DropVisitTable() { | 87 bool VisitDatabase::DropVisitTable() { |
| 82 GetDB().Execute("DROP TABLE visit_source"); | |
| 83 // This will also drop the indices over the table. | 88 // This will also drop the indices over the table. |
| 84 return GetDB().Execute("DROP TABLE visits"); | 89 return |
| 90 GetDB().Execute("DROP TABLE IF EXISTS visit_source") && |
| 91 GetDB().Execute("DROP TABLE visits"); |
| 85 } | 92 } |
| 86 | 93 |
| 87 // Must be in sync with HISTORY_VISIT_ROW_FIELDS. | 94 // Must be in sync with HISTORY_VISIT_ROW_FIELDS. |
| 88 // static | 95 // static |
| 89 void VisitDatabase::FillVisitRow(sql::Statement& statement, VisitRow* visit) { | 96 void VisitDatabase::FillVisitRow(sql::Statement& statement, VisitRow* visit) { |
| 90 visit->visit_id = statement.ColumnInt64(0); | 97 visit->visit_id = statement.ColumnInt64(0); |
| 91 visit->url_id = statement.ColumnInt64(1); | 98 visit->url_id = statement.ColumnInt64(1); |
| 92 visit->visit_time = base::Time::FromInternalValue(statement.ColumnInt64(2)); | 99 visit->visit_time = base::Time::FromInternalValue(statement.ColumnInt64(2)); |
| 93 visit->referring_visit = statement.ColumnInt64(3); | 100 visit->referring_visit = statement.ColumnInt64(3); |
| 94 visit->transition = content::PageTransitionFromInt(statement.ColumnInt(4)); | 101 visit->transition = content::PageTransitionFromInt(statement.ColumnInt(4)); |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 // Get the source entries out of the query result. | 545 // Get the source entries out of the query result. |
| 539 while (statement.Step()) { | 546 while (statement.Step()) { |
| 540 std::pair<VisitID, VisitSource> source_entry(statement.ColumnInt64(0), | 547 std::pair<VisitID, VisitSource> source_entry(statement.ColumnInt64(0), |
| 541 static_cast<VisitSource>(statement.ColumnInt(1))); | 548 static_cast<VisitSource>(statement.ColumnInt(1))); |
| 542 sources->insert(source_entry); | 549 sources->insert(source_entry); |
| 543 } | 550 } |
| 544 } | 551 } |
| 545 } | 552 } |
| 546 | 553 |
| 547 } // namespace history | 554 } // namespace history |
| OLD | NEW |