// 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.

#ifndef SQL_TRANSACTION_H_
#define SQL_TRANSACTION_H_

#include "base/macros.h"
#include "sql/sql_export.h"

namespace sql {

class Database;

class SQL_EXPORT Transaction {
 public:
  // Creates the scoped transaction object. You MUST call Begin() to begin the
  // transaction. If you have begun a transaction and not committed it, the
  // constructor will roll back the transaction. If you want to commit, you
  // need to manually call Commit before this goes out of scope.
  //
  // Nested transactions are supported. See sql::Database::BeginTransaction
  // for details.
  explicit Transaction(Database* connection);
  ~Transaction();

  // Returns true when there is a transaction that has been successfully begun.
  bool is_open() const { return is_open_; }

  // Begins the transaction. This uses the default sqlite "deferred" transaction
  // type, which means that the DB lock is lazily acquired the next time the
  // database is accessed, not in the begin transaction command.
  //
  // Returns false on failure. Note that if this fails, you shouldn't do
  // anything you expect to be actually transactional, because it won't be!
  bool Begin();

  // Rolls back the transaction. This will happen automatically if you do
  // nothing when the transaction goes out of scope.
  void Rollback();

  // Commits the transaction, returning true on success. This will return
  // false if sqlite could not commit it, or if another transaction in the
  // same outermost transaction has been rolled back (which necessitates a
  // rollback of all transactions in that outermost one).
  bool Commit();

 private:
  Database* database_;

  // True when the transaction is open, false when it's already been committed
  // or rolled back.
  bool is_open_;

  DISALLOW_COPY_AND_ASSIGN(Transaction);
};

}  // namespace sql

#endif  // SQL_TRANSACTION_H_
