in api/src/main/java/org/apache/iceberg/transforms/SortOrderVisitor.java [66:122]
static <R> List<R> visit(SortOrder sortOrder, SortOrderVisitor<R> visitor) {
Schema schema = sortOrder.schema();
List<R> results = Lists.newArrayListWithExpectedSize(sortOrder.fields().size());
for (SortField field : sortOrder.fields()) {
String sourceName = schema.findColumnName(field.sourceId());
Transform<?, ?> transform = field.transform();
if (transform == null || transform instanceof Identity) {
results.add(
visitor.field(sourceName, field.sourceId(), field.direction(), field.nullOrder()));
} else if (transform instanceof Bucket) {
int numBuckets = ((Bucket<?>) transform).numBuckets();
results.add(
visitor.bucket(
sourceName, field.sourceId(), numBuckets, field.direction(), field.nullOrder()));
} else if (transform instanceof Truncate) {
int width = ((Truncate<?>) transform).width();
results.add(
visitor.truncate(
sourceName, field.sourceId(), width, field.direction(), field.nullOrder()));
} else if (transform == Dates.YEAR
|| transform == Timestamps.MICROS_TO_YEAR
|| transform == Timestamps.NANOS_TO_YEAR
|| transform instanceof Years) {
results.add(
visitor.year(sourceName, field.sourceId(), field.direction(), field.nullOrder()));
} else if (transform == Dates.MONTH
|| transform == Timestamps.MICROS_TO_MONTH
|| transform == Timestamps.NANOS_TO_MONTH
|| transform instanceof Months) {
results.add(
visitor.month(sourceName, field.sourceId(), field.direction(), field.nullOrder()));
} else if (transform == Dates.DAY
|| transform == Timestamps.MICROS_TO_DAY
|| transform == Timestamps.NANOS_TO_DAY
|| transform instanceof Days) {
results.add(
visitor.day(sourceName, field.sourceId(), field.direction(), field.nullOrder()));
} else if (transform == Timestamps.MICROS_TO_HOUR
|| transform == Timestamps.NANOS_TO_HOUR
|| transform instanceof Hours) {
results.add(
visitor.hour(sourceName, field.sourceId(), field.direction(), field.nullOrder()));
} else if (transform instanceof UnknownTransform) {
results.add(
visitor.unknown(
sourceName,
field.sourceId(),
transform.toString(),
field.direction(),
field.nullOrder()));
}
}
return results;
}