| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/history/core/browser/url_database.h" | 5 #include "components/history/core/browser/url_database.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 // Convenience to fill a URLRow. Must be in sync with the fields in | 61 // Convenience to fill a URLRow. Must be in sync with the fields in |
| 62 // kURLRowFields. | 62 // kURLRowFields. |
| 63 void URLDatabase::FillURLRow(sql::Statement& s, URLRow* i) { | 63 void URLDatabase::FillURLRow(sql::Statement& s, URLRow* i) { |
| 64 DCHECK(i); | 64 DCHECK(i); |
| 65 i->id_ = s.ColumnInt64(0); | 65 i->id_ = s.ColumnInt64(0); |
| 66 i->url_ = GURL(s.ColumnString(1)); | 66 i->url_ = GURL(s.ColumnString(1)); |
| 67 i->title_ = s.ColumnString16(2); | 67 i->title_ = s.ColumnString16(2); |
| 68 i->visit_count_ = s.ColumnInt(3); | 68 i->visit_count_ = s.ColumnInt(3); |
| 69 i->typed_count_ = s.ColumnInt(4); | 69 i->typed_count_ = s.ColumnInt(4); |
| 70 i->last_visit_ = base::Time::FromInternalValue(s.ColumnInt64(5)); | 70 i->last_visit_ = base::Time::FromInternalValue(s.ColumnInt64(5)); |
| 71 i->hidden_ = s.ColumnInt(6) != 0; | 71 i->context_ = static_cast<history::HistoryContext>(s.ColumnInt(6)); |
| 72 i->hidden_ = s.ColumnInt(7) != 0; |
| 72 } | 73 } |
| 73 | 74 |
| 74 bool URLDatabase::GetURLRow(URLID url_id, URLRow* info) { | 75 bool URLDatabase::GetURLRow(URLID url_id, URLRow* info) { |
| 75 // TODO(brettw) We need check for empty URLs to handle the case where | 76 // TODO(brettw) We need check for empty URLs to handle the case where |
| 76 // there are old URLs in the database that are empty that got in before | 77 // there are old URLs in the database that are empty that got in before |
| 77 // we added any checks. We should eventually be able to remove it | 78 // we added any checks. We should eventually be able to remove it |
| 78 // when all inputs are using GURL (which prohibit empty input). | 79 // when all inputs are using GURL (which prohibit empty input). |
| 79 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, | 80 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
| 80 "SELECT" HISTORY_URL_ROW_FIELDS "FROM urls WHERE id=?")); | 81 "SELECT" HISTORY_URL_ROW_FIELDS "FROM urls WHERE id=?")); |
| 81 statement.BindInt64(0, url_id); | 82 statement.BindInt64(0, url_id); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 108 if (!statement.Step()) | 109 if (!statement.Step()) |
| 109 return 0; // no data | 110 return 0; // no data |
| 110 | 111 |
| 111 if (info) | 112 if (info) |
| 112 FillURLRow(statement, info); | 113 FillURLRow(statement, info); |
| 113 return statement.ColumnInt64(0); | 114 return statement.ColumnInt64(0); |
| 114 } | 115 } |
| 115 | 116 |
| 116 bool URLDatabase::UpdateURLRow(URLID url_id, const URLRow& info) { | 117 bool URLDatabase::UpdateURLRow(URLID url_id, const URLRow& info) { |
| 117 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, | 118 sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE, |
| 118 "UPDATE urls SET title=?,visit_count=?,typed_count=?,last_visit_time=?," | 119 "UPDATE urls SET title=?,visit_count=?,typed_count=?,last_visit_time=?,con
text=?," |
| 119 "hidden=?" | 120 "hidden=?" |
| 120 "WHERE id=?")); | 121 "WHERE id=?")); |
| 121 statement.BindString16(0, info.title()); | 122 statement.BindString16(0, info.title()); |
| 122 statement.BindInt(1, info.visit_count()); | 123 statement.BindInt(1, info.visit_count()); |
| 123 statement.BindInt(2, info.typed_count()); | 124 statement.BindInt(2, info.typed_count()); |
| 124 statement.BindInt64(3, info.last_visit().ToInternalValue()); | 125 statement.BindInt64(3, info.last_visit().ToInternalValue()); |
| 125 statement.BindInt(4, info.hidden() ? 1 : 0); | 126 statement.BindInt(4, info.context()); |
| 126 statement.BindInt64(5, url_id); | 127 statement.BindInt(5, info.hidden() ? 1 : 0); |
| 128 statement.BindInt64(6, url_id); |
| 127 | 129 |
| 128 return statement.Run() && GetDB().GetLastChangeCount() > 0; | 130 return statement.Run() && GetDB().GetLastChangeCount() > 0; |
| 129 } | 131 } |
| 130 | 132 |
| 131 URLID URLDatabase::AddURLInternal(const URLRow& info, bool is_temporary) { | 133 URLID URLDatabase::AddURLInternal(const URLRow& info, bool is_temporary) { |
| 132 // This function is used to insert into two different tables, so we have to | 134 // This function is used to insert into two different tables, so we have to |
| 133 // do some shuffling. Unfortinately, we can't use the macro | 135 // do some shuffling. Unfortinately, we can't use the macro |
| 134 // HISTORY_URL_ROW_FIELDS because that specifies the table name which is | 136 // HISTORY_URL_ROW_FIELDS because that specifies the table name which is |
| 135 // invalid in the insert syntax. | 137 // invalid in the insert syntax. |
| 136 #define ADDURL_COMMON_SUFFIX \ | 138 #define ADDURL_COMMON_SUFFIX \ |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 std::string sql; | 598 std::string sql; |
| 597 sql.append("CREATE TABLE "); | 599 sql.append("CREATE TABLE "); |
| 598 sql.append(name); | 600 sql.append(name); |
| 599 sql.append("(" | 601 sql.append("(" |
| 600 "id INTEGER PRIMARY KEY," | 602 "id INTEGER PRIMARY KEY," |
| 601 "url LONGVARCHAR," | 603 "url LONGVARCHAR," |
| 602 "title LONGVARCHAR," | 604 "title LONGVARCHAR," |
| 603 "visit_count INTEGER DEFAULT 0 NOT NULL," | 605 "visit_count INTEGER DEFAULT 0 NOT NULL," |
| 604 "typed_count INTEGER DEFAULT 0 NOT NULL," | 606 "typed_count INTEGER DEFAULT 0 NOT NULL," |
| 605 "last_visit_time INTEGER NOT NULL," | 607 "last_visit_time INTEGER NOT NULL," |
| 608 "context INTEGER DEFAULT 0 NOT NULL," |
| 606 "hidden INTEGER DEFAULT 0 NOT NULL," | 609 "hidden INTEGER DEFAULT 0 NOT NULL," |
| 607 "favicon_id INTEGER DEFAULT 0 NOT NULL)"); // favicon_id is not used now. | 610 "favicon_id INTEGER DEFAULT 0 NOT NULL)"); // favicon_id is not used now. |
| 608 | 611 |
| 609 return GetDB().Execute(sql.c_str()); | 612 return GetDB().Execute(sql.c_str()); |
| 610 } | 613 } |
| 611 | 614 |
| 612 bool URLDatabase::CreateMainURLIndex() { | 615 bool URLDatabase::CreateMainURLIndex() { |
| 613 return GetDB().Execute( | 616 return GetDB().Execute( |
| 614 "CREATE INDEX IF NOT EXISTS urls_url_index ON urls (url)"); | 617 "CREATE INDEX IF NOT EXISTS urls_url_index ON urls (url)"); |
| 615 } | 618 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 626 bool RowQualifiesAsSignificant(const URLRow& row, | 629 bool RowQualifiesAsSignificant(const URLRow& row, |
| 627 const base::Time& threshold) { | 630 const base::Time& threshold) { |
| 628 const base::Time& real_threshold = | 631 const base::Time& real_threshold = |
| 629 threshold.is_null() ? AutocompleteAgeThreshold() : threshold; | 632 threshold.is_null() ? AutocompleteAgeThreshold() : threshold; |
| 630 return (row.typed_count() >= kLowQualityMatchTypedLimit) || | 633 return (row.typed_count() >= kLowQualityMatchTypedLimit) || |
| 631 (row.visit_count() >= kLowQualityMatchVisitLimit) || | 634 (row.visit_count() >= kLowQualityMatchVisitLimit) || |
| 632 (row.last_visit() >= real_threshold); | 635 (row.last_visit() >= real_threshold); |
| 633 } | 636 } |
| 634 | 637 |
| 635 } // namespace history | 638 } // namespace history |
| OLD | NEW |