/sqlite3cc

To get this branch, use:
bzr branch http://bzr.ed.am/sqlite3cc
1 by edam
- initial commit
1
/*
2 by edam
- further initial development
2
 * transaction.cc
1 by edam
- initial commit
3
 *
4
 * Copyright (C) 2009 Tim Marston <edam@waxworlds.org>
5
 *
2 by edam
- further initial development
6
 * This file is part of sqlite3cc (hereafter referred to as "this program").
7
 * See http://www.waxworlds.org/edam/software/sqlite3cc for more information.
1 by edam
- initial commit
8
 *
9
 * This program is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU Lesser General Public License as published
11
 * by the Free Software Foundation, either version 3 of the License, or
12
 * (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU Lesser General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Lesser General Public License
20
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 */
22
2 by edam
- further initial development
23
#include <sqlite3cc/transaction.h>
24
#include <sqlite3cc/database.h>
25
#include <sqlite3cc/exception.h>
3 by edam
- rewrote transaction classes and added transaction_guard
26
#include <boost/thread.hpp>
9 by edam
- added NEWS
27
#include <boost/lexical_cast.hpp>
3 by edam
- rewrote transaction classes and added transaction_guard
28
29
30
sqlite::basic_transaction::basic_transaction(
1 by edam
- initial commit
31
	database &database )
32
	:
33
	_database( database )
34
{
3 by edam
- rewrote transaction classes and added transaction_guard
35
}
36
37
38
void sqlite::basic_transaction::begin()
39
{
11 by edam
- update TODO
40
	_database.exec( "BEGIN" );
1 by edam
- initial commit
41
}
42
43
3 by edam
- rewrote transaction classes and added transaction_guard
44
void sqlite::basic_transaction::commit()
1 by edam
- initial commit
45
{
11 by edam
- update TODO
46
	_database.exec( "COMMIT" );
1 by edam
- initial commit
47
}
48
49
3 by edam
- rewrote transaction classes and added transaction_guard
50
void sqlite::basic_transaction::rollback()
1 by edam
- initial commit
51
{
11 by edam
- update TODO
52
	_database.exec( "ROLLBACK" );
1 by edam
- initial commit
53
}
54
55
56
sqlite::exclusive_transaction::exclusive_transaction(
57
	database &database )
58
	:
3 by edam
- rewrote transaction classes and added transaction_guard
59
	basic_transaction( database )
60
{
61
}
62
63
64
void sqlite::exclusive_transaction::begin()
65
{
11 by edam
- update TODO
66
	_database.exec( "BEGIN EXCLUSIVE" );
3 by edam
- rewrote transaction classes and added transaction_guard
67
}
68
69
70
sqlite::recursive_transaction::recursive_transaction(
71
	database &database )
72
	:
73
	basic_transaction( database )
74
{
75
	static unsigned long long i = 0;
76
	unsigned long long my_i;
77
	static boost::mutex mutex;
78
	{
79
		boost::lock_guard< boost::mutex > lock( mutex );
80
		my_i = i++;
81
	}
82
	_sp_name = "_" + boost::lexical_cast< std::string >( my_i++ );
83
}
84
85
86
void sqlite::recursive_transaction::begin()
87
{
11 by edam
- update TODO
88
	_database.exec( "SAVEPOINT " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
89
}
90
91
92
void sqlite::recursive_transaction::commit()
93
{
11 by edam
- update TODO
94
	_database.exec( "RELEASE " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
95
}
96
97
98
void sqlite::recursive_transaction::rollback()
99
{
11 by edam
- update TODO
100
	_database.exec( "ROLLBACK TO " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
101
102
	// we have rolled back this transaction's savepoint, but the savepoint will
103
	// remain on the transaction stack unless we also release it
11 by edam
- update TODO
104
	_database.exec( "RELEASE " + _sp_name );
1 by edam
- initial commit
105
}