This is an automated email from the ASF dual-hosted git repository.

curth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new c5a1eb0163 GH-38816: [C#] Fix IArrowRecord implementation on 
StructArray (#38827)
c5a1eb0163 is described below

commit c5a1eb01631f770dd7b3a6ecf309022d34af4c1c
Author: Curt Hagenlocher <[email protected]>
AuthorDate: Tue Nov 21 06:55:39 2023 -0800

    GH-38816: [C#] Fix IArrowRecord implementation on StructArray (#38827)
    
    ### What changes are included in this PR?
    
    Minor bug fix, test for the bug, and a few additional tests which were 
missed by the previous PR.
    
    ### Are these changes tested?
    
    Yes
    
    ### Are there any user-facing changes?
    
    No
    
    * Closes: #38816
    
    Authored-by: Curt Hagenlocher <[email protected]>
    Signed-off-by: Curt Hagenlocher <[email protected]>
---
 csharp/src/Apache.Arrow/Arrays/StructArray.cs |  6 +++---
 csharp/test/Apache.Arrow.Tests/RecordTests.cs | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/csharp/src/Apache.Arrow/Arrays/StructArray.cs 
b/csharp/src/Apache.Arrow/Arrays/StructArray.cs
index 11d40e6d4e..5b827c7b85 100644
--- a/csharp/src/Apache.Arrow/Arrays/StructArray.cs
+++ b/csharp/src/Apache.Arrow/Arrays/StructArray.cs
@@ -72,11 +72,11 @@ namespace Apache.Arrow
 
         IRecordType IArrowRecord.Schema => (StructType)Data.DataType;
 
-        int IArrowRecord.ColumnCount => _fields.Count;
+        int IArrowRecord.ColumnCount => Fields.Count;
 
         IArrowArray IArrowRecord.Column(string columnName, 
IEqualityComparer<string> comparer) =>
-            _fields[((StructType)Data.DataType).GetFieldIndex(columnName, 
comparer)];
+            Fields[((StructType)Data.DataType).GetFieldIndex(columnName, 
comparer)];
 
-        IArrowArray IArrowRecord.Column(int columnIndex) => 
_fields[columnIndex];
+        IArrowArray IArrowRecord.Column(int columnIndex) => 
Fields[columnIndex];
     }
 }
diff --git a/csharp/test/Apache.Arrow.Tests/RecordTests.cs 
b/csharp/test/Apache.Arrow.Tests/RecordTests.cs
index 09b0d2c665..cfca4556b6 100644
--- a/csharp/test/Apache.Arrow.Tests/RecordTests.cs
+++ b/csharp/test/Apache.Arrow.Tests/RecordTests.cs
@@ -74,7 +74,25 @@ namespace Apache.Arrow.Tests
             StructArray level2Array = new StructArray(level2, 
stringArray.Length, new[] { level1Array }, nulls);
             RecordBatch batch = new RecordBatch(schema, new IArrowArray[] { 
level2Array }, stringArray.Length);
 
+            var visitor3 = new TestArrayVisitor1();
+            visitor3.Visit(batch);
+            Assert.Equal("111utf8", visitor3.stringBuilder.ToString());
+            var visitor4 = new TestArrayVisitor2();
+            visitor4.Visit(batch);
+            Assert.Equal("322utf8", visitor4.stringBuilder.ToString());
+        }
+
+        [Fact]
+        public void LazyStructInitialization()
+        {
+            StringArray stringArray = new 
StringArray.Builder().Append("one").AppendNull().AppendNull().Append("four").Build();
+            Field stringField = new Field("column1", StringType.Default, true);
+            StructType structType = new StructType(new[] { stringField });
+            ArrayData structData = new ArrayData(structType, 
stringArray.Length, 0, 0, new[] { ArrowBuffer.Empty }, new[] { stringArray.Data 
});
+            IArrowRecord structArray = new StructArray(structData);
 
+            Assert.Equal(1, structArray.ColumnCount);
+            Assert.Equal(structArray.Length, structArray.Column(0).Length);
         }
 
         private class TestTypeVisitor1 : IArrowTypeVisitor, 
IArrowTypeVisitor<IRecordType>

Reply via email to