Skip to content

0.42.0

Choose a tag to compare

@norberttech norberttech released this 27 Jul 13:59
· 91 commits to 1.x since this release

[0.42.0] - 2026-07-27

Added

  • #2556 - flow-php/etl - Schema Immutability ADR - @norberttech
  • #2555 - docker - PHP 8.5 image with libpq 18 and native arrow, flow_php and pg_query extensions enabled - @norberttech
  • #2555 - wasm - Opcache with a working shared-memory backend in the playground - @norberttech
  • #2555 - wasm - playground recycles the PHP module automatically when memory runs high - @norberttech
  • #2547 - flow-php/etl-adapter-http - declarative from_http_paginated extractor with page-number, offset/limit, cursor, next-url, link-header and last-record strategies - @norberttech
  • #2547 - flow-php/etl-adapter-http - composable stop conditions and pluggable request injection (query/header/body/uri) for pagination - @norberttech
  • #2547 - flow-php/etl-adapter-http - optional Schema argument on all HTTP extractor DSL functions - @norberttech
  • #2544 - flow-php/etl - "Performance Optimizations" blog post with benchmarks and diagrams - @norberttech
  • #2544 - flow-php/etl - blog RSS feed at /rss.xml with autodiscovery and subscribe links - @norberttech
  • #2543 - flow-php/etl - Standalone Flow\ETL\Bucketing storage backend with Memory, Filesystem and PSR-16 implementations. - @norberttech
  • #2543 - flow-php/etl - BucketingProcessor with pluggable strategies (HashBucketing, SortedRunBucketing). - @norberttech
  • #2543 - flow-php/etl - Algorithm builder DSL functions: memory_sort(), external_sort(), hash_join(), hash_group_by(). - @norberttech
  • #2543 - flow-php/etl - Floe Options value object with floe_options() DSL and validateData option. - @norberttech
  • #2540 - flow-php/etl - Floe Options value object with validateData toggle - @norberttech
  • #2540 - flow-php/etl - floe_options() DSL and options argument on to_floe() - @norberttech
  • #2538 - phpbench based benchmarks - @norberttech
  • #2538 - flow-php/etl - selectable Floe engine (native/pure-PHP) on from_floe()/to_floe() - @norberttech
  • #2538 - flow-php/etl-adapter-parquet - selectable engine (arrow/pure-PHP) on from_parquet()/to_parquet() - @norberttech
  • #2536 - flow-php/etl - bucketed hash join with disk spilling and JoinConfig DSL - @norberttech
  • #2536 - flow-php/etl - Row\Encoder and Row\Hydrator abstractions (PHP, native, adaptive) - @norberttech
  • #2536 - flow-php/etl - NullEntry and NullDefinition - @norberttech
  • #2536 - flow-php/etl - Floe stream reader/writer with PHP and Rust encoders - @norberttech
  • #2536 - flow-php/etl - InMemoryBucketsCache for external sort - @norberttech
  • #2536 - flow-php/etl - Serializer DSL functions - @norberttech
  • #2536 - flow-php/filesystem - in-memory string source/destination streams - @norberttech
  • #2532 - flow-php/etl - EntryInstantiator and Instantiators for constructor-less entry instantiation - @norberttech
  • #2532 - flow-php/etl - EntryFactory::instantiate() creating entries from schema definitions without casting - @norberttech
  • #2532 - flow-php/etl - Definition::entryClass() on all schema definitions, UnionDefinition resolves it from the left union member - @norberttech
  • #2532 - flow-php/etl-adapter-parquet - ValueHydrator restoring Json/Uuid value objects from raw parquet strings - @norberttech
  • #2473 - Configurable, memory-efficient GroupBy aggregation: ConfigBuilder::aggregationAlgorithm() and the AggregationAlgorithms enum select between MEMORY_AGGREGATION (default, in-memory hash map) and EXTERNAL_AGGREGATION (sorts by the group-by columns and folds, spilling to disk for bounded memory), with aggregationFilesystem() for the spill protocol. - @MrHDOLEK
  • #2473 - GroupBy streams its result in batches instead of materializing every group into a single Rows. - @MrHDOLEK
  • #2530 - Add GHA to check commit authorship - @stloyd
  • #2526 - flow-php/etl - externalSortBucketSize config controlling rows per external sort bucket (default 10000) - @norberttech
  • #2525 - flow-php/symfony-telemetry-bundle - RouteNamePathMap optional cache warmer building a [route name => path] map at cache:warmup, rebuilt lazily when missing - @norberttech
  • #2523 - flow-php/etl - Floe binary row serialization format with writer, reader, merger, extractor, loader and DSL. - @norberttech
  • #2523 - flow-php/flow-php-ext - new Rust-based PHP extension for native Floe encoding/decoding. - @norberttech
  • #2523 - flow-php/etl - Cache::read() for streaming cached Rows in batches. - @norberttech
  • #2522 - FlowContext::calculator() backed by a shared Calculator instance held in Config - @MrHDOLEK
  • #2522 - sum(ref('x'), exact: true) - opt-in arbitrary-precision (brick/math) summation; exact accepts ScalarFunction|bool, so the flag can also be driven per row by a scalar expression or a boolean column - @MrHDOLEK
  • #2516 - Add a new ref()->domElementNamespace() function - @stloyd
  • #2516 - Add support for a new \Dom\XmlDocument (PHP 8.4+) in XML handling - @stloyd
  • #2510 - flow-php/etl-adapter-json - bidirectional JSON Schema converter with schema_from_json_schema() and schema_to_json_schema() DSL functions - @norberttech
  • #2510 - flow-php/etl-adapter-json - $ref resolution for internal pointers, local files and remote http(s) documents via PSR-18 client, with circular reference detection - @norberttech
  • #2510 - flow-php/etl-adapter-json - combinator support: allOf deep merge, anyOf/oneOf as nullable or union types, boolean schemas - @norberttech
  • #2510 - flow-php/etl-adapter-json - JSON Schema annotations preserved in definition metadata under json_schema. keys* - @norberttech
  • #2510 - flow-php/etl - UnionDefinition and union_schema() DSL function for union type schema definitions - @norberttech
  • #2509 - flow-php/filesystem - {column} partition placeholders in paths with extraction, glob listing and filter support - @norberttech
  • #2509 - flow-php/etl - writing partitions into file/directory names via placeholders in destination paths - @norberttech
  • #2509 - flow-php/etl - reading placeholder paths recovers partitions from file names, including partition pruning - @norberttech
  • #2504 - code>flow-php/etl - support for brick/math 0.18 - @norberttech
  • #2504 - flow-php/etl - ValidationContext and MismatchedDefinition value objects with schema diff rendering via ValidationContext::toString() - @norberttech
  • #2504 - flow-php/etl - SchemaValidationException::context() accessor - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - messenger.span_naming option (transport/message_name/message_fqcn) to control messenger span names. - @norberttech
  • #2503 - flow-php/telemetry - Telemetry::registerShutdownFunction() that shuts transports down at real process end. - @norberttech
  • #2501 - flow-php/telemetry - Shared SemConvAttributes and SemConvMetrics constants for OTel semantic conventions. - @norberttech
  • #2501 - flow-php/telemetry - SuppressingSampler to suppress spans for excluded paths and commands. - @norberttech
  • #2501 - flow-php/postgresql - TransactionSpanMode (grouped/per_operation/off) to control transaction spans. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - DBAL transaction_spans, collect_metrics and parameter-capture config options. - @norberttech
  • #2501 - flow-php/phpunit-telemetry-bridge - test.suite.run.status attribute and telemetry.sdk.version resource attribute. - @norberttech

