Skip to content

feat(optimizer): Add TopN late materialization using $row_id#27641

Merged
kaikalur merged 1 commit into
prestodb:masterfrom
kaikalur:feat/topn-late-materialization
Apr 28, 2026
Merged

feat(optimizer): Add TopN late materialization using $row_id#27641
kaikalur merged 1 commit into
prestodb:masterfrom
kaikalur:feat/topn-late-materialization

Conversation

@kaikalur

@kaikalur kaikalur commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Summary

For ORDER BY ... LIMIT N over wide tables with a unique $row_id column, this optimization avoids sorting all columns by first sorting only the narrow sort keys + $row_id, then using a SemiJoin to fetch the full rows for the top-N results.

Rewrite

Before:  TopN(SINGLE) → ScanFilterProject (all columns)

After:   TopN → Filter(semi_mark) → SemiJoin
           source:    augmented original scan (with $row_id added)
           filtering: TopN → narrow clone (sort keys + $row_id_clone only)

Guards

  • Session property optimize_top_n_using_row_id (default false)
  • TopN must be Step.SINGLE over a scan-filter-project subtree
  • Table layout must expose a unique column via getUniqueColumn()
  • Column savings must exceed optimize_top_n_using_row_id_min_column_savings (default 10)

Bug fix

Also fixes a latent bug in StreamPropertyDerivations.visitTopN where SINGLE/FINAL TopN dropped streamPropertiesFromUniqueColumn, causing an IllegalStateException when a unique column was explicitly present in a table scan's assignments under TopN. The PARTIAL step already preserved this correctly.

Files Changed

File Change
SystemSessionProperties.java Added 2 session properties + accessors
PlannerUtils.java Added findTableScanNode, addColumnToTableScan, addPassThroughVariable helpers
OptimizeTopNUsingRowId.java New — The optimizer (300 lines)
PlanOptimizers.java Registered optimizer after JoinPrefilter
StreamPropertyDerivations.java Bug fix: propagate streamPropertiesFromUniqueColumn through TopN
TestOptimizeTopNUsingRowId.java New — 5 unit tests with mock connector

Test Plan

  • 5 new unit tests (all pass):
    • testBasicRewrite — lineitem (16 cols), verifies SemiJoin plan
    • testNoRewriteWhenDisabled — optimization disabled via session property
    • testNoRewriteNarrowTable — nation (4 cols), below threshold
    • testNoRewriteAllSortKeys — all columns are sort keys, no savings
    • testRewriteWithLowThreshold — nation with threshold=1, verifies rewrite
  • 92 existing TopN tests pass (no regressions)
  • 9 existing JoinPrefilter tests pass (no regressions)

Summary by Sourcery

Introduce new planner optimizations for TopN late materialization and OFFSET over ORDER BY, extend join prefiltering to more complex plans, and wire them via session/config properties with accompanying tests and a planner bug fix.

New Features:

  • Add OptimizeTopNUsingRowId optimizer to perform late materialization for TopN over wide tables using a unique $row_id column.
  • Add EliminateOffsetOverTopN optimizer to rewrite ORDER BY + OFFSET + LIMIT into a triple-TopN pattern instead of RowNumber-based offset implementation.

Bug Fixes:

  • Preserve streamPropertiesFromUniqueColumn through non-PARTIAL TopN nodes in StreamPropertyDerivations to avoid illegal state when unique columns are present under TopN.

Enhancements:

  • Extend JoinPrefilter to handle more complex left-side probe shapes (UNION ALL, cross joins, unnest, aggregations) and support pushing the prefilter below certain right-side aggregations.
  • Enhance PlannerUtils to clone UnionNode subtrees, treat Union-based scan/filter/project chains as deterministic, and provide helpers for locating and augmenting table scans and threading new variables through projection/filter chains.

Tests:

  • Add unit tests for OptimizeTopNUsingRowId using a mock connector that exposes a unique $row_id column and various threshold/shape cases.
  • Add targeted plan tests for the extended JoinPrefilter behavior, including complex probe-side patterns and aggregation pushdown conditions.
  • Add planner and integration tests validating EliminateOffsetOverTopN behavior and correctness for ASC/DESC cases and interaction with OFFSET clause enabling.
  • Extend existing query tests to cover OFFSET over TopN plans and join prefilter scenarios with new session properties.

@prestodb-ci prestodb-ci added the from:Meta PR from Meta label Apr 22, 2026
@sourcery-ai

sourcery-ai Bot commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Introduces a new TopN late-materialization optimizer using a unique $row_id column, adds an optimizer to rewrite ORDER BY ... OFFSET ... LIMIT into a triple-TopN form, extends JoinPrefilter to support more complex probe-side and right-side aggregation shapes, wires new session/feature flags, and fixes TopN stream property propagation for unique columns, along with targeted planner and integration tests.

Sequence diagram for TopN late materialization using $row_id

sequenceDiagram
    actor User
    participant Session
    participant PlanOptimizers
    participant OptimizeTopNUsingRowId as OptimizeTopNUsingRowId
    participant Rewriter as OptimizeTopNUsingRowId_Rewriter
    participant PlannerUtils
    participant Metadata
    participant TableLayout

    User->>Session: submit ORDER_BY_LIMIT query
    Session->>PlanOptimizers: create logical plan
    PlanOptimizers->>OptimizeTopNUsingRowId: optimize(plan, session,...)
    OptimizeTopNUsingRowId->>Session: isOptimizeTopNUsingRowIdEnabled
    Session-->>OptimizeTopNUsingRowId: flag value
    alt optimization enabled
        OptimizeTopNUsingRowId->>Rewriter: new Rewriter(session, metadata,...)
        OptimizeTopNUsingRowId->>Rewriter: rewriteWith(plan)
        Rewriter->>Rewriter: visitTopN(TopNNode)
        Rewriter->>PlannerUtils: isScanFilterProject(source)
        Rewriter->>PlannerUtils: isDeterministicScanFilterProject(source)
        Rewriter->>PlannerUtils: findTableScanNode(source)
        PlannerUtils-->>Rewriter: TableScanNode
        Rewriter->>Metadata: getLayout(tableHandle)
        Metadata-->>Rewriter: TableLayout
        Rewriter->>TableLayout: getUniqueColumn
        TableLayout-->>Rewriter: unique ColumnHandle
        Rewriter->>Session: getOptimizeTopNUsingRowIdMinColumnSavings
        Session-->>Rewriter: threshold
        Rewriter->>PlannerUtils: addColumnToTableScan(tableScan, uniqueColumn, rowIdVar,...)
        Rewriter->>PlannerUtils: addPassThroughVariable(source, rowIdVar,...)
        Rewriter->>PlannerUtils: clonePlanNode(source, sortKeys, varMap)
        Rewriter->>PlannerUtils: addColumnToTableScan(clonedScan, uniqueColumn, clonedRowIdVar,...)
        Rewriter->>PlannerUtils: addPassThroughVariable(narrowClone, clonedRowIdVar,...)
        Rewriter->>PlannerUtils: restrictOutput(narrowClone, narrowOutputs)
        Rewriter->>Rewriter: build inner TopN, SemiJoin, outer TopN
        Rewriter-->>OptimizeTopNUsingRowId: rewritten plan, planChanged=true
    else optimization disabled
        OptimizeTopNUsingRowId-->>PlanOptimizers: original plan
    end
    PlanOptimizers-->>Session: optimized plan
    Session-->>User: execute and return results
Loading

Class diagram for new TopN row_id and OFFSET-over-TopN optimizers

classDiagram
    class PlanOptimizer {
        <<interface>>
        +boolean isEnabled(Session session)
        +void setEnabledForTesting(boolean isSet)
        +PlanOptimizerResult optimize(PlanNode plan, Session session, TypeProvider types, VariableAllocator variableAllocator, PlanNodeIdAllocator idAllocator, WarningCollector warningCollector)
    }

    class OptimizeTopNUsingRowId {
        -Metadata metadata
        -boolean isEnabledForTesting
        +OptimizeTopNUsingRowId(Metadata metadata)
        +void setEnabledForTesting(boolean isSet)
        +boolean isEnabled(Session session)
        +PlanOptimizerResult optimize(PlanNode plan, Session session, TypeProvider types, VariableAllocator variableAllocator, PlanNodeIdAllocator idAllocator, WarningCollector warningCollector)
    }

    class OptimizeTopNUsingRowId_Rewriter {
        -Session session
        -Metadata metadata
        -PlanNodeIdAllocator idAllocator
        -VariableAllocator variableAllocator
        -FunctionAndTypeManager functionAndTypeManager
        -int minColumnSavings
        -boolean planChanged
        +Rewriter(Session session, Metadata metadata, PlanNodeIdAllocator idAllocator, VariableAllocator variableAllocator, FunctionAndTypeManager functionAndTypeManager)
        +boolean isPlanChanged()
        +PlanNode visitTopN(TopNNode node, RewriteContext context)
        +TopNNode replaceSource(TopNNode topNNode, PlanNode newSource)
        +PlanNode replaceTableScan(PlanNode node, TableScanNode newTableScan)
    }

    class EliminateOffsetOverTopN {
        +boolean isEnabled(Session session)
        +PlanOptimizerResult optimize(PlanNode plan, Session session, TypeProvider types, VariableAllocator variableAllocator, PlanNodeIdAllocator idAllocator, WarningCollector warningCollector)
    }

    class EliminateOffsetOverTopN_Rewriter {
        -PlanNodeIdAllocator idAllocator
        -boolean planChanged
        +Rewriter(PlanNodeIdAllocator idAllocator)
        +boolean isPlanChanged()
        +PlanNode visitLimit(LimitNode limitNode, RewriteContext context)
    }

    class PlannerUtils {
        +PlanNode clonePlanNode(PlanNode planNode, Session session, Metadata metadata, PlanNodeIdAllocator planNodeIdAllocator, List fieldsToKeep, Map varMap)
        +boolean isScanFilterProject(PlanNode node)
        +boolean isDeterministicScanFilterProject(PlanNode node, FunctionAndTypeManager functionAndTypeManager)
        +RowExpression getVariableHash(List inputVars, FunctionAndTypeManager functionAndTypeManager)
        +Optional findTableScanNode(PlanNode node)
        +TableScanNode addColumnToTableScan(TableScanNode scanNode, ColumnHandle columnHandle, VariableReferenceExpression variable, PlanNodeIdAllocator idAllocator)
        +PlanNode addPassThroughVariable(PlanNode node, VariableReferenceExpression variable, PlanNodeIdAllocator idAllocator)
    }

    class SystemSessionProperties {
        +static boolean isOptimizeTopNUsingRowIdEnabled(Session session)
        +static int getOptimizeTopNUsingRowIdMinColumnSavings(Session session)
        +static boolean isEliminateOffsetOverTopN(Session session)
    }

    class FeaturesConfig {
        -boolean offsetClauseEnabled
        -boolean eliminateOffsetOverTopN
        +boolean isOffsetClauseEnabled()
        +FeaturesConfig setOffsetClauseEnabled(boolean offsetClauseEnabled)
        +boolean isEliminateOffsetOverTopN()
        +FeaturesConfig setEliminateOffsetOverTopN(boolean eliminateOffsetOverTopN)
    }

    class PlanOptimizers {
        +PlanOptimizers(...)
    }

    PlanOptimizer <|.. OptimizeTopNUsingRowId
    PlanOptimizer <|.. EliminateOffsetOverTopN

    OptimizeTopNUsingRowId *-- OptimizeTopNUsingRowId_Rewriter
    EliminateOffsetOverTopN *-- EliminateOffsetOverTopN_Rewriter

    OptimizeTopNUsingRowId_Rewriter ..> PlannerUtils : uses
    OptimizeTopNUsingRowId_Rewriter ..> SystemSessionProperties : uses
    OptimizeTopNUsingRowId ..> SystemSessionProperties : uses
    EliminateOffsetOverTopN ..> SystemSessionProperties : uses

    SystemSessionProperties ..> FeaturesConfig : config defaults
    PlanOptimizers ..> OptimizeTopNUsingRowId : registers
    PlanOptimizers ..> EliminateOffsetOverTopN : registers
Loading

Class diagram for extended JoinPrefilter and PlannerUtils support

classDiagram
    class JoinPrefilter {
        +PlanOptimizerResult optimize(PlanNode plan, Session session, TypeProvider types, VariableAllocator variableAllocator, PlanNodeIdAllocator idAllocator, WarningCollector warningCollector)
    }

    class JoinPrefilter_Rewriter {
        -Session session
        -Metadata metadata
        -PlanNodeIdAllocator idAllocator
        -VariableAllocator variableAllocator
        -FunctionAndTypeManager functionAndTypeManager
        -boolean complexEnabled
        -boolean planChanged
        +Rewriter(Session session, Metadata metadata, PlanNodeIdAllocator idAllocator, VariableAllocator variableAllocator, FunctionAndTypeManager functionAndTypeManager)
        +PlanNode visitJoin(JoinNode node, RewriteContext context)
        +PlanNode applyPrefilterToRight(PlanNode rewrittenRight, PlanNode filteringSource, VariableReferenceExpression rightKeyToFilter, List rightKeyList, RowExpression rightHashExpression, boolean hashJoinKey, JoinNode originalJoin)
        +Optional tryPushPrefilterBelowAggregation(PlanNode rightSide, PlanNode filteringSource, VariableReferenceExpression rightKeyToFilter, List rightKeyList, RowExpression rightHashExpression, boolean hashJoinKey, JoinNode originalJoin)
        +boolean isPlanChanged()
    }

    class JoinPrefilter_StaticHelpers {
        +Optional findCloneableSource(PlanNode node, Set joinKeyVars, FunctionAndTypeManager functionAndTypeManager, boolean complexEnabled)
        +Optional resolveVariablesThroughProjectFilter(PlanNode top, PlanNode target, Set vars)
    }

    class PlannerUtils {
        +PlanNode clonePlanNode(PlanNode planNode, Session session, Metadata metadata, PlanNodeIdAllocator planNodeIdAllocator, List fieldsToKeep, Map varMap)
        +PlanNode cloneUnionNode(UnionNode unionNode, Session session, Metadata metadata, PlanNodeIdAllocator idAllocator, List fieldsToKeep, Map varMap)
        +boolean isScanFilterProject(PlanNode node)
        +boolean isDeterministicScanFilterProject(PlanNode node, FunctionAndTypeManager functionAndTypeManager)
    }

    class SystemSessionProperties {
        +static boolean isJoinPrefilterEnabled(Session session)
        +static boolean isJoinPrefilterComplexBuildSideEnabled(Session session)
    }

    class FeaturesConfig {
        -boolean offsetClauseEnabled
        -boolean eliminateOffsetOverTopN
        -boolean joinPrefilterBuildSide
        -boolean joinPrefilterComplexBuildSide
        +boolean isJoinPrefilterComplexBuildSideEnabled()
        +FeaturesConfig setJoinPrefilterComplexBuildSide(boolean enabled)
    }

    JoinPrefilter *-- JoinPrefilter_Rewriter
    JoinPrefilter ..> SystemSessionProperties : reads flags
    JoinPrefilter_Rewriter ..> JoinPrefilter_StaticHelpers : calls
    JoinPrefilter_Rewriter ..> PlannerUtils : clonePlanNode
    JoinPrefilter_Rewriter ..> FunctionAndTypeManager
    PlannerUtils ..> UnionNode

    JoinPrefilter_StaticHelpers ..> PlannerUtils : isScanFilterProject
    JoinPrefilter_StaticHelpers ..> PlannerUtils : isDeterministicScanFilterProject

    SystemSessionProperties ..> FeaturesConfig : config defaults
Loading

Class diagram for StreamPropertyDerivations TopN fix

classDiagram
    class StreamPropertyDerivations {
        +StreamProperties visitTopN(TopNNode node, List inputProperties)
    }

    class StreamProperties {
        +static StreamProperties ordered()
        +StreamProperties withStreamPropertiesFromUniqueColumn(StreamProperties unique)
        +StreamProperties getStreamPropertiesFromUniqueColumn()
    }

    class TopNNode {
        +Step getStep()
        +PlanNode getSource()
    }

    StreamPropertyDerivations ..> StreamProperties : creates
    StreamPropertyDerivations ..> TopNNode : reads step

    note for StreamPropertyDerivations "Updated visitTopN to preserve streamPropertiesFromUniqueColumn for SINGLE and FINAL steps by calling ordered().withStreamPropertiesFromUniqueColumn(input.getStreamPropertiesFromUniqueColumn())."
Loading

Flow diagram for eliminating OFFSET over ORDER BY using triple TopN

