Skip to content

perf: fused native Floe read and write path - #2653

Merged
norberttech merged 2 commits into
1.xfrom
floe-read-path
Sep 24, 2026
Merged

norberttech merged 2 commits into
1.xfrom
floe-read-path

Conversation

@norberttech

Copy link
Copy Markdown
Member

Change Log


Added

  • flow-php/flow-php-ext - RustFloeEncoderNative::decodeRows() decodes Floe frames straight into Rows in one native pass
  • flow-php/flow-php-ext - RustFloeEncoderNative::encodeFrames() encodes Rows straight into complete ROW frames
  • flow-php/etl - FloeEncoder contract with decodeRows() / encodeFrames()

Fixed

  • flow-php/flow-php-ext - native hydrator keeps per-value metadata of numeric-named columns, like the PHP one

Changed

  • flow-php/etl - Floe reader and writer use the fused native path when the hydrator is native
  • flow-php/etl - Floe offset reads skip rows before decoding them
  • flow-php/etl - Floe extractor adds file constants per batch, only when there are any
  • flow-php/flow-php-ext - datetimes are built from timestamps without parsing on PHP 8.4+
  • flow-php/etl - an extension without the new methods falls back to the PHP Floe engine

Removed

  • flow-php/etl - AdaptiveFloeEncoder, FloeEngine::adaptive picks the encoder itself

Deprecated

Security

- decode frames straight into Rows in one native pass
- encode Rows straight into complete ROW frames natively
- skip offset rows before decoding, drop reader re-batching
- build datetimes from timestamps natively on PHP 8.4+
- remove AdaptiveFloeEncoder, FloeEngine picks the encoder
- fall back to PHP for extensions without the new methods
@norberttech norberttech added this to the 0.45.0 milestone Sep 24, 2026
@codecov

codecov Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.92%. Comparing base (a959b12) to head (066a039).
⚠️ 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    #2653      +/-   ##
============================================
- Coverage     84.93%   84.92%   -0.02%     
- Complexity    31265    31283      +18     
============================================
  Files          2125     2125              
  Lines         89493    89454      -39     
============================================
- Hits          76011    75967      -44     
- Misses        13482    13487       +5     
Components Coverage Δ
etl 92.25% <75.00%> (-0.07%) ⬇️
cli 76.03% <ø> (ø)
lib-array-dot 96.52% <ø> (ø)
lib-azure-sdk 64.44% <ø> (ø)
lib-doctrine-dbal-bulk 70.36% <ø> (ø)
lib-filesystem 77.18% <ø> (ø)
lib-types 90.50% <ø> (ø)
lib-parquet 70.32% <ø> (+0.09%) ⬆️
lib-parquet-viewer 82.26% <ø> (ø)
lib-snappy 89.86% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 85.91% <ø> (-0.01%) ⬇️
lib-telemetry 86.59% <ø> (ø)
bridge-filesystem-async-aws 86.31% <ø> (ø)
bridge-filesystem-azure 80.96% <ø> (ø)
bridge-filesystem-sftp 91.02% <ø> (ø)
bridge-monolog-http 91.54% <ø> (ø)
bridge-monolog-telemetry 94.79% <ø> (ø)
bridge-openapi-specification 60.86% <ø> (ø)
symfony-http-foundation 56.86% <ø> (ø)
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.04% <ø> (ø)
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 88.55% <ø> (ø)
adapter-doctrine 90.06% <ø> (ø)
adapter-google-sheet 81.17% <ø> (ø)
adapter-http 75.75% <ø> (ø)
adapter-json 67.77% <ø> (ø)
adapter-logger 28.57% <ø> (ø)
adapter-parquet 76.58% <ø> (ø)
adapter-text 72.06% <ø> (ø)
adapter-xml 60.32% <ø> (ø)
adapter-avro 7.14% <ø> (ø)
adapter-excel 80.00% <ø> (ø)
adapter-postgresql 78.56% <ø> (ø)
adapter-seal 65.69% <ø> (ø)
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.

- data provider no longer builds native hydrators before the skip
- bump Blackfire agent and PHP probe on macOS arm64
@norberttech
norberttech merged commit f460998 into 1.x Sep 24, 2026
49 of 50 checks passed
@norberttech
norberttech deleted the floe-read-path branch September 24, 2026 14:49
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