def canCast()

in flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/typeutils/TypeCoercion.scala [68:118]


  def canCast(
      from: LogicalType, to: LogicalType): Boolean = (from.getTypeRoot, to.getTypeRoot) match {
    case (_, _) if from == to => true

    case (_, VARCHAR | CHAR) => true

    case (VARCHAR | CHAR, _) if isNumeric(to) => true
    case (VARCHAR | CHAR, BOOLEAN) => true
    case (VARCHAR | CHAR, DECIMAL) => true
    case (VARCHAR | CHAR, DATE) => true
    case (VARCHAR | CHAR, TIME_WITHOUT_TIME_ZONE) => true
    case (VARCHAR | CHAR, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (VARCHAR | CHAR, TIMESTAMP_WITH_LOCAL_TIME_ZONE) => true

    case (BOOLEAN, _) if isNumeric(to) => true
    case (BOOLEAN, DECIMAL) => true
    case (_, BOOLEAN) if isNumeric(from) => true
    case (DECIMAL, BOOLEAN) => true

    case (_, _) if isNumeric(from) && isNumeric(to) => true
    case (_, DECIMAL) if isNumeric(from) => true
    case (DECIMAL, _) if isNumeric(to) => true
    case (DECIMAL, DECIMAL) => true
    case (INTEGER, DATE) => true
    case (INTEGER, TIME_WITHOUT_TIME_ZONE) => true
    case (TINYINT, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (SMALLINT, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (INTEGER, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (BIGINT, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (DOUBLE, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (FLOAT, TIMESTAMP_WITHOUT_TIME_ZONE) => true
    case (INTEGER, INTERVAL_YEAR_MONTH) => true
    case (BIGINT, INTERVAL_DAY_TIME) => true

    case (DATE, TIME_WITHOUT_TIME_ZONE) => false
    case (TIME_WITHOUT_TIME_ZONE, DATE) => false
    case (_, _) if isTimePoint(from) && isTimePoint(to) => true
    case (DATE, INTEGER) => true
    case (TIME_WITHOUT_TIME_ZONE, INTEGER) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, TINYINT) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, INTEGER) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, SMALLINT) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, BIGINT) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, DOUBLE) => true
    case (TIMESTAMP_WITHOUT_TIME_ZONE, FLOAT) => true

    case (INTERVAL_YEAR_MONTH, INTEGER) => true
    case (INTERVAL_DAY_TIME, BIGINT) => true

    case _ => false
  }