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

Side by Side Diff: components/history/core/browser/url_database.cc

Issue 2721713002: [sync] Add typed url sync metadata to the history db (Closed)
Patch Set: update for comments Created 3 years, 9 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 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 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 sql::Statement statement(GetDB().GetCachedStatement( 561 sql::Statement statement(GetDB().GetCachedStatement(
562 SQL_FROM_HERE, "DELETE FROM keyword_search_terms WHERE url_id=?")); 562 SQL_FROM_HERE, "DELETE FROM keyword_search_terms WHERE url_id=?"));
563 statement.BindInt64(0, url_id); 563 statement.BindInt64(0, url_id);
564 return statement.Run(); 564 return statement.Run();
565 } 565 }
566 566
567 bool URLDatabase::DropStarredIDFromURLs() { 567 bool URLDatabase::DropStarredIDFromURLs() {
568 if (!GetDB().DoesColumnExist("urls", "starred_id")) 568 if (!GetDB().DoesColumnExist("urls", "starred_id"))
569 return true; // urls is already updated, no need to continue. 569 return true; // urls is already updated, no need to continue.
570 570
571 // Create a temporary table to contain the new URLs table. 571 return RecreateURLTableWithAllContents();
572 if (!CreateTemporaryURLTable()) {
573 NOTREACHED();
574 return false;
575 }
576
577 // Copy the contents.
578 if (!GetDB().Execute(
579 "INSERT INTO temp_urls (id, url, title, visit_count, typed_count, "
580 "last_visit_time, hidden, favicon_id) "
581 "SELECT id, url, title, visit_count, typed_count, last_visit_time, "
582 "hidden, favicon_id FROM urls")) {
583 NOTREACHED() << GetDB().GetErrorMessage();
584 return false;
585 }
586
587 // Rename/commit the tmp table.
588 CommitTemporaryURLTable();
589
590 return true;
591 } 572 }
592 573
593 bool URLDatabase::CreateURLTable(bool is_temporary) { 574 bool URLDatabase::CreateURLTable(bool is_temporary) {
594 const char* name = is_temporary ? "temp_urls" : "urls"; 575 const char* name = is_temporary ? "temp_urls" : "urls";
595 if (GetDB().DoesTableExist(name)) 576 if (GetDB().DoesTableExist(name))
596 return true; 577 return true;
597 578
598 // Note: revise implementation for InsertOrUpdateURLRowByID() if you add any 579 // Note: revise implementation for InsertOrUpdateURLRowByID() if you add any
599 // new constraints to the schema. 580 // new constraints to the schema.
600 std::string sql; 581 std::string sql;
601 sql.append("CREATE TABLE "); 582 sql.append("CREATE TABLE ");
602 sql.append(name); 583 sql.append(name);
603 sql.append("(" 584 sql.append(
604 "id INTEGER PRIMARY KEY," 585 "("
586 "id INTEGER PRIMARY KEY AUTOINCREMENT,"
587 // Using AUTOINCREMENT is for sync propose. Sync uses this |id| as an
588 // unique key to identify the URLs. If here did not use AUTOINCREMENT, and
589 // Sync was not working somehow, a ROWID could be deleted and re-used
590 // during this period. Once Sync come back, Sync would use ROWIDs and
591 // timestamps to see if there are any updates need to be synced. And sync
592 // will only see the new URL, but missed the deleted URL.
605 "url LONGVARCHAR," 593 "url LONGVARCHAR,"
606 "title LONGVARCHAR," 594 "title LONGVARCHAR,"
607 "visit_count INTEGER DEFAULT 0 NOT NULL," 595 "visit_count INTEGER DEFAULT 0 NOT NULL,"
608 "typed_count INTEGER DEFAULT 0 NOT NULL," 596 "typed_count INTEGER DEFAULT 0 NOT NULL,"
609 "last_visit_time INTEGER NOT NULL," 597 "last_visit_time INTEGER NOT NULL,"
610 "hidden INTEGER DEFAULT 0 NOT NULL," 598 "hidden INTEGER DEFAULT 0 NOT NULL)");
611 "favicon_id INTEGER DEFAULT 0 NOT NULL)"); // favicon_id is not used now.
612 599
613 return GetDB().Execute(sql.c_str()); 600 return GetDB().Execute(sql.c_str());
614 } 601 }
615 602
616 bool URLDatabase::CreateMainURLIndex() { 603 bool URLDatabase::CreateMainURLIndex() {
617 return GetDB().Execute( 604 return GetDB().Execute(
618 "CREATE INDEX IF NOT EXISTS urls_url_index ON urls (url)"); 605 "CREATE INDEX IF NOT EXISTS urls_url_index ON urls (url)");
619 } 606 }
620 607
608 bool URLDatabase::RecreateURLTableWithAllContents() {
609 // Create a temporary table to contain the new URLs table.
610 if (!CreateTemporaryURLTable()) {
611 NOTREACHED();
612 return false;
613 }
614
615 // Copy the contents.
616 if (!GetDB().Execute(
617 "INSERT INTO temp_urls (id, url, title, visit_count, typed_count, "
618 "last_visit_time, hidden) "
619 "SELECT id, url, title, visit_count, typed_count, last_visit_time, "
620 "hidden FROM urls")) {
621 NOTREACHED() << GetDB().GetErrorMessage();
622 return false;
623 }
624
625 // Rename/commit the tmp table.
626 CommitTemporaryURLTable();
627
628 return true;
629 }
630
621 const int kLowQualityMatchTypedLimit = 1; 631 const int kLowQualityMatchTypedLimit = 1;
622 const int kLowQualityMatchVisitLimit = 4; 632 const int kLowQualityMatchVisitLimit = 4;
623 const int kLowQualityMatchAgeLimitInDays = 3; 633 const int kLowQualityMatchAgeLimitInDays = 3;
624 634
625 base::Time AutocompleteAgeThreshold() { 635 base::Time AutocompleteAgeThreshold() {
626 return (base::Time::Now() - 636 return (base::Time::Now() -
627 base::TimeDelta::FromDays(kLowQualityMatchAgeLimitInDays)); 637 base::TimeDelta::FromDays(kLowQualityMatchAgeLimitInDays));
628 } 638 }
629 639
630 bool RowQualifiesAsSignificant(const URLRow& row, 640 bool RowQualifiesAsSignificant(const URLRow& row,
631 const base::Time& threshold) { 641 const base::Time& threshold) {
632 const base::Time& real_threshold = 642 const base::Time& real_threshold =
633 threshold.is_null() ? AutocompleteAgeThreshold() : threshold; 643 threshold.is_null() ? AutocompleteAgeThreshold() : threshold;
634 return (row.typed_count() >= kLowQualityMatchTypedLimit) || 644 return (row.typed_count() >= kLowQualityMatchTypedLimit) ||
635 (row.visit_count() >= kLowQualityMatchVisitLimit) || 645 (row.visit_count() >= kLowQualityMatchVisitLimit) ||
636 (row.last_visit() >= real_threshold); 646 (row.last_visit() >= real_threshold);
637 } 647 }
638 648
639 } // namespace history 649 } // namespace history
OLDNEW
« no previous file with comments | « components/history/core/browser/url_database.h ('k') | components/history/core/browser/url_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698