diff --git a/include/SQLiteCpp/Statement.h b/include/SQLiteCpp/Statement.h index 4c822ed3..9c3097ab 100644 --- a/include/SQLiteCpp/Statement.h +++ b/include/SQLiteCpp/Statement.h @@ -114,6 +114,25 @@ class Statement * @brief Bind a 32bits unsigned int value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1) */ void bind(const int aIndex, const unsigned aValue); + +#if (LONG_MAX == INT_MAX) // sizeof(long)==4 means the data model of the system is ILP32 (32bits OS or Windows 64bits) + /** + * @brief Bind a 32bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1) + */ + void bind(const int aIndex, const long aValue) + { + bind(aIndex, static_cast(aValue)); + } +#else + /** + * @brief Bind a 64bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1) + */ + void bind(const int aIndex, const long aValue) + { + bind(aIndex, static_cast(aValue)); + } +#endif + /** * @brief Bind a 64bits int value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1) */ diff --git a/tests/Statement_test.cpp b/tests/Statement_test.cpp index 48355e98..79f7e804 100644 --- a/tests/Statement_test.cpp +++ b/tests/Statement_test.cpp @@ -320,10 +320,12 @@ TEST(Statement, bindings) { // reset() without clearbindings() insert.reset(); - // Sixth row with uint32_t unsigned value + // Sixth row with uint32_t unsigned value and a long value (which is either a 32b int or a 64b long long) { const uint32_t uint32 = 4294967295U; + const long integer = -123; insert.bind(2, uint32); + insert.bind(3, integer); EXPECT_EQ(1, insert.exec()); EXPECT_EQ(SQLITE_DONE, db.getErrorCode()); @@ -333,6 +335,7 @@ TEST(Statement, bindings) { EXPECT_FALSE(query.isDone()); EXPECT_EQ(6, query.getColumn(0).getInt64()); EXPECT_EQ(4294967295U, query.getColumn(2).getUInt()); + EXPECT_EQ(-123, query.getColumn(3).getInt()); } }