This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 81a03758c6 [mosaic] Support ARRAY and MAP type validation (#8178)
81a03758c6 is described below
commit 81a03758c6c5b586124b95676e7d16be07aa9810
Author: Jingsong Lee <[email protected]>
AuthorDate: Tue Jun 9 15:40:55 2026 +0800
[mosaic] Support ARRAY and MAP type validation (#8178)
- Remove `UnsupportedOperationException` for ARRAY and MAP types in
`MosaicRowTypeVisitor`, allowing these types to pass schema validation
- Recursively validate child types (element type for ARRAY, key/value
types for MAP)
- Once paimon-mosaic upstream releases 0.2.0 (which includes ARRAY/MAP
support in the native library), we only need to bump the mosaic
dependency version
---
.../org/apache/paimon/format/mosaic/MosaicFileFormat.java | 8 +++++---
.../apache/paimon/format/mosaic/MosaicFileFormatTest.java | 13 +++++++++----
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git
a/paimon-mosaic/src/main/java/org/apache/paimon/format/mosaic/MosaicFileFormat.java
b/paimon-mosaic/src/main/java/org/apache/paimon/format/mosaic/MosaicFileFormat.java
index bff850a4e0..00843ca572 100644
---
a/paimon-mosaic/src/main/java/org/apache/paimon/format/mosaic/MosaicFileFormat.java
+++
b/paimon-mosaic/src/main/java/org/apache/paimon/format/mosaic/MosaicFileFormat.java
@@ -209,8 +209,8 @@ public class MosaicFileFormat extends FileFormat {
@Override
public Void visit(ArrayType arrayType) {
- throw new UnsupportedOperationException(
- "Mosaic file format does not support type ARRAY");
+ arrayType.getElementType().accept(this);
+ return null;
}
@Override
@@ -227,7 +227,9 @@ public class MosaicFileFormat extends FileFormat {
@Override
public Void visit(MapType mapType) {
- throw new UnsupportedOperationException("Mosaic file format does
not support type MAP");
+ mapType.getKeyType().accept(this);
+ mapType.getValueType().accept(this);
+ return null;
}
@Override
diff --git
a/paimon-mosaic/src/test/java/org/apache/paimon/format/mosaic/MosaicFileFormatTest.java
b/paimon-mosaic/src/test/java/org/apache/paimon/format/mosaic/MosaicFileFormatTest.java
index 8e53164e86..df6fb38572 100644
---
a/paimon-mosaic/src/test/java/org/apache/paimon/format/mosaic/MosaicFileFormatTest.java
+++
b/paimon-mosaic/src/test/java/org/apache/paimon/format/mosaic/MosaicFileFormatTest.java
@@ -85,12 +85,17 @@ class MosaicFileFormatTest {
}
@Test
- void testValidateDataFieldsMapUnsupported() {
+ void testValidateDataFieldsArraySupported() {
+ MosaicFileFormat format = createFormat();
+ RowType rowType = DataTypes.ROW(DataTypes.ARRAY(DataTypes.INT()));
+ format.validateDataFields(rowType);
+ }
+
+ @Test
+ void testValidateDataFieldsMapSupported() {
MosaicFileFormat format = createFormat();
RowType rowType = DataTypes.ROW(DataTypes.MAP(DataTypes.STRING(),
DataTypes.INT()));
- assertThatThrownBy(() -> format.validateDataFields(rowType))
- .isInstanceOf(UnsupportedOperationException.class)
- .hasMessageContaining("MAP");
+ format.validateDataFields(rowType);
}
@Test