|  | // Copyright (c) 2011 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 "sql/transaction.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "sql/connection.h" | 
|  |  | 
|  | namespace sql { | 
|  |  | 
|  | Transaction::Transaction(Connection* connection) | 
|  | : connection_(connection), | 
|  | is_open_(false) { | 
|  | } | 
|  |  | 
|  | Transaction::~Transaction() { | 
|  | if (is_open_) | 
|  | connection_->RollbackTransaction(); | 
|  | } | 
|  |  | 
|  | bool Transaction::Begin() { | 
|  | if (is_open_) { | 
|  | NOTREACHED() << "Beginning a transaction twice!"; | 
|  | return false; | 
|  | } | 
|  | is_open_ = connection_->BeginTransaction(); | 
|  | return is_open_; | 
|  | } | 
|  |  | 
|  | void Transaction::Rollback() { | 
|  | if (!is_open_) { | 
|  | NOTREACHED() << "Attempting to roll back a nonexistent transaction. " | 
|  | << "Did you remember to call Begin() and check its return?"; | 
|  | return; | 
|  | } | 
|  | is_open_ = false; | 
|  | connection_->RollbackTransaction(); | 
|  | } | 
|  |  | 
|  | bool Transaction::Commit() { | 
|  | if (!is_open_) { | 
|  | NOTREACHED() << "Attempting to commit a nonexistent transaction. " | 
|  | << "Did you remember to call Begin() and check its return?"; | 
|  | return false; | 
|  | } | 
|  | is_open_ = false; | 
|  | return connection_->CommitTransaction(); | 
|  | } | 
|  |  | 
|  | }  // namespace sql |