Skip to content

feat: Floe binary row serialization format#2523

Merged
norberttech merged 5 commits into
1.xfrom
binary-serializer
Jul 11, 2026
Merged

feat: Floe binary row serialization format#2523
norberttech merged 5 commits into
1.xfrom
binary-serializer

Conversation

@norberttech

Copy link
Copy Markdown
Member

Change Log


Added

  • flow-php/etl - Floe binary row serialization format with writer, reader, merger, extractor, loader and DSL.
  • flow-php/flow-php-ext - new Rust-based PHP extension for native Floe encoding/decoding.
  • flow-php/etl - Cache::read() for streaming cached Rows in batches.

Fixed

  • flow-php/filesystem - MemoryStream appends at end of stream after ranged reads.
  • flow-php/types - EnumType normalization accepts UnitEnum/BackedEnum interfaces.

Changed

  • flow-php/etl - Cache stores only Rows; cache indexes are stored as Rows.
  • flow-php/etl - cache implementations and external sort buckets serialize with Floe instead of PHP serializer.
  • flow-php/etl - serialize/unserialize transformers use Floe serializer.

Removed

Deprecated

Security

@norberttech norberttech added this to the 0.42.0 milestone Jul 11, 2026
@norberttech norberttech added the hackaton-07-2026 A first Flow Hackaton with Stloyd and MrHDOLEK 🎉 label Jul 11, 2026
@codecov

codecov Bot commented Jul 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.21251% with 98 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.27%. Comparing base (77844c9) to head (ed7f2d8).
⚠️ 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    #2523      +/-   ##
============================================
+ Coverage     85.97%   86.27%   +0.30%     
- Complexity    22271    22924     +653     
============================================
  Files          1663     1739      +76     
  Lines         68436    70415    +1979     
============================================
+ Hits          58840    60754    +1914     
- Misses         9596     9661      +65     
Components Coverage Δ
etl 89.86% <95.21%> (+1.27%) ⬆️
cli 89.40% <ø> (ø)
lib-array-dot 81.44% <ø> (ø)
lib-azure-sdk 64.44% <ø> (ø)
lib-doctrine-dbal-bulk 93.61% <ø> (ø)
lib-filesystem 86.04% <ø> (+0.07%) ⬆️
lib-types 90.18% <ø> (+0.01%) ⬆️
lib-parquet 70.10% <ø> (ø)
lib-parquet-viewer 82.26% <ø> (ø)
lib-snappy 89.82% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 88.62% <ø> (ø)
lib-telemetry 86.58% <ø> (ø)
bridge-filesystem-async-aws 92.74% <ø> (ø)
bridge-filesystem-azure 90.45% <ø> (ø)
bridge-monolog-http 96.82% <ø> (ø)
bridge-monolog-telemetry 94.79% <ø> (ø)
bridge-openapi-specification 92.07% <ø> (ø)
symfony-http-foundation 78.57% <ø> (ø)
bridge-psr18-telemetry 100.00% <ø> (ø)
bridge-psr3-telemetry 98.95% <ø> (ø)
bridge-psr7-telemetry 100.00% <ø> (ø)
bridge-telemetry-otlp 90.41% <ø> (ø)
bridge-symfony-http-foundation-telemetry 92.85% <ø> (ø)
bridge-symfony-filesystem-bundle 90.66% <ø> (ø)
bridge-symfony-filesystem-cache 98.18% <ø> (ø)
bridge-symfony-postgresql-bundle 93.39% <ø> (ø)
bridge-symfony-postgresql-cache 94.41% <ø> (ø)
bridge-symfony-postgresql-messenger 98.80% <ø> (ø)
bridge-symfony-postgresql-session 93.65% <ø> (ø)
bridge-symfony-telemetry-bundle 90.23% <ø> (ø)
adapter-chartjs 84.05% <ø> (ø)
adapter-csv 91.66% <ø> (ø)
adapter-doctrine 90.79% <ø> (ø)
adapter-google-sheet 99.18% <ø> (ø)
adapter-http 72.34% <ø> (ø)
adapter-json 88.71% <ø> (ø)
adapter-logger 50.00% <ø> (ø)
adapter-parquet 77.70% <ø> (ø)
adapter-text 74.13% <ø> (ø)
adapter-xml 83.40% <ø> (ø)
adapter-avro 0.00% <ø> (ø)
adapter-excel 94.21% <ø> (ø)
adapter-postgresql 91.06% <ø> (ø)
adapter-seal 85.42% <ø> (ø)
bridge-phpunit-postgresql 75.30% <ø> (ø)
bridge-phpunit-telemetry 87.32% <ø> (ø)
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.

Comment thread src/core/etl/src/Flow/ETL/Cache/Implementation/PSRSimpleCache.php Outdated
Comment thread src/core/etl/src/Flow/Floe/FloeMerger.php Outdated
Comment thread src/core/etl/src/Flow/Floe/FloeMerger.php Outdated
- new Flow\Floe binary format: writer, reader, merger, schema evolution,
extractor/loader + DSL
- new flow-php/flow-php-ext Rust extension for native Floe
encode/decode, with PHP fallback parity tests
- cache layer rewritten on Floe: CacheIndex, streaming FilesystemCache,
external sort buckets
- CI workflow, nix packaging and codecov flag for the extension
- documentation for Floe format and extension, upgrade notes
- install Composer dependencies before PHPT tests (bootstrap requires
repo autoloader)
- enable extension via php.ini fallback when PIE auto-enable fails
- drop removed Flow\Serializer integration test dir from
phpunit.xml.dist
- add missing ext/Makefile.frag so phpize/PIE builds the Rust library
instead of shipping the dummy C stub
- compare html fallback rows via re-encoded wire bytes; Dom\HTMLDocument
forbids serialize()
- chain caught exceptions into KeyNotInCacheException to keep
stacktraces
- reuse a single FloeReader in FilesystemCache and FloeMerger instead of
per-call construction
- drop redundant array_values() in FloeMerger::merge(); reconcile() no
longer depends on the first key being 0
Comment thread src/core/etl/src/Flow/ETL/Rows.php Outdated
- FilesystemBucketsCache batch size flows from config:
externalSortBatchSize() on Config/CacheConfig builders, wired through
SortingProcessor; also feeds bucket recover() reads
- reuse a single FloeReader in FilesystemBucketsCache
- simplify Rows::chunks() to array_chunk with inline adoption, drop
fromList() (review feedback, perf-neutral at 1M rows)
@norberttech norberttech merged commit 53065fd into 1.x Jul 11, 2026
47 checks passed
@norberttech norberttech deleted the binary-serializer branch July 11, 2026 13:23
@github-project-automation github-project-automation Bot moved this from Todo to Done in Roadmap Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hackaton-07-2026 A first Flow Hackaton with Stloyd and MrHDOLEK 🎉 size: XL

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants