Platob commented on code in PR #35153:
URL: https://github.com/apache/arrow/pull/35153#discussion_r1170216488
##########
csharp/src/Apache.Arrow/Field.Builder.cs:
##########
@@ -52,6 +55,131 @@ public Builder DataType(IArrowType type)
return this;
}
+ // Build DataType from C# Type
+ public Builder DataType(System.Type valueType, string timezone =
null)
+ {
+ System.Type[] genericArgs;
+ System.Type child =
System.Nullable.GetUnderlyingType(valueType);
+ Type elementType;
+
+ if (child != null)
+ {
+ // Nullable Type
+ DataType(child, timezone);
+ Nullable(true);
+ return this;
+ }
+
+ // Not Nullable Type
+ Nullable(false);
+
+ switch (valueType)
+ {
+ // Binary
+ case var _ when valueType == typeof(byte):
+ DataType(new BinaryType());
+ break;
+ case var _ when valueType == typeof(IEnumerable<byte>):
+ DataType(new BinaryType());
+ Nullable(true);
+ break;
+ // Boolean
+ case var _ when valueType == typeof(bool):
+ DataType(new BooleanType());
+ break;
+ // String
+ case var _ when valueType == typeof(string):
+ DataType(new StringType());
+ Nullable(true);
+ break;
+ // Integers
+ case var _ when valueType == typeof(sbyte):
+ DataType(new Int8Type());
+ break;
+ case var _ when valueType == typeof(short):
+ DataType(new Int16Type());
+ break;
+ case var _ when valueType == typeof(int):
+ DataType(new Int32Type());
+ break;
+ case var _ when valueType == typeof(long):
+ DataType(new Int64Type());
+ break;
+ // Unisgned Integers
+ case var _ when valueType == typeof(ushort):
+ DataType(new UInt16Type());
+ break;
+ case var _ when valueType == typeof(uint):
+ DataType(new UInt32Type());
+ break;
+ case var _ when valueType == typeof(ulong):
+ DataType(new UInt64Type());
+ break;
+ // Decimal
+ case var _ when valueType == typeof(decimal):
+ DataType(Decimal256Type.Default);
+ break;
+ // Float
+ case var _ when valueType == typeof(float):
+ DataType(new FloatType());
+ break;
+ // Double
+ case var _ when valueType == typeof(double):
+ DataType(new DoubleType());
+ break;
+ // DateTime
+ case var _ when valueType == typeof(DateTime) || valueType
== typeof(DateTimeOffset):
+ DataType(new TimestampType(TimeUnit.Nanosecond,
timezone));
+ break;
+ // Time
+ case var _ when valueType == typeof(TimeSpan):
+ DataType(new Time64Type(TimeUnit.Nanosecond));
+ break;
+#if NETCOREAPP3_1_OR_GREATER
+ // Dictionary: IDictionary<?,?>
Review Comment:
removed, indeed, will need to implement MapType
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]