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