flowchart TD
    A["Limit(L)
Offset(M)
Sort(ordering)
Source"] --> B{L > 0
and
pattern matches}
    B -- "no" --> Z["Keep
original
Limit-Offset-Sort"]
    B -- "yes" --> C["Compute
TopN count = L+M"]
    C --> D["Bottom TopN:
TopN(L+M, ordering)
  on Source"]
    D --> E["Middle TopN:
TopN(L, reverse(ordering))
  on Bottom TopN"]
    E --> F["Top TopN:
TopN(L, ordering)
  on Middle TopN"]
    F --> G["Replace
Limit-Offset-Sort
with triple TopN"]
Loading

File-Level Changes

Change Details Files
Add TopN late materialization using a unique $row_id column and guard it with session properties and heuristics.
  • Implement OptimizeTopNUsingRowId optimizer that rewrites SINGLE TopN over scan/filter/project into a SemiJoin-based late materialization using a cloned narrow TopN on sort keys plus $row_id
  • Augment table scans with a unique $row_id column via table layouts exposing getUniqueColumn(), and thread the extra variable through scan/filter/project chains
  • Gate the optimization on session flag, presence of a unique column, determinism of the SFP subtree, and a minimum non-sort-key column savings threshold, keeping TopN step=SINGLE semantics
presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/OptimizeTopNUsingRowId.java
presto-main-base/src/main/java/com/facebook/presto/SystemSessionProperties.java
presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java
presto-main-base/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java
Extend planner utilities to support cloning and threading extra variables (e.g., $row_id) through more complex SFP shapes including UnionNode.
  • Extend clonePlanNode/isScanFilterProject/isDeterministicPlanSubtree to handle UnionNode and ensure all legs are compatible scan/filter/project chains
  • Add findTableScanNode helper to peel TableScan from a Filter/Project chain
  • Add addColumnToTableScan and addPassThroughVariable helpers to add a new column to a TableScan and propagate its variable through Filter/Project nodes
presto-main-base/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java
Introduce an optimizer to eliminate OFFSET over ORDER BY by rewriting into a triple-TopN plan and wire it into the optimizer pipeline with config and tests.
  • Implement EliminateOffsetOverTopN optimizer that matches Limit→Offset→Sort and replaces it with TopN(L, dir) over TopN(L, reverse(dir)) over TopN(L+M, dir) with appropriate ordering reversals
  • Add system and features config flags (ELIMINATE_OFFSET_OVER_TOPN / optimizer.eliminate-offset-over-topn) and enable it only when both OFFSET clause and the feature flag are on
  • Register the optimizer early in PlanOptimizers before general iterative optimizations and add planner/integration tests asserting TopN-based plans and correctness vs manual triple-TopN rewrite
presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/EliminateOffsetOverTopN.java
presto-main-base/src/main/java/com/facebook/presto/SystemSessionProperties.java
presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java
presto-main-base/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java
presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateOffsetOverTopN.java
presto-hive/src/test/java/com/facebook/presto/hive/TestHiveDistributedQueries.java
presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java
Generalize JoinPrefilter to support complex probe-side patterns and optional pushdown of the SemiJoin prefilter below right-side aggregations, controlled by a new session property.
  • Refactor JoinPrefilter to use findCloneableSource to discover cloneable scan/filter/project, UNION ALL, cross join, unnest, or aggregation subtrees on the left side when complex mode is enabled
  • Add resolveVariablesThroughProjectFilter to trace join key variables through Filter/Project chains and ensure only simple variable projections are used for prefiltering
  • Introduce applyPrefilterToRight and tryPushPrefilterBelowAggregation to optionally push the semi-join prefilter below a compatible SINGLE, non-empty, single-grouping-set Aggregation on the right, preserving output variables via restrictOutput and rebuilding Projects/Aggregations
  • Wire a new JOIN_PREFILTER_COMPLEX_BUILD_SIDE session property and pass its value into the JoinPrefilter.Rewriter to gate complex-mode behaviour
presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/JoinPrefilter.java
presto-main-base/src/main/java/com/facebook/presto/SystemSessionProperties.java
presto-tests/src/test/java/com/facebook/presto/tests/TestLocalQueries.java
presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestJoinPrefilter.java
Fix TopN stream property derivation so that SINGLE/FINAL steps preserve unique-column stream properties instead of dropping them.
  • Change StreamPropertyDerivations.visitTopN to carry through streamPropertiesFromUniqueColumn from its input when Step is not PARTIAL, instead of returning a bare ordered()
  • This prevents IllegalStateException in downstream checks when a unique column is explicitly present under TopN and is now also used by the new TopN row_id optimization
presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java
Add tests and harness changes to validate the new optimizations and configuration wiring, including a mock connector exposing a synthetic unique column for TopN row_id optimization.
  • Add TestOptimizeTopNUsingRowId with a mock TPC-H connector that exposes a hidden VARBINARY $row_id column via table layout uniqueColumn and column metadata, and test various guard cases and plan shapes
  • Add TestJoinPrefilter to check SemiJoin presence and right-side aggregation pushdown across UNION ALL, cross join, unnest, aggregation, and negative cases when complex mode is off or aggregation shape is unsupported
  • Extend existing local and distributed query tests to exercise join prefilter complex mode and OFFSET-over-TopN rewriting, including plan-shape and result-equivalence assertions
  • Update TestFeaturesConfig to cover the new optimizer.eliminate-offset-over-topn property and its defaults/mappings, and add new session accessors for join prefilter complex mode and TopN row_id optimization flags
presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestOptimizeTopNUsingRowId.java
presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestJoinPrefilter.java
presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateOffsetOverTopN.java
presto-main-base/src/test/java/com/facebook/presto/sql/analyzer/TestFeaturesConfig.java
presto-tests/src/test/java/com/facebook/presto/tests/TestLocalQueries.java
presto-hive/src/test/java/com/facebook/presto/hive/TestHiveDistributedQueries.java
presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@kaikalur kaikalur marked this pull request as ready for review April 23, 2026 00:11
@kaikalur kaikalur requested review from a team, elharo, feilong-liu and jaystarshot as code owners April 23, 2026 00:11

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 3 issues, and left some high level feedback:

  • OptimizeTopNUsingRowId assumes the scan subtree is strictly a TableScan/Filter/Project chain (e.g., replaceTableScan and addPassThroughVariable throw for any other node type); consider turning those throws into a safe bailout of the optimization so future planner changes introducing additional node types in that chain won’t start failing with IllegalArgumentException.
  • JoinPrefilter’s resolveVariablesThroughProjectFilter walks only Filter/Project nodes between top and target and returns empty if any other node appears; if this is intended, it may be worth tightening the caller’s guards (or documenting the limitation) so we don’t accidentally disable prefiltering when a benign node type (e.g., IdentityProject or other wrapper) is inserted into the probe-side shape.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- OptimizeTopNUsingRowId assumes the scan subtree is strictly a TableScan/Filter/Project chain (e.g., replaceTableScan and addPassThroughVariable throw for any other node type); consider turning those throws into a safe bailout of the optimization so future planner changes introducing additional node types in that chain won’t start failing with IllegalArgumentException.
- JoinPrefilter’s resolveVariablesThroughProjectFilter walks only Filter/Project nodes between top and target and returns empty if any other node appears; if this is intended, it may be worth tightening the caller’s guards (or documenting the limitation) so we don’t accidentally disable prefiltering when a benign node type (e.g., IdentityProject or other wrapper) is inserted into the probe-side shape.

## Individual Comments

### Comment 1
<location path="presto-main-base/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java" line_range="405-414" />
<code_context>
+    private static PlanNode cloneUnionNode(UnionNode unionNode, Session session, Metadata metadata, PlanNodeIdAllocator idAllocator, List<VariableReferenceExpression> fieldsToKeep, Map<VariableReferenceExpression, VariableReferenceExpression> varMap)
</code_context>
<issue_to_address>
**issue (bug_risk):** cloneUnionNode can create Union outputs that reference variables not produced by cloned sources and does not consistently populate varMap

`cloneUnionNode` filters outputs per source via `fieldsToKeep`, but then rebuilds the `UnionNode` over all original `outputVariables`. For outputs not in `fieldsToKeep`, `originalInputs` can reference symbols that were never cloned, so `legVarMaps.get(i).getOrDefault(originalInput, originalInput)` may leave references to variables that don’t exist in the cloned leg, producing an invalid Union. The passed-in `varMap` is also never updated with mappings for the Union outputs, so callers can’t resolve cloned outputs back to originals. Please either restrict rebuilt outputs to those in `fieldsToKeep` whose per-leg inputs were cloned, and/or guard against mapping outputs with missing cloned inputs, and ensure `varMap` is populated consistently for these outputs.
</issue_to_address>

### Comment 2
<location path="presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestJoinPrefilter.java" line_range="112-121" />
<code_context>

     // Hive specific tests should normally go in TestHiveIntegrationSmokeTest
+
+    @Test
+    public void testOffsetOverTopNRewrite()
+    {
</code_context>
<issue_to_address>
**suggestion (testing):** Extend negative coverage for complex probe-side shapes when the complex flag is disabled

Consider adding similar negative tests for the other complex patterns when `JOIN_PREFILTER_COMPLEX_BUILD_SIDE` is off (cross join, unnest, aggregation on the left, and right-side aggregation pushdown) to confirm each complex path is gated solely by the new session property.

Suggested implementation:

```java
    }

    @Test
    public void testCrossJoinComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM orders o " +
                        "CROSS JOIN (SELECT orderkey FROM lineitem WHERE quantity > 1) x " +
                        "WHERE o.orderkey = x.orderkey",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testUnnestComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT orderkey, u_partkey " +
                        "FROM (SELECT orderkey, array_agg(partkey) parts FROM lineitem GROUP BY orderkey) t " +
                        "CROSS JOIN UNNEST(parts) AS u(u_partkey)",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testLeftAggregationComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM (SELECT custkey, count(*) c FROM orders GROUP BY custkey) o " +
                        "JOIN lineitem l ON o.custkey = l.orderkey " +
                        "WHERE c > 1",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testRightAggregationPushdownComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM orders o " +
                        "JOIN (SELECT orderkey, count(*) c FROM lineitem GROUP BY orderkey) x " +
                        "ON o.orderkey = x.orderkey " +
                        "WHERE c > 1",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    private static boolean containsNode(PlanNode node, Class<?> nodeClass)

```

These edits assume the following, based on existing Presto test conventions and the partial file you provided:

1. A `plan(String sql, Session session)` helper exists in the superclass (likely `BasePlanTest`) and returns an object with `.getRoot()` of type `PlanNode`. If the helper has a different signature (e.g., `plan(Session, String)` or additional parameters), adjust the call sites in the four new tests accordingly.
2. `assertFalse` from TestNG (`org.testng.Assert.assertFalse`) is already statically imported in this test class; if not, add a static import or qualify it (`Assert.assertFalse(...)`) to match the style used elsewhere in the file.
3. The fully qualified name `com.facebook.presto.sql.planner.plan.JoinPrefilterNode` is correct for the prefilter node type used in the other tests in this class. If the class is imported under a different name or alias elsewhere in the file, you can shorten the references to `JoinPrefilterNode.class` and rely on the existing import.
4. The table/column names (`orders`, `lineitem`, `orderkey`, `custkey`, `quantity`, `partkey`) are consistent with the rest of `TestJoinPrefilter`. If the existing tests use different schemas or aliases, align the queries in these new tests with whatever the existing positive test coverage for complex prefilter shapes is using so that the queries are valid in your test environment.

Once wired to the correct `plan` helper and imports, these four tests will exercise:
- a cross join complex pattern,
- an unnest-based complex pattern,
- a left-side aggregation complex pattern,
- and a right-side aggregation/pushdown pattern,

all with `enableBasic()` (i.e., `JOIN_PREFILTER_BUILD_SIDE` enabled but `JOIN_PREFILTER_COMPLEX_BUILD_SIDE` disabled), and confirm that no complex `JoinPrefilter` is inserted in any of these cases.
</issue_to_address>

### Comment 3
<location path="presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateOffsetOverTopN.java" line_range="41-42" />
<code_context>

     // Hive specific tests should normally go in TestHiveIntegrationSmokeTest
+
+    @Test
+    public void testOffsetOverTopNRewrite()
+    {
</code_context>
<issue_to_address>
**suggestion (testing):** Add edge-case tests for very large OFFSET/LIMIT values and zero limit in EliminateOffsetOverTopN

Since there are explicit guards around `Math.addExact(limitCount, offsetCount)` and `limitCount <= 0`, please add:
1) A case where `OFFSET + LIMIT` overflows `long` (e.g., `OFFSET 9223372036854775800 ROWS LIMIT 100`) and assert the plan falls back to the RowNumber-based implementation.
2) A case with `LIMIT 0` and `OFFSET` + `ORDER BY` to confirm we do not build the triple-TopN plan for this degenerate limit.

Suggested implementation:

```java
    @Test
    public void testOffsetOverTopNRewriteOverflowDoesNotApply()
    {
        // Guard against overflow in Math.addExact(limitCount, offsetCount)
        // We expect the rule to fall back to the RowNumber-based implementation
        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 9223372036854775800 ROWS LIMIT 100",
                PlanMatchPattern.anyTree(PlanMatchPattern.any()));
    }

    @Test
    public void testOffsetOverTopNRewriteZeroLimitDoesNotApply()
    {
        // Guard against degenerate LIMIT 0 where we should not build triple TopN
        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 10 ROWS LIMIT 0",
                PlanMatchPattern.anyTree(PlanMatchPattern.any()));
    }

    @Test
    public void testTripleTopNRewrite()
    {
        // ORDER BY name ASC OFFSET 5 LIMIT 3 → triple TopN
        // TopN(3, ASC) → TopN(3, DESC) → TopN(8, ASC) → Source
        List<PlanMatchPattern.Ordering> ascOrder = ImmutableList.of(sort("NAME", ASCENDING, LAST));
        List<PlanMatchPattern.Ordering> descOrder = ImmutableList.of(sort("NAME", DESCENDING, FIRST));

        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 5 ROWS LIMIT 3",

```

To make these tests assert the *specific* desired behavior instead of just "planning succeeds", you should:

1. Replace `PlanMatchPattern.anyTree(PlanMatchPattern.any())` with a pattern that matches the RowNumber-based implementation you expect for `EliminateOffsetOverTopN` fallbacks (e.g., a `topNRowNumber` or `rowNumber`/window pattern, depending on how it appears in other tests).
2. In `testOffsetOverTopNRewriteZeroLimitDoesNotApply`, additionally assert that the triple-TopN pattern used in `testTripleTopNRewrite` does **not** appear. If there is a helper or matcher already in this file that asserts the triple-TopN shape (three nested `topN` nodes over the same source), you can invert that or assert a distinct plan shape for the LIMIT 0 case.
3. If `PlanMatchPattern.any()` is not already statically imported in this file, you can either:
   - Add a static import `import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.any;` and change the calls to `anyTree(any())`, or
   - Keep using the fully-qualified `PlanMatchPattern.any()`/`PlanMatchPattern.anyTree(...)` as shown.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +405 to +414
private static PlanNode cloneUnionNode(UnionNode unionNode, Session session, Metadata metadata, PlanNodeIdAllocator idAllocator, List<VariableReferenceExpression> fieldsToKeep, Map<VariableReferenceExpression, VariableReferenceExpression> varMap)
{
int numSources = unionNode.getSources().size();
List<PlanNode> clonedSources = new ArrayList<>();
List<Map<VariableReferenceExpression, VariableReferenceExpression>> legVarMaps = new ArrayList<>();

for (int i = 0; i < numSources; i++) {
Map<VariableReferenceExpression, VariableReferenceExpression> sourceMap = unionNode.sourceVariableMap(i);
Map<VariableReferenceExpression, VariableReferenceExpression> legVarMap = new HashMap<>();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): cloneUnionNode can create Union outputs that reference variables not produced by cloned sources and does not consistently populate varMap

cloneUnionNode filters outputs per source via fieldsToKeep, but then rebuilds the UnionNode over all original outputVariables. For outputs not in fieldsToKeep, originalInputs can reference symbols that were never cloned, so legVarMaps.get(i).getOrDefault(originalInput, originalInput) may leave references to variables that don’t exist in the cloned leg, producing an invalid Union. The passed-in varMap is also never updated with mappings for the Union outputs, so callers can’t resolve cloned outputs back to originals. Please either restrict rebuilt outputs to those in fieldsToKeep whose per-leg inputs were cloned, and/or guard against mapping outputs with missing cloned inputs, and ensure varMap is populated consistently for these outputs.

Comment on lines +112 to +121
@Test
public void testBasicScanFilterProject()
{
assertTrue(planContainsSemiJoin(
"SELECT * FROM nation n JOIN region r ON n.regionkey = r.regionkey",
enableBasic()));
}

@Test
public void testUnionAllLeft()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (testing): Extend negative coverage for complex probe-side shapes when the complex flag is disabled

Consider adding similar negative tests for the other complex patterns when JOIN_PREFILTER_COMPLEX_BUILD_SIDE is off (cross join, unnest, aggregation on the left, and right-side aggregation pushdown) to confirm each complex path is gated solely by the new session property.

Suggested implementation:

    }

    @Test
    public void testCrossJoinComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM orders o " +
                        "CROSS JOIN (SELECT orderkey FROM lineitem WHERE quantity > 1) x " +
                        "WHERE o.orderkey = x.orderkey",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testUnnestComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT orderkey, u_partkey " +
                        "FROM (SELECT orderkey, array_agg(partkey) parts FROM lineitem GROUP BY orderkey) t " +
                        "CROSS JOIN UNNEST(parts) AS u(u_partkey)",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testLeftAggregationComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM (SELECT custkey, count(*) c FROM orders GROUP BY custkey) o " +
                        "JOIN lineitem l ON o.custkey = l.orderkey " +
                        "WHERE c > 1",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    @Test
    public void testRightAggregationPushdownComplexShapeNotUsedWhenComplexDisabled()
    {
        Session session = enableBasic();

        PlanNode plan = plan(
                "SELECT * " +
                        "FROM orders o " +
                        "JOIN (SELECT orderkey, count(*) c FROM lineitem GROUP BY orderkey) x " +
                        "ON o.orderkey = x.orderkey " +
                        "WHERE c > 1",
                session)
                .getRoot();

        assertFalse(containsNode(plan, com.facebook.presto.sql.planner.plan.JoinPrefilterNode.class));
    }

    private static boolean containsNode(PlanNode node, Class<?> nodeClass)

These edits assume the following, based on existing Presto test conventions and the partial file you provided:

  1. A plan(String sql, Session session) helper exists in the superclass (likely BasePlanTest) and returns an object with .getRoot() of type PlanNode. If the helper has a different signature (e.g., plan(Session, String) or additional parameters), adjust the call sites in the four new tests accordingly.
  2. assertFalse from TestNG (org.testng.Assert.assertFalse) is already statically imported in this test class; if not, add a static import or qualify it (Assert.assertFalse(...)) to match the style used elsewhere in the file.
  3. The fully qualified name com.facebook.presto.sql.planner.plan.JoinPrefilterNode is correct for the prefilter node type used in the other tests in this class. If the class is imported under a different name or alias elsewhere in the file, you can shorten the references to JoinPrefilterNode.class and rely on the existing import.
  4. The table/column names (orders, lineitem, orderkey, custkey, quantity, partkey) are consistent with the rest of TestJoinPrefilter. If the existing tests use different schemas or aliases, align the queries in these new tests with whatever the existing positive test coverage for complex prefilter shapes is using so that the queries are valid in your test environment.

Once wired to the correct plan helper and imports, these four tests will exercise:

  • a cross join complex pattern,
  • an unnest-based complex pattern,
  • a left-side aggregation complex pattern,
  • and a right-side aggregation/pushdown pattern,

all with enableBasic() (i.e., JOIN_PREFILTER_BUILD_SIDE enabled but JOIN_PREFILTER_COMPLEX_BUILD_SIDE disabled), and confirm that no complex JoinPrefilter is inserted in any of these cases.

Comment on lines +41 to +42
@Test
public void testTripleTopNRewrite()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (testing): Add edge-case tests for very large OFFSET/LIMIT values and zero limit in EliminateOffsetOverTopN

Since there are explicit guards around Math.addExact(limitCount, offsetCount) and limitCount <= 0, please add:

  1. A case where OFFSET + LIMIT overflows long (e.g., OFFSET 9223372036854775800 ROWS LIMIT 100) and assert the plan falls back to the RowNumber-based implementation.
  2. A case with LIMIT 0 and OFFSET + ORDER BY to confirm we do not build the triple-TopN plan for this degenerate limit.

Suggested implementation:

    @Test
    public void testOffsetOverTopNRewriteOverflowDoesNotApply()
    {
        // Guard against overflow in Math.addExact(limitCount, offsetCount)
        // We expect the rule to fall back to the RowNumber-based implementation
        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 9223372036854775800 ROWS LIMIT 100",
                PlanMatchPattern.anyTree(PlanMatchPattern.any()));
    }

    @Test
    public void testOffsetOverTopNRewriteZeroLimitDoesNotApply()
    {
        // Guard against degenerate LIMIT 0 where we should not build triple TopN
        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 10 ROWS LIMIT 0",
                PlanMatchPattern.anyTree(PlanMatchPattern.any()));
    }

    @Test
    public void testTripleTopNRewrite()
    {
        // ORDER BY name ASC OFFSET 5 LIMIT 3 → triple TopN
        // TopN(3, ASC) → TopN(3, DESC) → TopN(8, ASC) → Source
        List<PlanMatchPattern.Ordering> ascOrder = ImmutableList.of(sort("NAME", ASCENDING, LAST));
        List<PlanMatchPattern.Ordering> descOrder = ImmutableList.of(sort("NAME", DESCENDING, FIRST));

        assertDistributedPlan(
                "SELECT name FROM nation ORDER BY name ASC OFFSET 5 ROWS LIMIT 3",

To make these tests assert the specific desired behavior instead of just "planning succeeds", you should:

  1. Replace PlanMatchPattern.anyTree(PlanMatchPattern.any()) with a pattern that matches the RowNumber-based implementation you expect for EliminateOffsetOverTopN fallbacks (e.g., a topNRowNumber or rowNumber/window pattern, depending on how it appears in other tests).
  2. In testOffsetOverTopNRewriteZeroLimitDoesNotApply, additionally assert that the triple-TopN pattern used in testTripleTopNRewrite does not appear. If there is a helper or matcher already in this file that asserts the triple-TopN shape (three nested topN nodes over the same source), you can invert that or assert a distinct plan shape for the LIMIT 0 case.
  3. If PlanMatchPattern.any() is not already statically imported in this file, you can either:
    • Add a static import import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.any; and change the calls to anyTree(any()), or
    • Keep using the fully-qualified PlanMatchPattern.any()/PlanMatchPattern.anyTree(...) as shown.

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch 2 times, most recently from b54f0c6 to cf425dd Compare April 23, 2026 05:04
@kaikalur

Copy link
Copy Markdown
Contributor Author

@feilong-liu Friendly ping — would appreciate a review when you get a chance. Thanks!

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch 2 times, most recently from b977946 to b7dcd42 Compare April 24, 2026 13:22
Comment on lines +670 to +671
StreamProperties input = Iterables.getOnlyElement(inputProperties);
return StreamProperties.ordered().withStreamPropertiesFromUniqueColumn(input.getStreamPropertiesFromUniqueColumn());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to think more about this change, can you have it in a separate PR?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — removed this change from the PR. Will submit it separately.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On second look, this change is actually a necessary prerequisite for the TopN optimizer — without it, AddExchanges fails with an IllegalStateException at StreamProperties:804 because the final TopN node drops the streamPropertiesFromUniqueColumn that came from the source table's unique column ($row_id). The checkState at line 804 requires that when otherActualProperties has a unique column, the stream properties must also carry it.

This is a minimal, safe fix: it only preserves existing unique-column stream properties through the TopN visitor (same pattern as the PARTIAL branch already does). It doesn't change behavior for tables without unique columns. I've added it back to this PR since the tests fail without it.

Comment on lines +721 to +723
// LeftJoinNullFilterToSemiJoin must run before RewriteBucketedSemiJoinToJoin
// so that anti-join patterns (LEFT JOIN + IS NULL) are converted to SemiJoins
// before the bucketed optimization fires.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be in a separate PR?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — reverted the reorder. Will submit the LeftJoinNullFilterToSemiJoin/RewriteBucketedSemiJoinToJoin ordering fix as a separate PR.

* Replace the TableScanNode at the bottom of a Filter/Project chain with a new one.
* Returns Optional.empty() if an unsupported node type is encountered.
*/
private static Optional<PlanNode> replaceTableScan(PlanNode node, TableScanNode newTableScan)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return plan node with a new plan node id rather than reusing existing id.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — replaceTableScan now takes PlanNodeIdAllocator and allocates fresh IDs for the new FilterNode/ProjectNode instances.

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch 2 times, most recently from cf9eba9 to 1aaa21b Compare April 25, 2026 04:05
@kaikalur

Copy link
Copy Markdown
Contributor Author

@feilong-liu Per your feedback, I've split out the StreamPropertyDerivations change into a separate prerequisite PR: #27664. This PR no longer touches StreamPropertyDerivations.java.

Summary of all changes from your review:

  1. StreamPropertyDerivations → moved to fix(planner): Propagate streamPropertiesFromUniqueColumn through TopN #27664
  2. PlanOptimizers reorder → reverted, will submit separately ✅
  3. Fresh PlanNodeIds → fixed, replaceTableScan now uses PlanNodeIdAllocator

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch 2 times, most recently from 958ba21 to 0d19b33 Compare April 26, 2026 16:58
public static final String OPTIMIZE_TOP_N_USING_ROW_ID = "optimize_top_n_using_row_id";
public static final String OPTIMIZE_TOP_N_USING_ROW_ID_MIN_COLUMN_SAVINGS = "optimize_top_n_using_row_id_min_column_savings";

// TODO: Native execution related session properties that are temporarily put here. They will be relocated in the future.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unexpected changes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still not addressed

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch from 0d19b33 to 012d11c Compare April 27, 2026 17:29
kaikalur added a commit that referenced this pull request Apr 27, 2026
…#27664)

## Summary
- `visitTopN` in `StreamPropertyDerivations` was returning
`StreamProperties.ordered()` without preserving the
`streamPropertiesFromUniqueColumn` from its input
- This causes `AddExchanges` to fail with an `IllegalStateException`
when a downstream node depends on unique column properties originating
from the source table's scan
- Fix: propagate the input's `streamPropertiesFromUniqueColumn` through
the ordered result

## Test plan
- [x] Compile passes (`mvn compile -pl presto-main-base -q`)
- [ ] CI checks pass
- Prerequisite for #27641 (TopN late materialization)

## Summary by Sourcery

Bug Fixes:
- Ensure StreamPropertyDerivations.visitTopN propagates
streamPropertiesFromUniqueColumn from its input instead of discarding it
for non-partial TopN steps.
@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch from 012d11c to c8f781f Compare April 27, 2026 18:20
@kaikalur

Copy link
Copy Markdown
Contributor Author

Addressed @feilong-liu's comment on SystemSessionProperties — rebased on latest master (which now includes the merged #27664). The fork's master was out of sync causing stale diffs. Synced the fork; PR diff now only contains the TopN-related changes (2 new session properties + their accessors).

@kaikalur kaikalur force-pushed the feat/topn-late-materialization branch from c8f781f to 1b4acba Compare April 27, 2026 19:35
@kaikalur kaikalur merged commit 579fbea into prestodb:master Apr 28, 2026
118 of 122 checks passed
msmygit pushed a commit to msmygit/presto that referenced this pull request Jun 3, 2026
…prestodb#27664)

## Summary
- `visitTopN` in `StreamPropertyDerivations` was returning
`StreamProperties.ordered()` without preserving the
`streamPropertiesFromUniqueColumn` from its input
- This causes `AddExchanges` to fail with an `IllegalStateException`
when a downstream node depends on unique column properties originating
from the source table's scan
- Fix: propagate the input's `streamPropertiesFromUniqueColumn` through
the ordered result

## Test plan
- [x] Compile passes (`mvn compile -pl presto-main-base -q`)
- [ ] CI checks pass
- Prerequisite for prestodb#27641 (TopN late materialization)

## Summary by Sourcery

Bug Fixes:
- Ensure StreamPropertyDerivations.visitTopN propagates
streamPropertiesFromUniqueColumn from its input instead of discarding it
for non-partial TopN steps.
msmygit pushed a commit to msmygit/presto that referenced this pull request Jun 3, 2026
…b#27641)

## Summary

For `ORDER BY ... LIMIT N` over wide tables with a unique `$row_id`
column, this optimization avoids sorting all columns by first sorting
only the narrow sort keys + `$row_id`, then using a SemiJoin to fetch
the full rows for the top-N results.

### Rewrite

```
Before:  TopN(SINGLE) → ScanFilterProject (all columns)

After:   TopN → Filter(semi_mark) → SemiJoin
           source:    augmented original scan (with $row_id added)
           filtering: TopN → narrow clone (sort keys + $row_id_clone only)
```

### Guards
- Session property `optimize_top_n_using_row_id` (default `false`)
- TopN must be `Step.SINGLE` over a scan-filter-project subtree
- Table layout must expose a unique column via `getUniqueColumn()`
- Column savings must exceed
`optimize_top_n_using_row_id_min_column_savings` (default `10`)

### Bug fix
Also fixes a latent bug in `StreamPropertyDerivations.visitTopN` where
SINGLE/FINAL TopN dropped `streamPropertiesFromUniqueColumn`, causing an
`IllegalStateException` when a unique column was explicitly present in a
table scan's assignments under TopN. The PARTIAL step already preserved
this correctly.

## Files Changed

| File | Change |
|------|--------|
| `SystemSessionProperties.java` | Added 2 session properties +
accessors |
| `PlannerUtils.java` | Added `findTableScanNode`,
`addColumnToTableScan`, `addPassThroughVariable` helpers |
| `OptimizeTopNUsingRowId.java` | **New** — The optimizer (300 lines) |
| `PlanOptimizers.java` | Registered optimizer after JoinPrefilter |
| `StreamPropertyDerivations.java` | Bug fix: propagate
`streamPropertiesFromUniqueColumn` through TopN |
| `TestOptimizeTopNUsingRowId.java` | **New** — 5 unit tests with mock
connector |

## Test Plan
- 5 new unit tests (all pass):
  - `testBasicRewrite` — lineitem (16 cols), verifies SemiJoin plan
- `testNoRewriteWhenDisabled` — optimization disabled via session
property
  - `testNoRewriteNarrowTable` — nation (4 cols), below threshold
  - `testNoRewriteAllSortKeys` — all columns are sort keys, no savings
- `testRewriteWithLowThreshold` — nation with threshold=1, verifies
rewrite
- 92 existing TopN tests pass (no regressions)
- 9 existing JoinPrefilter tests pass (no regressions)

## Summary by Sourcery

Introduce new planner optimizations for TopN late materialization and
OFFSET over ORDER BY, extend join prefiltering to more complex plans,
and wire them via session/config properties with accompanying tests and
a planner bug fix.

New Features:
- Add OptimizeTopNUsingRowId optimizer to perform late materialization
for TopN over wide tables using a unique $row_id column.
- Add EliminateOffsetOverTopN optimizer to rewrite ORDER BY + OFFSET +
LIMIT into a triple-TopN pattern instead of RowNumber-based offset
implementation.

Bug Fixes:
- Preserve streamPropertiesFromUniqueColumn through non-PARTIAL TopN
nodes in StreamPropertyDerivations to avoid illegal state when unique
columns are present under TopN.

Enhancements:
- Extend JoinPrefilter to handle more complex left-side probe shapes
(UNION ALL, cross joins, unnest, aggregations) and support pushing the
prefilter below certain right-side aggregations.
- Enhance PlannerUtils to clone UnionNode subtrees, treat Union-based
scan/filter/project chains as deterministic, and provide helpers for
locating and augmenting table scans and threading new variables through
projection/filter chains.

Tests:
- Add unit tests for OptimizeTopNUsingRowId using a mock connector that
exposes a unique $row_id column and various threshold/shape cases.
- Add targeted plan tests for the extended JoinPrefilter behavior,
including complex probe-side patterns and aggregation pushdown
conditions.
- Add planner and integration tests validating EliminateOffsetOverTopN
behavior and correctness for ASC/DESC cases and interaction with OFFSET
clause enabling.
- Extend existing query tests to cover OFFSET over TopN plans and join
prefilter scenarios with new session properties.
tdcmeehan added a commit that referenced this pull request Jun 10, 2026
# Missing Release Notes
## Apurva Kumar
- [x] https://github.com/prestodb/presto/pull/27616 feat: Add PUFFIN
file format enum to FileFormat wrapper [presto][iceberg] (#27616)
(Merged by: Han Yan)
- [x] https://github.com/prestodb/presto/pull/27614 feat: Bump Iceberg
[presto][iceberg] dependency from 1.10.0 to 1.10.1 (#27614) (Merged by:
Dong Wang)
- [x] https://github.com/prestodb/presto/pull/27421 feat: Prism <>
Iceberg [prism] Support SQL-standard time travel syntax (FOR TIMESTAMP
AS OF) (#27421) (Merged by: Kevin Tang)

## Arjun Gupta
- [x] https://github.com/prestodb/presto/pull/27642 feat(scheduler):
Allow configured resource groups to bypass cluster-overload throttling
(#27642) (Merged by: Arjun Gupta)

## Chandrakant Vankayalapati
- [x] https://github.com/prestodb/presto/pull/27706 fix(analyzer): Skip
unmapped derived columns in MV partition filtering (Merged by:
Chandrakant Vankayalapati)

## Deepak Mehra
- [x] https://github.com/prestodb/presto/pull/25107 feat(connector): Add
Azure Blob Storage and ADLS Gen2 support (Merged by: Jalpreet Singh
Nanda)

## Dilli Babu Godari
- [x] https://github.com/prestodb/presto/pull/26260
feat(plugin-prometheus): Enable case-sensitive identifier support for
Prometheus connector (Merged by: Dilli Babu Godari)
- [x] https://github.com/prestodb/presto/pull/27671 feat: Add TLS/SSL
configuration support for Oracle connector (Merged by: Dilli Babu
Godari)
- [x] https://github.com/prestodb/presto/pull/27670 feat: Add Oracle
i18n character set support (Merged by: Dilli Babu Godari)
- [x] https://github.com/prestodb/presto/pull/27669 feat: Add
configurable JDBC fetch size support (Merged by: Dilli Babu Godari)

## Gary Helmling
- [x] https://github.com/prestodb/presto/pull/27703 feat: Support
extending verifier QueryRewriter (#27703) (Merged by: Jianjian Xie)

## Henry Dikeman
- [x] https://github.com/prestodb/presto/pull/27683 feat(native): Add
native_min_shuffle_compression_page_size_bytes session property (#27683)
(Merged by: Henry Dikeman)
- [x] https://github.com/prestodb/presto/pull/27525 feat(native): Pass
storage parameters to HiveInsertTableHandle in write path (#27525)
(Merged by: Aditi Pandit)

## Kevin Tang
- [x] https://github.com/prestodb/presto/pull/27697 misc(native): Target
Java 8 for presto-on-spark compatibility (#27697) (Merged by: Kevin
Tang)
- [x] https://github.com/prestodb/presto/pull/27696 misc(native-pos):
Extract AbstractNativeProcess from NativeExecutionProcess (#27696)
(Merged by: Kevin Tang)

## Nivin C S
- [x] https://github.com/prestodb/presto/pull/27828 fix(security):
Upgrade redshift-jdbc42 to 2.2.7 to address CVE-2026-8178 (Merged by:
Jalpreet Singh Nanda)
- [x] https://github.com/prestodb/presto/pull/25418
feat(plugin-iceberg): Add support for ALTER COLUMN SET DATA TYPE in the
Iceberg connector (Merged by: Nivin C S)

## Rebecca Schlussel
- [x] https://github.com/prestodb/presto/pull/27830 chore(analyzer):
Remove warn-on-common-nan-patterns config and NaN warning behavior
(Merged by: Rebecca Schlussel)

## Shrinidhi Joshi
- [x] https://github.com/prestodb/presto/pull/27873
refactor(native-pos): Add State enum and lifecycle state machine to
MaterializedOutputBuffer (#27873) (Merged by: Xiaoxuan)
- [x] https://github.com/prestodb/presto/pull/27833 fix(native-pos): Fix
MaterializedOutput correctness and crash bugs in close/finish lifecycle
(Merged by: Shrinidhi Joshi)

## Sreeni Viswanadha
- [x] https://github.com/prestodb/presto/pull/27708 feat(optimizer): Add
per-column predicates for ROW IN/NOT IN (Merged by: Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27712 feat(optimizer):
Push HAVING filter through MAX/MIN/ARBITRARY aggregations (Merged by:
Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27680 perf(optimizer):
Remove partition key restriction from ROW IN to disjunction rewrite
(Merged by: feilong-liu)
- [x] https://github.com/prestodb/presto/pull/27641 feat(optimizer): Add
TopN late materialization using $row_id (Merged by: Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27664 fix(planner):
Propagate streamPropertiesFromUniqueColumn through TopN (Merged by:
Sreeni Viswanadha)

## feilong-liu
- [x] https://github.com/prestodb/presto/pull/27773 fix(planner): Fix
ConstantExpression type mismatch in PropertyDerivations.visitProject
(Merged by: feilong-liu)

## join-theory-de
- [x] https://github.com/prestodb/presto/pull/27480 feat: Add
split_part_reverse as a global Presto SQL inline function (#27480)
(Merged by: Sreeni Viswanadha)

## peterenescu
- [x] https://github.com/prestodb/presto/pull/27600 fix: Integer
overflow in range filter boundary conversion (#27600) (Merged by: Amit
Dutta)

## shelton408
- [x] https://github.com/prestodb/presto/pull/27673 fix(server): Fix
FutureStateChange listener leak in
HttpRemoteTaskWithEventLoop.whenSplitQueueHasSpace() (Merged by:
shelton408)

## sumi-mathew
- [x] https://github.com/prestodb/presto/pull/27865 fix(security):
Upgrade opentelemetry-api to 1.62.0 to address CVE-2026-45292 (Merged
by: nishithakbhaskaran)

## zhichenxu-meta
- [x] https://github.com/prestodb/presto/pull/27603 feat(optimizer): Add
distributed execution for RPCNode via rpc_function_parallelism session
property (Merged by: feilong-liu)

# Extracted Release Notes
- #25424 (Author: Shahim Sharafudeen): fix(security): Upgrade gcs
version to 2.2.28
- Upgrade google-oauth-client version to 1.34.1 to address
`CVE-2020-7692 <https://github.com/advisories/GHSA-f263-c949-w85g>`_ and
`CVE-2021-22573 <https://github.com/advisories/GHSA-hw42-3568-wj87>`_.
- #26195 (Author: Gary Helmling): fix: Allow DELETE queries to run on
Presto on Spark
  - Fix a gap in query commit for DELETE queries when running on Spark.
- #26369 (Author: Bryan Cutler): feat: Adding Apache Arrow FlightShim
for connector federation in C++ workers
  - Adding presto-flight-shim server module for connector federation.
- #26833 (Author: Yabin Ma): chore(analyzer)!: Change
fieldNamesInJsonCastEnabled default value to true
- Update the default behavior of ``field_names_in_json_cast_enabled``
from false to true. When ``field_names_in_json_cast_enabled = true``,
JSON fields are assigned to ROW fields by matching field names
regardless of their order in the JSON object. Queries that rely on JSON
field order when casting to ROW may return different results after
upgrading. If your workload depends on the previous positional behavior,
restore it by setting: ``SET SESSION field_names_in_json_cast_enabled =
false;``.
- #26959 (Author: Timothy Meehan): feat(optimizer): Support incremental
refresh of materialized views
  - Add incremental refresh for materialized views.
- Add incremental refresh for materialized views in the Iceberg
connector.
- #26995 (Author: Auden Woolfson): fix: Allow view querying with Mongo
connector
  - Add view querying capabilities in the Mongo connector.
- #27002 (Author: Sayari Mukherjee): feat(client): Add connection
validation feature to enhance connection reliability
- Add connection validation feature to enhance connection reliability.
This can be enabled with the ``validateConnection`` connection property
to execute a validation query immediately after establishing the
connection.
- #27085 (Author: Dong Wang): feat(plugin-iceberg): Push down
min/max/count based on file stats
- Add support for ``min/max/count`` aggregation push down based on file
stats. This can be toggled with the ``aggregate_push_down_enabled``
session property or the ``iceberg.aggregate-push-down-enabled``
configuration property.
- #27129 (Author: Miguel Blanco Godón): fix(plugin-delta): Creating
Delta table to unaccesible location makes the metastore inconsistent
- Fix a bug that made the metastore inconsistent if created a Delta Lake
table to an inaccessible location.
- #27200 (Author: Pratyaksh Sharma): revert: Add metastore cache
invalidation in iceberg
  - Add metastore cache invalidation procedure for Iceberg connector.
- #27240 (Author: Joe Abraham): feat: Add read support for row lineage
columns in Iceberg connector
- Add read support for Iceberg V3 row lineage hidden columns `_row_id`
and `_last_updated_sequence_number`.
- #27282 (Author: Pratyaksh Sharma): feat(connector): Add support for
`execute` procedure in JDBC connectors
  - Add support for `execute` procedure in JDBC connectors.
- #27293 (Author: Sayari Mukherjee): chore(deps): Update jackson version
to 2.18.6
- Upgrade jackson dependency from 2.15.4 to version 2.18.6 to address
`GHSA-72hv-8253-57qq
<https://github.com/advisories/GHSA-72hv-8253-57qq>`_.
- #27294 (Author: Shahim Sharafudeen): chore(deps): Bump jetty from
12.0.29 to 12.0.34
- Upgrade jetty dependency from 0.27 to version 2.0.2 to address
`CVE-2025-11143 <https://github.com/advisories/GHSA-wjpw-4j6x-6rwh>` and
`CVE-2026-1605 <https://github.com/advisories/GHSA-xxh7-fcf3-rj7f>`_.
- #27325 (Author: Jianjian Xie): feat(connector): Add caching for Lance
connector
- Add configurable index and metadata cache sizes via
lance.index-cache-size and lance.metadata-cache-size.
- Add version-aware dataset caching with snapshot isolation for
consistent query reads.
- #27357 (Author: Prashant Sharma): feat(plugin-iceberg): Add min max
stats for varchar/char column and display as low and high values
  - Add low and high values for varchar/char columns of Iceberg tables.
- #27422 (Author: Chandrakant Vankayalapati): feat(planner): Support
GROUP BY and ORDER BY ordinals in MV query rewriting (#27422)
- Add support for ``GROUP BY`` and ``ORDER BY`` ordinal references in
materialized view query rewriting. Previously, queries like ``SELECT a,
SUM(b) FROM t GROUP BY 1`` would silently skip materialized view
optimization.
- #27430 (Author: Jianjian Xie): feat(connector): Add filter pushdown
for Lance connector
- Add SQL filter pushdown to reduce data read from disk for selective
queries. Supports equality, comparisons, IN lists, IS NULL, and range
predicates on Boolean, Integer, Bigint, Real, Double, Varchar, Date, and
Timestamp types.
- #27483 (Author: Miguel Blanco Godón): feat(plugin-delta): Support
reading tables with column mapping enabled
- Add support for reading Delta Lake tables with column mapping enabled.
- #27486 (Author: Jamille Shao-Ni): feat(protocol): Update annotations
for consistent Thrift serialization support to all TaskResource
endpoints
- Add support for Thrift serialization (`application/x-thrift-binary`,
`application/x-thrift-compact`, `application/x-thrift-fb-compact`) to
all TaskResource endpoints for consistent internal communication
protocol.
- Improve efficiency of coordinator-to-worker communication with 20-40%
smaller payload sizes and 2-3x faster serialization compared to JSON.
- #27491 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite
map_from_entries(ARRAY[ROW(...)]) to MAP(ARRAY[], ARRAY[])
- Optimize `map_from_entries(ARRAY[ROW(...), ...])` by rewriting to
`MAP(ARRAY[keys], ARRAY[values])` at plan time, avoiding intermediate
ROW construction.
- #27493 (Author: Sreeni Viswanadha): fix(planner): Use LinkedHashMap in
optimizer rules to fix type mismatch
- Fix runtime type mismatch crashes in Velox native execution caused by
non-deterministic HashMap iteration order in PreAggregateBeforeGroupId,
PushPartialAggregationThroughExchange, and
MultipleDistinctAggregationToMarkDistinct optimizer rules. Replace
HashMap with LinkedHashMap to preserve aggregation output variable
ordering.
- #27496 (Author: dependabot[bot]): chore(deps): Bump lodash-es from
4.17.23 to 4.18.1 in /presto-ui/src
- Upgrade lodash-es from 4.17.23 to 4.18.1 to address `CVE-2026-4800
<https://nvd.nist.gov/vuln/detail/CVE-2026-4800>`_. This dependency is
used for local development only and does not affect production runtime.
- #27497 (Author: dependabot[bot]): chore(deps): Bump lodash from
4.17.23 to 4.18.1 in /presto-ui/src
- Upgrade lodash from 4.17.23 to 4.18.1 to address multiple security
vulnerabilities: - `CVE-2026-4800
<https://nvd.nist.gov/vuln/detail/CVE-2026-4800>`_. This dependency is
used for local development only and does not affect production runtime.
- #27500 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite ROW
constructor IN to disjunction for partition pruning
- Add optimizer rule RewriteRowConstructorInToDisjunction that rewrites
ROW IN ROW predicates into OR of AND equality chains when all ROW fields
are partition keys, enabling per-column TupleDomain extraction for
partition pruning. Gated behind session property
rewrite_row_constructor_in_to_disjunction (default disabled).
- #27504 (Author: Kevin Tang): feat(analyzer): Add session property to
gate CTAS IF NOT EXISTS query analysis
- Add session property
:ref:`admin/properties-session:\`\`always_analyze_create_table_query_enabled\`\``
to enable analyzing inner queries on ``CREATE TABLE AS SELECT IF NOT
EXISTS`` statements when the target table already exists.
- #27510 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite bucketed
semi-join to join
- Add optimizer rule RewriteBucketedSemiJoinToJoin that rewrites
semi-joins into left joins with distinct aggregation when both sides are
bucketed on the join key, avoiding data shuffle. Gated behind session
property rewrite_bucketed_semi_join_to_join (default disabled).
- #27538 (Author: Chandrakant Vankayalapati): feat(planner): Support
CUBE/ROLLUP/GROUPING SETS column rewriting in MV optimizer (#27538)
- Fix materialized view query rewriting for ``CUBE``, ``ROLLUP``, and
``GROUPING SETS`` clauses. Column references inside these grouping
elements are now correctly rewritten to materialized view columns.
- #27547 (Author: feilong-liu): perf(planner): Optimize query planning
for wide-column projections
- Improve query planning performance for wide-column projections by
adding fast paths that skip unnecessary processing for variable
references, constants, and identity assignments across multiple
optimizer rules.
- #27549 (Author: Chandrakant Vankayalapati): feat(planner): Support
scalar functions in MV query rewriting (#27549)
- Add support for scalar functions in materialized view query rewriting.
Queries using functions like ``CONCAT``, ``ABS``, ``JSON_EXTRACT``,
``CAST``, ``IF``, ``COALESCE``, and ``CASE`` expressions now correctly
rewrite to scan the materialized view.
- #27553 (Author: feilong-liu): perf(analyzer): Index
RelationType.resolveFields() for O(1) field lookup
- Improve logical planner performance for wide-column queries by
indexing RelationType.resolveFields() for O(1) field lookup instead of
O(N) linear scan.
- #27568 (Author: Sreeni Viswanadha): fix(optimizer): Fix cascading
projection pass-through in PushProjectionThroughCrossJoin
- Fix a bug in PushProjectionThroughCrossJoin optimizer rule where
cascading projections above a cross join could cause validation errors
by dropping pushed variables from intermediate residual projects.
- #27574 (Author: dependabot[bot]): chore(deps): Bump
org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2
- Upgrade org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2 inorder to
address `CVE-2026-35554
<https://github.com/advisories/GHSA-5qcv-4rpc-jp93>`_.
- #27583 (Author: Nandakumar Balagopal): chore(deps): Bump
org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
- Upgrade org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
inorder to address `CVE-2026-34480
<https://nvd.nist.gov/vuln/detail/CVE-2026-34480>`_.
- #27597 (Author: Swapnil): fix: Fix race condition in
pruneFinishedQueryInfo causing task memory leak
- Fix race condition in pruneFinishedQueryInfo causing task memory leak.
- #27598 (Author: Sreeni Viswanadha): feat(optimizer): Extend
JoinPrefilter to support complex probe-side patterns
- Add new session property
`join_prefilter_build_side_with_complex_probe_side` (default false) to
extend join prefilter optimization to support complex probe-side
patterns including UNION ALL, cross join, unnest, and aggregation.
- #27606 (Author: dependabot[bot]): chore(deps): Bump
org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 in /presto-tests
- Upgrade org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 to resolve
`CVE-2026-0636 <https://nvd.nist.gov/vuln/detail/CVE-2026-0636>`_.
- #27613 (Author: Shahim Sharafudeen): fix(security): Upgrade
async-http-client to 3.0.9 to address CVE-2026-40490
- Upgrade async-http-client to version 3.0.9 to address `CVE-2026-40490
<https://github.com/advisories/GHSA-cmxv-58fp-fm3g>`_.
- #27639 (Author: Chandrakant Vankayalapati): feat: Add
authorizedPrincipal to AuthorizedIdentity for gateway identity
propagation (#27639)
- Add optional authorizedPrincipal to AuthorizedIdentity to support
gateway identity propagation, allowing the session principal to reflect
the original client instead of the gateway.
- #27645 (Author: Nivin C S): fix: Fix failure when inserting into
Iceberg tables partitioned by day(timestamp with time zone)
- Fix failure during INSERT into Iceberg tables partitioned by day()
when using timestamp with time zone columns.
- #27659 (Author: Reetika Agrawal): feat(plugin-iceberg): Add changes
for passing iceberg V3 initialDefaultValue while read
  - Add changes for passing iceberg V3 initialDefaultValue while read.
- #27663 (Author: feilong-liu): feat: Add partition-aware grouped
execution for bucketed tables
- Add `partition_aware_grouped_execution` session property to schedule
each (bucket, partition) as a separate lifespan in grouped execution,
reducing per-lifespan data volumes for bucketed tables. Disabled by
default.
- Add support for partition-aware grouped execution in the Hive
connector, creating per-(bucket, partition) split queues and compound
partition handles.
- #27677 (Author: Timothy Meehan): feat(analyzer): Allow HAVING in
materialized view query rewrite
- Allow HAVING in queries that are transparently rewritten onto a
materialized view.
- #27678 (Author: Sreeni Viswanadha): perf(optimizer): Clean up
prefilter distinct limit
- Improve PrefilterForLimitingAggregation optimizer to exclude partition
keys from the DistinctLimit, improving convergence speed for GROUP BY +
LIMIT queries on partitioned tables.
- Add N <= 1000 limit guard to PrefilterForLimitingAggregation to
restrict the optimization to small limits.
- #27685 (Author: Glerin Pinhero): chore(deps): Upgrading mongodb driver
to mongodb driver sync
  - Upgrade mongo-java-driver to mongodb-driver-sync.
- #27691 (Author: Sergey Pershin): fix: Take 'finishingTime' and
'planningTime' out of 'executionTime' (#27691)
- Fix 'planningTime' and 'finishingTime' are no longer added to the
'executionTime'. 'executionTime' is now a true execution time - how long
it took the query to run the compute. It can be used to measure the
efficiency of the workers w/o added planning time or the time spent on
final steps, like partition registration.
- #27700 (Author: feilong-liu): feat(optimizer): Add session properties
for RPC streaming mode and batch dispatch size
- Add ``rpc_streaming_mode`` session property to control RPC function
execution mode (``PER_ROW`` or ``BATCH``). Default: ``PER_ROW``.
- Add ``rpc_dispatch_batch_size`` session property to control batch size
for RPC dispatch in ``BATCH`` mode. Default: ``128``. A value of ``0``
collects all rows before dispatching.
- Fix RPC options argument parsing to use the last argument instead of
hardcoding index 3.
- #27714 (Author: feilong-liu): fix: UnsupportedOperationException for
UnionNode in AddExchanges fixed parallelism path
- Fix UnsupportedOperationException when using
`remote_function_names_for_fixed_parallelism` with queries containing
UNION ALL below the remote function projection.
- #27715 (Author: nishithakbhaskaran): chore(deps): Bump
http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to resolve
CVE-2025-32996
- Upgrade http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to
resolve `CVE-2025-32996
<https://nvd.nist.gov/vuln/detail/CVE-2025-32996>`_.
- #27722 (Author: dependabot[bot]): chore(deps): Bump
org.postgresql:postgresql from 42.7.9 to 42.7.11
- Upgrade org.postgresql:postgresql from 42.7.9 to 42.7.11 to resolve
`CVE-2026-42198 <https://nvd.nist.gov/vuln/detail/CVE-2026-42198>`_.
- #27728 (Author: Timothy Meehan): fix(plugin-iceberg): Do not check
access control for MV data table
- Fix access control for materialized view storage tables when
``legacy_materialized_views=false``: storage-table access control is
bypassed during MV expansion, while direct queries by name still go
through access control.
- Add ``iceberg.materialized-view-default-storage-schema`` config to
route storage tables into a single schema. Defaults to the materialized
view's own schema; per-MV ``storage_schema`` overrides.
- #27748 (Author: Pratik Joseph Dabre): feat(plugin-native-sidecar): Add
support for adding plugin loaded types in sidecar plugin
  - Add support for adding plugin loaded types in sidecar plugin.
- #27764 (Author: Sreeni Viswanadha): feat(optimizer): Push aggregation
through UNION ALL with disjoint group keys
- Add ``push_aggregation_through_disjoint_union`` session property
(default off) that pushes a ``GROUP BY`` aggregation completely below
``UNION ALL`` when at least one grouping key has constant values that
are pairwise distinct across the union branches, eliminating the final
aggregation.
- #27765 (Author: Sreeni Viswanadha): fix(planner): Prune empty inputs
through local exchanges in SimplifyPlanWithEmptyInput
- Improve ``SimplifyPlanWithEmptyInput`` to prune empty subtrees that
the connector PHYSICAL stage produces under local exchanges.
Multi-source exchanges with mixed empty / non-empty children now drop
the empty branches, eliminating idle no-op operators at runtime for wide
``UNION ALL`` queries where some branches are pruned to empty by
partition / snapshot filtering. Single-source exchanges and write-side
subtrees (``TableWriter`` / ``TableFinish``) are preserved.
- #27766 (Author: Timothy Meehan): feat(plugin-iceberg): Push down
`_last_updated_sequence_number` predicates
- Add predicate push down on ``_last_updated_sequence_number`` for
file-level pruning.
- #27767 (Author: Reetika Agrawal): feat(native): Iceberg V3
initialDefaultValue
  - Add support for iceberg V3 initialDefaultValue.
- #27769 (Author: Shahim Sharafudeen): fix(security): Upgrade Netty to
4.2.13.Final to address CVE-2026-42584
- Upgrade Netty to 4.2.13.Final in response to `CVE-2026-41417
<https://github.com/advisories/GHSA-fghv-69vj-qj49>` , `CVE-2026-44248
<https://github.com/advisories/GHSA-jfg9-48mv-9qgx>` , `CVE-2026-42577
<https://github.com/advisories/GHSA-rwm7-x88c-3g2p>` , `CVE-2026-42578
<https://github.com/advisories/GHSA-45q3-82m4-75jr>` , `CVE-2026-42579
<https://github.com/advisories/GHSA-cm33-6792-r9fm>` , `CVE-2026-42580
<https://github.com/advisories/GHSA-m4cv-j2px-7723>`, `CVE-2026-42581
<https://github.com/advisories/GHSA-xxqh-mfjm-7mv9>` , `CVE-2026-42582
<https://github.com/advisories/GHSA-2c5c-chwr-9hqw>` , `CVE-2026-42583
<https://github.com/advisories/GHSA-mj4r-2hfc-f8p6>` , `CVE-2026-42584
<https://github.com/advisories/GHSA-57rv-r2g8-2cj3>` , `CVE-2026-42585
<https://github.com/advisories/GHSA-38f8-5428-x5cv>` , `CVE-2026-42586
<https://github.com/advisories/GHSA-rgrr-p7gp-5xj7>` and `CVE-2026-42587
<https://github.com/advisories/GHSA-f6hv-jmp6-3vwv>`_.
- #27774 (Author: Timothy Meehan): feat(plugin-iceberg): Bound MV
refresh
- Add ``max_snapshots_per_refresh`` materialized view property to bound
how far each base table advances per ``REFRESH MATERIALIZED VIEW``.
Defaults to ``0`` (unbounded). Requires Iceberg V3 row lineage; V2
tables fall back to unbounded refresh.
- Add ``iceberg.materialized-view-default-max-snapshots-per-refresh``
config property and matching session property to set the default bound.
- #27777 (Author: sumi-mathew): fix(security): Upgrade libthrift to
address CVE-2026-41604
- Upgrade libthrift 0.23.0 in response to `CVE-2026-41604
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41604>`_.
- #27778 (Author: Chandrakant Vankayalapati): fix(analyzer): Prevent
incorrect materialized view query rewrite when base query lacks GROUP BY
- Fix data correctness bugs in ``MaterializedViewQueryOptimizer`` where
queries without ``GROUP BY`` could be incorrectly rewritten to use
materialized views with ``GROUP BY``, producing fewer rows than
expected. Alias mismatches and scalar expression bypasses allowed
invalid rewrites that silently collapsed duplicate rows.
- #27790 (Author: Chandrakant Vankayalapati): fix(plugin-singlestore):
Fix type mapping for SingleStore JDBC client 1.2.11
- Fix TINYINT type mapping to preserve TINYINT semantics instead of
incorrectly mapping to BOOLEAN after JDBC driver upgrade.
- Fix varchar type mapping for TEXT types to use byte-based thresholds
matching the JDBC driver's COLUMN_SIZE reporting.
- #27797 (Author: Ben Hu): chore(deps): Update BigQuery Storage API SDK
from v1beta1 to v1
  - Update Google BigQuery Storage API SDK from v1beta1 to v1.
- #27803 (Author: Sayari Mukherjee): chore(deps): Upgrade
parquet-jackson to 1.17.1 in Iceberg connector
- Upgrade parquet-jackson to 1.17.1 in response to `GHSA-72hv-8253-57qq
<https://github.com/advisories/GHSA-72hv-8253-57qq>`_.
- #27806 (Author: Timothy Meehan): feat(plugin-iceberg): Add `ALTER
MATERIALIZED VIEW SET PROPERTIES`
- Add ``ALTER MATERIALIZED VIEW <name> SET PROPERTIES (...)`` SQL
statement to update materialized view properties after creation.
:pr:`27806`.
- Allow updating ``stale_read_behavior``, ``staleness_window``, and
``refresh_type`` on existing materialized views via ``ALTER MATERIALIZED
VIEW ... SET PROPERTIES`` (requires
``legacy_materialized_views=false``). :pr:`27806`.
- #27810 (Author: Reetika Agrawal): feat: Add support for ALTER TABLE
SET DEFAULT for Iceberg write-default
- Add support for `ALTER TABLE ... ALTER COLUMN ... SET DEFAULT` syntax
to update Iceberg column write-default values.
- Add support for updating column write-default values using `ALTER
TABLE ... SET DEFAULT` (requires Iceberg format version 3+).
- Update write-default operations to preserve existing initial-default
values as metadata-only changes.
- #27816 (Author: Timothy Meehan): fix(plugin-iceberg): Add warnings for
stitching and refresh fallback
- Add warning when predicate stitching or incremental refresh falls back
to full recompute.
- #27819 (Author: Sreeni Viswanadha): feat(optimizer): Replace timeout
with scan limiting for predictable prefilter performance
- Improve PrefilterForLimitingAggregation to use scan limiting instead
of timeouts for more predictable performance. The optimization now
limits the source scan to 1000 * LIMIT rows before applying DISTINCT
LIMIT.
- #27820 (Author: Timothy Meehan): feat(plugin-iceberg): Make MV
stitching and incremental refresh cost-based
- Add `materialized_view_stitching_strategy` and
`materialized_view_incremental_refresh_strategy` session properties
(values: `ALWAYS`, `NEVER`, `AUTOMATIC`; default: `ALWAYS`). Under
`AUTOMATIC`, the optimizer selects between the rewrite and the full
alternative based on cost; when stats are unavailable it falls back to
row-count comparison.
- #27829 (Author: Rebecca Schlussel): chore: Remove old NaN definition
and mark config as defunct
  - Remove configuration property `use-new-nan-definition`.
- #27835 (Author: Timothy Meehan): fix(plugin-iceberg): Fix duplicate
view creation in Hive catalog
- Fix race where concurrent ``REFRESH MATERIALIZED VIEW`` on the same
Hive-backed Iceberg materialized view could lose a watermark update.

# All Commits
- 4f8be7c2dcb7def7c113503da91b6f726b23ab3c fix(security): Upgrade
redshift-jdbc42 to 2.2.7 to address CVE-2026-8178 (#27828) (Nivin C S)
- 54cabf9207d654dc8b42ea3c6a2ca3cb4de2f736 chore(ci): Advance velox
(#27886) (Amit Dutta)
- 39e9ec63aae2bc6342e90d96c3d1f2f5ffe5df79 fix(security): Upgrade
opentelemetry-api to 1.62.0 to address CVE-2026-45292 (#27865)
(sumi-mathew)
- e78428e6303bd1aeadf2190daeb2672caf1a9a5b refactor(native-pos): Add
State enum and lifecycle state machine to MaterializedOutputBuffer
(#27873) (#27873) (Shrinidhi Joshi)
- 3ed75c8d7a84328335ed121adba2c03d3d459257 fix(native-pos): Move
ShuffleWriter and pool creation inside MaterializedOutputBuffer (#27872)
(#27872) (Shrinidhi Joshi)
- c3946f3325806101255c996a7b79c473183e068e test: Add end to end tests
for string functions (#26950) (Allen Shen)
- 869548bd2558d856b37a80762313b237312a9c46 refactor(native): Migrate to
PrestoQueryConfig for array_agg.ignore_nulls (#27876) (Maria Basmanova)
- 3f8e87638b102a1d3d93a57e9f16e24de28447be fix(native-pos): Add typed
units to MaterializedOutputBuffer runtime stats (#27870) (Shrinidhi
Joshi)
- 86ab4a4a6df0c5984f8add15caaf9fe1a93a7977 refactor(native-pos): Remove
cooperative backpressure and `useSystemMemory` config (#27869)
(Shrinidhi Joshi)
- a31f69f64d856574529ed5a6b104cf8c564f1c32 chore(deps): Update jackson
version to 2.18.6 (#27293) (Sayari Mukherjee)
- 871f92d45a81c580384681437891908e01506b92 chore: Force modernizer use
for all modules up to presto-main-base (#27867) (Zac Blanco)
- a51fe41c87a2ff77c7c5297b144288f6e04b4997 test(native-pos): Reduce
`kLocalShuffleMaxPartitionBytes` default to 64KB (#27868) (Shrinidhi
Joshi)
- 4617d4685a9fe2262240dc1c44cda2e1be37d747 feat: Adding Apache Arrow
FlightShim for connector federation in C++ workers (#26369) (Bryan
Cutler)
- 6185c1b22293f3d5c1bd0abed891224426ddb363 chore: Bump webpack-cli from
5.1.4 to 7.0.2 in /presto-ui/src (#27852) (sumi-mathew)
- a658c94f2b81f5c7abe400c192deeb84a8346d7a feat(plugin-iceberg): Make MV
stitching and incremental refresh cost-based (#27820) (Timothy Meehan)
- 46cc03138b034839bc05468be6ad801e4f665cba fix(plugin-iceberg): Fix
duplicate view creation in Hive catalog (#27835) (Timothy Meehan)
- 3df2afa1769509be19279c9433367ae36c0df300 chore(analyzer)!: Change
fieldNamesInJsonCastEnabled default value to true (#26833) (Yabin Ma)
- 381e181176178892dbf73a6422dd2bcafbbfa1c6 chore(deps): Bump jetty from
12.0.29 to 12.0.34 (#27294) (Shahim Sharafudeen)
- ee7c8a567ffb3e5cf40a31fcbe5904eb5109265f fix(native): Fix CMake link
order for presto_server_lib (#27847) (Tirumala Saiteja Goruganthu)
- 679d5342881d1021b9a3d038ebec0cd98bb2b4ac docs: Fix formatting of table
in connector/iceberg.rst (#27859) (Steve Burnett)
- dc48d4a399b800d20d9cff1c26beaa15720e3b04 chore(ci): Advance velox
(#27802) (Amit Dutta)
- b22bb99a7f950980c4b1f04a72c373740e5e92dc docs: Fix prestocpp setup
config file (#27857) (Reetika Agrawal)
- 5608831355838f839b4a428550c50e45ef435360 fix(plugin-iceberg): Disable
equality delete as join for DELETE/UPDATE (#27854) (Naveen Mahadevuni)
- 71088a83203252340f49fcbfe3e7f9c5832342aa chore(deps): Upgrade protobuf
to 4.34.1 (#27844) (bibith4)
- 241c94ac60996f5dfeeb85a3e872e3dfd1b5e251 chore(deps): Upgrade
parquet-jackson to 1.17.1 in Iceberg connector (#27803) (Sayari
Mukherjee)
- 73aa19fda74895b62ebe545b1e500813d00a258d fix(testing): Fix TPC-H
native-execution tests to use the right storage format and standard
queries (#27581) (Pramod Satya)
- f7c0ab9e2b7230829372cf24b4c640f44be31e5a feat(optimizer): Add
per-column predicates for ROW IN/NOT IN (#27708) (Sreeni Viswanadha)
- 41a66fc0fe2fd7707fd84062cf075a9a683803b1 fix(native): Allow UTC
timezone (key=0) in session config (#27309) (Shakyan Kushwaha)
- 77e782ce8de12518155cfb30d472e7f3d75afa21 chore(deps): Upgrade
eslint-plugin-react-hooks to version 7.1.1 (#27845) (bibith4)
- 7ee85da37a4d09182392b8c05a9e0622e453acfd fix(native): Possible segv in
system data source creation (#27807) (Christian Zentgraf)
- b7f8f05a286a1f611e48a04babf2cf99b8688507 fix(plugin-iceberg): Add
warnings for stitching and refresh fallback (#27816) (Timothy Meehan)
- b30db0a9a01ee92673327ec7df909eeee7203cb3 chore(deps): Upgrade
datasketches-java to version 6.2.0 (#27839) (Sayari Mukherjee)
- be01a17a06c16cb8004736e0b1f2dc5488805300 refactor(planner): Extract
shared expression rewriter for MV query optimizer (#27732) (#27732)
(Chandrakant Vankayalapati)
- 10d55723b93ccd907a1bba2736428271abc53bcf fix: Disallow
rewrite_data_files in Iceberg if filter pushdown enabled (#27838) (Dong
Wang)
- 5aa4abed4085cadd7ef5a0b8f47673486245c9b1 feat(optimizer): Push HAVING
filter through MAX/MIN/ARBITRARY aggregations (#27712) (Sreeni
Viswanadha)
- 2301c14aa4def417f7766b2d542ce8191d4c2050 fix(ci): Update release notes
check to use raw markdown body (#27842) (Rebecca Schlussel)
- 917cf4cd78d32ca72ef6b7b45c77c3d44a7b3b26 chore(deps): Update BigQuery
Storage API SDK from v1beta1 to v1 (#27797) (Ben Hu)
- 7faea8429c9b23d67f577f42543796d6a57e0253 feat(protocol): Update
annotations for consistent Thrift serialization support to all
TaskResource endpoints (#27486) (Jamille Shao-Ni)
- a95cb3ef06310b98b43da290d03fd8c8ee82f35c feat(plugin-iceberg): Push
down min/max/count based on file stats (#27085) (Dong Wang)
- 92046f2512be60dd0cb2a5f95377629733fd92e0 fix(analyzer): Relax stale
view validation for compatible string types (#27776) (Reetika Agrawal)
- 6ba9b3a2291d469f384f260451f1b2f776709255 chore(deps): Upgrade
commons-logging dependency from 1.3.5 to 1.3.6 (#27811) (Nivin C S)
- c6505360c4fb31bc5aabbc4e0e41fe285b638912 feat(plugin-iceberg): Bound
MV refresh (#27774) (Timothy Meehan)
- d8a2b53fa42fa41ca5025f9d7640c8eebc9ff15b feat(optimizer): Replace
timeout with scan limiting for predictable prefilter performance
(#27819) (Sreeni Viswanadha)
- 6823d9c9b135e6781bc9f4a30c658eb805b6518a chore(deps): Bump
webpack-dev-server from 5.2.1 to 5.2.4 in /presto-ui/src (#27840)
(dependabot[bot])
- 888991dc8b1a07424aba33f3c8bb440820479f0c chore: Bump commons.codec
from 1.17.2 to 1.21.0 (#27756) (sumi-mathew)
- 1da69a6e246fdeecc7302e8385b7ec4580e27821 fix(optimizer): Handle RPC
functions inside TRY expressions (#27818) (feilong-liu)
- 3233fe18835b38c1f7399f97a937bc79f1208dbf chore(analyzer): Remove
warn-on-common-nan-patterns config and NaN warning behavior (#27830)
(Rebecca Schlussel)
- c11fbf9f5f5415a3e28ea2d677acea27754788ee chore(deps): Upgrading
mongodb driver to mongodb driver sync (#27685) (Glerin Pinhero)
- 79cc9cb5c5bb586c9bde73c362912eef1b1188db refactor: Remove duplicate
check of iceberg v3 validation (#27837) (Reetika Agrawal)
- 3161b74a9d8b201487835db397aefe60178fea0d refactor: Add missing getter
methods and fix ordering in MetadataManagerStats (#27825) (Reetika
Agrawal)
- 3332fa796f9724aed783d4f3f5af81578961b336 feat: Add support for ALTER
TABLE SET DEFAULT for Iceberg write-default (#27810) (Reetika Agrawal)
- b294d8bf029c78a1afbabf3cae66d1b4f305dafa fix(native-pos): Fix
MaterializedOutput correctness and crash bugs in close/finish lifecycle
(#27833) (Shrinidhi Joshi)
- 0da3bb839ea7085c1dd6ca365627ecc107f50973 feat(optimizer): Extend
JoinPrefilter to support complex probe-side patterns (#27598) (Sreeni
Viswanadha)
- da0f63f907f8993b56e9dddf5eedd100a77022f3 feat(plugin-iceberg): Add
`ALTER MATERIALIZED VIEW SET PROPERTIES` (#27806) (Timothy Meehan)
- 9b2559f2138b9e31d5a198b1261d23dee2a15111 chore: Remove old NaN
definition and mark config as defunct (#27829) (Rebecca Schlussel)
- 34d459d66c03e4a866ee2332a28826c90e105222 feat(plugin-iceberg): Add
support for ALTER COLUMN SET DATA TYPE in the Iceberg connector (#25418)
(Nivin C S)
- f12815ce648cfcfdd3721f4cd54a12e56ecdb4b2 chore(deps): Upgrade
openlineage-java to 1.47.1 to fix CVE-2026-40542 (#27812) (Dilli Babu
Godari)
- fd67186b43f87362df58e8ab1cbe79e7f507ffa1 feat: Wire up IndexSource
splits to Spark task sources (#27817) (Zac)
- 65547f47ad87d4ccc1e7576d7cc864f717490893 feat(native): Iceberg V3
initialDefaultValue (#27767) (Reetika Agrawal)
- c2f37fc3ec49e3455e91afaef31dfb034e617bc8 fix: Enable partition-aware
grouped execution for index joins (#27701) (Zac)
- 4509fb24ec79df4093a83ffb50e6d688ee0f0854 chore(deps): Upgrade ratis
dependencies from 3.1.3 to 3.2.2 (#27787) (Nivin C S)
- 1d6737a6624fa048e2db721b905861f9958ee092 fix(planner): Prune empty
inputs through local exchanges in SimplifyPlanWithEmptyInput (#27765)
(Sreeni Viswanadha)
- d7f0f924c30e79238d20113afbc2977536ef35b7 misc(native): Target Java 8
for presto-on-spark compatibility (#27697) (#27697) (Kevin Tang)
- b4ce8d0d82797243153502c17769c0cfde8e6c5c misc(native-pos): Extract
AbstractNativeProcess from NativeExecutionProcess (#27696) (#27696)
(Kevin Tang)
- 18e730b1da26f301fe7362f514252f370671d623 docs: Fix errors in doc build
(#27805) (Steve Burnett)
- 81d4bde174f8e7dbdd1c9dbae1ecf3330b16267c feat(client): Add connection
validation feature to enhance connection reliability (#27002) (Sayari
Mukherjee)
- f0d744296a0ba0f3c4031fde5cd9eaa370d1e397 feat(optimizer): Push
aggregation through UNION ALL with disjoint group keys (#27764) (Sreeni
Viswanadha)
- bf30efcd530b9b181ec21672b8140ec0ebf6231a feat(plugin-prometheus):
Enable case-sensitive identifier support for Prometheus connector
(#26260) (Dilli Babu Godari)
- 9bacdef43077268ca4abefd24718cfc8caef2b1c perf(native-pos): Fix OOM due
to excessive memory usage in BroadcastFileReader (#27798) (Shrinidhi
Joshi)
- 95db1c86b6098026c48167dfa751393359ebdab5 feat(plugin-iceberg): Push
down `_last_updated_sequence_number` predicates (#27766) (Timothy
Meehan)
- 76d8bf2f42476c36e429e7515797f452ca79aef3 fix(plugin-iceberg): Handle
deprecated Iceberg write.object-storage.path property (#27758) (Reetika
Agrawal)
- 52f8f99b36a43d89f448a54b5220ad659fd3a5e0 fix(security): Upgrade Netty
to 4.2.13.Final to address CVE-2026-42584 (#27769) (Shahim Sharafudeen)
- 7056bdb10dafdcdd36649535c27e652ab843ebbd feat(plugin-native-sidecar):
Add support for adding plugin loaded types in sidecar plugin (#27748)
(Pratik Joseph Dabre)
- 21a6092869bf9e7f0832e15879e5a023164b6723 feat(native-pos): Make
MaterializedOutputBuffer size configurable with dynamic drain threshold
(#27795) (#27795) (Shrinidhi Joshi)
- 770df6161cd196d61f9fdedd9595e453ea621a0b fix(native-pos): Add flow
control logging to MaterializedOutputBuffer (#27794) (#27794) (Shrinidhi
Joshi)
- c237df17e5c216ee75913d28f5f9244dca904070 chore(ci): Advance velox
(#27786) (Joe Abraham)
- 18fec98bdd3485e64d03bc36bcd7c05f96c555c1 chore(deps): Upgrade jest
version to 30.3.0 (#27657) (Sayari Mukherjee)
- ace806dd47e337d85a74ef814ccae4d530057db1 test: Add end to end test for
jaccard_index (#27591) (jkhaliqi)
- e2c083acc87b705657c832dbec1c4f66f90825f2 fix(plugin-singlestore): Fix
type mapping for SingleStore JDBC client 1.2.11 (#27790) (Chandrakant
Vankayalapati)
- 3449d457efacef3697c832b87d4657522cd9a9d2 chore(deps): Upgrade gson
dependencies from 2.12.1 to 2.14.0 (#27779) (Nivin C S)
- c45405dfc8cf2017f62e5e27c3c860d9c697cdc8 fix(security): Upgrade
libthrift to address CVE-2026-41604 (#27777) (sumi-mathew)
- d7c8658c654a27caf28e36caf87dba5e170dbde9 docs: Document optimizer and
Iceberg properties (#27775) (Asish Kumar)
- 2acd947be65af53ed13f6651aca0586801575e98 fix(analyzer): Prevent
incorrect materialized view query rewrite when base query lacks GROUP BY
(#27778) (Chandrakant Vankayalapati)
- bb46550550e257affc78ac7ea111f548acd83239 feat: Add partition-aware
grouped execution for bucketed tables (#27663) (feilong-liu)
- f65259c38cf23e1e8b1c5942fb57f069c60c5bcf chore(deps): Upgrade React
and ReactDOM to version 19.2.4 (#27740) (Sayari Mukherjee)
- e1eb82f978ab72e92c79b51b88bb3eb0a152b80c fix: Allow DELETE queries to
run on Presto on Spark (#26195) (Gary Helmling)
- 8982f133809140a3c94595414b1d82518463e3f8 chore(deps): Upgrade
react-simple-code-editor from 0.13.1 to 0.14.1 (#27739) (Sayari
Mukherjee)
- efaf47f42aa9651a4c818c8f9c1eb5af38f90037 feat(plugin-delta): Support
reading tables with column mapping enabled (#27483) (Miguel Blanco
Godón)
- 7a9a2872c084815393063fed6e80a5b39642200a fix(native-pos): Fix
PartitionAndSerialize ROUND_ROBIN sending all rows to partition 0
(#27770) (Shrinidhi Joshi)
- ad09e9bd5ac631c82202985f19207e943dbe4290 fix: Load coordinator plugins
before standard plugins across bundles (#27729) (Pratik Joseph Dabre)
- 426dd7c1b19979788d1300b39d81139620988fcc fix(planner): Fix
ConstantExpression type mismatch in PropertyDerivations.visitProject
(#27773) (feilong-liu)
- 6aed02700ca94defa04d427854e6492119a7ccbe feat(analyzer): Allow HAVING
in materialized view query rewrite (#27677) (Timothy Meehan)
- f1c7b7d3df6736e46e2ac0651d4b44e18c5e4ea0 chore: Bump commons-dbcp2
from 2.12.0 to 2.14.0 (#27754) (sumi-mathew)
- 39513c10a1f0b02195a08f78691b0e4059dace6f chore(deps): Bump
@babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4 in
/presto-ui/src (#27763) (dependabot[bot])
- 5191b72fb4e7b680c0c36e2e0a5411f251e3b10d fix(plugin-iceberg): Do not
check access control for MV data table (#27728) (Timothy Meehan)
- 00acf72fa459e525d22c37c6abbfa22a3d401497 chore(deps): Bump SingleStore
JDBC client to 1.2.11 (#27759) (Dilli Babu Godari)
- d5b68df83e73e7a2269dd90ce6073d9d2ae3a31d chore(deps): Bump Apache
Lucene 8.11.3 to 9.12.3 (#27757) (Dilli Babu Godari)
- bb26a1ecf9f0badaa655d73a967f5b9426a58a8c test: Add end-to-end tests
for numeric_histogram function (#26968) (Allen Shen)
- 434758f0738d0cee949ce531b3afb82dd095f43b fix: Honor channels parameter
in RestSqlFunctionExecutor (#27684) (Joe Abraham)
- c169c153008d9de15f1848a6d80affd8a40e6ead chore(ci): Advance velox
(#27716) (Amit Dutta)
- 9e8ba1c8cc4b98551ec27935be4b112777b9bb62 fix: Populate session fields
when query fails before Session is authenticated (#27752) (Kevin Tang)
- a3516e21602fcd7cf5bae8ba24ea022232069f5e fix(ui): Fix timeline legend
layout with gaps between colored bars (#27731) (Yihong Wang)
- 89ceb1618bd3ba2338c6a7014720e221d4157714 feat(native): Add
native_min_shuffle_compression_page_size_bytes session property (#27683)
(#27683) (Henry Dikeman)
- 296ee91d3c5bd3b93b898aabca0f29a27ba0878f feat(native-pos):
MaterializedOutput: support replicateNullsAndAny (#27753) (Shrinidhi
Joshi)
- abed99b86b4961672cc569422c30de677377c7a4 chore(deps): Upgrade
html-webpack-plugin from 5.6.0 to 5.6.6 (#27737) (Sayari Mukherjee)
- d93dc465a9859fadfaa7086d7fac3429edd1aafe fix(deps): Bump
presto-spark-classloader-spark3 parent version to 0.298-SNAPSHOT
(#27747) (Kevin Tang)
- d94276a3e66c25a6b67f243fcb148968b8004b98 feat(connector): Add support
for `execute` procedure in JDBC connectors (#27282) (Pratyaksh Sharma)
- d7d029abfb2e92c8d0f549863d846d2f38ba17cd chore(deps): Upgrade
vis-timeline from 7.7.3 to 8.5.0 (#27721) (Sayari Mukherjee)
- c0f9cd4cb13b8d12ab40d67b8d97516776102cf6 fix(security): Upgrade
fast-uri from 3.0.6 to 3.1.2 in /presto-ui/src to resolve CVE-2026-6321
(#27736) (nishithakbhaskaran)
- c2f09fb5eebdbbb5bef5ac6fc9c38d3ac688bc67 chore(deps): Upgrade
@babel/core to version 7.29.0 (#27741) (Sayari Mukherjee)
- 1dcec7b47b2d29d931a7d2e38d391bc10b9c68ed chore: Bump
com.tdunning:t-digest from 3.2 to 3.3 (#27718) (sumi-mathew)
- 4443e880bf4e7317544cb036370f84fd3b9aaf70 chore(deps): Bump
org.postgresql:postgresql from 42.7.9 to 42.7.11 (#27722)
(dependabot[bot])
- cecd415e63bc8810a8833b4155fe754451c3ce36 fix:
UnsupportedOperationException for UnionNode in AddExchanges fixed
parallelism path (#27714) (feilong-liu)
- 09d70672cfab613f4ed12345e517738c6b811e54 chore(deps): Upgrade jQuery
from 3.7.1 to 4.0.0 (#27720) (Sayari Mukherjee)
- 30776976bfc9d67c1807ed68378f0a00f30da5d2 chore(deps): Upgrade
babel-loader:9.1.3 to 10.1.1 (#27656) (Sayari Mukherjee)
- b8d7610a7242d0c9f808e82894349ad15da2aed4 feat(native-pos):
MaterializeExchange: [1/n] Add MaterializedExchange operators and plan
wiring support (#27573) (#27573) (Shrinidhi Joshi)
- d3ad72cea746a0e6de1c3d86cab5a7b5e4b947d8 feat: MetadataExtractor:
prefetch source table for CREATE VECTOR INDEX (#27713) (XiaoDu)
- d9be702264414185ec27deb24571195698185f22 feat: Support extending
verifier QueryRewriter (#27703) (#27703) (Gary Helmling)
- 669219f6c9ad01f371a44d254523f49382346878 feat(scheduler): Allow
configured resource groups to bypass cluster-overload throttling
(#27642) (Arjun Gupta)
- 140e5093ae8cf6f096b29ea5def5b1356a844106 chore(deps): Bump
http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to resolve
CVE-2025-32996 (#27715) (nishithakbhaskaran)
- 1e1cc916868eb8bae0efc302c0a2a0e0d10b642e fix(analyzer): Skip unmapped
derived columns in MV partition filtering (#27706) (Chandrakant
Vankayalapati)
- e743edc134fca7e6e0013f717a28f7f0f1775973 docs(security): Improve
authentication docs (#27692) (Pratyaksh Sharma)
- be18151a766a01e0deb227e1830afbf08d9c3ef5 chore(deps): Bump
commons-pool2 from 2.11.1 to 2.13.1 (#27648) (sumi-mathew)
- a78a231330f9baf756bfcb5691042caeab4ebf9c fix(native): Fix BIND
expression loss for captured lambdas in NativeExpressionOptimizer
(#27593) (Pramod Satya)
- 8d334451742d620e3221993756ac9c665093a5ca fix: Integer overflow in
range filter boundary conversion (#27600) (#27600) (peterenescu)
- 09de245ab5b7a1a9d010170cc63605d3592b5201 feat(planner): Support scalar
functions in MV query rewriting (#27549) (#27549) (Chandrakant
Vankayalapati)
- ad7acf8059a873c4c5913863941e384b81e6f8d6 fix: Change error tagging
from internal error to user error (#27686) (Konjac Huang)
- bcb7b22d4ec9aef4c205c02efe3af499460645e8 chore(deps): Bump css-loader
from 7.1.2 to 7.1.4 in /presto-ui/src (#27667) (nishithakbhaskaran)
- 3aefe857faeb551d84e42e3c60d7581ddb8ac84d feat(optimizer): Add session
properties for RPC streaming mode and batch dispatch size (#27700)
(feilong-liu)
- 3c081e145ba23012e87199ce3a1552088f2424de refactor(native): Clean up
the saturate cast of count metric (#27676) (Rui Mo)
- 3334738474b994fadc76139b3066af1e45081b57 feat(plugin-iceberg): Add
changes for passing iceberg V3 initialDefaultValue while read (#27659)
(Reetika Agrawal)
- b3aa1274d232cfdc2729cc240e6676096355b11d perf(optimizer): Clean up
prefilter distinct limit (#27678) (Sreeni Viswanadha)
- decea18211557286b50e2259a11256c0f0146e2f fix: Take 'finishingTime' and
'planningTime' out of 'executionTime' (#27691) (#27691) (Sergey Pershin)
- 2b74be7c29cfc2b69053aad10ae03f6d527e9a7d chore(deps): Bump ts-jest
from 29.4.6 to 29.4.9 in /presto-ui/src (#27660) (nishithakbhaskaran)
- 46167847b821e2b7a3b1d1ce4c723d1b0d4b5863 feat(connector): Add caching
for Lance connector (#27325) (Jianjian Xie)
- 0ea6b49d7d237633583cb434dfff0022f273a20b fix: Replace Optional.or with
ternary for Java 8 compatibility (#27693) (Kevin Tang)
- 298a125e2614b6056cfeaf04f653427487f11a3f chore(deps): Upgrade
styled-components version to 6.4.1 (#27675) (bibith4)
- 2bc8fc58a8c008f2a906f3fd3204ec738fb12b39 feat(native): Upgrade the
nlohman json dependency to 3.12.0 (#27161) (Christian Zentgraf)
- 87f92f669805c16d8e44a8962dd372dcb87e72ad perf(optimizer): Remove
partition key restriction from ROW IN to disjunction rewrite (#27680)
(Sreeni Viswanadha)
- 240d1426878f196224228e49b59ff1e272e7d337 docs(security): Add more
details in docs (#27681) (Pratyaksh Sharma)
- 8319359fd5be8d23955359ff16dfd40b3c6d6a9d docs: Fix phrasing in
connector/lance.rst (#27640) (Steve Burnett)
- c2abc247f313c7d121e2da8f26d23d057681a5de feat: Add authorizedPrincipal
to AuthorizedIdentity for gateway identity propagation (#27639) (#27639)
(Chandrakant Vankayalapati)
- e4a3b89366187f0ed00584f8e2e1f37a87fe71ad revert: Add metastore cache
invalidation in iceberg (#27200) (Pratyaksh Sharma)
- 1604b1e62ea0e6d253d9be303b4c0cba9a89ddae fix: Union of TVF leaf
operators results in multiple split sources (#26980) (mohsaka)
- 9d6e9bafb84f719489b2c7a22ccf309cf690b7b2 feat(plugin-iceberg): Add
zorder to rewrite_data_files (#27561) (mohsaka)
- 579fbea8171c7595cc1175c493e569735dde8153 feat(optimizer): Add TopN
late materialization using $row_id (#27641) (Sreeni Viswanadha)
- cdc69ccba481e0f1f5621c63dc93351c3abb5c51 feat: Add TLS/SSL
configuration support for Oracle connector (#27671) (Dilli Babu Godari)
- e024dd71949156876c6b7e28cbbd437af82731c8 feat: Add Oracle i18n
character set support (#27670) (Dilli Babu Godari)
- 21c9bc66509630fbbad2583489b8fd448b6f370c feat: Add configurable JDBC
fetch size support (#27669) (Dilli Babu Godari)
- 03eed7a800d298ab9505ad04e0b6e80531ec6310 fix: Fix failure when
inserting into Iceberg tables partitioned by day(timestamp with time
zone) (#27645) (Nivin C S)
- c7da91bd852cbad929c5af9a317bbeed0848c8ce fix(server): Fix
FutureStateChange listener leak in
HttpRemoteTaskWithEventLoop.whenSplitQueueHasSpace() (#27673)
(shelton408)
- fc6e087f31a4a72c6deee0efdd1c0ff7f5a92e88 feat(plugin-iceberg): Support
creating branches on empty tables (#27270) (Dong Wang)
- 515241636649b768a06793b9704d6fd3f5f3e003 test: Extend Iceberg schema
evolution tests to cover PARQUET format (#27174) (Dong Wang)
- 2f81bd37b6f989ee61417c9b90d2c31f5b42eb66 feat: Add PUFFIN file format
enum to FileFormat wrapper [presto][iceberg] (#27616) (#27616) (Apurva
Kumar)
- 60d7de71f1ec54dffb09d82ed21efa41ee5c3ca8 chore(deps): Upgrade
testing-library/user-event version to 14.6.1 (#27623) (bibith4)
- f318aaa25583b1450cfde087e0549d648ae5c951 fix(planner): Propagate
streamPropertiesFromUniqueColumn through TopN (#27664) (Sreeni
Viswanadha)
- 5bda1283378de2869ff5d7de3fa45346361fb4d9 chore(ci): Advance Velox
(#27650) (Christian Zentgraf)
- 18388dc797444722d9e83215c707851e0d7df208 feat(plugin-iceberg): Add
rewrite-all option and default value for min-input-files (#27633)
(mohsaka)
- fd2a22b4fc5da6dfc7b1465c5ebda56eb254a1dc docs: Add missing
authentication and advanced configs for Druid connector (#27611)
(Saurabh Mahawar)
- d11ffdbfd04aac7384a45ea5a099a4eb6c624120 chore(deps): Upgrade
react-data-table-component version to 7.7.1 (#27647) (bibith4)
- 39f71665bcdb2483b91ec490aeb25ce0831fcc95 chore(deps): Upgrade
testing-library/jest-dom version to 6.9.1 (#27624) (bibith4)
- d06018be9004b5d5c9991c2df5bc901534667f0d feat: Add split_part_reverse
as a global Presto SQL inline function (#27480) (#27480)
(join-theory-de)
- 5e21de8354972c88b45b2df56b3ce20829bc5619 chore(deps): Upgrade
testing-library/react version to 16.3.2 (#27625) (bibith4)
- e2bca0766913e60ffd537b72e7ea4a4dba532748 fix(security): Upgrade
async-http-client to 3.0.9 to address CVE-2026-40490 (#27613) (Shahim
Sharafudeen)
- 995dbad434ef0ee2faa4edd1710716dfe32f55ec feat(optimizer): Support
incremental refresh of materialized views (#26959) (Timothy Meehan)
- 993cef3ee9a321a8a507314d03091ced8ac0ab83 feat(connector): Add filter
pushdown for Lance connector (#27430) (jja725)
- 82889cd61264e0013b6a0113f3d82ca8ab3193e1 fix: Avoid int64 overflow in
PlanNodeStatsSummarizer (#27632) (#27632) (Sergey Pershin)
- b2569e841d958ee92950c80818c3408308cc3c57 chore(deps): Bump
org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 in /presto-tests
(#27606) (dependabot[bot])
- dae4091c7105d1370544bfcb11baf8f8a79256bc fix(plugin-iceberg): Reduce
max history queries to avoid OOM in CI test (#27519) (Dong Wang)
- 91e9132db5abcbfb0d7ab2232602784c5f02d5b4 feat(plugin-native-sidecar):
Add operational metrics to sidecar (#27595) (Pratik Joseph Dabre)
- 4d8da3fa5ec064b13fd658f1fb6802b687ded6de feat(planner): Support
CUBE/ROLLUP/GROUPING SETS column rewriting in MV optimizer (#27538)
(#27538) (Chandrakant Vankayalapati)
- 6f8ecdbd848ee092dc34a162a5073955c840e703 chore(deps): Bump
org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4 (#27583)
(Nandakumar Balagopal)
- 09e522f66c0e716d9b150d708a5fa8de4f762554 fix(security): Upgrade gcs
version to 2.2.28 (#25424) (Shahim Sharafudeen)
- 668ae1086c90f15581549519e49170a5ca864e63 feat: Bump Iceberg
[presto][iceberg] dependency from 1.10.0 to 1.10.1 (#27614) (#27614)
(Apurva Kumar)
- ced25b8965b98cf4a1d660ce7108f5bb39539302 feat(optimizer): Add
distributed execution for RPCNode via rpc_function_parallelism session
property (#27603) (zhichenxu-meta)
- bb615b3890dd3fa61b1d8f3bbafbcc8e71e827a8 fix(plugin-delta): Creating
Delta table to unaccesible location makes the metastore inconsistent
(#27129) (Miguel Blanco Godón)
- dce6efdab414b583632dea0fc20543ae3d8ccd3e fix(plugin-native-sidecar):
Pass session start time as a header in native expression optimizer
(#27545) (Pratik Joseph Dabre)
- 469a6965155e4cf25884c311d4f94d458c034981 feat(native): Add index
source plan conversion with connector extensibility (#27596) (#27596)
(Zac)
- 94a11f78597d12e6246e60ed7c383f597ad90eff chore(deps): Bump
org.codehaus.plexus:plexus-utils from 3.6.0 to 3.6.1 (#27471) (Sayari
Mukherjee)
- 231fd12dcc7025d5724b0cd1ffa25f5a7ce7cdd1 chore(deps): Bump
org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2 (#27574)
(dependabot[bot])
- a8355398f9ad980e2f5ecde9abfac99e18261a76 chore(connector): Upgrade
clickhouse-jdbc to 0.3.2 (#26990) (sumi-mathew)
- 90910c7fe8f6be850a83aa031d5a93559958116b misc(planner): Move
RpcFunctionOptimizer after RewriteRowExpressions (#27594) (feilong-liu)
- 86f564b900c8277a463d5ec77dae08c06401f08d fix: Fix race condition in
pruneFinishedQueryInfo causing task memory leak (#27597) (Swapnil)
- ef8eea0ac3bbba102a98ce7a52992d4d48812124 fix(plugin-native-sidecar):
Add additional CAST for mismatching array constructor args (#27556)
(Pratik Joseph Dabre)
- 47f6dfa53bd3da3ef536aefe45b34263849df9bb chore(deps): Bump
follow-redirects from 1.15.9 to 1.16.0 in /presto-ui/src (#27587)
(dependabot[bot])
- b4a645ad4413900a6f676b72405b418ae96310b8 feat(native): Distributed
Procedure Support (#26375) (Dong Wang)
- 177d6ff7f57064e68b02993611bc4240942d1f4c feat(native): Add
IndexSourceNode planner support and split scheduling (#27296) (#27296)
(Zac)
- 7b2e370a1e61304fc5da17b95186f729a6cd0f0b feat: Reject duplicate
columns in CREATE VECTOR INDEX (#27588) (Ke Wang)
- b2dfddc52733ce66aa7fec66a06d6c8c8d968bec feat: Validate embedding
column type in CREATE VECTOR INDEX (#27589) (Ke Wang)
- 3c36e504600c80364a59f6cb2bdaae004eb1e9b9 refactor(plugin-iceberg):
Defer the start of transaction for procedure (#27586) (Dong Wang)
- 4b775d743ef52b107d04e40b733e244827c709b9 chore(ci): Advance Velox
(#27503) (Christian Zentgraf)
- a82063a0985dc1b54777c6e6354cd5999f4b396d fix(optimizer): Fix cascading
projection pass-through in PushProjectionThroughCrossJoin (#27568)
(Sreeni Viswanadha)
- a2dc569e6cc6b04c4a1012ea5e9fc648b36c0110 fix(plugin-druid): Add
version for lz4-java to fix maven deployment (#27584) (Li)
- 0d7cd9501a0ab75df5dd2b6aac848c7978f0ad75 fix(native): Fix TRY
expression handling in NativeExpressionOptimizer (#27122) (Pramod Satya)
- 5d26fb35bc7f78419156cda64a6f238e92099016 misc: Fix code style issues,
copy-paste bug, and UB in presto-native-execution (#27572) (#27572)
(Amit Dutta)
- 31f7f3c5b6165c118c58db88d12aae9d54b34d83 fix(native): Handle NULL ROWs
when returning from native expression optimizer (#27528) (Pratik Joseph
Dabre)
- 459286a0f0c4ff972e876d5c3d45327fb8499444 fix(native): Fix worker
shutdown sequence (#27566) (#27566) (Sergey Pershin)
- 5bd6ca88673ba2c6b44ec3370d0fd464ab923270 fix: Remove duplicate
checkQueryIntegrity call in CreateMaterializedViewTask (#27567) (Kevin
Tang)
- 913a4285a2817555b70e84f11d82fdb33484d9a7 feat(optimizer): Rewrite
bucketed semi-join to join (#27510) (Sreeni Viswanadha)
- 09400b98c7a46925210ad09ade111536422ed1a6 feat: Add pmod (positive
modulo) scalar function (#27543) (#27543) (Natasha Sehgal)
- dd6606c9d786099e0fb58b232e19654adad25a9c feat(plugin-iceberg): Add
min-input-files, min-file-size-bytes, max-file-size-bytes options to
rewrite_data_files procedure (#27515) (mohsaka)
- 23e35ab6993d62e97f9f180802ac7c55df627ee8 docs: Fix formatting of code
blocks in develop/table-functions.rst (#27502) (Steve Burnett)
- a4f8f58ef4d84c1847b52b30a2643257f0951bca fix(plugin-native-sidecar):
Fix flattened AND/OR expressions by the native expression optimizer
(#27517) (Pratik Joseph Dabre)
- 4c72d5cc1ed99ab1acd13ae92f94d31ef2336637 test: Add e2e tests for
binary functions (#26970) (Allen Shen)
- 4b6d9c9e9f88df699308549064615fada467cca5 feat(native): Pass storage
parameters to HiveInsertTableHandle in write path (#27525) (#27525)
(Henry Dikeman)
- b25bb12435d53d6aaa1b3460c86db908e8983fc3 feat(native): Add Java
planner integration, protocol, and dynamic RPC function detection
(#27555) (abhinavmuk04)
- 62d690b279c0899bc5105f5412ef74a240b96c2e fix(build): Use explicit
optional constructor (#27513) (Christian Zentgraf)
- cc294de45fb8deea40dabf1bbe85321a7dedfdd4 fix(native): Do not discard
all tasks in maybeStartNextQueuedTask() (#27548) (#27548) (Sergey
Pershin)
- 151c3373b1998f0e006a0dec439142d7733c36bc perf(analyzer): Index
RelationType.resolveFields() for O(1) field lookup (#27553)
(feilong-liu)
- 05f8e4404f117c66c1eebd40d1be364ddfe702c3 perf(planner): Optimize query
planning for wide-column projections (#27547) (feilong-liu)
- a3a1d3cdc1d556985f314de0af35a30e1adad0d3 test: Add E2E tests for geo
functions (#26969) (jkhaliqi)
- 6af43bb021706dbaabb55dbff151cf22aaac6bbb feat(analyzer): Add session
property to gate CTAS IF NOT EXISTS query analysis (#27504) (Kevin Tang)
- d488205f1fdedddee6a537e25b704799d3b5e5b8 chore: Update error message
in Iceberg table row deletions (#27495) (nishithakbhaskaran)
- ed41ee81e2377d1944f7ae47f1512f7833549730 feat(optimizer): Rewrite ROW
constructor IN to disjunction for partition pruning (#27500) (Sreeni
Viswanadha)
- b9b15ae4a8b639f4f926695c7e0694d8cf2010de fix(planner): Use
LinkedHashMap in optimizer rules to fix type mismatch (#27493) (Sreeni
Viswanadha)
- dd82b57d2da28e7297b4ef99534da7a74eff6d4f feat(optimizer): Rewrite
map_from_entries(ARRAY[ROW(...)]) to MAP(ARRAY[], ARRAY[]) (#27491)
(Sreeni Viswanadha)
- 65cf3e94214284946710cc21fc7330c0c56e41db chore(deps): Upgrade
testing-library/dom version to 10.4.1 (#27520) (bibith4)
- 40c1c4e2101ec359770f45c5c15f183add900a5a docs(native): Add missing
native session properties (#27506) (Saurabh Mahawar)
- 0b313de489c0ed1b19a1543bab9f23cdb027db2c feat(plugin-iceberg): Add min
max stats for varchar/char column and display as low and high values
(#27357) (Prashant Sharma)
- 1968770e91a1206aaa176148f60b11f7e8178364 test(native): Add E2E tests
for array functions (#26937) (jkhaliqi)
- a92fa12dd45173cf54dee0089887810a9f585fba feat: Prism <> Iceberg
[prism] Support SQL-standard time travel syntax (FOR TIMESTAMP AS OF)
(#27421) (#27421) (Apurva Kumar)
- 7f76c833f5551a8fa4e9e86090c5f3fa135da829 docs(optimizer): Add more
details to the materialized view documentation (#27465) (bibith4)
- 175143b4bf9d0fe5e8246cedbf38614d1c3e113a chore(deps): Upgrade
commons-text version to 1.15.0 (#27494) (bibith4)
- 29ed629bf60c4a508a4a1d1a5c3e730a53491f05 fix: Use namespaced GTest
targets in arrow_flight tests (#27137) (jkhaliqi)
- 291f2048f3bf3b5afe275f0589d547eac3f687a9 feat: Add exchange transport
type (HTTP/ANY) to plan fragments (#27355) (Daniel Bauer)
- ee0eec7b5b12aef7feb1ea6d6dd7411387003caa feat(planner): Support GROUP
BY and ORDER BY ordinals in MV query rewriting (#27422) (#27422)
(Chandrakant Vankayalapati)
- 7655f36483b5074d0394bc1a34ae48c25612b872 feat: Add read support for
row lineage columns in Iceberg connector (#27240) (Joe Abraham)
- 2af1e04aad8d28b7b806f44905abeb7812cc3354 feat: Remove index table
existence check (#27509) (#27509) (Ke Wang)
- 74a3458ab835a8af25aa40f458ac16c0d598a94d feat: Add observability for
query state transitions in Presto (#26418) (#26418) (abhinavmuk04)
- fc3669795814668bd1d90da27bc72ed51ee81eb8 misc: Show stage completion
state in query plan (#27388) (#27388) (feilong-liu)
- 232429917efbbbf3c7d30a3c62f7996fc5b3126f feat(planner): Extract remote
functions from $internal$try lambda in PlanRemoteProjections (#27451)
(feilong-liu)
- 28bb9006e70e7bdfaa1141ee7797e208934a6491 feat: Add number of total
driver threads (#27501) (#27501) (XiaoDu)
- 926e2cdad1cb715542272f634458c9524dff32ea fix: Revised the principal
field retrieval (#27014) (Yihong Wang)
- cc4ec4a173679cfbd8e36893907435e88b5e0bd0 fix: Allow view querying with
Mongo connector (#26995) (Auden Woolfson)
- 52ad58aae1ec9744161af78416b0274fd90de2bb feat(connector): Add Azure
Blob Storage and ADLS Gen2 support (#25107) (Deepak Mehra)
- ec92f2a3ad06bca5375e28b74e1b35eea78be658 chore(deps): Bump lodash from
4.17.23 to 4.18.1 in /presto-ui/src (#27497) (dependabot[bot])
- c1603bd2a9b5e37617d96597ba11a7e22007de79 feat: Add
MergeSumsToVectorSum optimizer rule (#27335) (#27335) (abhinavmuk04)
- cd6ee833414c1bc9e9c910637bcd3eaa7e1e53b0 test(native): Enable cuDF in
native tests (#27369) (Pramod Satya)
- aae3971105e4fa3680e37cf3f392fb04b0b071c2 chore(deps): Bump lodash-es
from 4.17.23 to 4.18.1 in /presto-ui/src (#27496) (dependabot[bot])
- 27edc1b7354bcf762025fdfa30465706285260ad docs: Add missing doc for
ldap.cache-ttl (#27477) (Saurabh Mahawar)
- b051f496dfbd697f4e0cf5c51fdac10c53976531 misc: Use folly
FunctionScheduler from folly/executors (#27482) (Amit Dutta)

## Release Notes
```
== NO RELEASE NOTE ==
```

## Summary by Sourcery

Documentation:
- Document the 0.298 Presto release, including its features, fixes, and
other notable changes in a new release notes page.

---------

Co-authored-by: Steve Burnett <burnett@pobox.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: Zac Blanco <zachary.blanco@bytedance.com>
Co-authored-by: Timothy Meehan <tim@timdmeehan.com>
prestodb-ci added a commit that referenced this pull request Jun 12, 2026
# Missing Release Notes
## Apurva Kumar
- [x] https://github.com/prestodb/presto/pull/27616 feat: Add PUFFIN
file format enum to FileFormat wrapper [presto][iceberg] (#27616)
(Merged by: Han Yan)
- [x] https://github.com/prestodb/presto/pull/27614 feat: Bump Iceberg
[presto][iceberg] dependency from 1.10.0 to 1.10.1 (#27614) (Merged by:
Dong Wang)
- [x] https://github.com/prestodb/presto/pull/27421 feat: Prism <>
Iceberg [prism] Support SQL-standard time travel syntax (FOR TIMESTAMP
AS OF) (#27421) (Merged by: Kevin Tang)

## Arjun Gupta
- [x] https://github.com/prestodb/presto/pull/27642 feat(scheduler):
Allow configured resource groups to bypass cluster-overload throttling
(#27642) (Merged by: Arjun Gupta)

## Chandrakant Vankayalapati
- [x] https://github.com/prestodb/presto/pull/27706 fix(analyzer): Skip
unmapped derived columns in MV partition filtering (Merged by:
Chandrakant Vankayalapati)

## Deepak Mehra
- [x] https://github.com/prestodb/presto/pull/25107 feat(connector): Add
Azure Blob Storage and ADLS Gen2 support (Merged by: Jalpreet Singh
Nanda)

## Dilli Babu Godari
- [x] https://github.com/prestodb/presto/pull/26260
feat(plugin-prometheus): Enable case-sensitive identifier support for
Prometheus connector (Merged by: Dilli Babu Godari)
- [x] https://github.com/prestodb/presto/pull/27671 feat: Add TLS/SSL
configuration support for Oracle connector (Merged by: Dilli Babu
Godari)
- [x] https://github.com/prestodb/presto/pull/27670 feat: Add Oracle
i18n character set support (Merged by: Dilli Babu Godari)
- [x] https://github.com/prestodb/presto/pull/27669 feat: Add
configurable JDBC fetch size support (Merged by: Dilli Babu Godari)

## Gary Helmling
- [x] https://github.com/prestodb/presto/pull/27703 feat: Support
extending verifier QueryRewriter (#27703) (Merged by: Jianjian Xie)

## Henry Dikeman
- [x] https://github.com/prestodb/presto/pull/27683 feat(native): Add
native_min_shuffle_compression_page_size_bytes session property (#27683)
(Merged by: Henry Dikeman)
- [x] https://github.com/prestodb/presto/pull/27525 feat(native): Pass
storage parameters to HiveInsertTableHandle in write path (#27525)
(Merged by: Aditi Pandit)

## Kevin Tang
- [x] https://github.com/prestodb/presto/pull/27697 misc(native): Target
Java 8 for presto-on-spark compatibility (#27697) (Merged by: Kevin
Tang)
- [x] https://github.com/prestodb/presto/pull/27696 misc(native-pos):
Extract AbstractNativeProcess from NativeExecutionProcess (#27696)
(Merged by: Kevin Tang)

## Nivin C S
- [x] https://github.com/prestodb/presto/pull/27828 fix(security):
Upgrade redshift-jdbc42 to 2.2.7 to address CVE-2026-8178 (Merged by:
Jalpreet Singh Nanda)
- [x] https://github.com/prestodb/presto/pull/25418
feat(plugin-iceberg): Add support for ALTER COLUMN SET DATA TYPE in the
Iceberg connector (Merged by: Nivin C S)

## Rebecca Schlussel
- [x] https://github.com/prestodb/presto/pull/27830 chore(analyzer):
Remove warn-on-common-nan-patterns config and NaN warning behavior
(Merged by: Rebecca Schlussel)

## Shrinidhi Joshi
- [x] https://github.com/prestodb/presto/pull/27873
refactor(native-pos): Add State enum and lifecycle state machine to
MaterializedOutputBuffer (#27873) (Merged by: Xiaoxuan)
- [x] https://github.com/prestodb/presto/pull/27833 fix(native-pos): Fix
MaterializedOutput correctness and crash bugs in close/finish lifecycle
(Merged by: Shrinidhi Joshi)

## Sreeni Viswanadha
- [x] https://github.com/prestodb/presto/pull/27708 feat(optimizer): Add
per-column predicates for ROW IN/NOT IN (Merged by: Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27712 feat(optimizer):
Push HAVING filter through MAX/MIN/ARBITRARY aggregations (Merged by:
Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27680 perf(optimizer):
Remove partition key restriction from ROW IN to disjunction rewrite
(Merged by: feilong-liu)
- [x] https://github.com/prestodb/presto/pull/27641 feat(optimizer): Add
TopN late materialization using $row_id (Merged by: Sreeni Viswanadha)
- [x] https://github.com/prestodb/presto/pull/27664 fix(planner):
Propagate streamPropertiesFromUniqueColumn through TopN (Merged by:
Sreeni Viswanadha)

## feilong-liu
- [x] https://github.com/prestodb/presto/pull/27773 fix(planner): Fix
ConstantExpression type mismatch in PropertyDerivations.visitProject
(Merged by: feilong-liu)

## join-theory-de
- [x] https://github.com/prestodb/presto/pull/27480 feat: Add
split_part_reverse as a global Presto SQL inline function (#27480)
(Merged by: Sreeni Viswanadha)

## peterenescu
- [x] https://github.com/prestodb/presto/pull/27600 fix: Integer
overflow in range filter boundary conversion (#27600) (Merged by: Amit
Dutta)

## shelton408
- [x] https://github.com/prestodb/presto/pull/27673 fix(server): Fix
FutureStateChange listener leak in
HttpRemoteTaskWithEventLoop.whenSplitQueueHasSpace() (Merged by:
shelton408)

## sumi-mathew
- [x] https://github.com/prestodb/presto/pull/27865 fix(security):
Upgrade opentelemetry-api to 1.62.0 to address CVE-2026-45292 (Merged
by: nishithakbhaskaran)

## zhichenxu-meta
- [x] https://github.com/prestodb/presto/pull/27603 feat(optimizer): Add
distributed execution for RPCNode via rpc_function_parallelism session
property (Merged by: feilong-liu)

# Extracted Release Notes
- #25424 (Author: Shahim Sharafudeen): fix(security): Upgrade gcs
version to 2.2.28
- Upgrade google-oauth-client version to 1.34.1 to address
`CVE-2020-7692 <https://github.com/advisories/GHSA-f263-c949-w85g>`_ and
`CVE-2021-22573 <https://github.com/advisories/GHSA-hw42-3568-wj87>`_.
- #26195 (Author: Gary Helmling): fix: Allow DELETE queries to run on
Presto on Spark
  - Fix a gap in query commit for DELETE queries when running on Spark.
- #26369 (Author: Bryan Cutler): feat: Adding Apache Arrow FlightShim
for connector federation in C++ workers
  - Adding presto-flight-shim server module for connector federation.
- #26833 (Author: Yabin Ma): chore(analyzer)!: Change
fieldNamesInJsonCastEnabled default value to true
- Update the default behavior of ``field_names_in_json_cast_enabled``
from false to true. When ``field_names_in_json_cast_enabled = true``,
JSON fields are assigned to ROW fields by matching field names
regardless of their order in the JSON object. Queries that rely on JSON
field order when casting to ROW may return different results after
upgrading. If your workload depends on the previous positional behavior,
restore it by setting: ``SET SESSION field_names_in_json_cast_enabled =
false;``.
- #26959 (Author: Timothy Meehan): feat(optimizer): Support incremental
refresh of materialized views
  - Add incremental refresh for materialized views.
- Add incremental refresh for materialized views in the Iceberg
connector.
- #26995 (Author: Auden Woolfson): fix: Allow view querying with Mongo
connector
  - Add view querying capabilities in the Mongo connector.
- #27002 (Author: Sayari Mukherjee): feat(client): Add connection
validation feature to enhance connection reliability
- Add connection validation feature to enhance connection reliability.
This can be enabled with the ``validateConnection`` connection property
to execute a validation query immediately after establishing the
connection.
- #27085 (Author: Dong Wang): feat(plugin-iceberg): Push down
min/max/count based on file stats
- Add support for ``min/max/count`` aggregation push down based on file
stats. This can be toggled with the ``aggregate_push_down_enabled``
session property or the ``iceberg.aggregate-push-down-enabled``
configuration property.
- #27129 (Author: Miguel Blanco Godón): fix(plugin-delta): Creating
Delta table to unaccesible location makes the metastore inconsistent
- Fix a bug that made the metastore inconsistent if created a Delta Lake
table to an inaccessible location.
- #27200 (Author: Pratyaksh Sharma): revert: Add metastore cache
invalidation in iceberg
  - Add metastore cache invalidation procedure for Iceberg connector.
- #27240 (Author: Joe Abraham): feat: Add read support for row lineage
columns in Iceberg connector
- Add read support for Iceberg V3 row lineage hidden columns `_row_id`
and `_last_updated_sequence_number`.
- #27282 (Author: Pratyaksh Sharma): feat(connector): Add support for
`execute` procedure in JDBC connectors
  - Add support for `execute` procedure in JDBC connectors.
- #27293 (Author: Sayari Mukherjee): chore(deps): Update jackson version
to 2.18.6
- Upgrade jackson dependency from 2.15.4 to version 2.18.6 to address
`GHSA-72hv-8253-57qq
<https://github.com/advisories/GHSA-72hv-8253-57qq>`_.
- #27294 (Author: Shahim Sharafudeen): chore(deps): Bump jetty from
12.0.29 to 12.0.34
- Upgrade jetty dependency from 0.27 to version 2.0.2 to address
`CVE-2025-11143 <https://github.com/advisories/GHSA-wjpw-4j6x-6rwh>` and
`CVE-2026-1605 <https://github.com/advisories/GHSA-xxh7-fcf3-rj7f>`_.
- #27325 (Author: Jianjian Xie): feat(connector): Add caching for Lance
connector
- Add configurable index and metadata cache sizes via
lance.index-cache-size and lance.metadata-cache-size.
- Add version-aware dataset caching with snapshot isolation for
consistent query reads.
- #27357 (Author: Prashant Sharma): feat(plugin-iceberg): Add min max
stats for varchar/char column and display as low and high values
  - Add low and high values for varchar/char columns of Iceberg tables.
- #27422 (Author: Chandrakant Vankayalapati): feat(planner): Support
GROUP BY and ORDER BY ordinals in MV query rewriting (#27422)
- Add support for ``GROUP BY`` and ``ORDER BY`` ordinal references in
materialized view query rewriting. Previously, queries like ``SELECT a,
SUM(b) FROM t GROUP BY 1`` would silently skip materialized view
optimization.
- #27430 (Author: Jianjian Xie): feat(connector): Add filter pushdown
for Lance connector
- Add SQL filter pushdown to reduce data read from disk for selective
queries. Supports equality, comparisons, IN lists, IS NULL, and range
predicates on Boolean, Integer, Bigint, Real, Double, Varchar, Date, and
Timestamp types.
- #27483 (Author: Miguel Blanco Godón): feat(plugin-delta): Support
reading tables with column mapping enabled
- Add support for reading Delta Lake tables with column mapping enabled.
- #27486 (Author: Jamille Shao-Ni): feat(protocol): Update annotations
for consistent Thrift serialization support to all TaskResource
endpoints
- Add support for Thrift serialization (`application/x-thrift-binary`,
`application/x-thrift-compact`, `application/x-thrift-fb-compact`) to
all TaskResource endpoints for consistent internal communication
protocol.
- Improve efficiency of coordinator-to-worker communication with 20-40%
smaller payload sizes and 2-3x faster serialization compared to JSON.
- #27491 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite
map_from_entries(ARRAY[ROW(...)]) to MAP(ARRAY[], ARRAY[])
- Optimize `map_from_entries(ARRAY[ROW(...), ...])` by rewriting to
`MAP(ARRAY[keys], ARRAY[values])` at plan time, avoiding intermediate
ROW construction.
- #27493 (Author: Sreeni Viswanadha): fix(planner): Use LinkedHashMap in
optimizer rules to fix type mismatch
- Fix runtime type mismatch crashes in Velox native execution caused by
non-deterministic HashMap iteration order in PreAggregateBeforeGroupId,
PushPartialAggregationThroughExchange, and
MultipleDistinctAggregationToMarkDistinct optimizer rules. Replace
HashMap with LinkedHashMap to preserve aggregation output variable
ordering.
- #27496 (Author: dependabot[bot]): chore(deps): Bump lodash-es from
4.17.23 to 4.18.1 in /presto-ui/src
- Upgrade lodash-es from 4.17.23 to 4.18.1 to address `CVE-2026-4800
<https://nvd.nist.gov/vuln/detail/CVE-2026-4800>`_. This dependency is
used for local development only and does not affect production runtime.
- #27497 (Author: dependabot[bot]): chore(deps): Bump lodash from
4.17.23 to 4.18.1 in /presto-ui/src
- Upgrade lodash from 4.17.23 to 4.18.1 to address multiple security
vulnerabilities: - `CVE-2026-4800
<https://nvd.nist.gov/vuln/detail/CVE-2026-4800>`_. This dependency is
used for local development only and does not affect production runtime.
- #27500 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite ROW
constructor IN to disjunction for partition pruning
- Add optimizer rule RewriteRowConstructorInToDisjunction that rewrites
ROW IN ROW predicates into OR of AND equality chains when all ROW fields
are partition keys, enabling per-column TupleDomain extraction for
partition pruning. Gated behind session property
rewrite_row_constructor_in_to_disjunction (default disabled).
- #27504 (Author: Kevin Tang): feat(analyzer): Add session property to
gate CTAS IF NOT EXISTS query analysis
- Add session property
:ref:`admin/properties-session:\`\`always_analyze_create_table_query_enabled\`\``
to enable analyzing inner queries on ``CREATE TABLE AS SELECT IF NOT
EXISTS`` statements when the target table already exists.
- #27510 (Author: Sreeni Viswanadha): feat(optimizer): Rewrite bucketed
semi-join to join
- Add optimizer rule RewriteBucketedSemiJoinToJoin that rewrites
semi-joins into left joins with distinct aggregation when both sides are
bucketed on the join key, avoiding data shuffle. Gated behind session
property rewrite_bucketed_semi_join_to_join (default disabled).
- #27538 (Author: Chandrakant Vankayalapati): feat(planner): Support
CUBE/ROLLUP/GROUPING SETS column rewriting in MV optimizer (#27538)
- Fix materialized view query rewriting for ``CUBE``, ``ROLLUP``, and
``GROUPING SETS`` clauses. Column references inside these grouping
elements are now correctly rewritten to materialized view columns.
- #27547 (Author: feilong-liu): perf(planner): Optimize query planning
for wide-column projections
- Improve query planning performance for wide-column projections by
adding fast paths that skip unnecessary processing for variable
references, constants, and identity assignments across multiple
optimizer rules.
- #27549 (Author: Chandrakant Vankayalapati): feat(planner): Support
scalar functions in MV query rewriting (#27549)
- Add support for scalar functions in materialized view query rewriting.
Queries using functions like ``CONCAT``, ``ABS``, ``JSON_EXTRACT``,
``CAST``, ``IF``, ``COALESCE``, and ``CASE`` expressions now correctly
rewrite to scan the materialized view.
- #27553 (Author: feilong-liu): perf(analyzer): Index
RelationType.resolveFields() for O(1) field lookup
- Improve logical planner performance for wide-column queries by
indexing RelationType.resolveFields() for O(1) field lookup instead of
O(N) linear scan.
- #27568 (Author: Sreeni Viswanadha): fix(optimizer): Fix cascading
projection pass-through in PushProjectionThroughCrossJoin
- Fix a bug in PushProjectionThroughCrossJoin optimizer rule where
cascading projections above a cross join could cause validation errors
by dropping pushed variables from intermediate residual projects.
- #27574 (Author: dependabot[bot]): chore(deps): Bump
org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2
- Upgrade org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2 inorder to
address `CVE-2026-35554
<https://github.com/advisories/GHSA-5qcv-4rpc-jp93>`_.
- #27583 (Author: Nandakumar Balagopal): chore(deps): Bump
org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
- Upgrade org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4
inorder to address `CVE-2026-34480
<https://nvd.nist.gov/vuln/detail/CVE-2026-34480>`_.
- #27597 (Author: Swapnil): fix: Fix race condition in
pruneFinishedQueryInfo causing task memory leak
- Fix race condition in pruneFinishedQueryInfo causing task memory leak.
- #27598 (Author: Sreeni Viswanadha): feat(optimizer): Extend
JoinPrefilter to support complex probe-side patterns
- Add new session property
`join_prefilter_build_side_with_complex_probe_side` (default false) to
extend join prefilter optimization to support complex probe-side
patterns including UNION ALL, cross join, unnest, and aggregation.
- #27606 (Author: dependabot[bot]): chore(deps): Bump
org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 in /presto-tests
- Upgrade org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 to resolve
`CVE-2026-0636 <https://nvd.nist.gov/vuln/detail/CVE-2026-0636>`_.
- #27613 (Author: Shahim Sharafudeen): fix(security): Upgrade
async-http-client to 3.0.9 to address CVE-2026-40490
- Upgrade async-http-client to version 3.0.9 to address `CVE-2026-40490
<https://github.com/advisories/GHSA-cmxv-58fp-fm3g>`_.
- #27639 (Author: Chandrakant Vankayalapati): feat: Add
authorizedPrincipal to AuthorizedIdentity for gateway identity
propagation (#27639)
- Add optional authorizedPrincipal to AuthorizedIdentity to support
gateway identity propagation, allowing the session principal to reflect
the original client instead of the gateway.
- #27645 (Author: Nivin C S): fix: Fix failure when inserting into
Iceberg tables partitioned by day(timestamp with time zone)
- Fix failure during INSERT into Iceberg tables partitioned by day()
when using timestamp with time zone columns.
- #27659 (Author: Reetika Agrawal): feat(plugin-iceberg): Add changes
for passing iceberg V3 initialDefaultValue while read
  - Add changes for passing iceberg V3 initialDefaultValue while read.
- #27663 (Author: feilong-liu): feat: Add partition-aware grouped
execution for bucketed tables
- Add `partition_aware_grouped_execution` session property to schedule
each (bucket, partition) as a separate lifespan in grouped execution,
reducing per-lifespan data volumes for bucketed tables. Disabled by
default.
- Add support for partition-aware grouped execution in the Hive
connector, creating per-(bucket, partition) split queues and compound
partition handles.
- #27677 (Author: Timothy Meehan): feat(analyzer): Allow HAVING in
materialized view query rewrite
- Allow HAVING in queries that are transparently rewritten onto a
materialized view.
- #27678 (Author: Sreeni Viswanadha): perf(optimizer): Clean up
prefilter distinct limit
- Improve PrefilterForLimitingAggregation optimizer to exclude partition
keys from the DistinctLimit, improving convergence speed for GROUP BY +
LIMIT queries on partitioned tables.
- Add N <= 1000 limit guard to PrefilterForLimitingAggregation to
restrict the optimization to small limits.
- #27685 (Author: Glerin Pinhero): chore(deps): Upgrading mongodb driver
to mongodb driver sync
  - Upgrade mongo-java-driver to mongodb-driver-sync.
- #27691 (Author: Sergey Pershin): fix: Take 'finishingTime' and
'planningTime' out of 'executionTime' (#27691)
- Fix 'planningTime' and 'finishingTime' are no longer added to the
'executionTime'. 'executionTime' is now a true execution time - how long
it took the query to run the compute. It can be used to measure the
efficiency of the workers w/o added planning time or the time spent on
final steps, like partition registration.
- #27700 (Author: feilong-liu): feat(optimizer): Add session properties
for RPC streaming mode and batch dispatch size
- Add ``rpc_streaming_mode`` session property to control RPC function
execution mode (``PER_ROW`` or ``BATCH``). Default: ``PER_ROW``.
- Add ``rpc_dispatch_batch_size`` session property to control batch size
for RPC dispatch in ``BATCH`` mode. Default: ``128``. A value of ``0``
collects all rows before dispatching.
- Fix RPC options argument parsing to use the last argument instead of
hardcoding index 3.
- #27714 (Author: feilong-liu): fix: UnsupportedOperationException for
UnionNode in AddExchanges fixed parallelism path
- Fix UnsupportedOperationException when using
`remote_function_names_for_fixed_parallelism` with queries containing
UNION ALL below the remote function projection.
- #27715 (Author: nishithakbhaskaran): chore(deps): Bump
http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to resolve
CVE-2025-32996
- Upgrade http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to
resolve `CVE-2025-32996
<https://nvd.nist.gov/vuln/detail/CVE-2025-32996>`_.
- #27722 (Author: dependabot[bot]): chore(deps): Bump
org.postgresql:postgresql from 42.7.9 to 42.7.11
- Upgrade org.postgresql:postgresql from 42.7.9 to 42.7.11 to resolve
`CVE-2026-42198 <https://nvd.nist.gov/vuln/detail/CVE-2026-42198>`_.
- #27728 (Author: Timothy Meehan): fix(plugin-iceberg): Do not check
access control for MV data table
- Fix access control for materialized view storage tables when
``legacy_materialized_views=false``: storage-table access control is
bypassed during MV expansion, while direct queries by name still go
through access control.
- Add ``iceberg.materialized-view-default-storage-schema`` config to
route storage tables into a single schema. Defaults to the materialized
view's own schema; per-MV ``storage_schema`` overrides.
- #27748 (Author: Pratik Joseph Dabre): feat(plugin-native-sidecar): Add
support for adding plugin loaded types in sidecar plugin
  - Add support for adding plugin loaded types in sidecar plugin.
- #27764 (Author: Sreeni Viswanadha): feat(optimizer): Push aggregation
through UNION ALL with disjoint group keys
- Add ``push_aggregation_through_disjoint_union`` session property
(default off) that pushes a ``GROUP BY`` aggregation completely below
``UNION ALL`` when at least one grouping key has constant values that
are pairwise distinct across the union branches, eliminating the final
aggregation.
- #27765 (Author: Sreeni Viswanadha): fix(planner): Prune empty inputs
through local exchanges in SimplifyPlanWithEmptyInput
- Improve ``SimplifyPlanWithEmptyInput`` to prune empty subtrees that
the connector PHYSICAL stage produces under local exchanges.
Multi-source exchanges with mixed empty / non-empty children now drop
the empty branches, eliminating idle no-op operators at runtime for wide
``UNION ALL`` queries where some branches are pruned to empty by
partition / snapshot filtering. Single-source exchanges and write-side
subtrees (``TableWriter`` / ``TableFinish``) are preserved.
- #27766 (Author: Timothy Meehan): feat(plugin-iceberg): Push down
`_last_updated_sequence_number` predicates
- Add predicate push down on ``_last_updated_sequence_number`` for
file-level pruning.
- #27767 (Author: Reetika Agrawal): feat(native): Iceberg V3
initialDefaultValue
  - Add support for iceberg V3 initialDefaultValue.
- #27769 (Author: Shahim Sharafudeen): fix(security): Upgrade Netty to
4.2.13.Final to address CVE-2026-42584
- Upgrade Netty to 4.2.13.Final in response to `CVE-2026-41417
<https://github.com/advisories/GHSA-fghv-69vj-qj49>` , `CVE-2026-44248
<https://github.com/advisories/GHSA-jfg9-48mv-9qgx>` , `CVE-2026-42577
<https://github.com/advisories/GHSA-rwm7-x88c-3g2p>` , `CVE-2026-42578
<https://github.com/advisories/GHSA-45q3-82m4-75jr>` , `CVE-2026-42579
<https://github.com/advisories/GHSA-cm33-6792-r9fm>` , `CVE-2026-42580
<https://github.com/advisories/GHSA-m4cv-j2px-7723>`, `CVE-2026-42581
<https://github.com/advisories/GHSA-xxqh-mfjm-7mv9>` , `CVE-2026-42582
<https://github.com/advisories/GHSA-2c5c-chwr-9hqw>` , `CVE-2026-42583
<https://github.com/advisories/GHSA-mj4r-2hfc-f8p6>` , `CVE-2026-42584
<https://github.com/advisories/GHSA-57rv-r2g8-2cj3>` , `CVE-2026-42585
<https://github.com/advisories/GHSA-38f8-5428-x5cv>` , `CVE-2026-42586
<https://github.com/advisories/GHSA-rgrr-p7gp-5xj7>` and `CVE-2026-42587
<https://github.com/advisories/GHSA-f6hv-jmp6-3vwv>`_.
- #27774 (Author: Timothy Meehan): feat(plugin-iceberg): Bound MV
refresh
- Add ``max_snapshots_per_refresh`` materialized view property to bound
how far each base table advances per ``REFRESH MATERIALIZED VIEW``.
Defaults to ``0`` (unbounded). Requires Iceberg V3 row lineage; V2
tables fall back to unbounded refresh.
- Add ``iceberg.materialized-view-default-max-snapshots-per-refresh``
config property and matching session property to set the default bound.
- #27777 (Author: sumi-mathew): fix(security): Upgrade libthrift to
address CVE-2026-41604
- Upgrade libthrift 0.23.0 in response to `CVE-2026-41604
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-41604>`_.
- #27778 (Author: Chandrakant Vankayalapati): fix(analyzer): Prevent
incorrect materialized view query rewrite when base query lacks GROUP BY
- Fix data correctness bugs in ``MaterializedViewQueryOptimizer`` where
queries without ``GROUP BY`` could be incorrectly rewritten to use
materialized views with ``GROUP BY``, producing fewer rows than
expected. Alias mismatches and scalar expression bypasses allowed
invalid rewrites that silently collapsed duplicate rows.
- #27790 (Author: Chandrakant Vankayalapati): fix(plugin-singlestore):
Fix type mapping for SingleStore JDBC client 1.2.11
- Fix TINYINT type mapping to preserve TINYINT semantics instead of
incorrectly mapping to BOOLEAN after JDBC driver upgrade.
- Fix varchar type mapping for TEXT types to use byte-based thresholds
matching the JDBC driver's COLUMN_SIZE reporting.
- #27797 (Author: Ben Hu): chore(deps): Update BigQuery Storage API SDK
from v1beta1 to v1
  - Update Google BigQuery Storage API SDK from v1beta1 to v1.
- #27803 (Author: Sayari Mukherjee): chore(deps): Upgrade
parquet-jackson to 1.17.1 in Iceberg connector
- Upgrade parquet-jackson to 1.17.1 in response to `GHSA-72hv-8253-57qq
<https://github.com/advisories/GHSA-72hv-8253-57qq>`_.
- #27806 (Author: Timothy Meehan): feat(plugin-iceberg): Add `ALTER
MATERIALIZED VIEW SET PROPERTIES`
- Add ``ALTER MATERIALIZED VIEW <name> SET PROPERTIES (...)`` SQL
statement to update materialized view properties after creation.
:pr:`27806`.
- Allow updating ``stale_read_behavior``, ``staleness_window``, and
``refresh_type`` on existing materialized views via ``ALTER MATERIALIZED
VIEW ... SET PROPERTIES`` (requires
``legacy_materialized_views=false``). :pr:`27806`.
- #27810 (Author: Reetika Agrawal): feat: Add support for ALTER TABLE
SET DEFAULT for Iceberg write-default
- Add support for `ALTER TABLE ... ALTER COLUMN ... SET DEFAULT` syntax
to update Iceberg column write-default values.
- Add support for updating column write-default values using `ALTER
TABLE ... SET DEFAULT` (requires Iceberg format version 3+).
- Update write-default operations to preserve existing initial-default
values as metadata-only changes.
- #27816 (Author: Timothy Meehan): fix(plugin-iceberg): Add warnings for
stitching and refresh fallback
- Add warning when predicate stitching or incremental refresh falls back
to full recompute.
- #27819 (Author: Sreeni Viswanadha): feat(optimizer): Replace timeout
with scan limiting for predictable prefilter performance
- Improve PrefilterForLimitingAggregation to use scan limiting instead
of timeouts for more predictable performance. The optimization now
limits the source scan to 1000 * LIMIT rows before applying DISTINCT
LIMIT.
- #27820 (Author: Timothy Meehan): feat(plugin-iceberg): Make MV
stitching and incremental refresh cost-based
- Add `materialized_view_stitching_strategy` and
`materialized_view_incremental_refresh_strategy` session properties
(values: `ALWAYS`, `NEVER`, `AUTOMATIC`; default: `ALWAYS`). Under
`AUTOMATIC`, the optimizer selects between the rewrite and the full
alternative based on cost; when stats are unavailable it falls back to
row-count comparison.
- #27829 (Author: Rebecca Schlussel): chore: Remove old NaN definition
and mark config as defunct
  - Remove configuration property `use-new-nan-definition`.
- #27835 (Author: Timothy Meehan): fix(plugin-iceberg): Fix duplicate
view creation in Hive catalog
- Fix race where concurrent ``REFRESH MATERIALIZED VIEW`` on the same
Hive-backed Iceberg materialized view could lose a watermark update.

# All Commits
- 4f8be7c2dcb7def7c113503da91b6f726b23ab3c fix(security): Upgrade
redshift-jdbc42 to 2.2.7 to address CVE-2026-8178 (#27828) (Nivin C S)
- 54cabf9207d654dc8b42ea3c6a2ca3cb4de2f736 chore(ci): Advance velox
(#27886) (Amit Dutta)
- 39e9ec63aae2bc6342e90d96c3d1f2f5ffe5df79 fix(security): Upgrade
opentelemetry-api to 1.62.0 to address CVE-2026-45292 (#27865)
(sumi-mathew)
- e78428e6303bd1aeadf2190daeb2672caf1a9a5b refactor(native-pos): Add
State enum and lifecycle state machine to MaterializedOutputBuffer
(#27873) (#27873) (Shrinidhi Joshi)
- 3ed75c8d7a84328335ed121adba2c03d3d459257 fix(native-pos): Move
ShuffleWriter and pool creation inside MaterializedOutputBuffer (#27872)
(#27872) (Shrinidhi Joshi)
- c3946f3325806101255c996a7b79c473183e068e test: Add end to end tests
for string functions (#26950) (Allen Shen)
- 869548bd2558d856b37a80762313b237312a9c46 refactor(native): Migrate to
PrestoQueryConfig for array_agg.ignore_nulls (#27876) (Maria Basmanova)
- 3f8e87638b102a1d3d93a57e9f16e24de28447be fix(native-pos): Add typed
units to MaterializedOutputBuffer runtime stats (#27870) (Shrinidhi
Joshi)
- 86ab4a4a6df0c5984f8add15caaf9fe1a93a7977 refactor(native-pos): Remove
cooperative backpressure and `useSystemMemory` config (#27869)
(Shrinidhi Joshi)
- a31f69f64d856574529ed5a6b104cf8c564f1c32 chore(deps): Update jackson
version to 2.18.6 (#27293) (Sayari Mukherjee)
- 871f92d45a81c580384681437891908e01506b92 chore: Force modernizer use
for all modules up to presto-main-base (#27867) (Zac Blanco)
- a51fe41c87a2ff77c7c5297b144288f6e04b4997 test(native-pos): Reduce
`kLocalShuffleMaxPartitionBytes` default to 64KB (#27868) (Shrinidhi
Joshi)
- 4617d4685a9fe2262240dc1c44cda2e1be37d747 feat: Adding Apache Arrow
FlightShim for connector federation in C++ workers (#26369) (Bryan
Cutler)
- 6185c1b22293f3d5c1bd0abed891224426ddb363 chore: Bump webpack-cli from
5.1.4 to 7.0.2 in /presto-ui/src (#27852) (sumi-mathew)
- a658c94f2b81f5c7abe400c192deeb84a8346d7a feat(plugin-iceberg): Make MV
stitching and incremental refresh cost-based (#27820) (Timothy Meehan)
- 46cc03138b034839bc05468be6ad801e4f665cba fix(plugin-iceberg): Fix
duplicate view creation in Hive catalog (#27835) (Timothy Meehan)
- 3df2afa1769509be19279c9433367ae36c0df300 chore(analyzer)!: Change
fieldNamesInJsonCastEnabled default value to true (#26833) (Yabin Ma)
- 381e181176178892dbf73a6422dd2bcafbbfa1c6 chore(deps): Bump jetty from
12.0.29 to 12.0.34 (#27294) (Shahim Sharafudeen)
- ee7c8a567ffb3e5cf40a31fcbe5904eb5109265f fix(native): Fix CMake link
order for presto_server_lib (#27847) (Tirumala Saiteja Goruganthu)
- 679d5342881d1021b9a3d038ebec0cd98bb2b4ac docs: Fix formatting of table
in connector/iceberg.rst (#27859) (Steve Burnett)
- dc48d4a399b800d20d9cff1c26beaa15720e3b04 chore(ci): Advance velox
(#27802) (Amit Dutta)
- b22bb99a7f950980c4b1f04a72c373740e5e92dc docs: Fix prestocpp setup
config file (#27857) (Reetika Agrawal)
- 5608831355838f839b4a428550c50e45ef435360 fix(plugin-iceberg): Disable
equality delete as join for DELETE/UPDATE (#27854) (Naveen Mahadevuni)
- 71088a83203252340f49fcbfe3e7f9c5832342aa chore(deps): Upgrade protobuf
to 4.34.1 (#27844) (bibith4)
- 241c94ac60996f5dfeeb85a3e872e3dfd1b5e251 chore(deps): Upgrade
parquet-jackson to 1.17.1 in Iceberg connector (#27803) (Sayari
Mukherjee)
- 73aa19fda74895b62ebe545b1e500813d00a258d fix(testing): Fix TPC-H
native-execution tests to use the right storage format and standard
queries (#27581) (Pramod Satya)
- f7c0ab9e2b7230829372cf24b4c640f44be31e5a feat(optimizer): Add
per-column predicates for ROW IN/NOT IN (#27708) (Sreeni Viswanadha)
- 41a66fc0fe2fd7707fd84062cf075a9a683803b1 fix(native): Allow UTC
timezone (key=0) in session config (#27309) (Shakyan Kushwaha)
- 77e782ce8de12518155cfb30d472e7f3d75afa21 chore(deps): Upgrade
eslint-plugin-react-hooks to version 7.1.1 (#27845) (bibith4)
- 7ee85da37a4d09182392b8c05a9e0622e453acfd fix(native): Possible segv in
system data source creation (#27807) (Christian Zentgraf)
- b7f8f05a286a1f611e48a04babf2cf99b8688507 fix(plugin-iceberg): Add
warnings for stitching and refresh fallback (#27816) (Timothy Meehan)
- b30db0a9a01ee92673327ec7df909eeee7203cb3 chore(deps): Upgrade
datasketches-java to version 6.2.0 (#27839) (Sayari Mukherjee)
- be01a17a06c16cb8004736e0b1f2dc5488805300 refactor(planner): Extract
shared expression rewriter for MV query optimizer (#27732) (#27732)
(Chandrakant Vankayalapati)
- 10d55723b93ccd907a1bba2736428271abc53bcf fix: Disallow
rewrite_data_files in Iceberg if filter pushdown enabled (#27838) (Dong
Wang)
- 5aa4abed4085cadd7ef5a0b8f47673486245c9b1 feat(optimizer): Push HAVING
filter through MAX/MIN/ARBITRARY aggregations (#27712) (Sreeni
Viswanadha)
- 2301c14aa4def417f7766b2d542ce8191d4c2050 fix(ci): Update release notes
check to use raw markdown body (#27842) (Rebecca Schlussel)
- 917cf4cd78d32ca72ef6b7b45c77c3d44a7b3b26 chore(deps): Update BigQuery
Storage API SDK from v1beta1 to v1 (#27797) (Ben Hu)
- 7faea8429c9b23d67f577f42543796d6a57e0253 feat(protocol): Update
annotations for consistent Thrift serialization support to all
TaskResource endpoints (#27486) (Jamille Shao-Ni)
- a95cb3ef06310b98b43da290d03fd8c8ee82f35c feat(plugin-iceberg): Push
down min/max/count based on file stats (#27085) (Dong Wang)
- 92046f2512be60dd0cb2a5f95377629733fd92e0 fix(analyzer): Relax stale
view validation for compatible string types (#27776) (Reetika Agrawal)
- 6ba9b3a2291d469f384f260451f1b2f776709255 chore(deps): Upgrade
commons-logging dependency from 1.3.5 to 1.3.6 (#27811) (Nivin C S)
- c6505360c4fb31bc5aabbc4e0e41fe285b638912 feat(plugin-iceberg): Bound
MV refresh (#27774) (Timothy Meehan)
- d8a2b53fa42fa41ca5025f9d7640c8eebc9ff15b feat(optimizer): Replace
timeout with scan limiting for predictable prefilter performance
(#27819) (Sreeni Viswanadha)
- 6823d9c9b135e6781bc9f4a30c658eb805b6518a chore(deps): Bump
webpack-dev-server from 5.2.1 to 5.2.4 in /presto-ui/src (#27840)
(dependabot[bot])
- 888991dc8b1a07424aba33f3c8bb440820479f0c chore: Bump commons.codec
from 1.17.2 to 1.21.0 (#27756) (sumi-mathew)
- 1da69a6e246fdeecc7302e8385b7ec4580e27821 fix(optimizer): Handle RPC
functions inside TRY expressions (#27818) (feilong-liu)
- 3233fe18835b38c1f7399f97a937bc79f1208dbf chore(analyzer): Remove
warn-on-common-nan-patterns config and NaN warning behavior (#27830)
(Rebecca Schlussel)
- c11fbf9f5f5415a3e28ea2d677acea27754788ee chore(deps): Upgrading
mongodb driver to mongodb driver sync (#27685) (Glerin Pinhero)
- 79cc9cb5c5bb586c9bde73c362912eef1b1188db refactor: Remove duplicate
check of iceberg v3 validation (#27837) (Reetika Agrawal)
- 3161b74a9d8b201487835db397aefe60178fea0d refactor: Add missing getter
methods and fix ordering in MetadataManagerStats (#27825) (Reetika
Agrawal)
- 3332fa796f9724aed783d4f3f5af81578961b336 feat: Add support for ALTER
TABLE SET DEFAULT for Iceberg write-default (#27810) (Reetika Agrawal)
- b294d8bf029c78a1afbabf3cae66d1b4f305dafa fix(native-pos): Fix
MaterializedOutput correctness and crash bugs in close/finish lifecycle
(#27833) (Shrinidhi Joshi)
- 0da3bb839ea7085c1dd6ca365627ecc107f50973 feat(optimizer): Extend
JoinPrefilter to support complex probe-side patterns (#27598) (Sreeni
Viswanadha)
- da0f63f907f8993b56e9dddf5eedd100a77022f3 feat(plugin-iceberg): Add
`ALTER MATERIALIZED VIEW SET PROPERTIES` (#27806) (Timothy Meehan)
- 9b2559f2138b9e31d5a198b1261d23dee2a15111 chore: Remove old NaN
definition and mark config as defunct (#27829) (Rebecca Schlussel)
- 34d459d66c03e4a866ee2332a28826c90e105222 feat(plugin-iceberg): Add
support for ALTER COLUMN SET DATA TYPE in the Iceberg connector (#25418)
(Nivin C S)
- f12815ce648cfcfdd3721f4cd54a12e56ecdb4b2 chore(deps): Upgrade
openlineage-java to 1.47.1 to fix CVE-2026-40542 (#27812) (Dilli Babu
Godari)
- fd67186b43f87362df58e8ab1cbe79e7f507ffa1 feat: Wire up IndexSource
splits to Spark task sources (#27817) (Zac)
- 65547f47ad87d4ccc1e7576d7cc864f717490893 feat(native): Iceberg V3
initialDefaultValue (#27767) (Reetika Agrawal)
- c2f37fc3ec49e3455e91afaef31dfb034e617bc8 fix: Enable partition-aware
grouped execution for index joins (#27701) (Zac)
- 4509fb24ec79df4093a83ffb50e6d688ee0f0854 chore(deps): Upgrade ratis
dependencies from 3.1.3 to 3.2.2 (#27787) (Nivin C S)
- 1d6737a6624fa048e2db721b905861f9958ee092 fix(planner): Prune empty
inputs through local exchanges in SimplifyPlanWithEmptyInput (#27765)
(Sreeni Viswanadha)
- d7f0f924c30e79238d20113afbc2977536ef35b7 misc(native): Target Java 8
for presto-on-spark compatibility (#27697) (#27697) (Kevin Tang)
- b4ce8d0d82797243153502c17769c0cfde8e6c5c misc(native-pos): Extract
AbstractNativeProcess from NativeExecutionProcess (#27696) (#27696)
(Kevin Tang)
- 18e730b1da26f301fe7362f514252f370671d623 docs: Fix errors in doc build
(#27805) (Steve Burnett)
- 81d4bde174f8e7dbdd1c9dbae1ecf3330b16267c feat(client): Add connection
validation feature to enhance connection reliability (#27002) (Sayari
Mukherjee)
- f0d744296a0ba0f3c4031fde5cd9eaa370d1e397 feat(optimizer): Push
aggregation through UNION ALL with disjoint group keys (#27764) (Sreeni
Viswanadha)
- bf30efcd530b9b181ec21672b8140ec0ebf6231a feat(plugin-prometheus):
Enable case-sensitive identifier support for Prometheus connector
(#26260) (Dilli Babu Godari)
- 9bacdef43077268ca4abefd24718cfc8caef2b1c perf(native-pos): Fix OOM due
to excessive memory usage in BroadcastFileReader (#27798) (Shrinidhi
Joshi)
- 95db1c86b6098026c48167dfa751393359ebdab5 feat(plugin-iceberg): Push
down `_last_updated_sequence_number` predicates (#27766) (Timothy
Meehan)
- 76d8bf2f42476c36e429e7515797f452ca79aef3 fix(plugin-iceberg): Handle
deprecated Iceberg write.object-storage.path property (#27758) (Reetika
Agrawal)
- 52f8f99b36a43d89f448a54b5220ad659fd3a5e0 fix(security): Upgrade Netty
to 4.2.13.Final to address CVE-2026-42584 (#27769) (Shahim Sharafudeen)
- 7056bdb10dafdcdd36649535c27e652ab843ebbd feat(plugin-native-sidecar):
Add support for adding plugin loaded types in sidecar plugin (#27748)
(Pratik Joseph Dabre)
- 21a6092869bf9e7f0832e15879e5a023164b6723 feat(native-pos): Make
MaterializedOutputBuffer size configurable with dynamic drain threshold
(#27795) (#27795) (Shrinidhi Joshi)
- 770df6161cd196d61f9fdedd9595e453ea621a0b fix(native-pos): Add flow
control logging to MaterializedOutputBuffer (#27794) (#27794) (Shrinidhi
Joshi)
- c237df17e5c216ee75913d28f5f9244dca904070 chore(ci): Advance velox
(#27786) (Joe Abraham)
- 18fec98bdd3485e64d03bc36bcd7c05f96c555c1 chore(deps): Upgrade jest
version to 30.3.0 (#27657) (Sayari Mukherjee)
- ace806dd47e337d85a74ef814ccae4d530057db1 test: Add end to end test for
jaccard_index (#27591) (jkhaliqi)
- e2c083acc87b705657c832dbec1c4f66f90825f2 fix(plugin-singlestore): Fix
type mapping for SingleStore JDBC client 1.2.11 (#27790) (Chandrakant
Vankayalapati)
- 3449d457efacef3697c832b87d4657522cd9a9d2 chore(deps): Upgrade gson
dependencies from 2.12.1 to 2.14.0 (#27779) (Nivin C S)
- c45405dfc8cf2017f62e5e27c3c860d9c697cdc8 fix(security): Upgrade
libthrift to address CVE-2026-41604 (#27777) (sumi-mathew)
- d7c8658c654a27caf28e36caf87dba5e170dbde9 docs: Document optimizer and
Iceberg properties (#27775) (Asish Kumar)
- 2acd947be65af53ed13f6651aca0586801575e98 fix(analyzer): Prevent
incorrect materialized view query rewrite when base query lacks GROUP BY
(#27778) (Chandrakant Vankayalapati)
- bb46550550e257affc78ac7ea111f548acd83239 feat: Add partition-aware
grouped execution for bucketed tables (#27663) (feilong-liu)
- f65259c38cf23e1e8b1c5942fb57f069c60c5bcf chore(deps): Upgrade React
and ReactDOM to version 19.2.4 (#27740) (Sayari Mukherjee)
- e1eb82f978ab72e92c79b51b88bb3eb0a152b80c fix: Allow DELETE queries to
run on Presto on Spark (#26195) (Gary Helmling)
- 8982f133809140a3c94595414b1d82518463e3f8 chore(deps): Upgrade
react-simple-code-editor from 0.13.1 to 0.14.1 (#27739) (Sayari
Mukherjee)
- efaf47f42aa9651a4c818c8f9c1eb5af38f90037 feat(plugin-delta): Support
reading tables with column mapping enabled (#27483) (Miguel Blanco
Godón)
- 7a9a2872c084815393063fed6e80a5b39642200a fix(native-pos): Fix
PartitionAndSerialize ROUND_ROBIN sending all rows to partition 0
(#27770) (Shrinidhi Joshi)
- ad09e9bd5ac631c82202985f19207e943dbe4290 fix: Load coordinator plugins
before standard plugins across bundles (#27729) (Pratik Joseph Dabre)
- 426dd7c1b19979788d1300b39d81139620988fcc fix(planner): Fix
ConstantExpression type mismatch in PropertyDerivations.visitProject
(#27773) (feilong-liu)
- 6aed02700ca94defa04d427854e6492119a7ccbe feat(analyzer): Allow HAVING
in materialized view query rewrite (#27677) (Timothy Meehan)
- f1c7b7d3df6736e46e2ac0651d4b44e18c5e4ea0 chore: Bump commons-dbcp2
from 2.12.0 to 2.14.0 (#27754) (sumi-mathew)
- 39513c10a1f0b02195a08f78691b0e4059dace6f chore(deps): Bump
@babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4 in
/presto-ui/src (#27763) (dependabot[bot])
- 5191b72fb4e7b680c0c36e2e0a5411f251e3b10d fix(plugin-iceberg): Do not
check access control for MV data table (#27728) (Timothy Meehan)
- 00acf72fa459e525d22c37c6abbfa22a3d401497 chore(deps): Bump SingleStore
JDBC client to 1.2.11 (#27759) (Dilli Babu Godari)
- d5b68df83e73e7a2269dd90ce6073d9d2ae3a31d chore(deps): Bump Apache
Lucene 8.11.3 to 9.12.3 (#27757) (Dilli Babu Godari)
- bb26a1ecf9f0badaa655d73a967f5b9426a58a8c test: Add end-to-end tests
for numeric_histogram function (#26968) (Allen Shen)
- 434758f0738d0cee949ce531b3afb82dd095f43b fix: Honor channels parameter
in RestSqlFunctionExecutor (#27684) (Joe Abraham)
- c169c153008d9de15f1848a6d80affd8a40e6ead chore(ci): Advance velox
(#27716) (Amit Dutta)
- 9e8ba1c8cc4b98551ec27935be4b112777b9bb62 fix: Populate session fields
when query fails before Session is authenticated (#27752) (Kevin Tang)
- a3516e21602fcd7cf5bae8ba24ea022232069f5e fix(ui): Fix timeline legend
layout with gaps between colored bars (#27731) (Yihong Wang)
- 89ceb1618bd3ba2338c6a7014720e221d4157714 feat(native): Add
native_min_shuffle_compression_page_size_bytes session property (#27683)
(#27683) (Henry Dikeman)
- 296ee91d3c5bd3b93b898aabca0f29a27ba0878f feat(native-pos):
MaterializedOutput: support replicateNullsAndAny (#27753) (Shrinidhi
Joshi)
- abed99b86b4961672cc569422c30de677377c7a4 chore(deps): Upgrade
html-webpack-plugin from 5.6.0 to 5.6.6 (#27737) (Sayari Mukherjee)
- d93dc465a9859fadfaa7086d7fac3429edd1aafe fix(deps): Bump
presto-spark-classloader-spark3 parent version to 0.298-SNAPSHOT
(#27747) (Kevin Tang)
- d94276a3e66c25a6b67f243fcb148968b8004b98 feat(connector): Add support
for `execute` procedure in JDBC connectors (#27282) (Pratyaksh Sharma)
- d7d029abfb2e92c8d0f549863d846d2f38ba17cd chore(deps): Upgrade
vis-timeline from 7.7.3 to 8.5.0 (#27721) (Sayari Mukherjee)
- c0f9cd4cb13b8d12ab40d67b8d97516776102cf6 fix(security): Upgrade
fast-uri from 3.0.6 to 3.1.2 in /presto-ui/src to resolve CVE-2026-6321
(#27736) (nishithakbhaskaran)
- c2f09fb5eebdbbb5bef5ac6fc9c38d3ac688bc67 chore(deps): Upgrade
@babel/core to version 7.29.0 (#27741) (Sayari Mukherjee)
- 1dcec7b47b2d29d931a7d2e38d391bc10b9c68ed chore: Bump
com.tdunning:t-digest from 3.2 to 3.3 (#27718) (sumi-mathew)
- 4443e880bf4e7317544cb036370f84fd3b9aaf70 chore(deps): Bump
org.postgresql:postgresql from 42.7.9 to 42.7.11 (#27722)
(dependabot[bot])
- cecd415e63bc8810a8833b4155fe754451c3ce36 fix:
UnsupportedOperationException for UnionNode in AddExchanges fixed
parallelism path (#27714) (feilong-liu)
- 09d70672cfab613f4ed12345e517738c6b811e54 chore(deps): Upgrade jQuery
from 3.7.1 to 4.0.0 (#27720) (Sayari Mukherjee)
- 30776976bfc9d67c1807ed68378f0a00f30da5d2 chore(deps): Upgrade
babel-loader:9.1.3 to 10.1.1 (#27656) (Sayari Mukherjee)
- b8d7610a7242d0c9f808e82894349ad15da2aed4 feat(native-pos):
MaterializeExchange: [1/n] Add MaterializedExchange operators and plan
wiring support (#27573) (#27573) (Shrinidhi Joshi)
- d3ad72cea746a0e6de1c3d86cab5a7b5e4b947d8 feat: MetadataExtractor:
prefetch source table for CREATE VECTOR INDEX (#27713) (XiaoDu)
- d9be702264414185ec27deb24571195698185f22 feat: Support extending
verifier QueryRewriter (#27703) (#27703) (Gary Helmling)
- 669219f6c9ad01f371a44d254523f49382346878 feat(scheduler): Allow
configured resource groups to bypass cluster-overload throttling
(#27642) (Arjun Gupta)
- 140e5093ae8cf6f096b29ea5def5b1356a844106 chore(deps): Bump
http-proxy-middleware from 2.0.7 to 2.0.9 in /presto-ui/src to resolve
CVE-2025-32996 (#27715) (nishithakbhaskaran)
- 1e1cc916868eb8bae0efc302c0a2a0e0d10b642e fix(analyzer): Skip unmapped
derived columns in MV partition filtering (#27706) (Chandrakant
Vankayalapati)
- e743edc134fca7e6e0013f717a28f7f0f1775973 docs(security): Improve
authentication docs (#27692) (Pratyaksh Sharma)
- be18151a766a01e0deb227e1830afbf08d9c3ef5 chore(deps): Bump
commons-pool2 from 2.11.1 to 2.13.1 (#27648) (sumi-mathew)
- a78a231330f9baf756bfcb5691042caeab4ebf9c fix(native): Fix BIND
expression loss for captured lambdas in NativeExpressionOptimizer
(#27593) (Pramod Satya)
- 8d334451742d620e3221993756ac9c665093a5ca fix: Integer overflow in
range filter boundary conversion (#27600) (#27600) (peterenescu)
- 09de245ab5b7a1a9d010170cc63605d3592b5201 feat(planner): Support scalar
functions in MV query rewriting (#27549) (#27549) (Chandrakant
Vankayalapati)
- ad7acf8059a873c4c5913863941e384b81e6f8d6 fix: Change error tagging
from internal error to user error (#27686) (Konjac Huang)
- bcb7b22d4ec9aef4c205c02efe3af499460645e8 chore(deps): Bump css-loader
from 7.1.2 to 7.1.4 in /presto-ui/src (#27667) (nishithakbhaskaran)
- 3aefe857faeb551d84e42e3c60d7581ddb8ac84d feat(optimizer): Add session
properties for RPC streaming mode and batch dispatch size (#27700)
(feilong-liu)
- 3c081e145ba23012e87199ce3a1552088f2424de refactor(native): Clean up
the saturate cast of count metric (#27676) (Rui Mo)
- 3334738474b994fadc76139b3066af1e45081b57 feat(plugin-iceberg): Add
changes for passing iceberg V3 initialDefaultValue while read (#27659)
(Reetika Agrawal)
- b3aa1274d232cfdc2729cc240e6676096355b11d perf(optimizer): Clean up
prefilter distinct limit (#27678) (Sreeni Viswanadha)
- decea18211557286b50e2259a11256c0f0146e2f fix: Take 'finishingTime' and
'planningTime' out of 'executionTime' (#27691) (#27691) (Sergey Pershin)
- 2b74be7c29cfc2b69053aad10ae03f6d527e9a7d chore(deps): Bump ts-jest
from 29.4.6 to 29.4.9 in /presto-ui/src (#27660) (nishithakbhaskaran)
- 46167847b821e2b7a3b1d1ce4c723d1b0d4b5863 feat(connector): Add caching
for Lance connector (#27325) (Jianjian Xie)
- 0ea6b49d7d237633583cb434dfff0022f273a20b fix: Replace Optional.or with
ternary for Java 8 compatibility (#27693) (Kevin Tang)
- 298a125e2614b6056cfeaf04f653427487f11a3f chore(deps): Upgrade
styled-components version to 6.4.1 (#27675) (bibith4)
- 2bc8fc58a8c008f2a906f3fd3204ec738fb12b39 feat(native): Upgrade the
nlohman json dependency to 3.12.0 (#27161) (Christian Zentgraf)
- 87f92f669805c16d8e44a8962dd372dcb87e72ad perf(optimizer): Remove
partition key restriction from ROW IN to disjunction rewrite (#27680)
(Sreeni Viswanadha)
- 240d1426878f196224228e49b59ff1e272e7d337 docs(security): Add more
details in docs (#27681) (Pratyaksh Sharma)
- 8319359fd5be8d23955359ff16dfd40b3c6d6a9d docs: Fix phrasing in
connector/lance.rst (#27640) (Steve Burnett)
- c2abc247f313c7d121e2da8f26d23d057681a5de feat: Add authorizedPrincipal
to AuthorizedIdentity for gateway identity propagation (#27639) (#27639)
(Chandrakant Vankayalapati)
- e4a3b89366187f0ed00584f8e2e1f37a87fe71ad revert: Add metastore cache
invalidation in iceberg (#27200) (Pratyaksh Sharma)
- 1604b1e62ea0e6d253d9be303b4c0cba9a89ddae fix: Union of TVF leaf
operators results in multiple split sources (#26980) (mohsaka)
- 9d6e9bafb84f719489b2c7a22ccf309cf690b7b2 feat(plugin-iceberg): Add
zorder to rewrite_data_files (#27561) (mohsaka)
- 579fbea8171c7595cc1175c493e569735dde8153 feat(optimizer): Add TopN
late materialization using $row_id (#27641) (Sreeni Viswanadha)
- cdc69ccba481e0f1f5621c63dc93351c3abb5c51 feat: Add TLS/SSL
configuration support for Oracle connector (#27671) (Dilli Babu Godari)
- e024dd71949156876c6b7e28cbbd437af82731c8 feat: Add Oracle i18n
character set support (#27670) (Dilli Babu Godari)
- 21c9bc66509630fbbad2583489b8fd448b6f370c feat: Add configurable JDBC
fetch size support (#27669) (Dilli Babu Godari)
- 03eed7a800d298ab9505ad04e0b6e80531ec6310 fix: Fix failure when
inserting into Iceberg tables partitioned by day(timestamp with time
zone) (#27645) (Nivin C S)
- c7da91bd852cbad929c5af9a317bbeed0848c8ce fix(server): Fix
FutureStateChange listener leak in
HttpRemoteTaskWithEventLoop.whenSplitQueueHasSpace() (#27673)
(shelton408)
- fc6e087f31a4a72c6deee0efdd1c0ff7f5a92e88 feat(plugin-iceberg): Support
creating branches on empty tables (#27270) (Dong Wang)
- 515241636649b768a06793b9704d6fd3f5f3e003 test: Extend Iceberg schema
evolution tests to cover PARQUET format (#27174) (Dong Wang)
- 2f81bd37b6f989ee61417c9b90d2c31f5b42eb66 feat: Add PUFFIN file format
enum to FileFormat wrapper [presto][iceberg] (#27616) (#27616) (Apurva
Kumar)
- 60d7de71f1ec54dffb09d82ed21efa41ee5c3ca8 chore(deps): Upgrade
testing-library/user-event version to 14.6.1 (#27623) (bibith4)
- f318aaa25583b1450cfde087e0549d648ae5c951 fix(planner): Propagate
streamPropertiesFromUniqueColumn through TopN (#27664) (Sreeni
Viswanadha)
- 5bda1283378de2869ff5d7de3fa45346361fb4d9 chore(ci): Advance Velox
(#27650) (Christian Zentgraf)
- 18388dc797444722d9e83215c707851e0d7df208 feat(plugin-iceberg): Add
rewrite-all option and default value for min-input-files (#27633)
(mohsaka)
- fd2a22b4fc5da6dfc7b1465c5ebda56eb254a1dc docs: Add missing
authentication and advanced configs for Druid connector (#27611)
(Saurabh Mahawar)
- d11ffdbfd04aac7384a45ea5a099a4eb6c624120 chore(deps): Upgrade
react-data-table-component version to 7.7.1 (#27647) (bibith4)
- 39f71665bcdb2483b91ec490aeb25ce0831fcc95 chore(deps): Upgrade
testing-library/jest-dom version to 6.9.1 (#27624) (bibith4)
- d06018be9004b5d5c9991c2df5bc901534667f0d feat: Add split_part_reverse
as a global Presto SQL inline function (#27480) (#27480)
(join-theory-de)
- 5e21de8354972c88b45b2df56b3ce20829bc5619 chore(deps): Upgrade
testing-library/react version to 16.3.2 (#27625) (bibith4)
- e2bca0766913e60ffd537b72e7ea4a4dba532748 fix(security): Upgrade
async-http-client to 3.0.9 to address CVE-2026-40490 (#27613) (Shahim
Sharafudeen)
- 995dbad434ef0ee2faa4edd1710716dfe32f55ec feat(optimizer): Support
incremental refresh of materialized views (#26959) (Timothy Meehan)
- 993cef3ee9a321a8a507314d03091ced8ac0ab83 feat(connector): Add filter
pushdown for Lance connector (#27430) (jja725)
- 82889cd61264e0013b6a0113f3d82ca8ab3193e1 fix: Avoid int64 overflow in
PlanNodeStatsSummarizer (#27632) (#27632) (Sergey Pershin)
- b2569e841d958ee92950c80818c3408308cc3c57 chore(deps): Bump
org.bouncycastle:bcprov-jdk18on from 1.81 to 1.84 in /presto-tests
(#27606) (dependabot[bot])
- dae4091c7105d1370544bfcb11baf8f8a79256bc fix(plugin-iceberg): Reduce
max history queries to avoid OOM in CI test (#27519) (Dong Wang)
- 91e9132db5abcbfb0d7ab2232602784c5f02d5b4 feat(plugin-native-sidecar):
Add operational metrics to sidecar (#27595) (Pratik Joseph Dabre)
- 4d8da3fa5ec064b13fd658f1fb6802b687ded6de feat(planner): Support
CUBE/ROLLUP/GROUPING SETS column rewriting in MV optimizer (#27538)
(#27538) (Chandrakant Vankayalapati)
- 6f8ecdbd848ee092dc34a162a5073955c840e703 chore(deps): Bump
org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4 (#27583)
(Nandakumar Balagopal)
- 09e522f66c0e716d9b150d708a5fa8de4f762554 fix(security): Upgrade gcs
version to 2.2.28 (#25424) (Shahim Sharafudeen)
- 668ae1086c90f15581549519e49170a5ca864e63 feat: Bump Iceberg
[presto][iceberg] dependency from 1.10.0 to 1.10.1 (#27614) (#27614)
(Apurva Kumar)
- ced25b8965b98cf4a1d660ce7108f5bb39539302 feat(optimizer): Add
distributed execution for RPCNode via rpc_function_parallelism session
property (#27603) (zhichenxu-meta)
- bb615b3890dd3fa61b1d8f3bbafbcc8e71e827a8 fix(plugin-delta): Creating
Delta table to unaccesible location makes the metastore inconsistent
(#27129) (Miguel Blanco Godón)
- dce6efdab414b583632dea0fc20543ae3d8ccd3e fix(plugin-native-sidecar):
Pass session start time as a header in native expression optimizer
(#27545) (Pratik Joseph Dabre)
- 469a6965155e4cf25884c311d4f94d458c034981 feat(native): Add index
source plan conversion with connector extensibility (#27596) (#27596)
(Zac)
- 94a11f78597d12e6246e60ed7c383f597ad90eff chore(deps): Bump
org.codehaus.plexus:plexus-utils from 3.6.0 to 3.6.1 (#27471) (Sayari
Mukherjee)
- 231fd12dcc7025d5724b0cd1ffa25f5a7ce7cdd1 chore(deps): Bump
org.apache.kafka:kafka-clients from 3.9.1 to 3.9.2 (#27574)
(dependabot[bot])
- a8355398f9ad980e2f5ecde9abfac99e18261a76 chore(connector): Upgrade
clickhouse-jdbc to 0.3.2 (#26990) (sumi-mathew)
- 90910c7fe8f6be850a83aa031d5a93559958116b misc(planner): Move
RpcFunctionOptimizer after RewriteRowExpressions (#27594) (feilong-liu)
- 86f564b900c8277a463d5ec77dae08c06401f08d fix: Fix race condition in
pruneFinishedQueryInfo causing task memory leak (#27597) (Swapnil)
- ef8eea0ac3bbba102a98ce7a52992d4d48812124 fix(plugin-native-sidecar):
Add additional CAST for mismatching array constructor args (#27556)
(Pratik Joseph Dabre)
- 47f6dfa53bd3da3ef536aefe45b34263849df9bb chore(deps): Bump
follow-redirects from 1.15.9 to 1.16.0 in /presto-ui/src (#27587)
(dependabot[bot])
- b4a645ad4413900a6f676b72405b418ae96310b8 feat(native): Distributed
Procedure Support (#26375) (Dong Wang)
- 177d6ff7f57064e68b02993611bc4240942d1f4c feat(native): Add
IndexSourceNode planner support and split scheduling (#27296) (#27296)
(Zac)
- 7b2e370a1e61304fc5da17b95186f729a6cd0f0b feat: Reject duplicate
columns in CREATE VECTOR INDEX (#27588) (Ke Wang)
- b2dfddc52733ce66aa7fec66a06d6c8c8d968bec feat: Validate embedding
column type in CREATE VECTOR INDEX (#27589) (Ke Wang)
- 3c36e504600c80364a59f6cb2bdaae004eb1e9b9 refactor(plugin-iceberg):
Defer the start of transaction for procedure (#27586) (Dong Wang)
- 4b775d743ef52b107d04e40b733e244827c709b9 chore(ci): Advance Velox
(#27503) (Christian Zentgraf)
- a82063a0985dc1b54777c6e6354cd5999f4b396d fix(optimizer): Fix cascading
projection pass-through in PushProjectionThroughCrossJoin (#27568)
(Sreeni Viswanadha)
- a2dc569e6cc6b04c4a1012ea5e9fc648b36c0110 fix(plugin-druid): Add
version for lz4-java to fix maven deployment (#27584) (Li)
- 0d7cd9501a0ab75df5dd2b6aac848c7978f0ad75 fix(native): Fix TRY
expression handling in NativeExpressionOptimizer (#27122) (Pramod Satya)
- 5d26fb35bc7f78419156cda64a6f238e92099016 misc: Fix code style issues,
copy-paste bug, and UB in presto-native-execution (#27572) (#27572)
(Amit Dutta)
- 31f7f3c5b6165c118c58db88d12aae9d54b34d83 fix(native): Handle NULL ROWs
when returning from native expression optimizer (#27528) (Pratik Joseph
Dabre)
- 459286a0f0c4ff972e876d5c3d45327fb8499444 fix(native): Fix worker
shutdown sequence (#27566) (#27566) (Sergey Pershin)
- 5bd6ca88673ba2c6b44ec3370d0fd464ab923270 fix: Remove duplicate
checkQueryIntegrity call in CreateMaterializedViewTask (#27567) (Kevin
Tang)
- 913a4285a2817555b70e84f11d82fdb33484d9a7 feat(optimizer): Rewrite
bucketed semi-join to join (#27510) (Sreeni Viswanadha)
- 09400b98c7a46925210ad09ade111536422ed1a6 feat: Add pmod (positive
modulo) scalar function (#27543) (#27543) (Natasha Sehgal)
- dd6606c9d786099e0fb58b232e19654adad25a9c feat(plugin-iceberg): Add
min-input-files, min-file-size-bytes, max-file-size-bytes options to
rewrite_data_files procedure (#27515) (mohsaka)
- 23e35ab6993d62e97f9f180802ac7c55df627ee8 docs: Fix formatting of code
blocks in develop/table-functions.rst (#27502) (Steve Burnett)
- a4f8f58ef4d84c1847b52b30a2643257f0951bca fix(plugin-native-sidecar):
Fix flattened AND/OR expressions by the native expression optimizer
(#27517) (Pratik Joseph Dabre)
- 4c72d5cc1ed99ab1acd13ae92f94d31ef2336637 test: Add e2e tests for
binary functions (#26970) (Allen Shen)
- 4b6d9c9e9f88df699308549064615fada467cca5 feat(native): Pass storage
parameters to HiveInsertTableHandle in write path (#27525) (#27525)
(Henry Dikeman)
- b25bb12435d53d6aaa1b3460c86db908e8983fc3 feat(native): Add Java
planner integration, protocol, and dynamic RPC function detection
(#27555) (abhinavmuk04)
- 62d690b279c0899bc5105f5412ef74a240b96c2e fix(build): Use explicit
optional constructor (#27513) (Christian Zentgraf)
- cc294de45fb8deea40dabf1bbe85321a7dedfdd4 fix(native): Do not discard
all tasks in maybeStartNextQueuedTask() (#27548) (#27548) (Sergey
Pershin)
- 151c3373b1998f0e006a0dec439142d7733c36bc perf(analyzer): Index
RelationType.resolveFields() for O(1) field lookup (#27553)
(feilong-liu)
- 05f8e4404f117c66c1eebd40d1be364ddfe702c3 perf(planner): Optimize query
planning for wide-column projections (#27547) (feilong-liu)
- a3a1d3cdc1d556985f314de0af35a30e1adad0d3 test: Add E2E tests for geo
functions (#26969) (jkhaliqi)
- 6af43bb021706dbaabb55dbff151cf22aaac6bbb feat(analyzer): Add session
property to gate CTAS IF NOT EXISTS query analysis (#27504) (Kevin Tang)
- d488205f1fdedddee6a537e25b704799d3b5e5b8 chore: Update error message
in Iceberg table row deletions (#27495) (nishithakbhaskaran)
- ed41ee81e2377d1944f7ae47f1512f7833549730 feat(optimizer): Rewrite ROW
constructor IN to disjunction for partition pruning (#27500) (Sreeni
Viswanadha)
- b9b15ae4a8b639f4f926695c7e0694d8cf2010de fix(planner): Use
LinkedHashMap in optimizer rules to fix type mismatch (#27493) (Sreeni
Viswanadha)
- dd82b57d2da28e7297b4ef99534da7a74eff6d4f feat(optimizer): Rewrite
map_from_entries(ARRAY[ROW(...)]) to MAP(ARRAY[], ARRAY[]) (#27491)
(Sreeni Viswanadha)
- 65cf3e94214284946710cc21fc7330c0c56e41db chore(deps): Upgrade
testing-library/dom version to 10.4.1 (#27520) (bibith4)
- 40c1c4e2101ec359770f45c5c15f183add900a5a docs(native): Add missing
native session properties (#27506) (Saurabh Mahawar)
- 0b313de489c0ed1b19a1543bab9f23cdb027db2c feat(plugin-iceberg): Add min
max stats for varchar/char column and display as low and high values
(#27357) (Prashant Sharma)
- 1968770e91a1206aaa176148f60b11f7e8178364 test(native): Add E2E tests
for array functions (#26937) (jkhaliqi)
- a92fa12dd45173cf54dee0089887810a9f585fba feat: Prism <> Iceberg
[prism] Support SQL-standard time travel syntax (FOR TIMESTAMP AS OF)
(#27421) (#27421) (Apurva Kumar)
- 7f76c833f5551a8fa4e9e86090c5f3fa135da829 docs(optimizer): Add more
details to the materialized view documentation (#27465) (bibith4)
- 175143b4bf9d0fe5e8246cedbf38614d1c3e113a chore(deps): Upgrade
commons-text version to 1.15.0 (#27494) (bibith4)
- 29ed629bf60c4a508a4a1d1a5c3e730a53491f05 fix: Use namespaced GTest
targets in arrow_flight tests (#27137) (jkhaliqi)
- 291f2048f3bf3b5afe275f0589d547eac3f687a9 feat: Add exchange transport
type (HTTP/ANY) to plan fragments (#27355) (Daniel Bauer)
- ee0eec7b5b12aef7feb1ea6d6dd7411387003caa feat(planner): Support GROUP
BY and ORDER BY ordinals in MV query rewriting (#27422) (#27422)
(Chandrakant Vankayalapati)
- 7655f36483b5074d0394bc1a34ae48c25612b872 feat: Add read support for
row lineage columns in Iceberg connector (#27240) (Joe Abraham)
- 2af1e04aad8d28b7b806f44905abeb7812cc3354 feat: Remove index table
existence check (#27509) (#27509) (Ke Wang)
- 74a3458ab835a8af25aa40f458ac16c0d598a94d feat: Add observability for
query state transitions in Presto (#26418) (#26418) (abhinavmuk04)
- fc3669795814668bd1d90da27bc72ed51ee81eb8 misc: Show stage completion
state in query plan (#27388) (#27388) (feilong-liu)
- 232429917efbbbf3c7d30a3c62f7996fc5b3126f feat(planner): Extract remote
functions from $internal$try lambda in PlanRemoteProjections (#27451)
(feilong-liu)
- 28bb9006e70e7bdfaa1141ee7797e208934a6491 feat: Add number of total
driver threads (#27501) (#27501) (XiaoDu)
- 926e2cdad1cb715542272f634458c9524dff32ea fix: Revised the principal
field retrieval (#27014) (Yihong Wang)
- cc4ec4a173679cfbd8e36893907435e88b5e0bd0 fix: Allow view querying with
Mongo connector (#26995) (Auden Woolfson)
- 52ad58aae1ec9744161af78416b0274fd90de2bb feat(connector): Add Azure
Blob Storage and ADLS Gen2 support (#25107) (Deepak Mehra)
- ec92f2a3ad06bca5375e28b74e1b35eea78be658 chore(deps): Bump lodash from
4.17.23 to 4.18.1 in /presto-ui/src (#27497) (dependabot[bot])
- c1603bd2a9b5e37617d96597ba11a7e22007de79 feat: Add
MergeSumsToVectorSum optimizer rule (#27335) (#27335) (abhinavmuk04)
- cd6ee833414c1bc9e9c910637bcd3eaa7e1e53b0 test(native): Enable cuDF in
native tests (#27369) (Pramod Satya)
- aae3971105e4fa3680e37cf3f392fb04b0b071c2 chore(deps): Bump lodash-es
from 4.17.23 to 4.18.1 in /presto-ui/src (#27496) (dependabot[bot])
- 27edc1b7354bcf762025fdfa30465706285260ad docs: Add missing doc for
ldap.cache-ttl (#27477) (Saurabh Mahawar)
- b051f496dfbd697f4e0cf5c51fdac10c53976531 misc: Use folly
FunctionScheduler from folly/executors (#27482) (Amit Dutta)

## Release Notes
```
== NO RELEASE NOTE ==
```

## Summary by Sourcery

Documentation:
- Document the 0.298 Presto release, including its features, fixes, and
other notable changes in a new release notes page.

---------

Co-authored-by: Steve Burnett <burnett@pobox.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: Zac Blanco <zachary.blanco@bytedance.com>
Co-authored-by: Timothy Meehan <tim@timdmeehan.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

from:Meta PR from Meta

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants