From a6969b17686187b5b469cd4228ed02b5565b5fa9 Mon Sep 17 00:00:00 2001 From: Yifan Chen Date: Mon, 7 Sep 2026 09:10:48 -0700 Subject: [PATCH] test: enumerate PyArrow primitive type mappings Generated-by: OpenAI Codex (GPT-6) --- tests/io/test_pyarrow_visitor.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/io/test_pyarrow_visitor.py b/tests/io/test_pyarrow_visitor.py index e98d76e262..41fa605b00 100644 --- a/tests/io/test_pyarrow_visitor.py +++ b/tests/io/test_pyarrow_visitor.py @@ -39,6 +39,7 @@ _expression_to_complementary_pyarrow, _HasIds, _NullNaNUnmentionedTermsCollector, + _primitive_to_physical, _pyarrow_schema_ensure_large_types, _pyarrow_schema_ensure_small_types, pyarrow_to_schema, @@ -61,12 +62,14 @@ LongType, MapType, NestedField, + PrimitiveType, StringType, StructType, TimestampNanoType, TimestampType, TimestamptzType, TimeType, + UUIDType, ) @@ -259,6 +262,34 @@ def test_pyarrow_variable_binary_to_iceberg(pyarrow_type: pa.DataType) -> None: assert visit(converted_iceberg_type, _ConvertToArrowSchema()) == pa.large_binary() +@pytest.mark.parametrize( + ("iceberg_type", "pyarrow_type", "parquet_physical_type"), + [ + (BooleanType(), pa.bool_(), "BOOLEAN"), + (IntegerType(), pa.int32(), "INT32"), + (LongType(), pa.int64(), "INT64"), + (FloatType(), pa.float32(), "FLOAT"), + (DoubleType(), pa.float64(), "DOUBLE"), + (DateType(), pa.date32(), "INT32"), + (TimeType(), pa.time64("us"), "INT64"), + (TimestampType(), pa.timestamp("us"), "INT64"), + (TimestamptzType(), pa.timestamp("us", tz="UTC"), "INT64"), + (StringType(), pa.large_string(), "BYTE_ARRAY"), + (UUIDType(), pa.uuid(), "FIXED_LEN_BYTE_ARRAY"), + (BinaryType(), pa.large_binary(), "BYTE_ARRAY"), + (FixedType(16), pa.binary(16), "FIXED_LEN_BYTE_ARRAY"), + (DecimalType(9, 2), pa.decimal128(9, 2), "INT32"), + (DecimalType(10, 2), pa.decimal128(10, 2), "INT64"), + (DecimalType(19, 2), pa.decimal128(19, 2), "FIXED_LEN_BYTE_ARRAY"), + ], +) +def test_iceberg_primitive_types_map_to_pyarrow_and_parquet_physical_types( + iceberg_type: PrimitiveType, pyarrow_type: pa.DataType, parquet_physical_type: str +) -> None: + assert schema_to_pyarrow(iceberg_type) == pyarrow_type + assert _primitive_to_physical(iceberg_type) == parquet_physical_type + + def test_pyarrow_struct_to_iceberg() -> None: pyarrow_struct = pa.struct( [