/sqlite3cc

To get this branch, use:
bzr branch http://bzr.ed.am/sqlite3cc

« back to all changes in this revision

Viewing changes to include/sqlite3cc/basic_statement.h

  • Committer: edam
  • Date: 2012-01-23 13:46:27 UTC
  • Revision ID: edam@waxworlds.org-20120123134627-i6hi9aftfvwgp8vw
updated autotols stuff

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
{
35
35
 
36
36
 
37
 
class database;
 
37
class connection;
38
38
class row;
39
39
namespace detail {
40
40
        struct null_t;
43
43
}
44
44
 
45
45
 
 
46
namespace detail
 
47
{
 
48
 
 
49
 
46
50
/**
47
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
57
61
protected:
58
62
 
59
63
        /**
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
61
65
         * statement.
62
 
         * @param database a reference to a database
 
66
         * @param connection a reference to a connection
63
67
         * @param sql an SQL statement in UTF-8
64
68
         */
65
69
        explicit basic_statement(
66
 
                database &database,
 
70
                connection &connection,
67
71
                const std::string &sql );
68
72
 
69
73
        /**
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
 
74
         * Constructor that provides a connection upon which to act.
 
75
         * @param connection a reference to a connection
73
76
         */
74
77
        explicit basic_statement(
75
 
                database &database );
 
78
                connection &connection );
76
79
 
77
80
        virtual ~basic_statement();
78
81
 
95
98
         * @returns an sqlite error code
96
99
         * @see sqlite3_reset()
97
100
         */
98
 
        int reset();
 
101
        virtual int reset();
99
102
 
100
103
        /**
101
104
         * Clears the values bound to a statement to NULL.
127
130
        /**
128
131
         * Bind a string value to the SQL statement via it's index where the value
129
132
         * 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
 
133
         * more optimal because sqlite will not have to take it's own copy of the
131
134
         * data.
132
135
         * @param index the index of the parameter to bind to
133
136
         * @param value the invariant string value
 
137
         * @param value_length the length of the string including zero-terminator
134
138
         * @returns an sqlite error code
135
139
         * @see sqlite3_bind_text()
136
140
         */
142
146
        /**
143
147
         * Bind a string value to the SQL statement via it's index where the value
144
148
         * 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
 
149
         * more optimal  because sqlite will not have to take it's own copy of the
146
150
         * data.
147
151
         * @param index the index of the parameter to bind to
148
152
         * @param value the invariant string value
156
160
        /**
157
161
         * Bind a string value to the SQL statement via it's index where the value
158
162
         * 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
 
163
         * more optimal because sqlite will not have to take it's own copy of the
160
164
         * data.
161
165
         * @param index the index of the parameter to bind to
162
166
         * @param value the invariant string value
197
201
        /**
198
202
         * Bind a string value to the SQL statement via a named parameter where the
199
203
         * string value will not change for the duration of the statement. This
200
 
         * prevents a copy of the string being taken.
 
204
         * prevents sqlite from taking its own copy of the string.
201
205
         * @param name the named parameter to bind to
202
206
         * @param value the invariant string value
 
207
         * @param value_length the length of the string including zero-terminator
203
208
         * @returns an sqlite error code
204
209
         * @see sqlite3_bind_text()
205
210
         */
243
248
        int bind_null(
244
249
                const std::string &name );
245
250
 
 
251
        /**
 
252
         * Stream operator is used to bind values to parameters automatically, in
 
253
         * ascending order. In addition, the null and set_index() auto-binding
 
254
         * manipulators can be used.
 
255
         * @param value a value to bind
 
256
         */
 
257
        template< class T >
 
258
        basic_statement &operator <<(
 
259
                const T &value )
 
260
        {
 
261
                int code = bind( _bind_index, value );
 
262
                if( code != SQLITE_OK ) throw sqlite_error( _connection, code );
 
263
                _bind_index++;
 
264
                return *this;
 
265
        }
 
266
 
246
267
//______________________________________________________________________________
247
268
//                                                                implementation
248
269
protected:
271
292
         */
272
293
        int step();
273
294
 
274
 
        /** the database upon which to act */
275
 
        database &_database;
 
295
        /** the connection upon which to act */
 
296
        connection &_connection;
276
297
 
277
298
        /** the statement handle */
278
299
        sqlite3_stmt *_handle;
283
304
};
284
305
 
285
306
 
 
307
// template specialisations for basic_statement::operator <<()
 
308
template< >
 
309
basic_statement &basic_statement::operator << < detail::null_t >(
 
310
        const detail::null_t & );
 
311
template< >
 
312
basic_statement &basic_statement::operator << < detail::set_index_t >(
 
313
        const detail::set_index_t &t );
 
314
 
 
315
 
 
316
} // namespace detail
 
317
 
 
318
 
286
319
} // namespace sqlite
287
320
 
288
321