[ https://issues.apache.org/jira/browse/IGNITE-19284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17714945#comment-17714945 ]
Yury Gerzhedovich commented on IGNITE-19284: -------------------------------------------- For most databases using dynamic parameters for interval type is not so trivial and usually has a different syntax than directly using the type. One of the working syntaxes is used explicitly cast dynamic parameters to INTERVAL TYPE, like a select id, val from testTable where val <= DATE '1990-01-01' - ?::INTERVAL DAY and pass parameters as int for example. But right now the query fails at TypeUtils#toInternal() during convert int to Duration. As WA could be used set parameter for the case not as int but as an instance of Duration class, like ps.setObject(1, Duration.ofDays(1)); > SQL Prepared statement interval parsing: Failed to parse query: Encountered "" > ------------------------------------------------------------------------------ > > Key: IGNITE-19284 > URL: https://issues.apache.org/jira/browse/IGNITE-19284 > Project: Ignite > Issue Type: Bug > Components: sql > Affects Versions: 3.0 > Reporter: Alexander Belyak > Priority: Major > Labels: ignite-3 > Attachments: interval.zip > > > Query with parameter for interval fails while it executing through > PreparedStatement: > 1) Start ignite3 single node cluster > 2) Execute: > {noformat} > import java.sql.Connection; > import java.sql.DriverManager; > import java.sql.PreparedStatement; > import java.sql.ResultSet; > import java.sql.SQLException; > import java.sql.Statement; > public class TimeoutExceptionReproducer { > private static final String DB_URL = "jdbc:ignite:thin://127.0.0.1:10800"; > public static void main(String[] args) throws SQLException { > try (Connection connection = DriverManager.getConnection(DB_URL)) { > parce(connection); > } > } > public static void parce(Connection connection) throws SQLException { > try (Statement stmt = connection.createStatement()) { > stmt.executeUpdate("create table testTable (id int primary key, > val date not null)"); > } > System.out.println("Table created"); > try (Statement stmt = connection.createStatement()) { > try (ResultSet rs = stmt.executeQuery("select id, val from > testTable where val <= DATE '1990-01-01' - interval 1 day")) { > while (rs.next()) { > // No op > } > } > } > System.out.println("Statement done"); > try (PreparedStatement ps = connection.prepareStatement( > "select id, val from testTable where val <= DATE '1990-01-01' - > interval ? day")) { > ps.setInt(1, 1); > // Or > //ps.setString(1, "1"); > try (ResultSet rs = ps.executeQuery()) { > while(rs.next()) { > // NoOp > } > } > } > System.out.println("Prepared statement done"); > } > }{noformat} > Return error: > {noformat} > Table created > Apr 13, 2023 11:49:53 AM org.apache.ignite.internal.logger.IgniteLogger > logInternal > INFO: Partition assignment change notification received > [remoteAddress=127.0.0.1/<unresolved>:10800] > Exception in thread "main" java.sql.SQLException: Exception while executing > query [query=select id, val from testTable where val <= DATE '1990-01-01' - > interval ? day]. Error message:IGN-SQL-3 > TraceId:14caecea-db6f-4948-8a21-ae5f5efae06b Failed to parse query: > Encountered "" at line 1, column 62. > Statement done > Was expecting one of: > > at > org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57) > at > org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148) > at > org.apache.ignite.internal.jdbc.JdbcPreparedStatement.executeWithArguments(JdbcPreparedStatement.java:657) > at > org.apache.ignite.internal.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:85) > at TimeoutExceptionReproducer.parce(TimeoutExceptionReproducer.java:36) > at > TimeoutExceptionReproducer.main(TimeoutExceptionReproducer.java:13)Process > finished with exit code 1{noformat} > There is nothing in the server logs, even on -- This message was sent by Atlassian Jira (v8.20.10#820010)