15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_backend.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/android/android_provider_backend.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidURLID HistoryBackend::InsertHistoryAndBookmark(
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HistoryAndBookmarkRow& row) {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AndroidURLID id = 0;
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    id = android_provider_backend_->InsertHistoryAndBookmark(row);
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return id;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidStatement* HistoryBackend::QueryHistoryAndBookmarks(
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::vector<HistoryAndBookmarkRow::ColumnID>& projections,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16>& selection_args,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& sort_order) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AndroidStatement* statement = NULL;
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    statement = android_provider_backend_->QueryHistoryAndBookmarks(
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        projections, selection, selection_args, sort_order);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return statement;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::UpdateHistoryAndBookmarks(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HistoryAndBookmarkRow& row,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16>& selection_args) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int count = 0;
37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_) {
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    android_provider_backend_->UpdateHistoryAndBookmarks(
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        row, selection, selection_args, &count);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return count;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteHistoryAndBookmarks(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16>& selection_args) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int count = 0;
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (android_provider_backend_) {
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    android_provider_backend_->DeleteHistoryAndBookmarks(
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        selection, selection_args, &count);
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return count;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteHistory(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16>& selection_args) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int count = 0;
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_) {
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    android_provider_backend_->DeleteHistory(selection, selection_args, &count);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return count;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Statement -------------------------------------------------------------------
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::MoveStatement(history::AndroidStatement* statement,
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                  int current_pos,
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                  int destination) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_LE(-1, current_pos);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_LE(-1, destination);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int cur = current_pos;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (current_pos > destination) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    statement->statement()->Reset(false);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cur = -1;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (; cur < destination; ++cur) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!statement->statement()->Step())
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return cur;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryBackend::CloseStatement(AndroidStatement* statement) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete statement;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Search Term -----------------------------------------------------------------
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92116680a4aac90f2aa7413d9095a592090648e557Ben MurdochSearchTermID HistoryBackend::InsertSearchTerm(const SearchRow& row) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SearchTermID id = 0;
94b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    id = android_provider_backend_->InsertSearchTerm(row);
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return id;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint HistoryBackend::UpdateSearchTerms(
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const SearchRow& row,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16> selection_args) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int count = 0;
104b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_) {
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    android_provider_backend_->UpdateSearchTerms(
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        row, selection, selection_args, &count);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return count;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int HistoryBackend::DeleteSearchTerms(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16> selection_args) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int count = 0;
115b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (android_provider_backend_) {
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    android_provider_backend_->DeleteSearchTerms(
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        selection, selection_args, &count);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return count;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAndroidStatement* HistoryBackend::QuerySearchTerms(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::vector<SearchRow::ColumnID>& projections,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& selection,
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::vector<base::string16>& selection_args,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& sort_order) {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AndroidStatement* statement = NULL;
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (android_provider_backend_) {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    statement = android_provider_backend_->QuerySearchTerms(projections,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        selection, selection_args, sort_order);
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return statement;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace history
136