in tools/query_verification/src/main/java/com/google/bigquery/BigQueryManager.java [282:338]
public List<Object> parseResults(FieldValueList values, FieldList fields) {
List<Object> results = new ArrayList<Object>();
for (int i = 0; i < values.size(); i++) {
FieldValue value = values.get(i);
// Identify type of the value
StandardSQLTypeName type = fields.get(i).getType().getStandardType();
Object result;
try {
switch (type) {
case BOOL:
result = value.getBooleanValue();
break;
case FLOAT64:
result = BigDecimal.valueOf(value.getDoubleValue()).setScale(QueryVerifier.DECIMAL_PRECISION, RoundingMode.FLOOR);
break;
case INT64:
result = value.getLongValue();
break;
case NUMERIC:
result = value.getNumericValue().setScale(QueryVerifier.DECIMAL_PRECISION, RoundingMode.FLOOR);
break;
case STRUCT:
FieldList subFields = fields.get(i).getSubFields();
FieldValueList subValues = value.getRecordValue();
result = parseResults(subValues, subFields);
break;
case DATE:
result = new SimpleDateFormat("yyyy-MM-dd").parse(value.getStringValue());
break;
case DATETIME:
result = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSS").parse(value.getStringValue());
break;
case TIME:
result = new SimpleDateFormat("hh:mm:ss.SSSSSS").parse(value.getStringValue());
break;
case TIMESTAMP:
result = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS zzz").parse(value.getStringValue());
break;
case STRING:
result = value.getStringValue();
break;
default:
// Handle unknown/unsupported types as String
System.err.println("Warning: Unsupported type: " + type.name());
result = value.getStringValue();
}
} catch (ParseException e) {
result = Optional.empty();
}
results.add(result);
}
return results;
}