autocomplete_action_predictor_table.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_PREDICTORS_AUTOCOMPLETE_ACTION_PREDICTOR_TABLE_H_
6#define CHROME_BROWSER_PREDICTORS_AUTOCOMPLETE_ACTION_PREDICTOR_TABLE_H_
7
8#include <string>
9#include <vector>
10
11#include "base/strings/string16.h"
12#include "chrome/browser/predictors/predictor_table_base.h"
13#include "url/gurl.h"
14
15namespace predictors {
16
17// This manages the autocomplete predictor table within the SQLite database
18// passed in to the constructor. It expects the following scheme:
19//
20// network_action_predictor
21//   id                 A unique id.
22//   user_text          What the user typed.
23//   url                The URL of the entry.
24//   number_of_hits     Number of times the entry was shown to the user and
25//                      selected.
26//   number_of_misses   Number of times the entry was shown to the user but not
27//                      selected.
28//
29// TODO(dominich): Consider adding this table to one of the history databases.
30// In memory is currently used, but adding to the on-disk visits database
31// would allow DeleteOldEntries to be cheaper through use of a join.
32//
33// All the functions apart from constructor and destructor have to be called in
34// the DB thread.
35class AutocompleteActionPredictorTable : public PredictorTableBase {
36 public:
37  struct Row {
38    // TODO(dominich): Make this 64-bit integer as an optimization. This
39    // requires some investigation into how to make sure the id is unique for
40    // each user_text/url pair.
41    // http://crbug.com/102020
42    typedef std::string Id;
43
44    Row();
45
46    // Only used by unit tests.
47    Row(const Id& id,
48        const base::string16& user_text,
49        const GURL& url,
50        int number_of_hits,
51        int number_of_misses);
52
53    Row(const Row& row);
54
55    Id id;
56    base::string16 user_text;
57    GURL url;
58    int number_of_hits;
59    int number_of_misses;
60  };
61
62  typedef std::vector<Row> Rows;
63
64  // DB thread functions.
65  void GetRow(const Row::Id& id, Row* row);
66  void GetAllRows(Rows* row_buffer);
67  void AddRow(const Row& row);
68  void UpdateRow(const Row& row);
69  void AddAndUpdateRows(const Rows& rows_to_add, const Rows& rows_to_update);
70  void DeleteRows(const std::vector<Row::Id>& id_list);
71  void DeleteAllRows();
72
73 private:
74  friend class PredictorDatabaseInternal;
75
76  AutocompleteActionPredictorTable();
77  virtual ~AutocompleteActionPredictorTable();
78
79  // PredictorTableBase methods (DB thread).
80  virtual void CreateTableIfNonExistent() OVERRIDE;
81  virtual void LogDatabaseStats() OVERRIDE;
82
83  DISALLOW_COPY_AND_ASSIGN(AutocompleteActionPredictorTable);
84};
85
86}  // namespace predictors
87
88#endif  // CHROME_BROWSER_PREDICTORS_AUTOCOMPLETE_ACTION_PREDICTOR_TABLE_H_
89