Please log a bug, with a test case. Maybe we use some callback to create a connection. And maybe if you are using an anonymous class it causes the connection to be garbage-collected sooner.
Julian > On May 19, 2017, at 1:24 PM, Laptop huawei <[email protected]> wrote: > > Hi, > > I am using RelRunners to execute pre-built relnode tree. It works perfectly > when I put the following code in the junit class: > > protected String execute(RelNode rel) { > try (final PreparedStatement preparedStatement = RelRunners.run(rel)) { > final ResultSet resultSet = preparedStatement.executeQuery(); > return printResult(resultSet, true); > } catch (SQLException e) { > throw new RuntimeException(e); > } > } > > However,if I put these code inside a src class, the returned resultSet is > closed. > > More interestingly, if I expand the RelRunners.run() in the method like this: > > public static ResultSet execute(RelNode rel) { > /* > try (final PreparedStatement preparedStatement = RelRunners.run(rel)) { > return preparedStatement.executeQuery(); > } catch (SQLException e) { > throw new AQLExecuteErrorException(e); > } > */ > try (Connection connection = > DriverManager.getConnection("jdbc:calcite:")) { > final RelRunner runner = connection.unwrap(RelRunner.class); > PreparedStatement preparedStatement = runner.prepare(rel); > return preparedStatement.executeQuery(); > } catch (SQLException e) { > throw new AQLExecuteErrorException(e); > } > } > > It works again. > > Has anyone seen this behavior before or has any insights? Thanks, > > -JD
