public ResultSetResponse toResponse()

in core/src/main/java/org/apache/calcite/avatica/remote/LocalService.java [85:141]


  public ResultSetResponse toResponse(Meta.MetaResultSet resultSet) {
    if (resultSet.updateCount != -1) {
      return new ResultSetResponse(resultSet.connectionId,
          resultSet.statementId, resultSet.ownStatement, null, null,
          resultSet.updateCount, serverLevelRpcMetadata);
    }

    Meta.Signature signature = resultSet.signature;
    // TODO Revise modification of CursorFactory see:
    // https://issues.apache.org/jira/browse/CALCITE-4567
    Meta.CursorFactory cursorFactory = resultSet.signature.cursorFactory;
    Meta.Frame frame = null;
    int updateCount = -1;
    final List<Object> list;

    if (resultSet.firstFrame != null) {
      list = list(resultSet.firstFrame.rows);
      if (list.isEmpty()) {
        cursorFactory = Meta.CursorFactory.LIST;
      } else {
        switch (cursorFactory.style) {
        case ARRAY:
          cursorFactory = Meta.CursorFactory.LIST;
          break;
        case MAP:
        case LIST:
          break;
        case RECORD:
          cursorFactory = Meta.CursorFactory.map(cursorFactory.fieldNames);
          break;
        default:
          throw new IllegalStateException("Unknown cursor factory style: "
              + cursorFactory.style);
        }
      }
      final boolean done = resultSet.firstFrame.done;

      frame = new Meta.Frame(0, done, list);
      updateCount = -1;

      if (signature.statementType != null) {
        if (signature.statementType.canUpdate()) {
          frame = null;
          updateCount = ((Number) ((List) list.get(0)).get(0)).intValue();
        }
      }
    } else {
      cursorFactory = Meta.CursorFactory.LIST;
    }

    if (cursorFactory != resultSet.signature.cursorFactory) {
      signature = signature.setCursorFactory(cursorFactory);
    }

    return new ResultSetResponse(resultSet.connectionId, resultSet.statementId,
        resultSet.ownStatement, signature, frame, updateCount, serverLevelRpcMetadata);
  }