@@ -310,9 +310,11 @@ <h2 class="my-2 text-2xl font-semibold tracking-wide">Loads</h2>
310310</div>
311311
312312 <section id="changelog" class="py-10 px-2 sm:px-4 mx-auto max-w-screen-2xl">
313- <h2><a id="unreleased---2026-01-07 " href="#unreleased---2026-01-07 " class="mr-2" aria-hidden="true" title="Permalink">#</a>[Unreleased] - 2026-01-07 </h2>
313+ <h2><a id="unreleased---2026-01-08 " href="#unreleased---2026-01-08 " class="mr-2" aria-hidden="true" title="Permalink">#</a>[Unreleased] - 2026-01-08 </h2>
314314<h3><a id="added" href="#added" class="mr-2" aria-hidden="true" title="Permalink">#</a>Added</h3>
315315<ul>
316+ <li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2136">#2136</a> - <strong>Added normalize() and fromArray() methods to PostgreSQL Explain Plan classes (Cost, Timing, Buffers, PlanNode, Plan, ExplainConfig) for serialization/deserialization support</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
317+ <li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2136">#2136</a> - <strong>Added PHPStan type aliases (PlanNodeShape, TimingShape, BuffersShape) for improved type documentation</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
316318<li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2134">#2134</a> - <strong>InvalidExplainConfigException - exception for invalid EXPLAIN config flag combinations</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
317319<li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2134">#2134</a> - <strong>ExplainConfig fluent builder methods: withAnalyze(), withoutAnalyze(), withBuffers(), withoutBuffers(), withTiming(), withoutTiming(), withVerbose(), withoutVerbose(), withCosts(), withoutCosts(), withMemory(), withoutMemory(), withSettings(), withoutSettings(), withSummary(), withoutSummary(), withWal(), withoutWal(), withFormat()</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
318320<li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2134">#2134</a> - <strong>ExplainConfig validation - throws InvalidExplainConfigException when BUFFERS, TIMING, or WAL are enabled without ANALYZE</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
@@ -330,6 +332,7 @@ <h3><a id="added" href="#added" class="mr-2" aria-hidden="true" title="Permalink
330332</ul>
331333<h3><a id="changed" href="#changed" class="mr-2" aria-hidden="true" title="Permalink">#</a>Changed</h3>
332334<ul>
335+ <li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2136">#2136</a> - <strong>Optimized PostgreSqlCursorExtractor to break cursor loop early when fetched rows are less than fetch size, avoiding unnecessary database round-trips</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
333336<li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2134">#2134</a> - <strong>ExplainConfig::withoutAnalyze() auto-disables buffers, timing, and wal options</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
334337<li><a rel="noopener noreferrer" target="_blank" href="https://github.com/flow-php/flow/pull/2133">#2133</a> - <strong>PlanAnalyzer::summary() now computes and passes join counts, buffer statistics, and row data to PlanSummary</strong> - <a rel="noopener noreferrer" target="_blank" href="https://github.com/norberttech">@norberttech</a></li>
335338</ul>
0 commit comments