Skip to content

Commit 2534d35

Browse files
committed
add clear_bindgins() in statement.
1 parent b7e2f8b commit 2534d35

File tree

3 files changed

+45
-16
lines changed

3 files changed

+45
-16
lines changed

headeronly_src/sqlite3pp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ namespace sqlite3pp
178178

179179
int step();
180180
int reset();
181+
int clear_bindings();
181182

182183
protected:
183184
explicit statement(database& db, char const* stmt = nullptr);

headeronly_src/sqlite3pp.ipp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,11 @@ namespace sqlite3pp
313313
return sqlite3_reset(stmt_);
314314
}
315315

316+
inline int statement::clear_bindings()
317+
{
318+
return sqlite3_clear_bindings(stmt_);
319+
}
320+
316321
inline int statement::bind(int idx, int value)
317322
{
318323
return sqlite3_bind_int(stmt_, idx, value);

test/testdb.cpp

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ using namespace std;
2020
if(!((arg1) == (arg2))) { \
2121
std::cout << "Unexpected false at " \
2222
<< __FILE__ << ", " << __LINE__ << ", " << __func__ << ": " \
23-
<< #arg1 << ", " << #arg2 << "(" << arg2 << ")" << std::endl; } \
23+
<< #arg1 << ", " << #arg2 << std::endl; } \
2424
} while(false);
2525

2626
sqlite3pp::database contacts_db();
2727

2828
void test_insert_execute() {
2929
auto db = contacts_db();
30-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
30+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
3131

3232
sqlite3pp::query qry(db, "SELECT name, phone FROM contacts");
3333
auto iter = qry.begin();
@@ -45,7 +45,7 @@ void test_insert_execute_all() {
4545
"INSERT INTO contacts (name, phone) VALUES (:user, '555-1111');"
4646
"INSERT INTO contacts (name, phone) VALUES (:user, '555-2222')");
4747
cmd.bind(":user", "Mike", sqlite3pp::nocopy);
48-
cmd.execute_all();
48+
expect_eq(0, cmd.execute_all());
4949

5050
sqlite3pp::query qry(db, "SELECT COUNT(*) FROM contacts");
5151
auto iter = qry.begin();
@@ -57,7 +57,7 @@ void test_insert_binder() {
5757
auto db = contacts_db();
5858
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (?, ?)");
5959
cmd.binder() << "Mike" << "555-1234";
60-
cmd.execute();
60+
expect_eq(0, cmd.execute());
6161

6262
sqlite3pp::query qry(db, "SELECT name, phone FROM contacts");
6363
auto iter = qry.begin();
@@ -72,7 +72,7 @@ void test_insert_bind1() {
7272
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (?, ?)");
7373
cmd.bind(1, "Mike", sqlite3pp::nocopy);
7474
cmd.bind(2, "555-1234", sqlite3pp::nocopy);
75-
cmd.execute();
75+
expect_eq(0, cmd.execute());
7676

7777
sqlite3pp::query qry(db, "SELECT name, phone FROM contacts");
7878
auto iter = qry.begin();
@@ -87,7 +87,7 @@ void test_insert_bind2() {
8787
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (?100, ?101)");
8888
cmd.bind(100, "Mike", sqlite3pp::nocopy);
8989
cmd.bind(101, "555-1234", sqlite3pp::nocopy);
90-
cmd.execute();
90+
expect_eq(0, cmd.execute());
9191

9292
sqlite3pp::query qry(db, "SELECT name, phone FROM contacts");
9393
auto iter = qry.begin();
@@ -102,7 +102,7 @@ void test_insert_bind3() {
102102
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)");
103103
cmd.bind(":user", "Mike", sqlite3pp::nocopy);
104104
cmd.bind(":phone", "555-1234", sqlite3pp::nocopy);
105-
cmd.execute();
105+
expect_eq(0, cmd.execute());
106106

107107
sqlite3pp::query qry(db, "SELECT name, phone FROM contacts");
108108
auto iter = qry.begin();
@@ -114,7 +114,7 @@ void test_insert_bind3() {
114114

115115
void test_query_columns() {
116116
auto db = contacts_db();
117-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
117+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
118118

119119
sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");
120120
expect_eq(3, qry.column_count());
@@ -125,7 +125,7 @@ void test_query_columns() {
125125

126126
void test_query_get() {
127127
auto db = contacts_db();
128-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
128+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
129129

130130
sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");
131131
auto iter = qry.begin();
@@ -135,7 +135,7 @@ void test_query_get() {
135135

136136
void test_query_tie() {
137137
auto db = contacts_db();
138-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
138+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
139139

140140
sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");
141141
auto iter = qry.begin();
@@ -147,7 +147,7 @@ void test_query_tie() {
147147

148148
void test_query_getter() {
149149
auto db = contacts_db();
150-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
150+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
151151

152152
sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");
153153
auto iter = qry.begin();
@@ -159,7 +159,7 @@ void test_query_getter() {
159159

160160
void test_query_iterator() {
161161
auto db = contacts_db();
162-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
162+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
163163

164164
sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");
165165
for (auto row : qry) {
@@ -173,7 +173,7 @@ void test_query_iterator() {
173173
void test_function() {
174174
auto db = contacts_db();
175175
sqlite3pp::ext::function func(db);
176-
func.create<int ()>("test_fn", []{return 100;});
176+
expect_eq(0, func.create<int ()>("test_fn", []{return 100;}));
177177

178178
sqlite3pp::query qry(db, "SELECT test_fn()");
179179
auto iter = qry.begin();
@@ -186,7 +186,7 @@ void test_function_args() {
186186
sqlite3pp::ext::function func(db);
187187
func.create<string (string)>("test_fn", [](const string& name){return "Hello " + name;});
188188

189-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
189+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
190190

191191
sqlite3pp::query qry(db, "SELECT name, test_fn(name) FROM contacts");
192192
auto iter = qry.begin();
@@ -212,8 +212,8 @@ void test_aggregate() {
212212
sqlite3pp::ext::aggregate aggr(db);
213213
aggr.create<strlen_aggr, string>("strlen_aggr");
214214

215-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");
216-
db.execute("INSERT INTO contacts (name, phone) VALUES ('Janette', '555-4321')");
215+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')"));
216+
expect_eq(0, db.execute("INSERT INTO contacts (name, phone) VALUES ('Janette', '555-4321')"));
217217

218218
sqlite3pp::query qry(db, "SELECT strlen_aggr(name), strlen_aggr(phone) FROM contacts");
219219
auto iter = qry.begin();
@@ -230,6 +230,28 @@ void test_invalid_path() {
230230
expect_true(false);
231231
}
232232

233+
void test_reset() {
234+
auto db = contacts_db();
235+
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)");
236+
cmd.bind(":user", "Mike", sqlite3pp::nocopy);
237+
cmd.bind(":phone", "555-1234", sqlite3pp::nocopy);
238+
expect_eq(0, cmd.execute());
239+
240+
cmd.reset();
241+
cmd.bind(":user", "Janette", sqlite3pp::nocopy);
242+
expect_eq(0, cmd.execute());
243+
244+
sqlite3pp::query qry(db, "SELECT COUNT(*) FROM contacts");
245+
auto iter = qry.begin();
246+
int count = (*iter).get<int>(0);
247+
expect_eq(2, count);
248+
249+
cmd.reset();
250+
cmd.clear_bindings();
251+
cmd.bind(":user", "Dave", sqlite3pp::nocopy);
252+
expect_eq(SQLITE_CONSTRAINT, cmd.execute());
253+
}
254+
233255
int main()
234256
{
235257
test_insert_execute();
@@ -247,6 +269,7 @@ int main()
247269
test_function_args();
248270
test_aggregate();
249271
test_invalid_path();
272+
test_reset();
250273
}
251274

252275
sqlite3pp::database contacts_db() {

0 commit comments

Comments
 (0)