diff --git a/rdbms/StmtTest.cpp b/rdbms/StmtTest.cpp index 7cbccebfb0160a6d1ca96353b8cd2cdab8d5d382..59062c9f60dc1a0ef43ebb5cc89b0a28c2d30642 100644 --- a/rdbms/StmtTest.cpp +++ b/rdbms/StmtTest.cpp @@ -138,4 +138,44 @@ TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64) { } } +TEST_P(cta_rdbms_StmtTest, insert_with_bindUint64_2_pow_54_minus_2) { + using namespace cta::rdbms; + + // The MySql support in CTA cannot store an unsigned integer greater than + // 2^54-2 + const uint64_t insertValue = 18014398509481982; + + // 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()); + } +} + } // namespace unitTests