Skip to content

Conversation

@norberttech
Copy link
Member

@norberttech norberttech commented Sep 18, 2025

Change Log


Added

  • Windows support in filesystem component

Fixed

Changed

Removed

Deprecated

Security

Description

Resolves: #1335
Resolves: #1733
Replaces: #1250

This is an experimental PR addressing issue raised in #1250

It seems that the biggest issue is how Flow Filesystem components is handling paths on Windows FS.

The idea behind this PR is to turn Path class into a Facade that will detect OS and use one of more specific implementations:

  • WindowsPath
  • UnixPath

Keeping API exactly the same as it was before.

@codecov
Copy link

codecov bot commented Sep 18, 2025

Codecov Report

❌ Patch coverage is 87.41722% with 57 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.47%. Comparing base (c8079d1) to head (83ad0da).
⚠️ Report is 2 commits behind head on 1.x.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##              1.x    #1855      +/-   ##
==========================================
+ Coverage   82.41%   82.47%   +0.05%     
==========================================
  Files         770      772       +2     
  Lines       21487    21785     +298     
==========================================
+ Hits        17709    17967     +258     
- Misses       3778     3818      +40     
Components Coverage Δ
etl 89.25% <ø> (-0.02%) ⬇️
cli 85.91% <ø> (ø)
lib-array-dot 94.56% <ø> (ø)
lib-azure-sdk 61.35% <ø> (ø)
lib-doctrine-dbal-bulk 95.59% <ø> (ø)
lib-filesystem 80.25% <87.41%> (+2.22%) ⬆️
lib-types 53.55% <ø> (ø)
lib-parquet 85.50% <ø> (ø)
lib-parquet-viewer 83.11% <ø> (ø)
lib-snappy 90.23% <ø> (ø)
bridge-filesystem-async-aws 90.38% <ø> (ø)
bridge-filesystem-azure 89.92% <ø> (ø)
bridge-monolog-http 97.04% <ø> (ø)
bridge-openapi-specification 94.52% <ø> (ø)
symfony-http-foundation 74.41% <ø> (ø)
adapter-chartjs 86.70% <ø> (ø)
adapter-csv 88.85% <ø> (ø)
adapter-doctrine 91.21% <ø> (ø)
adapter-elasticsearch 97.23% <ø> (ø)
adapter-google-sheet 84.49% <ø> (ø)
adapter-http 58.10% <ø> (ø)
adapter-json 87.98% <ø> (ø)
adapter-logger 53.84% <ø> (ø)
adapter-meilisearch 97.95% <ø> (ø)
adapter-parquet 78.92% <ø> (ø)
adapter-text 84.44% <ø> (ø)
adapter-xml 82.73% <ø> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 18, 2025

Flow PHP - Benchmarks

Results of the benchmarks from this PR are compared with the results from 1.x branch.

