1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "sql/transaction.h"
6
7#include "base/logging.h"
8#include "sql/connection.h"
9
10namespace sql {
11
12Transaction::Transaction(Connection* connection)
13    : connection_(connection),
14      is_open_(false) {
15}
16
17Transaction::~Transaction() {
18  if (is_open_)
19    connection_->RollbackTransaction();
20}
21
22bool Transaction::Begin() {
23  DCHECK(!is_open_) << "Beginning a transaction twice!";
24  is_open_ = connection_->BeginTransaction();
25  return is_open_;
26}
27
28void Transaction::Rollback() {
29  DCHECK(is_open_) << "Attempting to roll back a nonexistent transaction. "
30                   << "Did you remember to call Begin() and check its return?";
31  is_open_ = false;
32  connection_->RollbackTransaction();
33}
34
35bool Transaction::Commit() {
36  DCHECK(is_open_) << "Attempting to commit a nonexistent transaction. "
37                   << "Did you remember to call Begin() and check its return?";
38  is_open_ = false;
39  return connection_->CommitTransaction();
40}
41
42}  // namespace sql
43