in core/src/main/java/org/apache/calcite/avatica/QueryState.java [406:451]
public static QueryState fromProto(Common.QueryState protoState) {
StateType type = StateType.fromProto(protoState.getType());
String sql = protoState.getHasSql() ? protoState.getSql() : null;
MetaDataOperation op = protoState.getHasOp()
? MetaDataOperation.fromProto(protoState.getOp()) : null;
Object[] opArgs = null;
if (protoState.getHasArgs()) {
opArgs = new Object[protoState.getArgsCount()];
int i = 0;
for (Common.MetaDataOperationArgument arg : protoState.getArgsList()) {
switch (arg.getType()) {
case STRING:
opArgs[i] = arg.getStringValue();
break;
case BOOL:
opArgs[i] = arg.getBoolValue();
break;
case INT:
opArgs[i] = arg.getIntValue();
break;
case REPEATED_STRING:
opArgs[i] = arg.getStringArrayValuesList().toArray(
new String[arg.getStringArrayValuesCount()]);
break;
case REPEATED_INT:
int[] arr = new int[arg.getIntArrayValuesCount()];
int offset = 0;
for (Integer val : arg.getIntArrayValuesList()) {
arr[offset] = val;
offset++;
}
opArgs[i] = arr;
break;
case NULL:
opArgs[i] = null;
break;
default:
throw new RuntimeException("Could not interpret " + arg.getType());
}
i++;
}
}
return new QueryState(type, sql, op, opArgs);
}