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