Home | History | Annotate | Download | only in sql
      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 
     10 namespace sql {
     11 
     12 Transaction::Transaction(Connection* connection)
     13     : connection_(connection),
     14       is_open_(false) {
     15 }
     16 
     17 Transaction::~Transaction() {
     18   if (is_open_)
     19     connection_->RollbackTransaction();
     20 }
     21 
     22 bool 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 
     31 void 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 
     41 bool 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