transaction.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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  if (is_open_) {
24    NOTREACHED() << "Beginning a transaction twice!";
25    return false;
26  }
27  is_open_ = connection_->BeginTransaction();
28  return is_open_;
29}
30
31void Transaction::Rollback() {
32  if (!is_open_) {
33    NOTREACHED() << "Attempting to roll back a nonexistent transaction. "
34                 << "Did you remember to call Begin() and check its return?";
35    return;
36  }
37  is_open_ = false;
38  connection_->RollbackTransaction();
39}
40
41bool Transaction::Commit() {
42  if (!is_open_) {
43    NOTREACHED() << "Attempting to commit a nonexistent transaction. "
44                 << "Did you remember to call Begin() and check its return?";
45    return false;
46  }
47  is_open_ = false;
48  return connection_->CommitTransaction();
49}
50
51}  // namespace sql
52