Pavel Pereslegin created IGNITE-22546:
-----------------------------------------

             Summary: Improve SQL script results processing in CLI
                 Key: IGNITE-22546
                 URL: https://issues.apache.org/jira/browse/IGNITE-22546
             Project: Ignite
          Issue Type: Improvement
          Components: cli
            Reporter: Pavel Pereslegin


{{SqlManager#execute}} does not process all the results of script execution.

{code:java}
        try (Statement statement = connection.createStatement()) {
            if (statement.execute(sql)) {
                ResultSet resultSet = statement.getResultSet();
                return new SqlQueryResult(Table.fromResultSet(resultSet));
            }
            int updateCount = statement.getUpdateCount();
            return new SqlQueryResult(updateCount >= 0 ? "Updated " + 
updateCount + " rows." : "OK!");
        }
{code}

Here we read only the result of executing the first statement. But JDBC 
supports the ability to read the execution results of all statements.

Example:

{code:java}
    do {
        System.out.println("---");

        if (stmt.getUpdateCount() != -1) {
            System.out.println("update count: " + stmt.getUpdateCount());

            continue;
        }

        try (ResultSet rs = stmt.getResultSet()) {
            while (rs.next()) {
                List<Object> row = new ArrayList<>();
                for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
                    row.add(rs.getObject(i + 1));
                }

                System.out.println("row: " + row);
            }
        }
    } while (stmt.getMoreResults() || stmt.getUpdateCount() != -1);
{code}

I suggest to improve script processing in {{SqlManager#execute}}.

I'm not sure what to do with the result sets, but beware that current 
"resultSet" will be closed when {{getMoreResults()}} is called (AI3 JDBC 
implementation limitation).

At least, it's worth returning the correct number of updates for the entire 
script (but again I'm not sure if it should be one total value or multiple 
values ​​for each statement).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to