Changed

  • fec9cf - chore: upgrade Infection to 0.34 - @norberttech
  • #2556 - flow-php/etl - Schema and Schema\Definition are immutable, mutators return a new instance - @norberttech
  • #2556 - flow-php/etl-adapter-csv, -excel, -json, -xml - explicit schema no longer projects partition columns away - @norberttech
  • #2555 - wasm - playground runs PHP 8.5.8 built as 64-bit wasm with libpg_query 18 - @norberttech
  • #2555 - wasm - playground is ~23% faster per run - @norberttech
  • #2555 - flow-php/arrow-ext - documentation updated for the prebuilt Docker image - @norberttech
  • #2549 - CI - bump composite action uses: to node24 releases - @norberttech
  • #2549 - CI - pin composite action uses: to commit SHAs - @norberttech
  • #2549 - CI - replace deprecated codecov/test-results-action with codecov-action - @norberttech
  • #2549 - CI - audit .github/actions with zizmor - @norberttech
  • #2549 - CI - bump PHPUnit to 12.5.32 - @norberttech
  • #2548 - flow-php/etl - Floe stores its schema only in the footer, dropping the inline SCHEMA frame - @norberttech
  • #2547 - flow-php/etl-adapter-http - response body is decoded once (content-type aware, JSON + XML) into typed rows - @norberttech
  • #2547 - flow-php/etl-adapter-http - ContentTypeDetector broadened to text/xml and +xml/+json suffixes - @norberttech
  • #2547 - flow-php/etl-adapter-http - require flow-php/array-dot and psr/http-factory - @norberttech
  • #2535 - Migrate GitHub Actions workflows to Blacksmith runners - @blacksmith-sh[bot]
  • 3cf520 - docs: refresh sponsor logos and add Blacksmit - @norberttech
  • #2543 - flow-php/etl - External sort rebuilt on the bucketing engine. - @norberttech
  • #2543 - flow-php/etl - Grace hash join rebuilt on the bucketing engine, building the hash table from the smaller bucket. - @norberttech
  • #2543 - flow-php/etl - Mixed join expressions with equalities now run as hash join instead of nested loop. - @norberttech
  • #2543 - flow-php/etl - Group-by runs on the bucketing engine with spill column pruning. - @norberttech
  • #2543 - flow-php/etl - Sort, join and group-by configuration is now algorithm-scoped via ConfigBuilder::sort()/join()/groupBy(). - @norberttech
  • #2543 - flow-php/etl - Equal/Identical join comparisons follow SQL null semantics. - @norberttech
  • #2543 - flow-php/etl - FloeWriter/FloeStreamWriter take schema in constructor and build the encoder once. - @norberttech
  • #2540 - flow-php/etl - FloeWriter/FloeStreamWriter take schema in constructor and build encoder once - @norberttech
  • #2540 - flow-php/etl - external-sort and hash-join spill cache skip per-write schema validation - @norberttech
  • #2540 - flow-php/etl - fast-path identity and count checks in array and metadata equality - @norberttech
  • #2536 - flow-php/etl - simplified Cache contract - @norberttech
  • #2536 - flow-php/etl-adapter-csv - RowsNormalizer replaced with CSVEncoder, schema-driven hydration in extractor - @norberttech
  • #2536 - flow-php/etl-adapter-doctrine - RowsNormalizer replaced with DbalEncoder, schema-driven hydration in extractors - @norberttech
  • #2536 - flow-php/etl-adapter-excel - ExcelRowsNormalizer replaced with ExcelEncoder, schema-driven hydration in extractor - @norberttech
  • #2536 - flow-php/etl-adapter-google-sheet - GoogleSheetEncoder, schema-driven hydration in extractor - @norberttech
  • #2536 - flow-php/etl-adapter-json - RowsNormalizer replaced with JSONEncoder, schema-driven hydration in extractors - @norberttech
  • #2536 - flow-php/etl-adapter-parquet - RowsNormalizer replaced with ParquetEncoder, schema-driven hydration in extractor - @norberttech
  • #2536 - flow-php/etl-adapter-postgresql - PostgreSqlEncoder, schema-driven hydration in extractors - @norberttech
  • #2536 - flow-php/etl-adapter-seal - RowsNormalizer replaced with SealEncoder - @norberttech
  • #2536 - flow-php/etl-adapter-text - TextEncoder, schema-driven hydration in extractor - @norberttech
  • #2536 - flow-php/etl-adapter-xml - RowsNormalizer replaced with XMLEncoder, schema-driven hydration in extractors - @norberttech
  • #2536 - flow-php/flow-php-ext - reworked Rust encode/hydrate/cast pipeline - @norberttech
  • #2531 - Update PHPUnit to 12.5 - @stloyd
  • #2529 - Move out receiving partitions in extractors out of loops - @stloyd
  • #2532 - flow-php/etl-adapter-parquet - ParquetExtractor builds entries through EntryFactory::instantiate() instead of array_to_row() - @norberttech
  • #2532 - flow-php/etl - Floe HydratorColumn renamed to ColumnBlueprint, SchemaDecoder uses shared Instantiators - @norberttech
  • #2532 - flow-php/types - Uuid constructor validates strings directly without Ramsey fallback - @norberttech
  • #2532 - flow-php/flow-php-ext - schema decoding updated to relocated core entry instantiation classes - @norberttech
  • #2528 - Reduce complexity of XML reading & writing - @stloyd
  • #2527 - Change EntryFactory::createAs() to use match() - @stloyd
  • #2526 - flow-php/etl - sorting algorithm is an explicit choice via sort config, EXTERNAL_SORT is the default - @norberttech
  • #2526 - flow-php/etl - external sort spills fewer, larger buckets and streams the final merge instead of writing it back to cache - @norberttech
  • #2526 - flow-php/etl - Rows::sortAscending/sortDescending resolve sort values once per row instead of twice per comparison - @norberttech
  • #2526 - flow-php/etl - RowsMinHeap compares sort values extracted once at insert - @norberttech
  • #2526 - flow-php/etl - MemorySort buffers rows in a plain array instead of per-batch Rows::merge - @norberttech
  • #2526 - flow-php/etl - Floe SchemaTracker caches container type fingerprints per Type instance - @norberttech
  • #2525 - flow-php/symfony-telemetry-bundle - HttpKernelSpanSubscriber constructor takes ?RouteNamePathMap instead of ?RouterInterface - @norberttech
  • #2524 - Replaced switch statements with match expressions across core ETL, parquet lib and http/parquet/seal adapters (no behavior change, outputs byte-identical) - @MrHDOLEK
  • #2523 - flow-php/etl - Cache stores only Rows; cache indexes are stored as Rows. - @norberttech
  • #2523 - flow-php/etl - cache implementations and external sort buckets serialize with Floe instead of PHP serializer. - @norberttech
  • #2523 - flow-php/etl - serialize/unserialize transformers use Floe serializer. - @norberttech
  • #2522 - sum() aggregation accumulates through native int/float arithmetic by default (returning int whenever the sum has no fractional part) instead of routing every addition through BigDecimal - @MrHDOLEK
  • #2522 - Sum (exact mode) and Average reuse the shared Calculator from FlowContext instead of constructing a new Calculator for every aggregated row - @MrHDOLEK
  • #2520 - Use RandomValueGenerator in generate_random_string() & generate_random_int() - @stloyd
  • #2519 - Make NativePHPHash singleton - @stloyd
  • #2518 - CSVLoader reuses a single php://temp row buffer per loader instance (released in the closure() hook) instead of opening and closing a temporary stream for every written
    row
    - @MrHDOLEK
  • #2518 - CSVLoader appends the whole normalized batch to the destination stream once per Rows batch instead of once per row, and resolves the destination stream once per batch
    instead of inside the per-row loop
    - @MrHDOLEK
  • #2509 - flow-php/filesystem - Partition name and value now forbid { and } characters - @norberttech
  • #2504 - flow-php/etl - SchemaValidator::isValid() replaced by validate() returning ValidationContext - @norberttech
  • #2504 - flow-php/etl - schema_validate() returns ValidationContext instead of bool - @norberttech
  • #2504 - flow-php/etl - allowed brick/math ^0.18 - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - terminate events now flush telemetry; transport shutdown happens once at process end. - @norberttech
  • #2503 - flow-php/telemetry - registerShutdownFunction() holds a weak reference so garbage-collected instances are not shut down. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Simplify messenger tracing to true/false and auto-inject the middleware into all buses. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Align cache, DBAL and HTTP span names and attributes with stable OTel semantic conventions. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Move flow-custom attribute keys out of reserved OTel namespaces under flow.*. - @norberttech
  • #2501 - flow-php/telemetry - Sampler::shouldSample() now receives the parent Context. - @norberttech
  • #2501 - flow-php/telemetry - Switch TimeUnit values to UCUM (s/us/ms). - @norberttech
  • #2501 - flow-php/postgresql - Replace traceTransactions bool with transactionSpans mode and low-cardinality metric dimensions. - @norberttech
  • #2501 - flow-php/phpunit-telemetry-bridge - Align test. keys with the OTel test registry and report durations in seconds.* - @norberttech
  • #2501 - flow-php/filesystem - Namespace flow-custom telemetry keys under flow. and switch to UCUM units.* - @norberttech
  • #2501 - flow-php/etl - Namespace flow-custom telemetry keys under flow. and switch to UCUM units.* - @norberttech
  • #2501 - flow-php/psr18-telemetry-bridge - Client span name is the HTTP method only and server.port is always set. - @norberttech

