public Object castFromArray()

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));
  }