Index: chrome/browser/history/url_database.cc |
diff --git a/chrome/browser/history/url_database.cc b/chrome/browser/history/url_database.cc |
index 0856d25ef4f7a508a0af2939879ed4a9f810bc85..9ac4e2272b8e2d0a77e5e88a2c9f59ae03547669 100644 |
--- a/chrome/browser/history/url_database.cc |
+++ b/chrome/browser/history/url_database.cc |
@@ -358,6 +358,32 @@ bool URLDatabase::FindShortestURLFromBase(const std::string& base, |
return true; |
} |
+bool URLDatabase::GetTextMatches(const string16& query, |
+ URLRows* results) { |
+ ScopedVector<QueryNode> query_nodes; |
+ query_parser_.ParseQueryNodes(query, &query_nodes.get()); |
+ |
+ results->clear(); |
+ sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT" HISTORY_URL_ROW_FIELDS "FROM urls WHERE hidden = 0")); |
+ |
+ while (statement.Step()) { |
+ std::vector<QueryWord> query_words; |
+ string16 url = base::i18n::ToLower(statement.ColumnString16(1)); |
+ query_parser_.ExtractQueryWords(url, &query_words); |
+ string16 title = base::i18n::ToLower(statement.ColumnString16(2)); |
+ query_parser_.ExtractQueryWords(title, &query_words); |
+ |
+ if (query_parser_.DoesQueryMatch(query_words, query_nodes.get())) { |
+ history::URLResult info; |
+ FillURLRow(statement, &info); |
+ if (info.url().is_valid()) |
+ results->push_back(info); |
+ } |
+ } |
+ return !results->empty(); |
+} |
+ |
bool URLDatabase::InitKeywordSearchTermsTable() { |
has_keyword_search_terms_ = true; |
if (!GetDB().DoesTableExist("keyword_search_terms")) { |