in java/common/src/main/java/org/apache/tsfile/enums/TSDataType.java [278:377]
public Object castFromArray(TSDataType sourceType, Object array) {
switch (this) {
case BOOLEAN:
if (sourceType == TSDataType.BOOLEAN) {
return array;
} else {
break;
}
case INT32:
if (sourceType == TSDataType.INT32) {
return array;
} else {
break;
}
case INT64:
if (sourceType == TSDataType.INT64) {
return array;
} else if (sourceType == INT32) {
return Arrays.stream((int[]) array).mapToLong(Long::valueOf).toArray();
} else if (sourceType == TIMESTAMP) {
return array;
} else {
break;
}
case FLOAT:
if (sourceType == TSDataType.FLOAT) {
return array;
} else if (sourceType == INT32) {
int[] tmp = (int[]) array;
float[] result = new float[tmp.length];
for (int i = 0; i < tmp.length; i++) {
result[i] = tmp[i];
}
return result;
} else {
break;
}
case DOUBLE:
if (sourceType == TSDataType.DOUBLE) {
return array;
} else if (sourceType == INT32) {
return Arrays.stream((int[]) array).mapToDouble(Double::valueOf).toArray();
} else if (sourceType == INT64) {
return Arrays.stream((long[]) array).mapToDouble(Double::valueOf).toArray();
} else if (sourceType == FLOAT) {
float[] tmp = (float[]) array;
double[] result = new double[tmp.length];
for (int i = 0; i < tmp.length; i++) {
result[i] = tmp[i];
}
return result;
} else if (sourceType == TIMESTAMP) {
return Arrays.stream((long[]) array).mapToDouble(Double::valueOf).toArray();
} else {
break;
}
case TEXT:
if (sourceType == TSDataType.TEXT || sourceType == STRING) {
return array;
} else {
break;
}
case TIMESTAMP:
if (sourceType == TSDataType.TIMESTAMP) {
return array;
} else if (sourceType == INT32) {
return Arrays.stream((int[]) array).mapToLong(Long::valueOf).toArray();
} else if (sourceType == INT64) {
return array;
} else {
break;
}
case DATE:
if (sourceType == TSDataType.DATE) {
return array;
} else {
break;
}
case BLOB:
if (sourceType == TSDataType.BLOB
|| sourceType == TSDataType.STRING
|| sourceType == TSDataType.TEXT) {
return array;
} else {
break;
}
case STRING:
if (sourceType == TSDataType.STRING || sourceType == TSDataType.TEXT) {
return array;
} else {
break;
}
case VECTOR:
case UNKNOWN:
default:
break;
}
throw new ClassCastException(
String.format("Unsupported cast: from %s to %s", sourceType, this));
}