Fixed

  • #2556 - flow-php/etl - extractors no longer pollute a user-provided schema - @norberttech
  • #2556 - flow-php/etl - partition columns no longer leak between streams - @norberttech
  • #2556 - flow-php/etl - Rows::schema() no longer corrupts the first row's schema - @norberttech
  • #2556 - flow-php/flow-php-ext - native hydrator no longer drops per-value metadata - @norberttech
  • #2556 - flow-php/cli - --db-column filtering in flow:db:schema - @norberttech
  • #2555 - wasm - playground no longer leaks memory and stops executing PHP after ~50 runs - @norberttech
  • #2555 - wasm - sortBy() and Floe now work in the playground - @norberttech
  • #2555 - wasm - parquet reads no longer emit integer overflow warnings in the playground - @norberttech
  • #2555 - flow-php/pg-query-ext - no longer frees libpg_query memory on module shutdown - @norberttech
  • #2544 - flow-php/etl - silence false-positive analyzer warnings on batch size guards - @norberttech
  • #2544 - flow-php/postgresql - silence false-positive analyzer warning on version comparison - @norberttech
  • #2543 - flow-php/etl - DateInterval ordering in sort now works via type-specialized Rows::sortBy. - @norberttech
  • #2525 - flow-php/symfony-telemetry-bundle - route_naming: path no longer calls Router::getRouteCollection() (full route collection rebuild) on every traced request - @norberttech
  • #2523 - flow-php/filesystem - MemoryStream appends at end of stream after ranged reads. - @norberttech
  • #2523 - flow-php/types - EnumType normalization accepts UnitEnum/BackedEnum interfaces. - @norberttech
  • #2504 - flow-php/etl - SchemaValidationException message no longer lists FROM_NULL columns accepted by the validator - @norberttech
  • #2504 - flow-php/etl - SchemaValidationException message renders the nullable ? marker on expected types - @norberttech
  • 7b585d - failing scheduled tests - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - nested console commands no longer shut telemetry down mid-worker. - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - request spans are named from the route when the response is produced before the controller. - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - messenger span errors report the actual handler failure instead of the HandlerFailedException wrapper. - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - synchronously received messages stay a child of the current trace instead of starting a new root. - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - sent-message metrics only count messages actually dispatched to a transport. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Preserve traceparent across messenger JSON serialization. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Excluded http_kernel paths now suppress the whole request, removing orphan root spans. - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Suppress messenger worker poll/idle noise and tame orphan cache/DBAL spans. - @norberttech

