@@ -1788,14 +1788,7 @@ def _cast_if_needed(self, field: NestedField, values: pa.Array) -> pa.Array:
17881788 file_field = self ._file_schema .find_field (field .field_id )
17891789
17901790 if field .field_type .is_primitive :
1791- if field .field_type != file_field .field_type :
1792- target_schema = schema_to_pyarrow (
1793- promote (file_field .field_type , field .field_type ), include_field_ids = self ._include_field_ids
1794- )
1795- if self ._use_large_types is False :
1796- target_schema = _pyarrow_schema_ensure_small_types (target_schema )
1797- return values .cast (target_schema )
1798- elif (target_type := schema_to_pyarrow (field .field_type , include_field_ids = self ._include_field_ids )) != values .type :
1791+ if (target_type := schema_to_pyarrow (field .field_type , include_field_ids = self ._include_field_ids )) != values .type :
17991792 if field .field_type == TimestampType ():
18001793 # Downcasting of nanoseconds to microseconds
18011794 if (
@@ -1814,13 +1807,22 @@ def _cast_if_needed(self, field: NestedField, values: pa.Array) -> pa.Array:
18141807 pa .types .is_timestamp (target_type )
18151808 and target_type .tz == "UTC"
18161809 and pa .types .is_timestamp (values .type )
1817- and values .type .tz in UTC_ALIASES
1810+ and ( values .type .tz in UTC_ALIASES or values . type . tz is None )
18181811 ):
18191812 if target_type .unit == "us" and values .type .unit == "ns" and self ._downcast_ns_timestamp_to_us :
18201813 return values .cast (target_type , safe = False )
18211814 elif target_type .unit == "us" and values .type .unit in {"s" , "ms" , "us" }:
18221815 return values .cast (target_type )
18231816 raise ValueError (f"Unsupported schema projection from { values .type } to { target_type } " )
1817+
1818+ if field .field_type != file_field .field_type :
1819+ target_schema = schema_to_pyarrow (
1820+ promote (file_field .field_type , field .field_type ), include_field_ids = self ._include_field_ids
1821+ )
1822+ if self ._use_large_types is False :
1823+ target_schema = _pyarrow_schema_ensure_small_types (target_schema )
1824+ return values .cast (target_schema )
1825+
18241826 return values
18251827
18261828 def _construct_field (self , field : NestedField , arrow_type : pa .DataType ) -> pa .Field :
0 commit comments