Skip to content

Commit

Permalink
Merge pull request #347 from suketa/add_capi_duckdb_bind_null
Browse files Browse the repository at this point in the history
add C-API duckdb_bind_null
  • Loading branch information
hannes committed Nov 11, 2019
2 parents 867a2ca + bdcfbcb commit 8cb27f5
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/include/duckdb.h
Expand Up @@ -149,6 +149,7 @@ duckdb_state duckdb_bind_int64(duckdb_prepared_statement prepared_statement, ind
duckdb_state duckdb_bind_float(duckdb_prepared_statement prepared_statement, index_t param_idx, float val);
duckdb_state duckdb_bind_double(duckdb_prepared_statement prepared_statement, index_t param_idx, double val);
duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, index_t param_idx, const char *val);
duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, index_t param_idx);

//! Executes the prepared statements with currently bound parameters
duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement, duckdb_result *out_result);
Expand Down
4 changes: 4 additions & 0 deletions src/main/duckdb-c.cpp
Expand Up @@ -353,6 +353,10 @@ duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, i
return duckdb_bind_value(prepared_statement, param_idx, Value(val));
}

duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, index_t param_idx) {
return duckdb_bind_value(prepared_statement, param_idx, Value());
}

duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement, duckdb_result *out_result) {
auto wrapper = (PreparedStatementWrapper *)prepared_statement;
if (!wrapper || !wrapper->statement || !wrapper->statement->success || wrapper->statement->is_invalidated) {
Expand Down
6 changes: 6 additions & 0 deletions test/sql/capi/test_capi.cpp
Expand Up @@ -383,6 +383,12 @@ TEST_CASE("Test prepared statements in C API", "[capi]") {
REQUIRE(duckdb_value_int64(&res, 0, 0) == 44);
duckdb_destroy_result(&res);

duckdb_bind_null(stmt, 1);
status = duckdb_execute_prepared(stmt, &res);
REQUIRE(status == DuckDBSuccess);
REQUIRE(res.columns[0].nullmask[0] == true);
duckdb_destroy_result(&res);

duckdb_destroy_prepare(&stmt);
// again to make sure it does not crash
duckdb_destroy_result(&res);
Expand Down

0 comments on commit 8cb27f5

Please sign in to comment.