in flink/flink1.15-shims/src/main/java/org/apache/zeppelin/flink/PrintUtils.java [91:251]
private static Object formattedTimestamp(
Object field, LogicalType fieldType, ZoneId sessionTimeZone) {
final LogicalTypeRoot typeRoot = fieldType.getTypeRoot();
if (field == null) {
return "null";
}
switch (typeRoot) {
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return formatTimestampField(field, fieldType, sessionTimeZone);
case TIME_WITHOUT_TIME_ZONE:
return formatTimeField(field);
case ARRAY:
LogicalType elementType = ((ArrayType) fieldType).getElementType();
if (field instanceof List) {
List<?> array = (List<?>) field;
Object[] formattedArray = new Object[array.size()];
for (int i = 0; i < array.size(); i++) {
formattedArray[i] =
formattedTimestamp(array.get(i), elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass().isArray()) {
// primitive type
if (field.getClass() == byte[].class) {
byte[] array = (byte[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == short[].class) {
short[] array = (short[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == int[].class) {
int[] array = (int[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == long[].class) {
long[] array = (long[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == float[].class) {
float[] array = (float[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == double[].class) {
double[] array = (double[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == boolean[].class) {
boolean[] array = (boolean[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else if (field.getClass() == char[].class) {
char[] array = (char[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
} else {
// non-primitive type
Object[] array = (Object[]) field;
Object[] formattedArray = new Object[array.length];
for (int i = 0; i < array.length; i++) {
formattedArray[i] =
formattedTimestamp(array[i], elementType, sessionTimeZone);
}
return formattedArray;
}
} else {
return field;
}
case ROW:
if (fieldType instanceof RowType && field instanceof Row) {
Row row = (Row) field;
Row formattedRow = new Row(row.getKind(), row.getArity());
for (int i = 0; i < ((RowType) fieldType).getFields().size(); i++) {
LogicalType type = ((RowType) fieldType).getFields().get(i).getType();
formattedRow.setField(
i, formattedTimestamp(row.getField(i), type, sessionTimeZone));
}
return formattedRow;
} else if (fieldType instanceof RowType && field instanceof RowData) {
RowData rowData = (RowData) field;
Row formattedRow = new Row(rowData.getRowKind(), rowData.getArity());
for (int i = 0; i < ((RowType) fieldType).getFields().size(); i++) {
LogicalType type = ((RowType) fieldType).getFields().get(i).getType();
RowData.FieldGetter fieldGetter = RowData.createFieldGetter(type, i);
formattedRow.setField(
i,
formattedTimestamp(
fieldGetter.getFieldOrNull(rowData),
type,
sessionTimeZone));
}
return formattedRow;
} else {
return field;
}
case MAP:
LogicalType keyType = ((MapType) fieldType).getKeyType();
LogicalType valueType = ((MapType) fieldType).getValueType();
if (fieldType instanceof MapType && field instanceof Map) {
Map<Object, Object> map = ((Map) field);
Map<Object, Object> formattedMap = new HashMap<>(map.size());
for (Object key : map.keySet()) {
formattedMap.put(
formattedTimestamp(key, keyType, sessionTimeZone),
formattedTimestamp(map.get(key), valueType, sessionTimeZone));
}
return formattedMap;
} else if (fieldType instanceof MapType && field instanceof MapData) {
MapData map = ((MapData) field);
Map<Object, Object> formattedMap = new HashMap<>(map.size());
Object[] keyArray =
(Object[]) formattedTimestamp(map.keyArray(), keyType, sessionTimeZone);
Object[] valueArray =
(Object[])
formattedTimestamp(
map.valueArray(), valueType, sessionTimeZone);
for (int i = 0; i < keyArray.length; i++) {
formattedMap.put(keyArray[i], valueArray[i]);
}
return formattedMap;
} else {
return field;
}
default:
return field;
}
}