Alexander Belyak created IGNITE-16830:
-----------------------------------------
Summary: Wrong prepared statement type casting
Key: IGNITE-16830
URL: https://issues.apache.org/jira/browse/IGNITE-16830
Project: Ignite
Issue Type: Bug
Components: jdbc
Affects Versions: 2.11.1
Reporter: Alexander Belyak
Apache Ignite ignores numeric parameter types in PreparedStatement. I mean it
ignores "long" type of parameter and uses it as an integer, so
{noformat}
select 912456000000 - ? * 86400000{noformat}
{color:#172b4d}with parameter value (long)220
{color}
{noformat}
try (Connection conn =
DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/")) {
//try(Connection conn =
DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/test","postgres",
"postgres")) {
try (PreparedStatement select = conn.prepareStatement("select 912456000000 - ?
* 86400000")) {
select.setLong(1, 220);
ResultSet rs = select.executeQuery();
rs.next();
System.out.println("======== " + rs.getLong(1));
}
}
{noformat}
{color:#172b4d}leads to
{color}
{noformat}
Numeric value out of range: "19008000000"{noformat}
on Ignite, but work great on PGSQL (for example).
And it works if we convert the parameter explicitly:
{noformat}
select 912456000000 - cast(? as bigint) * 86400000{noformat}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)