123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // 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/check.h"
- #include "base/sequence_checker.h"
- #include "sql/database.h"
- namespace sql {
- Transaction::Transaction(Database* database) : database_(*database) {
- DCHECK(database);
- }
- Transaction::~Transaction() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- #if DCHECK_IS_ON()
- DCHECK(begin_called_)
- << "Begin() not called immediately after Transaction creation";
- #endif // DCHECK_IS_ON()
- if (is_active_)
- database_.RollbackTransaction();
- }
- bool Transaction::Begin() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- #if DCHECK_IS_ON()
- DCHECK(!begin_called_) << __func__ << " already called";
- begin_called_ = true;
- #endif // DCHECK_IS_ON()
- DCHECK(!is_active_);
- is_active_ = database_.BeginTransaction();
- return is_active_;
- }
- void Transaction::Rollback() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- #if DCHECK_IS_ON()
- DCHECK(begin_called_) << __func__ << " called before Begin()";
- DCHECK(!commit_called_) << __func__ << " called after Commit()";
- DCHECK(!rollback_called_) << __func__ << " called twice";
- rollback_called_ = true;
- #endif // DCHECK_IS_ON()
- DCHECK(is_active_) << __func__ << " called after Begin() failed";
- is_active_ = false;
- database_.RollbackTransaction();
- }
- bool Transaction::Commit() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- #if DCHECK_IS_ON()
- DCHECK(begin_called_) << __func__ << " called before Begin()";
- DCHECK(!rollback_called_) << __func__ << " called after Rollback()";
- DCHECK(!commit_called_) << __func__ << " called after Commit()";
- commit_called_ = true;
- #endif // DCHECK_IS_ON()
- DCHECK(is_active_) << __func__ << " called after Begin() failed";
- is_active_ = false;
- return database_.CommitTransaction();
- }
- } // namespace sql
|