Skip to content

fix(flow-php/parquet): both engines read and write logical types identically - #2659

Merged
norberttech merged 2 commits into
1.xfrom
parquet-temporal-units
Sep 26, 2026
Merged

norberttech merged 2 commits into
1.xfrom
parquet-temporal-units

Conversation

@norberttech

Copy link
Copy Markdown
Member

Resolves: #xxx

Change Log


Added

  • flow-php/parquet - DECIMAL on INT32, INT64, BYTE_ARRAY and FLBA of any width
  • flow-php/parquet - TimeUnit enum with MILLIS, MICROS, NANOS
  • flow-php/arrow-ext - unit and utc schema keys for TIMESTAMP and TIME
  • flow-php/arrow-ext - Decimal256 reading

Fixed

  • flow-php/parquet - TIMESTAMP and TIME honour MILLIS/NANOS units
  • flow-php/parquet - DATE written as the value's wall-clock day
  • flow-php/parquet - ConvertedType-only columns read as temporal and decimal values
  • flow-php/parquet - BYTE_ARRAY decimal statistics without length prefix
  • flow-php/arrow-ext - pre-1970 timestamps with a fraction read correctly
  • flow-php/arrow-ext - declared TIMESTAMP/TIME unit written instead of MICROS
  • flow-php/etl-adapter-parquet - legacy TIMESTAMP/TIME/DECIMAL columns read as datetime/time/float

Changed

  • flow-php/parquet - TIMESTAMP written with isAdjustedToUTC=true
  • flow-php/parquet - Converter::isFor() replaced by static forColumn()
  • flow-php/parquet - Timestamp/Time logical types take a TimeUnit
  • flow-php/parquet - encode_decimal()/decode_decimal() drop ByteOrder
  • flow-php/parquet - float decimals rounded half away from zero on the shortest repr
  • flow-php/arrow-ext - DATE int lane is days since epoch

Removed

  • flow-php/parquet - Int32DateTimeConverter
  • flow-php/parquet - Option::ROUND_NANOSECONDS

Deprecated

Security

…tically

- honour TIMESTAMP/TIME units, floor epoch splits, write isAdjustedToUTC=true
- DATE written as the value's wall-clock day
- decimals on INT32/INT64/FLBA/BYTE_ARRAY of any width, shortest repr rounded half away
- ConvertedType-only columns read as temporal/decimal values
- converters resolved per column via static forColumn()
- arrow-ext: units, UTC flag, DATE days lane, Decimal256 read and schema
@norberttech norberttech added this to the 0.45.0 milestone Sep 26, 2026
@codecov

codecov Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.07843% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.65%. Comparing base (2bae462) to head (6a30e15).
⚠️ Report is 1 commits behind head on 1.x.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##                1.x    #2659      +/-   ##
============================================
+ Coverage     88.56%   88.65%   +0.08%     
- Complexity    26534    26551      +17     
============================================
  Files          2043     2044       +1     
  Lines         78096    78145      +49     
============================================
+ Hits          69169    69281     +112     
+ Misses         8927     8864      -63     
Components Coverage Δ
etl 95.35% <ø> (ø)
cli 87.62% <ø> (ø)
lib-array-dot 96.52% <ø> (ø)
lib-azure-sdk 64.44% <ø> (ø)
lib-doctrine-dbal-bulk 94.24% <ø> (ø)
lib-filesystem 87.61% <ø> (ø)
lib-types 94.43% <ø> (ø)
lib-parquet 71.38% <96.07%> (+0.83%) ⬆️
lib-parquet-viewer 82.26% <ø> (ø)
lib-snappy 89.86% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 89.33% <ø> (ø)
lib-telemetry 86.64% <ø> (ø)
bridge-filesystem-async-aws 92.76% <ø> (ø)
bridge-filesystem-azure 90.34% <ø> (ø)
bridge-filesystem-sftp 91.02% <ø> (ø)
bridge-monolog-http 96.84% <ø> (ø)
bridge-monolog-telemetry 94.79% <ø> (ø)
bridge-openapi-specification 91.45% <ø> (ø)
symfony-http-foundation 75.81% <ø> (ø)
bridge-psr18-telemetry 100.00% <ø> (ø)
bridge-psr3-telemetry 98.95% <ø> (ø)
bridge-psr7-telemetry 100.00% <ø> (ø)
bridge-telemetry-otlp 90.11% <ø> (ø)
bridge-symfony-http-foundation-telemetry 92.85% <ø> (ø)
bridge-symfony-filesystem-bundle 91.85% <ø> (ø)
bridge-symfony-filesystem-cache 98.18% <ø> (ø)
bridge-symfony-postgresql-bundle 93.62% <ø> (ø)
bridge-symfony-postgresql-cache 94.41% <ø> (ø)
bridge-symfony-postgresql-messenger 98.80% <ø> (ø)
bridge-symfony-postgresql-session 93.65% <ø> (ø)
bridge-symfony-telemetry-bundle 90.72% <ø> (ø)
adapter-chartjs 80.50% <ø> (ø)
adapter-csv 95.45% <ø> (ø)
adapter-doctrine 93.21% <ø> (ø)
adapter-google-sheet 99.31% <ø> (ø)
adapter-http 88.13% <ø> (ø)
adapter-json 90.97% <ø> (ø)
adapter-logger 44.44% <ø> (ø)
adapter-parquet 96.08% <ø> (+0.20%) ⬆️
adapter-text 95.45% <ø> (ø)
adapter-xml 88.86% <ø> (ø)
adapter-avro 7.14% <ø> (ø)
adapter-excel 95.91% <ø> (ø)
adapter-postgresql 95.79% <ø> (ø)
adapter-seal 83.88% <ø> (ø)
bridge-phpunit-postgresql 75.30% <ø> (ø)
bridge-phpunit-telemetry 87.36% <ø> (ø)
bridge-phpstan-types 0.00% <ø> (ø)
bridge-postgresql-valinor 100.00% <ø> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@norberttech
norberttech merged commit c341456 into 1.x Sep 26, 2026
50 checks passed
@norberttech
norberttech deleted the parquet-temporal-units branch September 26, 2026 08:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant