// @BAKE gcc -o clear_bindings clear_bindings.c -lsqlite3 #include #include #include #define DB_NAME "test.db" #define ITERATIONS 10000 void handle_error(int rc, sqlite3 *db) { if (rc != SQLITE_OK) { fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } } void clear_bindings_performance() { sqlite3 *db; sqlite3_stmt *stmt; int rc; const char *sql = "INSERT INTO test (value) VALUES (?);"; rc = sqlite3_open(DB_NAME, &db); handle_error(rc, db); rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, value TEXT);", NULL, NULL, NULL); handle_error(rc, db); rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); handle_error(rc, db); for (int i = 0; i < ITERATIONS; i++) { rc = sqlite3_bind_text(stmt, 1, "test", -1, SQLITE_STATIC); handle_error(rc, db); rc = sqlite3_step(stmt); if (rc != SQLITE_DONE) handle_error(rc, db); rc = sqlite3_clear_bindings(stmt); handle_error(rc, db); rc = sqlite3_reset(stmt); handle_error(rc, db); } sqlite3_finalize(stmt); sqlite3_close(db); } int main() { clear_bindings_performance(); return 0; }