private def valueCanMakeFilterOn()

in spark/src/main/scala/org/apache/comet/parquet/ParquetFilters.scala [624:655]


  private def valueCanMakeFilterOn(name: String, value: Any): Boolean = {
    value == null || (nameToParquetField(name).fieldType match {
      case ParquetBooleanType => value.isInstanceOf[JBoolean]
      case ParquetByteType | ParquetShortType | ParquetIntegerType =>
        value match {
          // Byte/Short/Int are all stored as INT32 in Parquet so filters are built using type
          // Int. We don't create a filter if the value would overflow.
          case _: JByte | _: JShort | _: Integer => true
          case v: JLong => v.longValue() >= Int.MinValue && v.longValue() <= Int.MaxValue
          case _ => false
        }
      case ParquetLongType => value.isInstanceOf[JLong]
      case ParquetFloatType => value.isInstanceOf[JFloat]
      case ParquetDoubleType => value.isInstanceOf[JDouble]
      case ParquetStringType => value.isInstanceOf[String]
      case ParquetBinaryType => value.isInstanceOf[Array[Byte]]
      case ParquetDateType =>
        value.isInstanceOf[Date] || value.isInstanceOf[LocalDate]
      case ParquetTimestampMicrosType | ParquetTimestampMillisType =>
        value.isInstanceOf[Timestamp] || value.isInstanceOf[Instant]
      case ParquetSchemaType(decimalType: DecimalLogicalTypeAnnotation, INT32, _) =>
        isDecimalMatched(value, decimalType)
      case ParquetSchemaType(decimalType: DecimalLogicalTypeAnnotation, INT64, _) =>
        isDecimalMatched(value, decimalType)
      case ParquetSchemaType(
            decimalType: DecimalLogicalTypeAnnotation,
            FIXED_LEN_BYTE_ARRAY,
            _) =>
        isDecimalMatched(value, decimalType)
      case _ => false
    })
  }