4
* Copyright (C) 2009 Tim Marston <tim@ed.am>
4
* Copyright (C) 2009 Tim Marston <edam@waxworlds.org>
6
6
* This file is part of sqlite3cc (hereafter referred to as "this program").
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
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.
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/>.
35
* The command class represents an SQL command. Since there is very little
35
* The command class represents an SQL command. Since there is very little
36
36
* difference between a command an a statement, it is basically a shim around
37
37
* the statement class with the addition of an exec() method to execute the
42
public detail::basic_statement
42
public basic_statement
44
44
//______________________________________________________________________________
49
* Constructor that provides a connection upon which to act and the SQL
49
* Constructor that provides a database upon which to act and the SQL
50
50
* command to execute.
52
* @param connection a reference to a connection
51
* @param database a reference to a database
53
52
* @param sql an SQL statement in UTF-8
56
connection &connection,
57
56
const std::string &sql );
60
* Constructor that provides a connection upon which to act.
62
* @param connection a reference to a connection
59
* Constructor that provides a database upon which to act.
60
* @param database a reference to a database
65
connection &connection );
67
65
//______________________________________________________________________________
68
66
// public interface
79
76
const std::string &sql );
82
* Step through one execution cycle of the SQL statement. If this is an SQL
79
* Step through one execution cycle of the SQL statement. If this is an SQL
83
80
* statement that doesn't return any rows, only one cycle is required,
84
81
* otherwise, each cycle will return another row
86
82
* @return an sqlite error code
87
83
* @see sqlite3_step()
92
* Execute the command. This is the same as doing a step().
88
* Execute the command. This is the same as doing a step().
94
89
* @return an sqlite error code
95
90
* @see sqlite3_step()
103
98
* Get the number of changes made by the last successful execution of this
104
* command. This doesn't include changes made in trigger subcontexts.
99
* command. This doesn't include changes made in trigger subcontexts.
106
100
* @return the number of changed rows
107
101
* @see sqlite3_changes()
115
109
* Get the number of changes made by the last successful execution of this
116
* command. This includes changes made in all trigger subcontexts.
110
* command. This includes changes made in all trigger subcontexts.
118
111
* @return the number of changed rows
119
112
* @see sqlite3_total_changes()
134
126
return _last_insert_rowid;
130
* Stream operator is used to bind values to parameters automatically, in
131
* ascending order. In addition, the null, set_index() and execute auto-
132
* binding manipulators can be used.
133
* @param value a value to bind
136
command &operator <<(
139
int code = bind( _bind_index, value );
140
if( code != SQLITE_OK ) throw sqlite_error( _database, code );
137
145
//______________________________________________________________________________
138
146
// implementation
157
// template specialisations for detail::basic_statement::operator <<()
159
basic_statement &basic_statement::operator << < detail::exec_t >(
161
// template specialisations for command::operator <<()
163
command &command::operator << < detail::null_t >(
164
const detail::null_t & );
166
command &command::operator << < detail::exec_t >(
160
167
const detail::exec_t & );
163
} // namespace detail
169
command &command::operator << < detail::set_index_t >(
170
const detail::set_index_t &t );
166
173
} // namespace sqlite