diff --git a/rdbms/StmtTest.cpp b/rdbms/StmtTest.cpp index 4aef36d0ce6160bcb4b3092a92329eff19c06c95..c48a794dbf3c1be48978f6624e266289f8b1ed23 100644 --- a/rdbms/StmtTest.cpp +++ b/rdbms/StmtTest.cpp @@ -231,6 +231,44 @@ TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64_2_pow_64_minus_1) { } } +TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64_2_pow_64_minus_2) { + using namespace cta::rdbms; + + const uint64_t insertValue = 18446744073709551614U; + + // Insert a row into the test table + { + const char *const sql = + "INSERT INTO STMT_TEST(" + "UINT64_COL) " + "VALUES(" + ":UINT64_COL)"; + auto stmt = m_conn.createStmt(sql); + stmt.bindUint64(":UINT64_COL", insertValue); + stmt.executeNonQuery(); + } + + // Select the row back from the table + { + const char *const sql = + "SELECT " + "UINT64_COL AS UINT64_COL " + "FROM " + "STMT_TEST"; + auto stmt = m_conn.createStmt(sql); + auto rset = stmt.executeQuery(); + ASSERT_TRUE(rset.next()); + + const auto selectValue = rset.columnOptionalUint64("UINT64_COL"); + + ASSERT_TRUE((bool)selectValue); + + ASSERT_EQ(insertValue,selectValue.value()); + + ASSERT_FALSE(rset.next()); + } +} + TEST_P(cta_rdbms_StmtTest, insert_with_bindString) { using namespace cta::rdbms; diff --git a/rdbms/wrapper/MysqlStmt.cpp b/rdbms/wrapper/MysqlStmt.cpp index 85787bcf2fa0bad7da7af6d9d636f62b3998311a..31c713947f302d15762664792cc3199e2df0ab7f 100644 --- a/rdbms/wrapper/MysqlStmt.cpp +++ b/rdbms/wrapper/MysqlStmt.cpp @@ -189,14 +189,14 @@ void MysqlStmt::bindOptionalUint64(const std::string ¶mName, const optional< const unsigned int paramIdx = getParamIdx(paramName); // starts from 1. const unsigned int idx = paramIdx - 1; - Mysql::Placeholder_Double* holder = dynamic_cast<Mysql::Placeholder_Double*>(m_placeholder[idx]); + Mysql::Placeholder_Uint64* holder = dynamic_cast<Mysql::Placeholder_Uint64*>(m_placeholder[idx]); // if already exists, try to reuse if (!holder and m_placeholder[idx]) { throw exception::Exception(std::string(__FUNCTION__) + " can't cast from Placeholder to Placeholder_Uint64. " ); } if (!holder) { - holder = new Mysql::Placeholder_Double(); + holder = new Mysql::Placeholder_Uint64(); holder->idx = idx; holder->length = sizeof(uint64_t); }