Extractors
+-----------------------+------------------------+------+-----+-----------------+------------------+-----------------+
| benchmark             | subject                | revs | its | mem_peak        | mode             | rstdev          |
+-----------------------+------------------------+------+-----+-----------------+------------------+-----------------+
| CSVExtractorBench     | bench_extract_10k      | 1    | 3   | 4.936mb +0.38%  | 433.253ms +0.16% | ±0.40% -46.83%  |
| ExcelExtractorBench   | bench_extract_10k_ods  | 1    | 3   | 65.632mb +0.88% | 1.090s +2.38%    | ±1.24% +193.46% |
| ExcelExtractorBench   | bench_extract_10k_xlsx | 1    | 3   | 67.743mb +0.85% | 1.724s +2.01%    | ±0.21% -83.02%  |
| JsonExtractorBench    | bench_extract_10k      | 1    | 3   | 5.482mb +0.20%  | 1.163s +0.99%    | ±0.28% -74.27%  |
| ParquetExtractorBench | bench_extract_10k      | 1    | 3   | 10.760mb +0.00% | 9.593s -16.65%   | ±0.45% +59.09%  |
| TextExtractorBench    | bench_extract_10k      | 1    | 3   | 4.662mb +0.40%  | 61.616ms +47.13% | ±0.78% +202.15% |
| XmlExtractorBench     | bench_extract_10k      | 1    | 3   | 4.645mb +0.41%  | 632.262ms +5.48% | ±0.15% -85.59%  |
+-----------------------+------------------------+------+-----+-----------------+------------------+-----------------+
Transformers
+---------------------------------+--------------------------+------+-----+------------------+-----------------+-----------------+
| benchmark                       | subject                  | revs | its | mem_peak         | mode            | rstdev          |
+---------------------------------+--------------------------+------+-----+------------------+-----------------+-----------------+
| RenameEachEntryTransformerBench | bench_transform_10k_rows | 1    | 3   | 18.656mb +0.16%  | 74.009ms -0.22% | ±1.05% +205.46% |
| RenameEntryTransformerBench     | bench_transform_10k_rows | 1    | 3   | 123.459mb +0.02% | 66.882ms -2.13% | ±1.01% -10.11%  |
+---------------------------------+--------------------------+------+-----+------------------+-----------------+-----------------+
Loaders
+--------------------+----------------+------+-----+------------------+------------------+------------------+
| benchmark          | subject        | revs | its | mem_peak         | mode             | rstdev           |
+--------------------+----------------+------+-----+------------------+------------------+------------------+
| CSVLoaderBench     | bench_load_10k | 1    | 3   | 62.597mb +0.29%  | 90.407ms +6.59%  | ±1.05% +7451.63% |
| JsonLoaderBench    | bench_load_10k | 1    | 3   | 80.682mb +0.02%  | 102.247ms -0.78% | ±0.83% -13.17%   |
| ParquetLoaderBench | bench_load_10k | 1    | 3   | 819.363mb +0.05% | 20.313s -25.72%  | ±0.73% +14.55%   |
| TextLoaderBench    | bench_load_10k | 1    | 3   | 17.962mb +0.11%  | 34.228ms +12.27% | ±0.50% +83.21%   |
+--------------------+----------------+------+-----+------------------+------------------+------------------+
Building Blocks
+-------------------+----------------------------+------+-----+------------------+------------------+-----------------+
| benchmark         | subject                    | revs | its | mem_peak         | mode             | rstdev          |
+-------------------+----------------------------+------+-----+------------------+------------------+-----------------+
| TypeDetectorBench | bench_type_detector        | 1    | 3   | 42.601mb +0.01%  | 404.765ms -1.30% | ±0.55% +54.99%  |
| TypeDetectorBench | bench_type_detector        | 1    | 3   | 11.659mb +0.05%  | 82.144ms -1.86%  | ±0.68% +8.29%   |
| EntryFactoryBench | bench_entry_factory        | 1    | 3   | 106.079mb +0.01% | 655.699ms -0.00% | ±0.82% +136.53% |
| EntryFactoryBench | bench_entry_factory        | 1    | 3   | 55.356mb +0.01%  | 331.547ms -0.12% | ±0.91% -72.29%  |
| EntryFactoryBench | bench_entry_factory        | 1    | 3   | 14.942mb +0.04%  | 71.343ms +0.86%  | ±0.27% -19.91%  |
| RowsBench         | bench_chunk_10_on_10k      | 2    | 3   | 93.546mb +0.01%  | 4.239ms +22.33%  | ±2.74% +145.37% |
| RowsBench         | bench_diff_left_1k_on_10k  | 2    | 3   | 110.936mb +0.00% | 238.019ms -0.08% | ±0.12% -77.68%  |
| RowsBench         | bench_diff_right_1k_on_10k | 2    | 3   | 93.656mb +0.01%  | 24.165ms +0.01%  | ±0.86% -34.83%  |
| RowsBench         | bench_drop_1k_on_10k       | 2    | 3   | 94.421mb +0.01%  | 1.885ms +3.83%   | ±1.29% -55.51%  |
| RowsBench         | bench_drop_right_1k_on_10k | 2    | 3   | 94.421mb +0.01%  | 1.770ms -3.67%   | ±3.23% +34.38%  |
| RowsBench         | bench_entries_on_10k       | 2    | 3   | 92.582mb +0.01%  | 3.796ms -2.71%   | ±1.66% -15.92%  |
| RowsBench         | bench_filter_on_10k        | 2    | 3   | 93.111mb +0.01%  | 16.106ms -1.17%  | ±0.98% -16.02%  |
| RowsBench         | bench_find_on_10k          | 2    | 3   | 93.111mb +0.01%  | 16.217ms -0.20%  | ±1.83% +25.20%  |
| RowsBench         | bench_find_one_on_10k      | 10   | 3   | 91.800mb +0.01%  | 2.094μs +4.38%   | ±2.28% -1.61%   |
| RowsBench         | bench_first_on_10k         | 10   | 3   | 91.800mb +0.01%  | 0.400μs 0.00%    | ±0.00% 0.00%    |
| RowsBench         | bench_flat_map_on_1k       | 2    | 3   | 100.860mb +0.01% | 15.887ms -1.17%  | ±0.40% -86.03%  |
| RowsBench         | bench_map_on_10k           | 2    | 3   | 130.287mb +0.00% | 71.676ms +1.06%  | ±1.44% +18.00%  |
| RowsBench         | bench_merge_1k_on_10k      | 2    | 3   | 93.631mb +0.01%  | 1.616ms -13.27%  | ±0.93% +214.36% |
| RowsBench         | bench_partition_by_on_10k  | 2    | 3   | 97.019mb +0.01%  | 62.412ms -0.91%  | ±1.26% +120.92% |
| RowsBench         | bench_remove_on_10k        | 2    | 3   | 94.683mb +0.01%  | 3.713ms -14.40%  | ±1.84% +0.38%   |
| RowsBench         | bench_sort_asc_on_1k       | 2    | 3   | 92.180mb +0.01%  | 39.976ms -2.26%  | ±0.37% -73.38%  |
| RowsBench         | bench_sort_by_on_1k        | 2    | 3   | 92.181mb +0.01%  | 39.800ms -4.07%  | ±0.22% -78.97%  |
| RowsBench         | bench_sort_desc_on_1k      | 2    | 3   | 92.180mb +0.01%  | 39.847ms -3.22%  | ±0.14% -93.28%  |
| RowsBench         | bench_sort_entries_on_1k   | 2    | 3   | 94.243mb +0.01%  | 7.953ms -4.44%   | ±1.58% +161.38% |
| RowsBench         | bench_sort_on_1k           | 2    | 3   | 91.993mb +0.01%  | 29.355ms +1.02%  | ±0.89% -26.92%  |
| RowsBench         | bench_take_1k_on_10k       | 10   | 3   | 91.800mb +0.01%  | 14.259μs -6.66%  | ±1.74% +39.65%  |
| RowsBench         | bench_take_right_1k_on_10k | 10   | 3   | 91.800mb +0.01%  | 16.888μs -3.86%  | ±0.56% -51.94%  |
| RowsBench         | bench_unique_on_1k         | 2    | 3   | 110.937mb +0.00% | 240.407ms -0.73% | ±0.58% +20.59%  |
+-------------------+----------------------------+------+-----+------------------+------------------+-----------------+
Parquet Library
+--------------------+---------------------------------+------+-----+------------------+-------------------+-----------------+
| benchmark          | subject                         | revs | its | mem_peak         | mode              | rstdev          |
+--------------------+---------------------------------+------+-----+------------------+-------------------+-----------------+
| ParquetReaderBench | bench_page_headers              | 1    | 3   | 6.958mb +0.43%   | 3.303s -0.68%     | ±0.09% -79.33%  |
| ParquetReaderBench | bench_read_metadata             | 1    | 3   | 5.413mb +0.55%   | 18.320ms +0.67%   | ±0.34% -58.69%  |
| ParquetReaderBench | bench_read_schema               | 1    | 3   | 5.413mb +0.55%   | 19.663ms +6.08%   | ±3.27% +501.50% |
| ParquetReaderBench | bench_read_values_all_columns   | 1    | 3   | 9.163mb +0.84%   | 5.676s -28.04%    | ±0.61% -18.06%  |
| ParquetReaderBench | bench_read_values_single_column | 1    | 3   | 6.460mb +0.17%   | 233.858ms -48.72% | ±0.85% +106.21% |
| ParquetReaderBench | bench_read_values_with_limit    | 1    | 3   | 6.991mb -0.02%   | 29.028ms -14.10%  | ±0.01% -71.41%  |
| ParquetWriterBench | bench_write_batch               | 1    | 3   | 11.781mb -14.06% | 193.335ms -13.75% | ±0.12% -86.33%  |
| ParquetWriterBench | bench_write_gzip                | 1    | 3   | 10.406mb +0.94%  | 220.034ms +0.06%  | ±0.57% -39.84%  |
| ParquetWriterBench | bench_write_row_by_row          | 1    | 3   | 11.781mb -14.06% | 192.806ms -13.74% | ±0.81% +23.65%  |
| ParquetWriterBench | bench_write_snappy              | 1    | 3   | 11.781mb -14.06% | 192.832ms -14.05% | ±0.62% -36.03%  |
| ParquetWriterBench | bench_write_uncompressed        | 1    | 3   | 10.081mb +0.43%  | 192.772ms +1.15%  | ±0.67% +2.29%   |
+--------------------+---------------------------------+------+-----+------------------+-------------------+-----------------+

@norberttech norberttech force-pushed the feature/filesystem-windows-support branch from 86941bb to e3e2331 Compare September 18, 2025 18:43
@norberttech norberttech force-pushed the feature/filesystem-windows-support branch from e3e2331 to 6fb7fbd Compare September 18, 2025 18:50
@norberttech
Copy link
Member Author

Next step is to identify all OS specific tests and either try to make them OS agnostic (if possible) or simply duplicate them and mark as skipped on incompatible OS.

@norberttech norberttech force-pushed the feature/filesystem-windows-support branch from bad80f5 to d17b3aa Compare September 20, 2025 09:40
@norberttech norberttech merged commit 0220037 into 1.x Sep 21, 2025
27 checks passed
@norberttech norberttech deleted the feature/filesystem-windows-support branch September 21, 2025 18:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Path adds a backslash (\) in front of the Path Windows Support

3 participants