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

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new e12c6f85c [test] Fix the OrcFormatReadWriteTest (#1778)
e12c6f85c is described below

commit e12c6f85c543abca2cfe0961f8c852d44fe2e603
Author: Aitozi <[email protected]>
AuthorDate: Thu Aug 10 17:56:56 2023 +0800

    [test] Fix the OrcFormatReadWriteTest (#1778)
---
 .../apache/paimon/format/FormatReadWriteTest.java  | 68 ++++++++++++++++------
 .../paimon/format/orc/OrcFormatReadWriteTest.java  |  4 +-
 2 files changed, 53 insertions(+), 19 deletions(-)

diff --git 
a/paimon-common/src/test/java/org/apache/paimon/format/FormatReadWriteTest.java 
b/paimon-common/src/test/java/org/apache/paimon/format/FormatReadWriteTest.java
index 43194946d..5fe11ae01 100644
--- 
a/paimon-common/src/test/java/org/apache/paimon/format/FormatReadWriteTest.java
+++ 
b/paimon-common/src/test/java/org/apache/paimon/format/FormatReadWriteTest.java
@@ -32,6 +32,7 @@ import org.apache.paimon.fs.Path;
 import org.apache.paimon.fs.PositionOutputStream;
 import org.apache.paimon.fs.local.LocalFileIO;
 import org.apache.paimon.reader.RecordReader;
+import org.apache.paimon.types.ArrayType;
 import org.apache.paimon.types.DataType;
 import org.apache.paimon.types.DataTypes;
 import org.apache.paimon.types.RowType;
@@ -235,29 +236,46 @@ public abstract class FormatReadWriteTest {
     }
 
     private void validateFullTypesResult(InternalRow actual, InternalRow 
expected) {
-        if (formatType.equals("avro") || formatType.equals("orc")) {
+        if (formatType.equals("avro")) {
             assertThat(actual).isEqualTo(expected);
         } else {
             RowType rowType = rowTypeForFullTypesTest();
             InternalRow.FieldGetter[] fieldGetters = rowType.fieldGetters();
             for (int i = 0; i < fieldGetters.length; i++) {
+                String name = rowType.getFieldNames().get(i);
                 Object actualField = fieldGetters[i].getFieldOrNull(actual);
                 Object expectedField = 
fieldGetters[i].getFieldOrNull(expected);
-                System.out.println(i);
-                if (i == 3) {
-                    validateInternalMap((InternalMap) actualField, 
(InternalMap) expectedField);
-                } else if (i == 4) {
-                    validateInternalArray(
-                            (InternalArray) actualField,
-                            (InternalArray) expectedField,
-                            DataTypes.STRING());
-                } else if (i == 5) {
-                    validateInternalArray(
-                            (InternalArray) actualField,
-                            (InternalArray) expectedField,
-                            DataTypes.INT());
-                } else {
-                    assertThat(actualField).isEqualTo(expectedField);
+                switch (name) {
+                    case "locations":
+                        validateInternalMap((InternalMap) actualField, 
(InternalMap) expectedField);
+                        break;
+                    case "strArray":
+                        validateInternalArray(
+                                (InternalArray) actualField,
+                                (InternalArray) expectedField,
+                                DataTypes.STRING());
+                        break;
+                    case "intArray":
+                        validateInternalArray(
+                                (InternalArray) actualField,
+                                (InternalArray) expectedField,
+                                DataTypes.INT());
+                        break;
+                    case "rowArray":
+                        validateInternalArray(
+                                (InternalArray) actualField,
+                                (InternalArray) expectedField,
+                                ((ArrayType)
+                                                rowType.getFields().stream()
+                                                        .filter(f -> 
f.name().equals("rowArray"))
+                                                        .findAny()
+                                                        .get()
+                                                        .type())
+                                        .getElementType());
+                        break;
+                    default:
+                        assertThat(actualField).isEqualTo(expectedField);
+                        break;
                 }
             }
         }
@@ -265,11 +283,12 @@ public abstract class FormatReadWriteTest {
 
     private void validateInternalMap(InternalMap actualMap, InternalMap 
expectedMap) {
         validateInternalArray(actualMap.keyArray(), expectedMap.keyArray(), 
DataTypes.STRING());
-        validateInternalArray(actualMap.valueArray(), 
expectedMap.valueArray(), DataTypes.DOUBLE());
+        validateInternalArray(actualMap.valueArray(), 
expectedMap.valueArray(), getMapValueType());
     }
 
     private void validateInternalArray(
             InternalArray actualArray, InternalArray expectedArray, DataType 
elementType) {
+        assertThat(actualArray.size()).isEqualTo(expectedArray.size());
         switch (elementType.getTypeRoot()) {
             case VARCHAR:
                 for (int i = 0; i < actualArray.size(); i++) {
@@ -282,6 +301,21 @@ public abstract class FormatReadWriteTest {
             case INTEGER:
                 
assertThat(actualArray.toIntArray()).isEqualTo(expectedArray.toIntArray());
                 break;
+            case ROW:
+                InternalArray.ElementGetter getter = 
InternalArray.createElementGetter(elementType);
+                RowType rowType = (RowType) elementType;
+                for (int i = 0; i < expectedArray.size(); i++) {
+                    InternalRow actual = (InternalRow) 
getter.getElementOrNull(actualArray, i);
+                    InternalRow expected = (InternalRow) 
getter.getElementOrNull(expectedArray, i);
+                    
assertThat(actual.getFieldCount()).isEqualTo(expected.getFieldCount());
+                    for (int j = 0; j < actual.getFieldCount(); j++) {
+                        InternalRow.FieldGetter fieldGetter =
+                                
InternalRow.createFieldGetter(rowType.getTypeAt(j), j);
+                        assertThat(fieldGetter.getFieldOrNull(expected))
+                                .isEqualTo(fieldGetter.getFieldOrNull(actual));
+                    }
+                }
+                break;
             default:
                 throw new UnsupportedOperationException(
                         "Haven't implemented array comparing for type "
diff --git 
a/paimon-format/src/test/java/org/apache/paimon/format/orc/OrcFormatReadWriteTest.java
 
b/paimon-format/src/test/java/org/apache/paimon/format/orc/OrcFormatReadWriteTest.java
index 3d3d03fcc..3e6805862 100644
--- 
a/paimon-format/src/test/java/org/apache/paimon/format/orc/OrcFormatReadWriteTest.java
+++ 
b/paimon-format/src/test/java/org/apache/paimon/format/orc/OrcFormatReadWriteTest.java
@@ -19,8 +19,8 @@
 package org.apache.paimon.format.orc;
 
 import org.apache.paimon.format.FileFormat;
+import org.apache.paimon.format.FileFormatFactory;
 import org.apache.paimon.format.FormatReadWriteTest;
-import org.apache.paimon.format.avro.AvroFileFormat;
 import org.apache.paimon.options.Options;
 
 /** An orc {@link FormatReadWriteTest}. */
@@ -32,6 +32,6 @@ public class OrcFormatReadWriteTest extends 
FormatReadWriteTest {
 
     @Override
     protected FileFormat fileFormat() {
-        return new AvroFileFormat(new Options());
+        return new OrcFileFormat(new FileFormatFactory.FormatContext(new 
Options(), 1024));
     }
 }

Reply via email to