From 5001000ca711bf27edb91d278044d15205bdfc4f Mon Sep 17 00:00:00 2001 From: 1932819331hy-debug <1932819331hy@gmail.com> Date: Fri, 16 Oct 2026 20:24:50 +0900 Subject: [PATCH 1/4] GH-53500: Guard Parquet metadata equality against None --- python/pyarrow/_parquet.pyx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/python/pyarrow/_parquet.pyx b/python/pyarrow/_parquet.pyx index 2621c3bd6d61..a9b876d58286 100644 --- a/python/pyarrow/_parquet.pyx +++ b/python/pyarrow/_parquet.pyx @@ -108,7 +108,7 @@ cdef class Statistics(_Weakrefable): except TypeError: return NotImplemented - def equals(self, Statistics other): + def equals(self, Statistics other not None): """ Return whether the two column statistics objects are equal. @@ -521,7 +521,7 @@ cdef class ColumnChunkMetaData(_Weakrefable): except TypeError: return NotImplemented - def equals(self, ColumnChunkMetaData other): + def equals(self, ColumnChunkMetaData other not None): """ Return whether the two column chunk metadata objects are equal. @@ -919,7 +919,7 @@ cdef class RowGroupMetaData(_Weakrefable): except TypeError: return NotImplemented - def equals(self, RowGroupMetaData other): + def equals(self, RowGroupMetaData other not None): """ Return whether the two row group metadata objects are equal. @@ -1295,7 +1295,7 @@ cdef class ParquetSchema(_Weakrefable): except TypeError: return NotImplemented - def equals(self, ParquetSchema other): + def equals(self, ParquetSchema other not None): """ Return whether the two schemas are equal. @@ -1350,7 +1350,7 @@ cdef class ColumnSchema(_Weakrefable): def __reduce__(self): return ColumnSchema, (self.parent, self.index) - def equals(self, ColumnSchema other): + def equals(self, ColumnSchema other not None): """ Return whether the two column schemas are equal. From f915fc36fd0d8c0a598c0d9f80a293153bba6710 Mon Sep 17 00:00:00 2001 From: 1932819331hy-debug <1932819331hy@gmail.com> Date: Fri, 16 Oct 2026 20:25:52 +0900 Subject: [PATCH 2/4] GH-53500: Cover None comparisons for Parquet metadata --- python/pyarrow/tests/parquet/test_metadata.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/python/pyarrow/tests/parquet/test_metadata.py b/python/pyarrow/tests/parquet/test_metadata.py index 9eee70b125e5..17958209a74e 100644 --- a/python/pyarrow/tests/parquet/test_metadata.py +++ b/python/pyarrow/tests/parquet/test_metadata.py @@ -893,3 +893,25 @@ def test_geospatial_types(parquet_test_datadir): column_schema = metadata.schema.column(1) assert column_schema.name == "geography" assert column_schema.logical_type.type == "GEOGRAPHY" +def test_parquet_metadata_equality_with_none(): + table = pa.table({"a": [1, 2, 3]}) + with pa.BufferOutputStream() as out: + pq.write_table(table, out) + buf = out.getvalue() + metadata = pq.read_metadata(pa.BufferReader(buf)) + row_group = metadata.row_group(0) + column = row_group.column(0) + schema = metadata.schema + objects = ( + metadata, + row_group, + column, + column.statistics, + schema, + schema.column(0), + ) + none = None + for obj in objects: + with pytest.raises(TypeError, match="Argument 'other' has incorrect type"): + obj.equals(none) + assert obj != none From 5065076ce0a81ba754917317cccce1c7f0d95873 Mon Sep 17 00:00:00 2001 From: 1932819331hy-debug <1932819331hy@gmail.com> Date: Fri, 16 Oct 2026 20:26:48 +0900 Subject: [PATCH 3/4] GH-53500: Format metadata comparison test --- python/pyarrow/tests/parquet/test_metadata.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/pyarrow/tests/parquet/test_metadata.py b/python/pyarrow/tests/parquet/test_metadata.py index 17958209a74e..59e6a5027275 100644 --- a/python/pyarrow/tests/parquet/test_metadata.py +++ b/python/pyarrow/tests/parquet/test_metadata.py @@ -893,6 +893,8 @@ def test_geospatial_types(parquet_test_datadir): column_schema = metadata.schema.column(1) assert column_schema.name == "geography" assert column_schema.logical_type.type == "GEOGRAPHY" + + def test_parquet_metadata_equality_with_none(): table = pa.table({"a": [1, 2, 3]}) with pa.BufferOutputStream() as out: From a9dbede63232ab69e74bdbd926f0233561d2fdda Mon Sep 17 00:00:00 2001 From: 1932819331hy-debug <1932819331hy@gmail.com> Date: Fri, 16 Oct 2026 20:38:35 +0900 Subject: [PATCH 4/4] GH-53500: Cover equality operators with None --- python/pyarrow/tests/parquet/test_metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/pyarrow/tests/parquet/test_metadata.py b/python/pyarrow/tests/parquet/test_metadata.py index 59e6a5027275..0c3423e513bf 100644 --- a/python/pyarrow/tests/parquet/test_metadata.py +++ b/python/pyarrow/tests/parquet/test_metadata.py @@ -916,4 +916,5 @@ def test_parquet_metadata_equality_with_none(): for obj in objects: with pytest.raises(TypeError, match="Argument 'other' has incorrect type"): obj.equals(none) - assert obj != none + assert (obj == none) is False + assert (obj != none) is True