You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by GitBox <gi...@apache.org> on 2022/04/27 09:23:35 UTC
[GitHub] [spark] yaooqinn commented on a diff in pull request #36373: [SPARK-39041][SQL] Mapping Spark Query ResultSet/Schema to TRowSet/TTableSchema directly
yaooqinn commented on code in PR #36373:
URL: https://github.com/apache/spark/pull/36373#discussion_r859577346
##########
sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkExecuteStatementOperation.scala:
##########
@@ -373,17 +306,69 @@ private[hive] class SparkExecuteStatementOperation(
}
object SparkExecuteStatementOperation {
- def getTableSchema(structType: StructType): TableSchema = {
- val schema = structType.map { field =>
- val attrTypeString = field.dataType match {
- case CalendarIntervalType => StringType.catalogString
- case _: YearMonthIntervalType => "interval_year_month"
- case _: DayTimeIntervalType => "interval_day_time"
- case _: TimestampNTZType => "timestamp"
- case other => other.catalogString
- }
- new FieldSchema(field.name, attrTypeString, field.getComment.getOrElse(""))
+
+ def toTTypeId(typ: DataType): TTypeId = typ match {
+ case NullType => TTypeId.NULL_TYPE
+ case BooleanType => TTypeId.BOOLEAN_TYPE
+ case ByteType => TTypeId.TINYINT_TYPE
+ case ShortType => TTypeId.SMALLINT_TYPE
+ case IntegerType => TTypeId.INT_TYPE
+ case LongType => TTypeId.BIGINT_TYPE
+ case FloatType => TTypeId.FLOAT_TYPE
+ case DoubleType => TTypeId.DOUBLE_TYPE
+ case StringType => TTypeId.STRING_TYPE
+ case _: DecimalType => TTypeId.DECIMAL_TYPE
+ case DateType => TTypeId.DATE_TYPE
+ // TODO: Shall use TIMESTAMPLOCALTZ_TYPE, keep AS-IS now for
+ // unnecessary behavior change
+ case TimestampType => TTypeId.TIMESTAMP_TYPE
+ case TimestampNTZType => TTypeId.TIMESTAMP_TYPE
+ case BinaryType => TTypeId.BINARY_TYPE
+ case CalendarIntervalType => TTypeId.STRING_TYPE
+ case _: DayTimeIntervalType => TTypeId.INTERVAL_DAY_TIME_TYPE
+ case _: YearMonthIntervalType => TTypeId.INTERVAL_YEAR_MONTH_TYPE
+ case _: ArrayType => TTypeId.ARRAY_TYPE
+ case _: MapType => TTypeId.MAP_TYPE
+ case _: StructType => TTypeId.STRUCT_TYPE
+ case other =>
+ throw new IllegalArgumentException(s"Unrecognized type name: ${other.catalogString}")
+ }
+
+ private def toTTypeQualifiers(typ: DataType): TTypeQualifiers = {
+ val ret = new TTypeQualifiers()
+ val qualifiers = typ match {
+ case d: DecimalType =>
+ Map(
+ TCLIServiceConstants.PRECISION -> TTypeQualifierValue.i32Value(d.precision),
+ TCLIServiceConstants.SCALE -> TTypeQualifierValue.i32Value(d.scale)).asJava
+ case _ => Collections.emptyMap[String, TTypeQualifierValue]()
Review Comment:
if char/varchar can be seen via resultset metadata, we shall also provide the char length here for client to take advantage of it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org