CurtHagenlocher commented on code in PR #400:
URL: https://github.com/apache/arrow-dotnet/pull/400#discussion_r3720443822


##########
src/Apache.Arrow/Arrays/StringViewArray.cs:
##########
@@ -22,33 +25,63 @@
 
 namespace Apache.Arrow
 {
-    public class StringViewArray : BinaryViewArray, IReadOnlyList<string>
+    public class StringViewArray(ArrayData data) : 
BinaryViewArray(ArrowTypeId.StringView, data), IReadOnlyList<string?>
     {
-        public static readonly Encoding DefaultEncoding = Encoding.UTF8;
+        public static Encoding DefaultEncoding { get; } = new 
UTF8Encoding(false);
 
-        public new class Builder : BuilderBase<StringViewArray, Builder>
+        public new class Builder() : BuilderBase<StringViewArray, 
Builder>(StringViewType.Default)
         {
-            public Builder() : base(StringViewType.Default) { }
-
             protected override StringViewArray Build(ArrayData data)
             {
                 return new StringViewArray(data);
             }
 
-            public Builder Append(string value, Encoding encoding = null)
+            public Builder Append(string? value, Encoding? encoding = null)
             {
-                if (value == null)
+                if (value is null)
                 {
                     return AppendNull();
                 }
-                encoding = encoding ?? DefaultEncoding;
-                byte[] span = encoding.GetBytes(value);
-                return Append(span.AsSpan());
+
+                encoding ??= DefaultEncoding;
+                int maxByteCount = encoding.GetMaxByteCount(value.Length);
+                #if NETCOREAPP
+                byte[]? buffer = null;
+
+                Span<byte> span = maxByteCount <= 1024

Review Comment:
   I've been using 256 as a conservative upper bound for stackalloc in 
libraries; see `VariantValueWriter.StackAllocThreshold`.



##########
src/Apache.Arrow/Arrays/StringViewArray.cs:
##########
@@ -22,33 +25,63 @@
 
 namespace Apache.Arrow
 {
-    public class StringViewArray : BinaryViewArray, IReadOnlyList<string>
+    public class StringViewArray(ArrayData data) : 
BinaryViewArray(ArrowTypeId.StringView, data), IReadOnlyList<string?>

Review Comment:
   I think a codebase is easier to read when it's consistent in its use of 
syntax and personally found this new form jarring. I'm curious what other 
people think.



##########
src/Apache.Arrow/Arrays/StringViewArray.cs:
##########
@@ -22,33 +25,63 @@
 
 namespace Apache.Arrow
 {
-    public class StringViewArray : BinaryViewArray, IReadOnlyList<string>
+    public class StringViewArray(ArrayData data) : 
BinaryViewArray(ArrowTypeId.StringView, data), IReadOnlyList<string?>
     {
-        public static readonly Encoding DefaultEncoding = Encoding.UTF8;
+        public static Encoding DefaultEncoding { get; } = new 
UTF8Encoding(false);
 
-        public new class Builder : BuilderBase<StringViewArray, Builder>
+        public new class Builder() : BuilderBase<StringViewArray, 
Builder>(StringViewType.Default)
         {
-            public Builder() : base(StringViewType.Default) { }
-
             protected override StringViewArray Build(ArrayData data)
             {
                 return new StringViewArray(data);
             }
 
-            public Builder Append(string value, Encoding encoding = null)
+            public Builder Append(string? value, Encoding? encoding = null)
             {
-                if (value == null)
+                if (value is null)
                 {
                     return AppendNull();
                 }
-                encoding = encoding ?? DefaultEncoding;
-                byte[] span = encoding.GetBytes(value);
-                return Append(span.AsSpan());
+
+                encoding ??= DefaultEncoding;
+                int maxByteCount = encoding.GetMaxByteCount(value.Length);
+                #if NETCOREAPP

Review Comment:
   Please put preprocessor directives in flush-left like the rest of the 
codebase.



-- 
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]

Reply via email to