GH #192: Unsigned integer values not handled properly in result sets

This commit is contained in:
Cameron Smith
2013-06-07 15:14:18 -04:00
parent 83ad8b36f5
commit 07f33b729a
8 changed files with 58 additions and 12 deletions

View File

@@ -471,6 +471,15 @@ void MySQLTest::testBLOBStmt()
}
void MySQLTest::testUnsignedInts()
{
if (!_pSession) fail ("Test not available.");
recreateUnsignedIntsTable();
_pExecutor->unsignedInts();
}
void MySQLTest::testFloat()
{
if (!_pSession) fail ("Test not available.");
@@ -755,6 +764,15 @@ void MySQLTest::recreateStringsTable()
}
void MySQLTest::recreateUnsignedIntsTable()
{
dropTable("Strings");
try { *_pSession << "CREATE TABLE Strings (str INTEGER UNSIGNED)", now; }
catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail ("recreateUnsignedIntegersTable()"); }
catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail ("recreateUnsignedIntegersTable()"); }
}
void MySQLTest::recreateFloatsTable()
{
dropTable("Strings");

View File

@@ -99,6 +99,7 @@ public:
void testBLOB();
void testBLOBStmt();
void testUnsignedInts();
void testFloat();
void testDouble();
@@ -134,6 +135,7 @@ private:
void recreatePersonTimeTable();
void recreateStringsTable();
void recreateIntsTable();
void recreateUnsignedIntsTable();
void recreateFloatsTable();
void recreateTuplesTable();
void recreateVectorsTable();

View File

@@ -497,6 +497,29 @@ void SQLExecutor::insertSingleBulk()
}
void SQLExecutor::unsignedInts()
{
std::string funct = "unsignedInts()";
unsigned int data = UINT32_MAX;
unsigned int ret = 0;
try { *_pSession << "INSERT INTO Strings VALUES (?)", use(data), now; }
catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); }
catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); }
int count = 0;
try { *_pSession << "SELECT COUNT(*) FROM Strings", into(count), now; }
catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); }
catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); }
assert (count == 1);
try { *_pSession << "SELECT str FROM Strings", into(ret), now; }
catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); }
catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); }
assert (ret == data);
}
void SQLExecutor::floats()
{
std::string funct = "floats()";

View File

@@ -105,6 +105,7 @@ public:
void dateTime();
void date();
void time();
void unsignedInts();
void floats();
void doubles();
void tuples();