private def toTColumnValue()

in externals/kyuubi-flink-sql-engine/src/main/scala/org/apache/kyuubi/engine/flink/schema/RowSet.scala [91:173]


  private def toTColumnValue(
      ordinal: Int,
      row: Row,
      resultSet: ResultSet,
      zoneId: ZoneId): TColumnValue = {

    val column = resultSet.getColumns.get(ordinal)
    val logicalType = column.getDataType.getLogicalType

    logicalType match {
      case _: BooleanType =>
        val boolValue = new TBoolValue
        if (row.getField(ordinal) != null) {
          boolValue.setValue(row.getField(ordinal).asInstanceOf[Boolean])
        }
        TColumnValue.boolVal(boolValue)
      case _: TinyIntType =>
        val tByteValue = new TByteValue
        if (row.getField(ordinal) != null) {
          tByteValue.setValue(row.getField(ordinal).asInstanceOf[Byte])
        }
        TColumnValue.byteVal(tByteValue)
      case _: SmallIntType =>
        val tI16Value = new TI16Value
        if (row.getField(ordinal) != null) {
          tI16Value.setValue(row.getField(ordinal).asInstanceOf[Short])
        }
        TColumnValue.i16Val(tI16Value)
      case _: IntType =>
        val tI32Value = new TI32Value
        if (row.getField(ordinal) != null) {
          tI32Value.setValue(row.getField(ordinal).asInstanceOf[Int])
        }
        TColumnValue.i32Val(tI32Value)
      case _: BigIntType =>
        val tI64Value = new TI64Value
        if (row.getField(ordinal) != null) {
          tI64Value.setValue(row.getField(ordinal).asInstanceOf[Long])
        }
        TColumnValue.i64Val(tI64Value)
      case _: FloatType =>
        val tDoubleValue = new TDoubleValue
        if (row.getField(ordinal) != null) {
          val doubleValue = lang.Double.valueOf(row.getField(ordinal).asInstanceOf[Float].toString)
          tDoubleValue.setValue(doubleValue)
        }
        TColumnValue.doubleVal(tDoubleValue)
      case _: DoubleType =>
        val tDoubleValue = new TDoubleValue
        if (row.getField(ordinal) != null) {
          tDoubleValue.setValue(row.getField(ordinal).asInstanceOf[Double])
        }
        TColumnValue.doubleVal(tDoubleValue)
      case t @ (_: VarCharType | _: CharType) =>
        val tStringValue = new TStringValue
        val fieldValue = row.getField(ordinal)
        fieldValue match {
          case value: String =>
            tStringValue.setValue(value)
          case value: StringData =>
            tStringValue.setValue(value.toString)
          case null =>
            tStringValue.setValue(null)
          case other =>
            throw new IllegalArgumentException(
              s"Unsupported conversion class ${other.getClass} " +
                s"for type ${t.getClass}.")
        }
        TColumnValue.stringVal(tStringValue)
      case _: LocalZonedTimestampType =>
        val tStringValue = new TStringValue
        val fieldValue = row.getField(ordinal)
        tStringValue.setValue(TIMESTAMP_LZT_FORMATTER.format(
          ZonedDateTime.ofInstant(fieldValue.asInstanceOf[Instant], zoneId)))
        TColumnValue.stringVal(tStringValue)
      case t =>
        val tStringValue = new TStringValue
        if (row.getField(ordinal) != null) {
          tStringValue.setValue(toHiveString((row.getField(ordinal), t)))
        }
        TColumnValue.stringVal(tStringValue)
    }
  }