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);
}