in src/main/java/com/aliyun/odps/jdbc/OdpsStatement.java [553:605]
public ResultSet getResultSet() throws SQLException {
long startTime = System.currentTimeMillis();
if ((resultSet == null || resultSet.isClosed()) && odpsResultSet != null) {
OdpsResultSetMetaData
meta =
getResultMeta(odpsResultSet.getTableSchema().getColumns());
try {
if (!isResultSetScrollable || sqlExecutor.getInstance() == null) {
resultSet = new OdpsSessionForwardResultSet(this, meta, odpsResultSet, startTime);
} else {
DownloadSession session;
InstanceTunnel tunnel = new InstanceTunnel(connHandle.getOdps());
String te = connHandle.getTunnelEndpoint();
if (!StringUtils.isNullOrEmpty(te)) {
connHandle.log.info("using tunnel endpoint: " + te);
tunnel.setEndpoint(te);
}
if (connHandle.getTunnelConnectTimeout() >= 0) {
tunnel.getConfig().setSocketConnectTimeout(connHandle.getTunnelConnectTimeout());
}
if (connHandle.getTunnelReadTimeout() >= 0) {
tunnel.getConfig().setSocketTimeout(connHandle.getTunnelReadTimeout());
}
session = tunnel.createDirectDownloadSession(
connHandle.getOdps().getDefaultProject(),
sqlExecutor.getInstance().getId(),
sqlExecutor.getTaskName(),
sqlExecutor.getSubqueryId(),
enableLimit);
resultSet = new OdpsScollResultSet(this, meta, session,
sqlExecutor
.getExecuteMode() == ExecuteMode.INTERACTIVE
? OdpsScollResultSet.ResultMode.INTERACTIVE
: OdpsScollResultSet.ResultMode.OFFLINE);
}
odpsResultSet = null;
} catch (TunnelException e) {
connHandle.log.error("create download session for session failed: " + e.getMessage());
e.printStackTrace();
throw new SQLException("create session resultset failed: instance id="
+ sqlExecutor.getInstance().getId() + ", Error:" + e
.getMessage(), e);
} catch (IOException e) {
connHandle.log.error("create download session for session failed: " + e.getMessage());
e.printStackTrace();
throw new SQLException("create session resultset failed: instance id="
+ sqlExecutor.getInstance().getId() + ", Error:" + e
.getMessage(), e);
}
}
return resultSet;
}