Skip to content

refactor(flow-php/etl): splittable sources and the etl layer model - #2710

Merged
norberttech merged 2 commits into
1.xfrom
flow-architecture-refactoring
Oct 30, 2026
Merged

norberttech merged 2 commits into
1.xfrom
flow-architecture-refactoring

Conversation

@norberttech

Copy link
Copy Markdown
Member

Resolves: #xxx

Change Log


Added

  • flow-php/etl - splittable file sources with byte-window splits
  • flow-php/etl - one schema inference contract with per-file sniffers
  • flow-php/etl - launcher seam on Config
  • flow-php/etl - Architecture documentation page
  • flow-php/etl-adapter-http - http_stop_when_any_of() and http_stop_when_all_of()

Fixed

  • flow-php/etl - count(ref) skips nulls in group-by, pivot and window functions alike
  • flow-php/etl - overwrite removes only files Flow wrote and never loses data on a failed commit
  • flow-php/etl - 0-row loads write no file for every format
  • flow-php/etl - a frame with constraints runs more than once
  • flow-php/etl-adapter-excel - Ignore no longer overwrites an existing workbook
  • flow-php/filesystem - MemoryFilesystem::mv() moves files and directories

Changed

  • flow-php/etl - every namespace sits in one layer root, guarded per layer
  • flow-php/etl - Sink renamed to Branch, file sinks to FileWriter, one FileCommit protocol
  • flow-php/etl - readers skip hidden paths and temporary output
  • flow-php/etl - the planner holds its settings, Rule::apply() takes a Backend
  • flow-php/etl - GroupBy and Repartition builders merged into BucketingAlgorithmBuilder
  • flow-php/etl-adapter-csv - classes follow the etl layers (IO\Extractor, IO\Loader, IO\Inference)
  • flow-php/etl-adapter-json - classes follow the etl layers
  • flow-php/etl-adapter-parquet - classes follow the etl layers, one writer per lane
  • flow-php/etl-adapter-text - classes follow the etl layers
  • flow-php/etl-adapter-xml - classes follow the etl layers
  • flow-php/etl-adapter-excel - classes follow the etl layers, Excel writes describe themselves
  • flow-php/etl-adapter-doctrine - classes follow the etl layers
  • flow-php/etl-adapter-postgresql - classes follow the etl layers
  • flow-php/etl-adapter-http - classes follow the etl layers, StopWhen is an interface
  • flow-php/etl-adapter-google-sheet - classes follow the etl layers
  • flow-php/etl-adapter-avro - classes follow the etl layers
  • flow-php/etl-adapter-chartjs - classes follow the etl layers
  • flow-php/etl-adapter-logger - classes follow the etl layers
  • flow-php/etl-adapter-seal - classes follow the etl layers
  • flow-php/flow-php-ext - native classes follow the etl layer namespaces
  • flow-php/cli - follows the etl namespace moves

Removed

  • flow-php/etl - LimitReachedException, replaced by the Limiting contract
  • flow-php/etl - FilteredBranch::withTransformation()
  • flow-php/etl - window frame accumulators, windows reuse aggregate functions

Deprecated

Security

- splittable file sources, one schema inference contract, a launcher seam on Config
- every namespace sits in one layer root (Foundation, Values, Storage, Kernels, Functions, IO, Operators, Planning, Runtime, API), guarded per layer, 0 upward dependencies
- adapters follow the same layers (IO\Extractor, IO\Loader, IO\Inference, Values\Schema, Foundation\Exception)
- one mechanism per operation: branch vocabulary, FileWriter, one FileCommit protocol, NestedLoader, Launch, BucketingAlgorithmBuilder
- correctness: one count semantic, stateful steps never split, limit stop without an exception, readers skip hidden paths
- tests mirror the layers, shared contracts run per package, new Architecture documentation page
@norberttech norberttech added this to the 0.47.0 milestone Oct 30, 2026
@codecov

