Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 1 | // Copyright (c) 2012 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 | #ifndef SQL_TRANSACTION_H_ |
| 6 | #define SQL_TRANSACTION_H_ |
| 7 | |
| 8 | #include "base/basictypes.h" |
| 9 | #include "sql/sql_export.h" |
| 10 | |
| 11 | namespace sql { |
| 12 | |
| 13 | class Connection; |
| 14 | |
| 15 | class SQL_EXPORT Transaction { |
| 16 | public: |
| 17 | // Creates the scoped transaction object. You MUST call Begin() to begin the |
| 18 | // transaction. If you have begun a transaction and not committed it, the |
| 19 | // constructor will roll back the transaction. If you want to commit, you |
| 20 | // need to manually call Commit before this goes out of scope. |
| 21 | // |
| 22 | // Nested transactions are supported. See sql::Connection::BeginTransaction |
| 23 | // for details. |
| 24 | explicit Transaction(Connection* connection); |
| 25 | ~Transaction(); |
| 26 | |
| 27 | // Returns true when there is a transaction that has been successfully begun. |
| 28 | bool is_open() const { return is_open_; } |
| 29 | |
| 30 | // Begins the transaction. This uses the default sqlite "deferred" transaction |
| 31 | // type, which means that the DB lock is lazily acquired the next time the |
| 32 | // database is accessed, not in the begin transaction command. |
| 33 | // |
| 34 | // Returns false on failure. Note that if this fails, you shouldn't do |
| 35 | // anything you expect to be actually transactional, because it won't be! |
| 36 | bool Begin(); |
| 37 | |
| 38 | // Rolls back the transaction. This will happen automatically if you do |
| 39 | // nothing when the transaction goes out of scope. |
| 40 | void Rollback(); |
| 41 | |
| 42 | // Commits the transaction, returning true on success. This will return |
| 43 | // false if sqlite could not commit it, or if another transaction in the |
| 44 | // same outermost transaction has been rolled back (which necessitates a |
| 45 | // rollback of all transactions in that outermost one). |
| 46 | bool Commit(); |
| 47 | |
| 48 | private: |
| 49 | Connection* connection_; |
| 50 | |
| 51 | // True when the transaction is open, false when it's already been committed |
| 52 | // or rolled back. |
| 53 | bool is_open_; |
| 54 | |
| 55 | DISALLOW_COPY_AND_ASSIGN(Transaction); |
| 56 | }; |
| 57 | |
| 58 | } // namespace sql |
| 59 | |
| 60 | #endif // SQL_TRANSACTION_H_ |