Fix binding of long values

This commit is contained in:
2023-06-08 14:38:27 -05:00
parent eb151f0610
commit 4ccc726f2e
2 changed files with 54 additions and 4 deletions

View File

@ -681,7 +681,7 @@ public class QueryManager
}
else if(value instanceof Long l)
{
bindParam(statement, index, l.intValue());
bindParam(statement, index, l.longValue());
return (1);
}
else if(value instanceof Double d)
@ -859,6 +859,23 @@ public class QueryManager
/*******************************************************************************
*
*******************************************************************************/
public static void bindParam(PreparedStatement statement, int index, Long value) throws SQLException
{
if(value == null)
{
statement.setNull(index, Types.INTEGER);
}
else
{
statement.setLong(index, value);
}
}
/*******************************************************************************
*
*******************************************************************************/

View File

@ -48,6 +48,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/*******************************************************************************
@ -70,7 +71,8 @@ class QueryManagerTest extends BaseTest
datetime_col DATETIME,
char_col CHAR(1),
date_col DATE,
time_col TIME
time_col TIME,
long_col LONG
)
""");
}
@ -151,6 +153,33 @@ class QueryManagerTest extends BaseTest
QueryManager.bindParam(ps, 1, new GregorianCalendar());
QueryManager.bindParam(ps, 1, LocalDate.now());
QueryManager.bindParam(ps, 1, LocalDateTime.now());
////////////////////////////////////////////////////////////////////////////////////////////////
// originally longs were being downgraded to int when binding, so, verify that doesn't happen //
////////////////////////////////////////////////////////////////////////////////////////////////
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void testLongBinding() throws SQLException
{
Long biggerThanMaxInteger = 2147483648L;
Connection connection = getConnection();
PreparedStatement ps = connection.prepareStatement("INSERT INTO test_table (long_col) VALUES (?)");
QueryManager.bindParam(ps, 1, biggerThanMaxInteger);
ps.execute();
ps = connection.prepareStatement("SELECT long_col FROM test_table WHERE long_col = ?");
QueryManager.bindParam(ps, 1, biggerThanMaxInteger);
ps.execute();
ResultSet rs = ps.getResultSet();
assertTrue(rs.next());
assertEquals(biggerThanMaxInteger, QueryManager.getLong(rs, "long_col"));
}
@ -161,9 +190,11 @@ class QueryManagerTest extends BaseTest
@Test
void testGetValueMethods() throws SQLException
{
Long biggerThanMaxInteger = 2147483648L;
Connection connection = getConnection();
QueryManager.executeUpdate(connection, "INSERT INTO test_table (int_col, datetime_col, char_col) VALUES (1, now(), 'A')");
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from test_table");
QueryManager.executeUpdate(connection, "INSERT INTO test_table (int_col, datetime_col, char_col, long_col) VALUES (1, now(), 'A', " + biggerThanMaxInteger + ")");
PreparedStatement preparedStatement = connection.prepareStatement("SELECT int_col, datetime_col, char_col, long_col from test_table");
preparedStatement.execute();
ResultSet rs = preparedStatement.getResultSet();
rs.next();
@ -194,6 +225,8 @@ class QueryManagerTest extends BaseTest
assertNotNull(QueryManager.getTimestamp(rs, 2));
assertEquals("A", QueryManager.getObject(rs, "char_col"));
assertEquals("A", QueryManager.getObject(rs, 3));
assertEquals(biggerThanMaxInteger, QueryManager.getLong(rs, "long_col"));
assertEquals(biggerThanMaxInteger, QueryManager.getLong(rs, 4));
}