/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
12 by edam
- moved null_t, exec_t and set_index_t to detail namespace so only their extern instantiations are in the main namespace
56
sqlite::immediate_transaction::immediate_transaction(
57
	database &database )
58
	:
59
	basic_transaction( database )
60
{
61
}
62
63
64
void sqlite::immediate_transaction::begin()
65
{
66
	_database.exec( "BEGIN IMMEDIATE" );
67
}
68
69
1 by edam
- initial commit
70
sqlite::exclusive_transaction::exclusive_transaction(
71
	database &database )
72
	:
3 by edam
- rewrote transaction classes and added transaction_guard
73
	basic_transaction( database )
74
{
75
}
76
77
78
void sqlite::exclusive_transaction::begin()
79
{
11 by edam
- update TODO
80
	_database.exec( "BEGIN EXCLUSIVE" );
3 by edam
- rewrote transaction classes and added transaction_guard
81
}
82
83
84
sqlite::recursive_transaction::recursive_transaction(
85
	database &database )
86
	:
87
	basic_transaction( database )
88
{
89
	static unsigned long long i = 0;
90
	unsigned long long my_i;
91
	static boost::mutex mutex;
92
	{
93
		boost::lock_guard< boost::mutex > lock( mutex );
94
		my_i = i++;
95
	}
96
	_sp_name = "_" + boost::lexical_cast< std::string >( my_i++ );
97
}
98
99
100
void sqlite::recursive_transaction::begin()
101
{
11 by edam
- update TODO
102
	_database.exec( "SAVEPOINT " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
103
}
104
105
106
void sqlite::recursive_transaction::commit()
107
{
11 by edam
- update TODO
108
	_database.exec( "RELEASE " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
109
}
110
111
112
void sqlite::recursive_transaction::rollback()
113
{
11 by edam
- update TODO
114
	_database.exec( "ROLLBACK TO " + _sp_name );
3 by edam
- rewrote transaction classes and added transaction_guard
115
116
	// we have rolled back this transaction's savepoint, but the savepoint will
117
	// remain on the transaction stack unless we also release it
11 by edam
- update TODO
118
	_database.exec( "RELEASE " + _sp_name );
1 by edam
- initial commit
119
}