Alexander Belyak created IGNITE-19284:
-----------------------------------------

             Summary: 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
         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)

Reply via email to