in csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs [1302:1360]
private static IArrowType GetArrowType(int columnTypeId, string typeName, bool isColumnSizeValid, int? columnSize, int? decimalDigits)
{
switch (columnTypeId)
{
case (int)ColumnTypeId.BOOLEAN:
return BooleanType.Default;
case (int)ColumnTypeId.TINYINT:
return Int8Type.Default;
case (int)ColumnTypeId.SMALLINT:
return Int16Type.Default;
case (int)ColumnTypeId.INTEGER:
return Int32Type.Default;
case (int)ColumnTypeId.BIGINT:
return Int64Type.Default;
case (int)ColumnTypeId.FLOAT:
case (int)ColumnTypeId.REAL:
return FloatType.Default;
case (int)ColumnTypeId.DOUBLE:
return DoubleType.Default;
case (int)ColumnTypeId.VARCHAR:
case (int)ColumnTypeId.NVARCHAR:
case (int)ColumnTypeId.LONGVARCHAR:
case (int)ColumnTypeId.LONGNVARCHAR:
return StringType.Default;
case (int)ColumnTypeId.TIMESTAMP:
return new TimestampType(TimeUnit.Microsecond, timezone: (string?)null);
case (int)ColumnTypeId.BINARY:
case (int)ColumnTypeId.VARBINARY:
case (int)ColumnTypeId.LONGVARBINARY:
return BinaryType.Default;
case (int)ColumnTypeId.DATE:
return Date32Type.Default;
case (int)ColumnTypeId.CHAR:
case (int)ColumnTypeId.NCHAR:
return StringType.Default;
case (int)ColumnTypeId.DECIMAL:
case (int)ColumnTypeId.NUMERIC:
if (isColumnSizeValid && columnSize.HasValue && decimalDigits.HasValue)
{
return new Decimal128Type(columnSize.Value, decimalDigits.Value);
}
else
{
// Note: parsing the type name for SQL DECIMAL types as the precision and scale values
// may not be returned in the Thrift call to GetColumns
return SqlTypeNameParser<SqlDecimalParserResult>
.Parse(typeName, columnTypeId)
.Decimal128Type;
}
case (int)ColumnTypeId.NULL:
return NullType.Default;
case (int)ColumnTypeId.ARRAY:
case (int)ColumnTypeId.JAVA_OBJECT:
case (int)ColumnTypeId.STRUCT:
return StringType.Default;
default:
throw new NotImplementedException($"Column type id: {columnTypeId} is not supported.");
}
}