Index: trunk/src/chrome/browser/history/visit_database.cc |
=================================================================== |
--- trunk/src/chrome/browser/history/visit_database.cc (revision 212472) |
+++ trunk/src/chrome/browser/history/visit_database.cc (working copy) |
@@ -34,10 +34,19 @@ |
"from_visit INTEGER," |
"transition INTEGER DEFAULT 0 NOT NULL," |
"segment_id INTEGER," |
- // Some old DBs may have an "is_indexed" field here, but this is no |
- // longer used and should NOT be read or written from any longer. |
+ // True when we have indexed data for this visit. |
+ "is_indexed BOOLEAN," |
"visit_duration INTEGER DEFAULT 0 NOT NULL)")) |
return false; |
+ } else if (!GetDB().DoesColumnExist("visits", "is_indexed")) { |
+ // Old versions don't have the is_indexed column, we can just add that and |
+ // not worry about different database revisions, since old ones will |
+ // continue to work. |
+ // |
+ // TODO(brettw) this should be removed once we think everybody has been |
+ // updated (added early Mar 2008). |
+ if (!GetDB().Execute("ALTER TABLE visits ADD COLUMN is_indexed BOOLEAN")) |
+ return false; |
} |
// Visit source table contains the source information for all the visits. To |
@@ -89,8 +98,9 @@ |
visit->referring_visit = statement.ColumnInt64(3); |
visit->transition = content::PageTransitionFromInt(statement.ColumnInt(4)); |
visit->segment_id = statement.ColumnInt64(5); |
+ visit->is_indexed = !!statement.ColumnInt(6); |
visit->visit_duration = |
- base::TimeDelta::FromInternalValue(statement.ColumnInt64(6)); |
+ base::TimeDelta::FromInternalValue(statement.ColumnInt64(7)); |
} |
// static |
@@ -144,14 +154,15 @@ |
VisitID VisitDatabase::AddVisit(VisitRow* visit, VisitSource source) { |
sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
"INSERT INTO visits " |
- "(url, visit_time, from_visit, transition, segment_id, " |
- "visit_duration) VALUES (?,?,?,?,?,?)")); |
+ "(url, visit_time, from_visit, transition, segment_id, is_indexed, " |
+ "visit_duration) VALUES (?,?,?,?,?,?,?)")); |
statement.BindInt64(0, visit->url_id); |
statement.BindInt64(1, visit->visit_time.ToInternalValue()); |
statement.BindInt64(2, visit->referring_visit); |
statement.BindInt64(3, visit->transition); |
statement.BindInt64(4, visit->segment_id); |
- statement.BindInt64(5, visit->visit_duration.ToInternalValue()); |
+ statement.BindInt64(5, visit->is_indexed); |
+ statement.BindInt64(6, visit->visit_duration.ToInternalValue()); |
if (!statement.Run()) { |
VLOG(0) << "Failed to execute visit insert statement: " |
@@ -230,15 +241,16 @@ |
sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
"UPDATE visits SET " |
- "url=?,visit_time=?,from_visit=?,transition=?,segment_id=?," |
+ "url=?,visit_time=?,from_visit=?,transition=?,segment_id=?,is_indexed=?," |
"visit_duration=? WHERE id=?")); |
statement.BindInt64(0, visit.url_id); |
statement.BindInt64(1, visit.visit_time.ToInternalValue()); |
statement.BindInt64(2, visit.referring_visit); |
statement.BindInt64(3, visit.transition); |
statement.BindInt64(4, visit.segment_id); |
- statement.BindInt64(5, visit.visit_duration.ToInternalValue()); |
- statement.BindInt64(6, visit.visit_id); |
+ statement.BindInt64(5, visit.is_indexed); |
+ statement.BindInt64(6, visit.visit_duration.ToInternalValue()); |
+ statement.BindInt64(7, visit.visit_id); |
return statement.Run(); |
} |
@@ -255,6 +267,17 @@ |
return FillVisitVector(statement, visits); |
} |
+bool VisitDatabase::GetIndexedVisitsForURL(URLID url_id, VisitVector* visits) { |
+ visits->clear(); |
+ |
+ sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT" HISTORY_VISIT_ROW_FIELDS |
+ "FROM visits " |
+ "WHERE url=? AND is_indexed=1")); |
+ statement.BindInt64(0, url_id); |
+ return FillVisitVector(statement, visits); |
+} |
+ |
bool VisitDatabase::GetVisitsForURLWithOptions(URLID url_id, |
const QueryOptions& options, |
VisitVector* visits) { |