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

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

Issue 16776004: Replace FTS in the history_service with a brute force text search. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix some typos Created 7 years, 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 while (statement.Step()) { 112 while (statement.Step()) {
113 history::VisitRow visit; 113 history::VisitRow visit;
114 FillVisitRow(statement, &visit); 114 FillVisitRow(statement, &visit);
115 visits->push_back(visit); 115 visits->push_back(visit);
116 } 116 }
117 117
118 return statement.Succeeded(); 118 return statement.Succeeded();
119 } 119 }
120 120
121 // static
122 bool VisitDatabase::FillVisitVectorWithOptions(sql::Statement& statement,
123 const QueryOptions& options,
124 VisitVector* visits) {
125 std::set<URLID> found_urls;
126
127 // Keeps track of the day that |found_urls| is holding the URLs for, in order
128 // to handle removing per-day duplicates.
129 base::Time found_urls_midnight;
130
131 while (statement.Step()) {
132 VisitRow visit;
133 FillVisitRow(statement, &visit);
134
135 if (options.duplicate_policy != QueryOptions::KEEP_ALL_DUPLICATES) {
136 if (options.duplicate_policy == QueryOptions::REMOVE_DUPLICATES_PER_DAY &&
137 found_urls_midnight != visit.visit_time.LocalMidnight()) {
138 found_urls.clear();
139 found_urls_midnight = visit.visit_time.LocalMidnight();
140 }
141 // Make sure the URL this visit corresponds to is unique.
142 if (found_urls.find(visit.url_id) != found_urls.end())
143 continue;
144 found_urls.insert(visit.url_id);
145 }
146
147 if (static_cast<int>(visits->size()) >= options.EffectiveMaxCount())
148 return true;
149 visits->push_back(visit);
150 }
151 return false;
152 }
153
121 VisitID VisitDatabase::AddVisit(VisitRow* visit, VisitSource source) { 154 VisitID VisitDatabase::AddVisit(VisitRow* visit, VisitSource source) {
122 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, 155 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
123 "INSERT INTO visits " 156 "INSERT INTO visits "
124 "(url, visit_time, from_visit, transition, segment_id, is_indexed, " 157 "(url, visit_time, from_visit, transition, segment_id, is_indexed, "
125 "visit_duration) VALUES (?,?,?,?,?,?,?)")); 158 "visit_duration) VALUES (?,?,?,?,?,?,?)"));
126 statement.BindInt64(0, visit->url_id); 159 statement.BindInt64(0, visit->url_id);
127 statement.BindInt64(1, visit->visit_time.ToInternalValue()); 160 statement.BindInt64(1, visit->visit_time.ToInternalValue());
128 statement.BindInt64(2, visit->referring_visit); 161 statement.BindInt64(2, visit->referring_visit);
129 statement.BindInt64(3, visit->transition); 162 statement.BindInt64(3, visit->transition);
130 statement.BindInt64(4, visit->segment_id); 163 statement.BindInt64(4, visit->segment_id);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 visits->clear(); 271 visits->clear();
239 272
240 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, 273 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
241 "SELECT" HISTORY_VISIT_ROW_FIELDS 274 "SELECT" HISTORY_VISIT_ROW_FIELDS
242 "FROM visits " 275 "FROM visits "
243 "WHERE url=? AND is_indexed=1")); 276 "WHERE url=? AND is_indexed=1"));
244 statement.BindInt64(0, url_id); 277 statement.BindInt64(0, url_id);
245 return FillVisitVector(statement, visits); 278 return FillVisitVector(statement, visits);
246 } 279 }
247 280
281 bool VisitDatabase::GetVisitsForURLWithOptions(URLID url_id,
282 const QueryOptions& options,
283 VisitVector* visits) {
284 visits->clear();
285
286 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
287 "SELECT" HISTORY_VISIT_ROW_FIELDS
288 "FROM visits "
289 "WHERE url=? "
290 "ORDER BY visit_time ASC"));
291 statement.BindInt64(0, url_id);
292
293 return FillVisitVectorWithOptions(statement, options, visits);
294 }
248 295
249 bool VisitDatabase::GetVisitsForTimes(const std::vector<base::Time>& times, 296 bool VisitDatabase::GetVisitsForTimes(const std::vector<base::Time>& times,
250 VisitVector* visits) { 297 VisitVector* visits) {
251 visits->clear(); 298 visits->clear();
252 299
253 for (std::vector<base::Time>::const_iterator it = times.begin(); 300 for (std::vector<base::Time>::const_iterator it = times.begin();
254 it != times.end(); ++it) { 301 it != times.end(); ++it) {
255 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, 302 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
256 "SELECT" HISTORY_VISIT_ROW_FIELDS "FROM visits " 303 "SELECT" HISTORY_VISIT_ROW_FIELDS "FROM visits "
257 "WHERE visit_time == ?")); 304 "WHERE visit_time == ?"));
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 "ORDER BY visit_time DESC, id DESC")); 373 "ORDER BY visit_time DESC, id DESC"));
327 374
328 statement.BindInt64(0, options.EffectiveBeginTime()); 375 statement.BindInt64(0, options.EffectiveBeginTime());
329 statement.BindInt64(1, options.EffectiveEndTime()); 376 statement.BindInt64(1, options.EffectiveEndTime());
330 statement.BindInt(2, content::PAGE_TRANSITION_CHAIN_END); 377 statement.BindInt(2, content::PAGE_TRANSITION_CHAIN_END);
331 statement.BindInt(3, content::PAGE_TRANSITION_CORE_MASK); 378 statement.BindInt(3, content::PAGE_TRANSITION_CORE_MASK);
332 statement.BindInt(4, content::PAGE_TRANSITION_AUTO_SUBFRAME); 379 statement.BindInt(4, content::PAGE_TRANSITION_AUTO_SUBFRAME);
333 statement.BindInt(5, content::PAGE_TRANSITION_MANUAL_SUBFRAME); 380 statement.BindInt(5, content::PAGE_TRANSITION_MANUAL_SUBFRAME);
334 statement.BindInt(6, content::PAGE_TRANSITION_KEYWORD_GENERATED); 381 statement.BindInt(6, content::PAGE_TRANSITION_KEYWORD_GENERATED);
335 382
336 std::set<URLID> found_urls; 383 return FillVisitVectorWithOptions(statement, options, visits);
337
338 // Keeps track of the day that |found_urls| is holding the URLs for, in order
339 // to handle removing per-day duplicates.
340 base::Time found_urls_midnight;
341
342 while (statement.Step()) {
343 VisitRow visit;
344 FillVisitRow(statement, &visit);
345
346 if (options.duplicate_policy != QueryOptions::KEEP_ALL_DUPLICATES) {
347 if (options.duplicate_policy == QueryOptions::REMOVE_DUPLICATES_PER_DAY &&
348 found_urls_midnight != visit.visit_time.LocalMidnight()) {
349 found_urls.clear();
350 found_urls_midnight = visit.visit_time.LocalMidnight();
351 }
352 // Make sure the URL this visit corresponds to is unique.
353 if (found_urls.find(visit.url_id) != found_urls.end())
354 continue;
355 found_urls.insert(visit.url_id);
356 }
357
358 if (static_cast<int>(visits->size()) >= options.EffectiveMaxCount())
359 return true;
360 visits->push_back(visit);
361 }
362 return false;
363 } 384 }
364 385
365 void VisitDatabase::GetDirectVisitsDuringTimes(const VisitFilter& time_filter, 386 void VisitDatabase::GetDirectVisitsDuringTimes(const VisitFilter& time_filter,
366 int max_results, 387 int max_results,
367 VisitVector* visits) { 388 VisitVector* visits) {
368 visits->clear(); 389 visits->clear();
369 if (max_results) 390 if (max_results)
370 visits->reserve(max_results); 391 visits->reserve(max_results);
371 for (VisitFilter::TimeVector::const_iterator it = time_filter.times().begin(); 392 for (VisitFilter::TimeVector::const_iterator it = time_filter.times().begin();
372 it != time_filter.times().end(); ++it) { 393 it != time_filter.times().end(); ++it) {
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 while (statement.Step()) { 628 while (statement.Step()) {
608 BriefVisitInfo info; 629 BriefVisitInfo info;
609 info.url_id = statement.ColumnInt64(0); 630 info.url_id = statement.ColumnInt64(0);
610 info.time = base::Time::FromInternalValue(statement.ColumnInt64(1)); 631 info.time = base::Time::FromInternalValue(statement.ColumnInt64(1));
611 info.transition = content::PageTransitionFromInt(statement.ColumnInt(2)); 632 info.transition = content::PageTransitionFromInt(statement.ColumnInt(2));
612 result_vector->push_back(info); 633 result_vector->push_back(info);
613 } 634 }
614 } 635 }
615 636
616 } // namespace history 637 } // namespace history
OLDNEW
« chrome/browser/history/url_database.cc ('K') | « chrome/browser/history/visit_database.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698