// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/history/core/browser/android/android_urls_sql_handler.h"

#include "base/logging.h"
#include "base/macros.h"
#include "components/history/core/browser/android/android_urls_database.h"

namespace history {

namespace {

// The interesting columns of this handler.
const HistoryAndBookmarkRow::ColumnID kInterestingColumns[] = {
    HistoryAndBookmarkRow::RAW_URL, HistoryAndBookmarkRow::URL_ID };

} // namespace

AndroidURLsSQLHandler::AndroidURLsSQLHandler(
    AndroidURLsDatabase* android_urls_db)
    : SQLHandler(kInterestingColumns, arraysize(kInterestingColumns)),
      android_urls_db_(android_urls_db) {
}

AndroidURLsSQLHandler::~AndroidURLsSQLHandler() {
}

bool AndroidURLsSQLHandler::Update(const HistoryAndBookmarkRow& row,
                                   const TableIDRows& ids_set) {
  DCHECK(row.is_value_set_explicitly(HistoryAndBookmarkRow::URL_ID));
  DCHECK(row.is_value_set_explicitly(HistoryAndBookmarkRow::RAW_URL));
  if (ids_set.size() != 1)
    return false;

  AndroidURLRow android_url_row;
  if (!android_urls_db_->GetAndroidURLRow(ids_set[0].url_id, &android_url_row))
    return false;

  return android_urls_db_->UpdateAndroidURLRow(android_url_row.id,
                                               row.raw_url(), row.url_id());
}

bool AndroidURLsSQLHandler::Insert(HistoryAndBookmarkRow* row) {
  AndroidURLID new_id =
      android_urls_db_->AddAndroidURLRow(row->raw_url(), row->url_id());
  row->set_id(new_id);
  return new_id;
}

bool AndroidURLsSQLHandler::Delete(const TableIDRows& ids_set) {
  std::vector<URLID> ids;
  for (TableIDRows::const_iterator id = ids_set.begin();
       id != ids_set.end(); ++id)
    ids.push_back(id->url_id);

  if (!ids.size())
    return true;

  return android_urls_db_->DeleteAndroidURLRows(ids);
}

}  // namespace history.
