@Override
 public ResultSet executeQuery(final String sql) throws SQLException {
   if (null != currentResultSet && !currentResultSet.isClosed()) {
     currentResultSet.close();
   }
   currentResultSet =
       ResultSetFactory.getResultSet(generateExecutor(sql).executeQuery(), mergeContext);
   return currentResultSet;
 }
 @Override
 public ResultSet getResultSet() throws SQLException {
   if (null != currentResultSet) {
     return currentResultSet;
   }
   List<ResultSet> resultSets = new ArrayList<>(getRoutedStatements().size());
   for (Statement each : getRoutedStatements()) {
     resultSets.add(each.getResultSet());
   }
   currentResultSet = ResultSetFactory.getResultSet(resultSets, mergeContext);
   return currentResultSet;
 }