Skip to content

Read performance - #2645

Merged
norberttech merged 4 commits into
1.xfrom
read-performance
Sep 21, 2026
Merged

norberttech merged 4 commits into
1.xfrom
read-performance

Conversation

@norberttech

Copy link
Copy Markdown
Member

Resolves: #xxx

Change Log


Added

  • flow-php/flow-php-ext - native CSV tokenizer, reader and schema inference
  • flow-php/flow-php-ext - native JSON validation and ISO datetime casting in the hydrator
  • flow-php/etl-adapter-csv - NativeCSVOpenSource used when the extension is loaded
  • flow-php/etl - SniffsColumnTypes lets a sample infer its own column types

Fixed

  • flow-php/etl-adapter-csv - escaped or bare enclosure no longer merges a record with the next line
  • flow-php/etl-adapter-csv - record boundaries on huge records survive the PCRE backtrack limit
  • flow-php/flow-php-ext - reference values no longer leak into natively hydrated rows
  • flow-php/filesystem - closing a stream while it is being read no longer throws a TypeError

Changed

  • flow-php/etl-adapter-csv - CSVOpenSource is now an interface implemented by PhpCSVOpenSource
  • flow-php/etl-adapter-csv - CSVLineReader takes the separator and escape
  • flow-php/etl-adapter-csv - CSVFileReader::samples() yields CSVFileSample
  • flow-php/etl - schema inference and row conforming skip redundant work
  • flow-php/flow-php-ext - hydrated rows skip the conform pass when no column is absent

Removed

Deprecated

Security

- skip type narrowing once a column saturates to string
- return rows that already match the schema from conform
- drop the per-field coercion closure in CSV decode
- hoist the stream handle out of the readLines/iterate loops
- Rust CSV tokenizer and schema fold behind the optional extension
- adaptive CSVOpenSource: NativeCSVOpenSource / PhpCSVOpenSource
- SniffsColumnTypes lets a sample fold itself in SchemaInferrer
- escaped or bare enclosure no longer glues two records together
- PCRE-limit fallback for record boundaries on huge records
…ively

- validate JSON with serde_json behind depth and surrogate pre-filters
- assemble Rows through Rows::trusted when no column is absent
- cast ISO datetime strings without calling DateTimeType
- share the source string with Json and Uuid instead of copying it
- fix reference values leaking into natively hydrated rows
@norberttech norberttech added this to the 0.45.0 milestone Sep 21, 2026
@codecov

codecov Bot commented Sep 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.24064% with 65 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.77%. Comparing base (031f5fb) to head (a40c11a).
⚠️ Report is 5 commits behind head on 1.x.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##                1.x    #2645      +/-   ##
============================================
- Coverage     84.82%   84.77%   -0.05%     
- Complexity    30939    31000      +61     
============================================
  Files          2094     2098       +4     
  Lines         88711    88854     +143     
============================================
+ Hits          75245    75330      +85     
- Misses        13466    13524      +58     
Components Coverage Δ
etl 92.22% <100.00%> (+<0.01%) ⬆️
cli 75.49% <ø> (ø)
lib-array-dot 96.52% <ø> (ø)
lib-azure-sdk 64.44% <ø> (ø)
lib-doctrine-dbal-bulk 70.36% <ø> (ø)
lib-filesystem 77.18% <100.00%> (+0.09%) ⬆️
lib-types 90.49% <ø> (ø)
lib-parquet 70.32% <ø> (ø)
lib-parquet-viewer 82.26% <ø> (ø)
lib-snappy 89.86% <ø> (ø)
lib-dremel 0.00% <ø> (ø)
lib-postgresql 85.64% <ø> (+<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.42% <56.66%> (-7.57%) ⬇️
adapter-doctrine 89.63% <ø> (ø)
adapter-google-sheet 80.00% <ø> (ø)
adapter-http 76.52% <ø> (ø)
adapter-json 65.80% <ø> (ø)
adapter-logger 28.57% <ø> (ø)
adapter-parquet 75.82% <ø> (ø)
adapter-text 71.59% <ø> (ø)
adapter-xml 60.00% <ø> (ø)
adapter-avro 7.69% <ø> (ø)
adapter-excel 79.17% <ø> (ø)
adapter-postgresql 77.94% <ø> (ø)
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.

@norberttech
norberttech merged commit 9de005e into 1.x Sep 21, 2026
88 of 91 checks passed
@norberttech
norberttech deleted the read-performance branch September 21, 2026 17:17
@github-project-automation github-project-automation Bot moved this from Todo to Done in Roadmap Sep 21, 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