Removed

  • #2548 - flow-php/etl - FloeStreamReader::recover() salvage path - @norberttech
  • #2547 - flow-php/etl-adapter-http - RequestEntriesFactory and ResponseEntriesFactory - @norberttech
  • #2544 - flow-php/etl - unused analyzer ignore pragmas in Floe JSON/UUID decoders - @norberttech
  • #2543 - flow-php/etl - DataFrame::pivot() - pivot is declared between groupBy() and aggregate(). - @norberttech
  • #2543 - flow-php/etl - Root ConfigBuilder externalSort/join/grouping* delegators.** - @norberttech
  • #2543 - flow-php/etl - Legacy Sort\ExternalSort and BucketsCache family. - @norberttech
  • #2543 - flow-php/etl - SortAlgorithms enum replaced by SortSteps processor dispatch. - @norberttech
  • #2536 - flow-php/etl - legacy Processor\HashJoin hash table and buckets - @norberttech
  • #2536 - flow-php/etl - FloeFile and legacy Floe encoders/serializers - @norberttech
  • #2532 - flow-php/etl - runtime value type detection from List/Map/Structure entry constructors - @norberttech
  • #2532 - flow-php/types - isValid() short-circuit from ListType/StructureType::cast() - @norberttech
  • #2526 - flow-php/etl - SortAlgorithms::MEMORY_FALLBACK_EXTERNAL_SORT and SortAlgorithms::SQLITE_SORT - @norberttech
  • #2526 - flow-php/etl - sortMemoryLimit config, FLOW_SORT_MAX_MEMORY env var and OutOfMemoryException - @norberttech
  • #2503 - flow-php/symfony-telemetry-bundle - runtime_mode config and the WorkerModeDetector/RuntimeModeResolver runtime classes. - @norberttech
  • #2501 - flow-php/telemetry - Remove ResettableContextStorage and MemoryContextStorage::reset(). - @norberttech
  • #2501 - flow-php/symfony-telemetry-bundle - Remove messenger link config, worker-cycle span, metrics_duration_unit and dbal.log_sql config. - @norberttech
  • #2501 - flow-php/postgresql - Remove duplicated official-key telemetry attribute constants. - @norberttech

Security

  • #2549 - CI - pass composite action inputs via env instead of shell interpolation - @norberttech
  • #2549 - CI - read Codecov base commit SHA from step outputs instead of GITHUB_ENV - @norberttech
  • #2549 - CI - validate the base commit SHA artifact before use - @norberttech

Contributors

Generated by Automation