codecov Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.89039% with 68 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.40%. Comparing base (d5aefb9) to head (c1a25ed).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##                1.x    #2710      +/-   ##
============================================
+ Coverage     90.11%   90.40%   +0.29%     
- Complexity        0    30819   +30819     
============================================
  Files          2220     2174      -46     
  Lines         85881    89093    +3212     
============================================
+ Hits          77389    80545    +3156     
- Misses         8492     8548      +56     
Components Coverage Δ
etl 95.81% <ø> (-0.10%) ⬇️
cli 87.05% <ø> (-0.08%) ⬇️
lib-array-dot 96.52% <ø> (ø)
lib-azure-sdk 63.84% <ø> (-0.60%) ⬇️
lib-doctrine-dbal-bulk 94.24% <ø> (ø)
lib-filesystem 88.09% <ø> (+0.46%) ⬆️
lib-types 94.60% <ø> (-0.10%) ⬇️
lib-parquet 82.68% <ø> (+0.52%) ⬆️
lib-parquet-viewer 83.15% <ø> (ø)
lib-snappy 90.74% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 89.44% <ø> (+0.04%) ⬆️
lib-telemetry 86.85% <ø> (+<0.01%) ⬆️
bridge-filesystem-async-aws 93.70% <ø> (+0.94%) ⬆️
bridge-filesystem-azure 94.17% <ø> (+3.83%) ⬆️
bridge-filesystem-sftp 89.44% <ø> (-1.59%) ⬇️
bridge-monolog-http 96.84% <ø> (ø)
bridge-monolog-telemetry 94.79% <ø> (ø)
bridge-openapi-specification 91.95% <ø> (+0.50%) ⬆️
symfony-http-foundation 80.76% <ø> (+4.95%) ⬆️
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 90.72% <ø> (+0.05%) ⬆️
bridge-symfony-filesystem-cache 98.18% <ø> (ø)
bridge-symfony-postgresql-bundle 93.35% <ø> (ø)
bridge-symfony-postgresql-cache 94.41% <ø> (ø)
bridge-symfony-postgresql-messenger 98.80% <ø> (ø)
bridge-symfony-postgresql-session 93.65% <ø> (ø)
bridge-symfony-telemetry-bundle 90.77% <ø> (ø)
adapter-chartjs 82.11% <79.16%> (+2.97%) ⬆️
adapter-csv 97.61% <98.01%> (+0.93%) ⬆️
adapter-doctrine 95.13% <95.32%> (+0.27%) ⬆️
adapter-google-sheet 97.40% <ø> (-1.80%) ⬇️
adapter-http 87.18% <ø> (-0.94%) ⬇️
adapter-json 90.30% <ø> (+0.30%) ⬆️
adapter-logger 47.05% <ø> (+2.61%) ⬆️
adapter-parquet 96.28% <ø> (+0.93%) ⬆️
adapter-text 97.70% <ø> (+0.75%) ⬆️
adapter-xml 98.01% <ø> (+3.82%) ⬆️
adapter-avro 6.25% <6.25%> (-0.90%) ⬇️
adapter-excel 97.11% <ø> (-0.19%) ⬇️
adapter-postgresql 97.34% <ø> (-0.14%) ⬇️
adapter-seal 89.91% <ø> (-0.96%) ⬇️
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.

- mod() refuses a negative modulus on every brick/math version
- flow-php-ext formatted with cargo fmt
- removed DSL example attributes pointing at the deleted data_frame example, docs and completers regenerated
- completer commands take --output-dir, so their tests no longer write tracked assets
@norberttech
norberttech merged commit d5ffe41 into 1.x Oct 30, 2026
31 checks passed
@norberttech
norberttech deleted the flow-architecture-refactoring branch October 30, 2026 21:20
@github-project-automation github-project-automation Bot moved this from Todo to Done in Roadmap Oct 30, 2026
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