From 0202b4c443a506d6f3be6508b35635493ac8ce5c Mon Sep 17 00:00:00 2001 From: Fokko Date: Tue, 9 Jul 2024 18:51:18 +0200 Subject: [PATCH] Use zero-copy instead --- .../compute/kernels/scalar_cast_temporal.cc | 4 ++-- python/pyarrow/tests/test_compute.py | 20 +++++++++++++++++++ python/pyarrow/tests/test_ipc.py | 19 ------------------ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc b/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc index 046a2832e8c79..a293000d56640 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc @@ -514,7 +514,7 @@ std::shared_ptr GetDate32Cast() { AddCommonCasts(Type::DATE32, out_ty, func.get()); // date32 -> date32 - AddCrossUnitCast(func.get()); + AddZeroCopyCast(Type::DATE32, date32(), date32(), func.get()); // int32 -> date32 AddZeroCopyCast(Type::INT32, int32(), date32(), func.get()); @@ -539,7 +539,7 @@ std::shared_ptr GetDate64Cast() { AddCommonCasts(Type::DATE64, out_ty, func.get()); // date64 -> date64 - AddCrossUnitCast(func.get()); + AddZeroCopyCast(Type::DATE64, date64(), date64(), func.get()); // int64 -> date64 AddZeroCopyCast(Type::INT64, int64(), date64(), func.get()); diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index 13e30ed1da493..0966a0a5e61e6 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -1842,6 +1842,26 @@ def test_cast(): assert pc.cast(arr, expected.type) == expected +def test_identity_cast_dates(): + dt = datetime.date(1990, 3, 1) + data = [[dt], [dt]] + + schema = pa.schema([ + ('date32', pa.date32()), + ('date64', pa.date64()), + ]) + + batch = pa.RecordBatch.from_arrays(data, schema=schema) + + table = pa.RecordBatchReader.from_batches( + schema, + [batch] + ).cast(schema).read_all() + + assert table['date32'][0].as_py() == dt + assert table['date64'][0].as_py() == dt + + @pytest.mark.parametrize('value_type', numerical_arrow_types) def test_fsl_to_fsl_cast(value_type): # Different field name and different type. diff --git a/python/pyarrow/tests/test_ipc.py b/python/pyarrow/tests/test_ipc.py index 379c83024faf0..1e5242efe40f0 100644 --- a/python/pyarrow/tests/test_ipc.py +++ b/python/pyarrow/tests/test_ipc.py @@ -1199,25 +1199,6 @@ def make_batches(): reader = pa.RecordBatchReader.from_batches(None, batches) pass - # https://github.com/apache/arrow/issues/43183 - dt = datetime.date(1990, 3, 1) - data = [[dt], [dt]] - - schema = pa.schema([ - ('date32', pa.date32()), - ('date64', pa.date64()), - ]) - - batch = pa.RecordBatch.from_arrays(data, schema=schema) - - table = pa.RecordBatchReader.from_batches( - schema, - [batch] - ).cast(schema).read_all() - - assert table['date32'][0].as_py() == dt - assert table['date64'][0].as_py() == dt - def test_record_batch_reader_from_arrow_stream():