diff --git a/include/SQLiteCpp/Statement.h b/include/SQLiteCpp/Statement.h index c1b4e3c..199aebd 100644 --- a/include/SQLiteCpp/Statement.h +++ b/include/SQLiteCpp/Statement.h @@ -629,6 +629,9 @@ public: return mbDone; } + /// Return the number of bind parameters in the statement + int getBindParameterCount() const noexcept; + /// Return the numeric result code for the most recent failed API call (if any). int getErrorCode() const noexcept; // nothrow /// Return the extended numeric result code for the most recent failed API call (if any). diff --git a/src/Statement.cpp b/src/Statement.cpp index 9cb5856..a890697 100644 --- a/src/Statement.cpp +++ b/src/Statement.cpp @@ -391,6 +391,11 @@ int Statement::getColumnIndex(const char* apName) const return (*iIndex).second; } +int Statement::getBindParameterCount() const noexcept +{ + return sqlite3_bind_parameter_count(mStmtPtr); +} + // Return the numeric result code for the most recent failed API call (if any). int Statement::getErrorCode() const noexcept // nothrow { diff --git a/tests/Statement_test.cpp b/tests/Statement_test.cpp index 1fe071b..4d31e5d 100644 --- a/tests/Statement_test.cpp +++ b/tests/Statement_test.cpp @@ -831,3 +831,18 @@ TEST(Statement, bind64bitsLong) { EXPECT_EQ(4294967297L, query.getColumn(0).getInt64()); } #endif + +TEST(Statement, getBindParameterCount) { + // Create a new database + SQLite::Database db(":memory:", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); + EXPECT_EQ(0, db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, msg TEXT)")); + + SQLite::Statement query(db, "SELECT id, msg FROM test where id = ?"); + EXPECT_EQ(1, query.getBindParameterCount()); + + SQLite::Statement query2(db, "SELECT id, msg FROM test where id = ? and msg = ?"); + EXPECT_EQ(2, query2.getBindParameterCount()); + + SQLite::Statement query3(db, "SELECT id, msg FROM test"); + EXPECT_EQ(0, query3.getBindParameterCount()); +}