16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (c) 2012 The Chromium Authors. All rights reserved.
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Use of this source code is governed by a BSD-style license that can be
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// found in the LICENSE file.
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef CHROME_BROWSER_HISTORY_ANDROID_SQL_HANDLER_H_
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CHROME_BROWSER_HISTORY_ANDROID_SQL_HANDLER_H_
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "components/history/core/android/android_history_types.h"
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennnamespace history {
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This is a wrapper of information needed for Insert/Update/Delete
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// method in SQLHandler. Refer to SQLHandler's comment below for how
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// it is used.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct TableIDRow {
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  TableIDRow();
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  ~TableIDRow();
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  URLID url_id;
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  GURL url;
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Whether the URL was bookmarked.
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  bool bookmarked;
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef std::vector<TableIDRow> TableIDRows;
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This base class is used by AndroidProviderBackend to manipulate the indvidual
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// table or BookmarkModel in its Insert/Update/Delete method.
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// The implementation needs to provides an array of columns. Once the columns
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are inserted or updated, the corresponding Insert() or Update() method will
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// be invoked. The Delete() method is called to delete rows.
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// The HistoryAndBookmarkRow given in Insert() or Update() provide the data for
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// insert or update. No all the data in HistoryAndBookmarkRow maybe valid, using
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// HistoryAndBookmarkRow::is_value_set_explicitly() method to see if the data
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// need be inserted or updated.
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass SQLHandler {
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn public:
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // |columns| is the implementation's columns.
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // |column_count| is the number of column in |columns|.
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  SQLHandler(const HistoryAndBookmarkRow::ColumnID columns[], int column_count);
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  virtual ~SQLHandler();
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Updates the rows whose URLID or URL is in the given |ids_set| with new
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // value stored in |row|. Return true if the update succeeds.
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  virtual bool Update(const HistoryAndBookmarkRow& row,
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      const TableIDRows& ids_set) = 0;
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Inserts the given |row|, return true on success; The id of insertted row
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // should be set in |row|, so other implemnetations could use it to complete
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // the insert.
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  virtual bool Insert(HistoryAndBookmarkRow* row) = 0;
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Deletes the rows whose id is in |ids_set|, returns false if any deletion
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // failed, otherwise return true even all/some of rows are not found.
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  virtual bool Delete(const TableIDRows& ids_set) = 0;
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Return true if |row| has a value explicitly set for at least one of the
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // columns in |row| that are known to this class.
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  bool HasColumnIn(const HistoryAndBookmarkRow& row);
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // Returns true if |id| is one of the columns known to this class.
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  bool HasColumn(HistoryAndBookmarkRow::ColumnID id);
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn private:
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  // The columns of this handler.
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  const std::set<HistoryAndBookmarkRow::ColumnID> columns_;
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  DISALLOW_COPY_AND_ASSIGN(SQLHandler);
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn};
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}  // namespace history.
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif  // CHROME_BROWSER_HISTORY_ANDROID_SQL_HANDLER_H_
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn