public static boolean canConvert()

in java/core/src/java/org/apache/orc/impl/ConvertTreeReaderFactory.java [2445:2548]


  public static boolean canConvert(TypeDescription fileType, TypeDescription readerType) {

    Category readerTypeCategory = readerType.getCategory();

    // We don't convert from any to complex.
    switch (readerTypeCategory) {
      case STRUCT:
      case LIST:
      case MAP:
      case UNION:
        return false;

      default:
        // Fall through.
    }

    // Now look for the few cases we don't convert from
    switch (fileType.getCategory()) {

      case BOOLEAN:
      case BYTE:
      case SHORT:
      case INT:
      case LONG:
      case FLOAT:
      case DOUBLE:
      case DECIMAL:
        switch (readerType.getCategory()) {
          // Not currently supported conversion(s):
          case BINARY:
          case DATE:
            return false;
          default:
            return true;
        }


      case STRING:
      case CHAR:
      case VARCHAR:
        switch (readerType.getCategory()) {
          // Not currently supported conversion(s):
          // (None)
          default:
            return true;
        }

      case TIMESTAMP:
      case TIMESTAMP_INSTANT:
        switch (readerType.getCategory()) {
          // Not currently supported conversion(s):
          case BINARY:
            return false;
          default:
            return true;
        }

      case DATE:
        switch (readerType.getCategory()) {
          // Not currently supported conversion(s):
          case BOOLEAN:
          case BYTE:
          case FLOAT:
          case SHORT:
          case INT:
          case LONG:
          case DOUBLE:
          case BINARY:
          case DECIMAL:
            return false;
          default:
            return true;
        }

      case BINARY:
        switch (readerType.getCategory()) {
          // Not currently supported conversion(s):
          case BOOLEAN:
          case BYTE:
          case FLOAT:
          case SHORT:
          case INT:
          case LONG:
          case DOUBLE:
          case TIMESTAMP:
          case TIMESTAMP_INSTANT:
          case DECIMAL:
            return false;
          default:
            return true;
        }

        // We don't convert from complex to any.
      case STRUCT:
      case LIST:
      case MAP:
      case UNION:
        return false;

      default:
        throw new IllegalArgumentException("Unsupported type " +
            fileType.getCategory());
    }
  }