4
* Copyright (C) 2009 Tim Marston <edam@waxworlds.org>
4
* Copyright (C) 2009 Tim Marston <tim@ed.am>
6
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.
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.
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.
7
* See http://ed.am/dev/sqlite3cc for more information.
9
* This program is free software: you can redistribute it and/or modify it under
10
* the terms of the GNU Lesser General Public License as published by the Free
11
* Software Foundation, either version 3 of the License, or (at your option) any
14
* This program is distributed in the hope that it will be useful, but WITHOUT
15
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
19
19
* You should have received a copy of the GNU Lesser General Public License
20
20
* along with this program. If not, see <http://www.gnu.org/licenses/>.
47
* The statement class represents an SQL statement. It is the base class for
51
* The statement class represents an SQL statement. It is the base class for
48
52
* both the command and the query classes, which should be used for those
49
* purposes. The basic_statement class its self has protected instantiation.
53
* purposes. The basic_statement class its self has protected instantiation.
51
55
class basic_statement
60
* Constructor that provides a database upon which to act and the SQL
64
* Constructor that provides a connection upon which to act and the SQL
62
* @param database a reference to a database
67
* @param connection a reference to a connection
63
68
* @param sql an SQL statement in UTF-8
65
70
explicit basic_statement(
71
connection &connection,
67
72
const std::string &sql );
70
* Constructor that provides a database upon which to act.
71
* @param database a reference to a database
72
* @param sql an SQL statement in UTF-8
75
* Constructor that provides a connection upon which to act.
77
* @param connection a reference to a connection
74
79
explicit basic_statement(
80
connection &connection );
77
82
virtual ~basic_statement();
90
96
const std::string &sql );
93
* Reset the statement, ready to re-execute it. This does not clear any of
99
* Reset the statement, ready to re-execute it. This does not clear any of
94
100
* the values bound to the statement.
95
102
* @returns an sqlite error code
96
103
* @see sqlite3_reset()
101
108
* Clears the values bound to a statement to NULL.
102
110
* @returns an sqlite error code
103
111
* @see sqlite3_clear_bindings()
105
113
int clear_bindings();
108
* Bind a value to the SQL statement via it's index. This template will take
109
* a variety of data types and bind them as text. This is how sqlite
116
* Bind a value to the SQL statement via it's index. This template will
117
* take a variety of data types and bind them as text. This is how sqlite
110
118
* internally stores the data anyway, so always binding as text just means
111
119
* we do the conversion instead of sqlite and is no less efficient.
112
121
* @param index the index of the parameter to bind to
113
122
* @param value the value to bind
114
123
* @returns an sqlite error code
128
137
* Bind a string value to the SQL statement via it's index where the value
129
* of that string will not change for the duration of the statement. This is
130
* more optimal because sqlite will not have to make it's own copy of the
138
* of that string will not change for the duration of the statement. This
139
* is more optimal because sqlite will not have to take it's own copy of the
132
142
* @param index the index of the parameter to bind to
133
143
* @param value the invariant string value
144
* @param value_length the length of the string including zero-terminator
134
145
* @returns an sqlite error code
135
146
* @see sqlite3_bind_text()
143
154
* Bind a string value to the SQL statement via it's index where the value
144
* of that string will not change for the duration of the statement. This is
145
* more optimal because sqlite will not have to make it's own copy of the
155
* of that string will not change for the duration of the statement. This
156
* is more optimal because sqlite will not have to take it's own copy of the
147
159
* @param index the index of the parameter to bind to
148
160
* @param value the invariant string value
149
161
* @returns an sqlite error code
157
169
* Bind a string value to the SQL statement via it's index where the value
158
* of that string will not change for the duration of the statement. This is
159
* more optimal because sqlite will not have to make it's own copy of the
170
* of that string will not change for the duration of the statement. This
171
* is more optimal because sqlite will not have to take it's own copy of the
161
174
* @param index the index of the parameter to bind to
162
175
* @param value the invariant string value
163
176
* @returns an sqlite error code
177
191
unsigned int index );
180
* Bind a value to the SQL statement via a named parameter. This template
181
* will take a variety of data types and bind them as text. This is how
194
* Bind a value to the SQL statement via a named parameter. This template
195
* will take a variety of data types and bind them as text. This is how
182
196
* sqlite internally stores the data anyway, so always binding as text just
183
197
* means we do the conversion instead of sqlite and is no less efficient.
184
199
* @param name the named parameter to bind to
185
200
* @param value the value to bind
186
201
* @returns an sqlite error code
198
213
* Bind a string value to the SQL statement via a named parameter where the
199
* string value will not change for the duration of the statement. This
200
* prevents a copy of the string being taken.
214
* string value will not change for the duration of the statement. This
215
* prevents sqlite from taking its own copy of the string.
201
217
* @param name the named parameter to bind to
202
218
* @param value the invariant string value
219
* @param value_length the length of the string including zero-terminator
203
220
* @returns an sqlite error code
204
221
* @see sqlite3_bind_text()
212
229
* Bind a string value to the SQL statement via a named parameter where the
213
* string value will not change for the duration of the statement. This
230
* string value will not change for the duration of the statement. This
214
231
* prevents a copy of the string being taken.
215
233
* @param name the named parameter to bind to
216
234
* @param value the invariant string value
217
235
* @returns an sqlite error code
225
243
* Bind a string value to the SQL statement via a named parameter where the
226
* string value will not change for the duration of the statement. This
244
* string value will not change for the duration of the statement. This
227
245
* prevents a copy of the string being taken.
228
247
* @param name the named parameter to bind to
229
248
* @param value the invariant string value
230
249
* @returns an sqlite error code
244
264
const std::string &name );
267
* Stream operator is used to bind values to parameters automatically, in
268
* ascending order. In addition, the null and set_index() auto-binding
269
* manipulators can be used.
271
* @param value a value to bind
274
basic_statement &operator <<(
277
int code = bind( _bind_index, value );
278
if( code != SQLITE_OK ) throw sqlite_error( _connection, code );
246
283
//______________________________________________________________________________
247
284
// implementation
253
290
* Finalise an SQL statement.
254
292
* @returns an sqlite error code
255
293
* @see sqlite3_finalize()
260
* Get the index number of a named parameter
298
* Get the index number of a named parameter.
261
300
* @param parameter name
262
301
* @return index of named parameter
265
304
const std::string &name );
269
309
* @return sqlite error code
270
310
* @see sqlite3_step()
274
/** the database upon which to act */
314
/** the connection upon which to act */
315
connection &_connection;
277
317
/** the statement handle */
278
318
sqlite3_stmt *_handle;
326
// template specialisations for basic_statement::operator <<()
328
basic_statement &basic_statement::operator << < detail::null_t >(
329
const detail::null_t & );
331
basic_statement &basic_statement::operator << < detail::set_index_t >(
332
const detail::set_index_t &t );
335
} // namespace detail
286
338
} // namespace sqlite