diff --git a/core/trino-main/src/main/java/io/trino/operator/ScanFilterAndProjectOperator.java b/core/trino-main/src/main/java/io/trino/operator/ScanFilterAndProjectOperator.java index c2293d1a2589..ba154d044e0b 100644 --- a/core/trino-main/src/main/java/io/trino/operator/ScanFilterAndProjectOperator.java +++ b/core/trino-main/src/main/java/io/trino/operator/ScanFilterAndProjectOperator.java @@ -51,6 +51,7 @@ import java.io.UncheckedIOException; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import java.util.function.Supplier; import static com.google.common.base.Preconditions.checkState; @@ -411,7 +412,7 @@ public static class ScanFilterAndProjectOperatorFactory private final int operatorId; private final PlanNodeId planNodeId; private final Supplier cursorProcessor; - private final Supplier pageProcessor; + private final Function pageProcessor; private final PlanNodeId sourceId; private final PageSourceProvider pageSourceProvider; private final TableHandle table; @@ -428,7 +429,7 @@ public ScanFilterAndProjectOperatorFactory( PlanNodeId sourceId, PageSourceProviderFactory pageSourceProvider, Supplier cursorProcessor, - Supplier pageProcessor, + Function pageProcessor, TableHandle table, Iterable columns, DynamicFilter dynamicFilter, @@ -496,7 +497,7 @@ public WorkProcessorSourceOperator create( split, pageSourceProvider, cursorProcessor.get(), - pageProcessor.get(), + pageProcessor.apply(dynamicFilter), table, columns, dynamicFilter, diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/ExpressionCompiler.java b/core/trino-main/src/main/java/io/trino/sql/gen/ExpressionCompiler.java index 0ac54dbc57d2..52345b5db6ef 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/ExpressionCompiler.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/ExpressionCompiler.java @@ -28,6 +28,7 @@ import io.trino.operator.project.PageProcessor; import io.trino.operator.project.PageProjection; import io.trino.spi.TrinoException; +import io.trino.spi.connector.DynamicFilter; import io.trino.sql.gen.columnar.ColumnarFilterCompiler; import io.trino.sql.gen.columnar.DynamicPageFilter; import io.trino.sql.gen.columnar.FilterEvaluator; @@ -40,6 +41,7 @@ import java.util.Objects; import java.util.Optional; import java.util.OptionalInt; +import java.util.function.Function; import java.util.function.Supplier; import static com.google.common.base.MoreObjects.toStringHelper; @@ -106,7 +108,7 @@ public Supplier compileCursorProcessor(Optional }; } - public Supplier compilePageProcessor( + public Function compilePageProcessor( boolean columnarFilterEvaluationEnabled, Optional filter, Optional dynamicPageFilter, @@ -125,7 +127,7 @@ public Supplier compilePageProcessor( .collect(toImmutableList()); Optional> finalFilterFunctionSupplier = filterFunctionSupplier; - return () -> { + return (dynamicFilter) -> { Optional filterEvaluator = columnarFilterEvaluatorSupplier.map(Supplier::get); if (filterEvaluator.isEmpty()) { filterEvaluator = finalFilterFunctionSupplier @@ -136,7 +138,7 @@ public Supplier compilePageProcessor( .map(Supplier::get) .collect(toImmutableList()); Optional dynamicFilterEvaluator = dynamicPageFilter - .map(dynamicFilter -> dynamicFilter.createDynamicPageFilterEvaluator(columnarFilterCompiler)) + .map(pageFilter -> pageFilter.createDynamicPageFilterEvaluator(columnarFilterCompiler, dynamicFilter)) .map(Supplier::get); return new PageProcessor(filterEvaluator, dynamicFilterEvaluator, pageProjections, initialBatchSize); }; @@ -145,13 +147,15 @@ public Supplier compilePageProcessor( @VisibleForTesting public Supplier compilePageProcessor(Optional filter, List projections) { - return compilePageProcessor(true, filter, Optional.empty(), projections, Optional.empty(), OptionalInt.empty()); + return () -> compilePageProcessor(true, filter, Optional.empty(), projections, Optional.empty(), OptionalInt.empty()) + .apply(DynamicFilter.EMPTY); } @VisibleForTesting public Supplier compilePageProcessor(Optional filter, List projections, int initialBatchSize) { - return compilePageProcessor(true, filter, Optional.empty(), projections, Optional.empty(), OptionalInt.of(initialBatchSize)); + return () -> compilePageProcessor(true, filter, Optional.empty(), projections, Optional.empty(), OptionalInt.of(initialBatchSize)) + .apply(DynamicFilter.EMPTY); } private Class compile(Optional filter, List projections, BodyCompiler bodyCompiler, Class superType) diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/columnar/DynamicPageFilter.java b/core/trino-main/src/main/java/io/trino/sql/gen/columnar/DynamicPageFilter.java index 5ddaa5ab067c..7e3814426ba2 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/columnar/DynamicPageFilter.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/columnar/DynamicPageFilter.java @@ -53,7 +53,6 @@ public final class DynamicPageFilter private final Session session; private final IrExpressionOptimizer irExpressionOptimizer; private final DomainTranslator domainTranslator; - private final DynamicFilter dynamicFilter; private final Map columnHandles; private final Map sourceLayout; private final double selectivityThreshold; @@ -64,11 +63,13 @@ public final class DynamicPageFilter @Nullable @GuardedBy("this") private CompletableFuture isBlocked; + @Nullable + @GuardedBy("this") + private DynamicFilter currentDynamicFilter; public DynamicPageFilter( PlannerContext plannerContext, Session session, - DynamicFilter dynamicFilter, Map columnHandles, Map sourceLayout, double selectivityThreshold) @@ -78,20 +79,25 @@ public DynamicPageFilter( this.session = requireNonNull(session, "session is null"); this.irExpressionOptimizer = newOptimizer(plannerContext); this.domainTranslator = new DomainTranslator(plannerContext.getMetadata()); - this.dynamicFilter = requireNonNull(dynamicFilter, "dynamicFilter is null"); this.columnHandles = columnHandles.entrySet() .stream() .collect(toImmutableMap(Map.Entry::getValue, Map.Entry::getKey)); this.sourceLayout = ImmutableMap.copyOf(sourceLayout); this.selectivityThreshold = selectivityThreshold; - this.isBlocked = dynamicFilter.isBlocked(); } // Compiled dynamic filter is fixed per-split and generated duration page source creation. // Page source implementations may subsequently implement blocking on completion of dynamic filters, but since // that occurs after page source creation, we cannot be guaranteed a completed dynamic filter here for initial splits - public synchronized Supplier createDynamicPageFilterEvaluator(ColumnarFilterCompiler compiler) + public synchronized Supplier createDynamicPageFilterEvaluator(ColumnarFilterCompiler compiler, DynamicFilter dynamicFilter) { + requireNonNull(dynamicFilter, "dynamicFilter is null"); + // Sub-query cache may provide different instance of DynamicFilter per-split. + if (!dynamicFilter.equals(currentDynamicFilter)) { + compiledDynamicFilter = null; + currentDynamicFilter = dynamicFilter; + isBlocked = dynamicFilter.isBlocked(); + } if (isBlocked == null) { return compiledDynamicFilter; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java index f1d1a8cbc01d..397eb368c25a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java @@ -1992,12 +1992,11 @@ else if (sourceNode instanceof SampleNode sampleNode) { dynamicPageFilterFactory = Optional.of(new DynamicPageFilter( plannerContext, session, - dynamicFilter, ((TableScanNode) sourceNode).getAssignments(), sourceLayout, getDynamicRowFilterSelectivityThreshold(session))); } - Supplier pageProcessor = expressionCompiler.compilePageProcessor( + Function pageProcessor = expressionCompiler.compilePageProcessor( columnarFilterEvaluationEnabled, translatedFilter, dynamicPageFilterFactory, @@ -2028,7 +2027,7 @@ else if (sourceNode instanceof SampleNode sampleNode) { OperatorFactory operatorFactory = FilterAndProjectOperator.createOperatorFactory( context.getNextOperatorId(), planNodeId, - pageProcessor, + () -> pageProcessor.apply(dynamicFilter), getTypes(projections), getFilterAndProjectMinOutputPageSize(session), getFilterAndProjectMinOutputPageRowCount(session)); diff --git a/core/trino-main/src/test/java/io/trino/operator/BenchmarkScanFilterAndProjectOperator.java b/core/trino-main/src/test/java/io/trino/operator/BenchmarkScanFilterAndProjectOperator.java index 6f585cde941e..bb7f1372df1c 100644 --- a/core/trino-main/src/test/java/io/trino/operator/BenchmarkScanFilterAndProjectOperator.java +++ b/core/trino-main/src/test/java/io/trino/operator/BenchmarkScanFilterAndProjectOperator.java @@ -184,7 +184,7 @@ private void createScanFilterAndProjectOperatorFactories(List inputPages, new PlanNodeId("test_source"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new FixedPageSource(inputPages), () -> cursorProcessor, - () -> pageProcessor, + (_) -> pageProcessor, TEST_TABLE_HANDLE, columnHandles, DynamicFilter.EMPTY, diff --git a/core/trino-main/src/test/java/io/trino/operator/TestScanFilterAndProjectOperator.java b/core/trino-main/src/test/java/io/trino/operator/TestScanFilterAndProjectOperator.java index 9b7b38a9f770..8cf4e70b5aaa 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestScanFilterAndProjectOperator.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestScanFilterAndProjectOperator.java @@ -133,7 +133,7 @@ public void testPageSource() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new FixedPageSource(ImmutableList.of(input)), cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, @@ -175,7 +175,7 @@ public void testPageSourceMergeOutput() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new FixedPageSource(input), cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, @@ -220,7 +220,7 @@ public void testPageSourceLazyLoad() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new SinglePagePageSource(input), cursorProcessor, - () -> pageProcessor, + (_) -> pageProcessor, TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, @@ -254,7 +254,7 @@ public void testRecordCursorSource() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new RecordPageSource(new PageRecordSet(ImmutableList.of(VARCHAR), input)), cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, @@ -309,7 +309,7 @@ public void testPageYield() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new FixedPageSource(ImmutableList.of(input)), cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, @@ -377,7 +377,7 @@ public void testRecordCursorYield() new PlanNodeId("0"), (catalog) -> (session, split, table, columns, dynamicFilter) -> new RecordPageSource(new PageRecordSet(ImmutableList.of(BIGINT), input)), cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, ImmutableList.of(), DynamicFilter.EMPTY, diff --git a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkAndColumnarFilterTpchData.java b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkAndColumnarFilterTpchData.java index 0e0e9089a134..4dafeade620f 100644 --- a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkAndColumnarFilterTpchData.java +++ b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkAndColumnarFilterTpchData.java @@ -21,6 +21,7 @@ import io.trino.operator.project.PageProcessor; import io.trino.spi.Page; import io.trino.spi.PageBuilder; +import io.trino.spi.connector.DynamicFilter; import io.trino.sql.relational.CallExpression; import io.trino.sql.relational.InputReferenceExpression; import io.trino.sql.relational.RowExpression; @@ -96,7 +97,7 @@ public void setup() projections, Optional.empty(), OptionalInt.empty()) - .get(); + .apply(DynamicFilter.EMPTY); } @Benchmark diff --git a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkColumnarFilter.java b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkColumnarFilter.java index f63af7fafaac..778f3f8001f0 100644 --- a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkColumnarFilter.java +++ b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkColumnarFilter.java @@ -25,6 +25,7 @@ import io.trino.spi.block.IntArrayBlock; import io.trino.spi.block.LongArrayBlock; import io.trino.spi.block.ShortArrayBlock; +import io.trino.spi.connector.DynamicFilter; import io.trino.spi.function.OperatorType; import io.trino.spi.type.StandardTypes; import io.trino.spi.type.Type; @@ -165,7 +166,7 @@ public void setup() ImmutableList.of(field(0, type)), Optional.empty(), OptionalInt.empty()) - .get(); + .apply(DynamicFilter.EMPTY); } @Benchmark diff --git a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkInCodeGenerator.java b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkInCodeGenerator.java index 3e5984649e01..bb0af8ae2e41 100644 --- a/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkInCodeGenerator.java +++ b/core/trino-main/src/test/java/io/trino/sql/gen/BenchmarkInCodeGenerator.java @@ -24,6 +24,7 @@ import io.trino.operator.project.PageProcessor; import io.trino.spi.Page; import io.trino.spi.PageBuilder; +import io.trino.spi.connector.DynamicFilter; import io.trino.spi.function.OperatorType; import io.trino.spi.type.StandardTypes; import io.trino.spi.type.Type; @@ -196,7 +197,7 @@ public void setup() ImmutableList.of(project), Optional.empty(), OptionalInt.empty()) - .get(); + .apply(DynamicFilter.EMPTY); } } diff --git a/core/trino-main/src/test/java/io/trino/sql/gen/TestColumnarFilters.java b/core/trino-main/src/test/java/io/trino/sql/gen/TestColumnarFilters.java index 67139b352d45..8eba5bec76d3 100644 --- a/core/trino-main/src/test/java/io/trino/sql/gen/TestColumnarFilters.java +++ b/core/trino-main/src/test/java/io/trino/sql/gen/TestColumnarFilters.java @@ -37,6 +37,7 @@ import io.trino.spi.block.LongArrayBlock; import io.trino.spi.block.VariableWidthBlockBuilder; import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.DynamicFilter; import io.trino.spi.function.LiteralParameters; import io.trino.spi.function.ScalarFunction; import io.trino.spi.function.SqlNullable; @@ -630,7 +631,7 @@ private static List processFilter(List inputPages, boolean columnarE ImmutableList.of(field(ROW_NUM_CHANNEL, BIGINT)), Optional.empty(), OptionalInt.empty()) - .get(); + .apply(DynamicFilter.EMPTY); LocalMemoryContext context = newSimpleAggregatedMemoryContext().newLocalMemoryContext(PageProcessor.class.getSimpleName()); ImmutableList.Builder outputPagesBuilder = ImmutableList.builder(); for (Page inputPage : inputPages) { diff --git a/core/trino-main/src/test/java/io/trino/sql/gen/TestDynamicPageFilter.java b/core/trino-main/src/test/java/io/trino/sql/gen/TestDynamicPageFilter.java index fb04a524344c..c0e3d01a67bd 100644 --- a/core/trino-main/src/test/java/io/trino/sql/gen/TestDynamicPageFilter.java +++ b/core/trino-main/src/test/java/io/trino/sql/gen/TestDynamicPageFilter.java @@ -43,6 +43,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -164,7 +165,9 @@ public void testStructuralTypeFilter() { ColumnHandle column = new TestingColumnHandle("column"); Type rowType = rowType(new RowType.Field(Optional.of("a"), INTEGER), new RowType.Field(Optional.of("b"), DOUBLE)); - RowBlock rowBlock = createRowBlock(ImmutableList.of(INTEGER, DOUBLE), new Object[] {5, 3.14159265358979}, new Object[] {6, 3.14159265358979}, new Object[] {7, 3.14159265358979}); + RowBlock rowBlock = createRowBlock( + ImmutableList.of(INTEGER, DOUBLE), + new Object[] {5, 3.14159265358979}, new Object[] {6, 3.14159265358979}, new Object[] {7, 3.14159265358979}); Block[] filterBlocks = rowBlock.getFieldBlocks().toArray(new Block[0]); FilterEvaluator filterEvaluator = createDynamicFilterEvaluator( TupleDomain.withColumnDomains(ImmutableMap.of( @@ -274,7 +277,6 @@ public void testDynamicFilterUpdates() DynamicPageFilter pageFilter = new DynamicPageFilter( PLANNER_CONTEXT, SESSION, - dynamicFilter, ImmutableMap.of(symbolA, columnA, symbolB, columnB, symbolC, columnC), ImmutableMap.of(symbolA, 0, symbolB, 1, symbolC, 2), 1); @@ -283,27 +285,71 @@ public void testDynamicFilterUpdates() createLongSequenceBlock(100, 201), createLongSequenceBlock(200, 301)); - FilterEvaluator filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER).get(); + FilterEvaluator filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter).get(); verifySelectedPositions(filterPage(page, filterEvaluator), 101); dynamicFilter.update(TupleDomain.withColumnDomains( ImmutableMap.of(columnB, multipleValues(BIGINT, ImmutableList.of(131L, 142L))))); - filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER).get(); + filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter).get(); verifySelectedPositions(filterPage(page, filterEvaluator), new int[] {31, 42}); dynamicFilter.update(TupleDomain.all()); dynamicFilter.update(TupleDomain.withColumnDomains( ImmutableMap.of(columnC, singleValue(BIGINT, 231L)))); - filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER).get(); + filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter).get(); verifySelectedPositions(filterPage(page, filterEvaluator), new int[] {31}); dynamicFilter.update(TupleDomain.all()); - Supplier filterEvaluatorSupplier = pageFilter.createDynamicPageFilterEvaluator(COMPILER); + Supplier filterEvaluatorSupplier = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter); verifySelectedPositions(filterPage(page, filterEvaluatorSupplier.get()), new int[] {31}); assertThat(dynamicFilter.isComplete()).isTrue(); // After dynamic filter is complete, we should get back the same cached FilterEvaluator supplier - assertThat(pageFilter.createDynamicPageFilterEvaluator(COMPILER)).isEqualTo(filterEvaluatorSupplier); + assertThat(pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter)).isEqualTo(filterEvaluatorSupplier); + } + + @Test + public void testDifferentDynamicFilterInstances() + { + ColumnHandle columnA = new TestingColumnHandle("columnA"); + Symbol symbolA = new Symbol(BIGINT, "A"); + ColumnHandle columnB = new TestingColumnHandle("columnB"); + Symbol symbolB = new Symbol(BIGINT, "B"); + ColumnHandle columnC = new TestingColumnHandle("columnC"); + Symbol symbolC = new Symbol(BIGINT, "C"); + DynamicPageFilter pageFilter = new DynamicPageFilter( + PLANNER_CONTEXT, + SESSION, + ImmutableMap.of(symbolA, columnA, symbolB, columnB, symbolC, columnC), + ImmutableMap.of(symbolA, 0, symbolB, 1, symbolC, 2), + 1); + Page page = new Page( + createLongSequenceBlock(0, 101), + createLongSequenceBlock(100, 201), + createLongSequenceBlock(200, 301)); + + TestingDynamicFilter dynamicFilter = new TestingDynamicFilter(1); + dynamicFilter.update(TupleDomain.withColumnDomains( + ImmutableMap.of(columnB, multipleValues(BIGINT, ImmutableList.of(131L, 142L))))); + FilterEvaluator filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter).get(); + verifySelectedPositions(filterPage(page, filterEvaluator), new int[] {31, 42}); + + dynamicFilter = new TestingDynamicFilter(1); + dynamicFilter.update(TupleDomain.all()); + filterEvaluator = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter).get(); + verifySelectedPositions(filterPage(page, filterEvaluator), 101); + + dynamicFilter = new TestingDynamicFilter(1); + dynamicFilter.update(TupleDomain.withColumnDomains( + ImmutableMap.of(columnC, singleValue(BIGINT, 231L)))); + Supplier filterEvaluatorSupplier = pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter); + verifySelectedPositions(filterPage(page, filterEvaluatorSupplier.get()), new int[] {31}); + + dynamicFilter = new TestingDynamicFilter(1); + dynamicFilter.update(TupleDomain.withColumnDomains( + ImmutableMap.of(columnC, singleValue(BIGINT, 231L)))); + // DynamicFilter instance is different, but the underlying predicate is the same, we should get back the same cached FilterEvaluator supplier + assertThat(pageFilter.createDynamicPageFilterEvaluator(COMPILER, dynamicFilter)).isEqualTo(filterEvaluatorSupplier); } @Test @@ -451,11 +497,10 @@ private static FilterEvaluator createDynamicFilterEvaluator( return new DynamicPageFilter( PLANNER_CONTEXT, SESSION, - dynamicFilter, columns.buildOrThrow(), layout.buildOrThrow(), selectivityThreshold) - .createDynamicPageFilterEvaluator(COMPILER) + .createDynamicPageFilterEvaluator(COMPILER, dynamicFilter) .get(); } @@ -548,5 +593,26 @@ public TupleDomain getCurrentPredicate() { return currentPredicate; } + + @Override + public boolean equals(Object o) + { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TestingDynamicFilter that = (TestingDynamicFilter) o; + return futuresLeft == that.futuresLeft + && Objects.equals(isBlocked, that.isBlocked) + && Objects.equals(currentPredicate, that.currentPredicate); + } + + @Override + public int hashCode() + { + return Objects.hash(isBlocked, currentPredicate, futuresLeft); + } } } diff --git a/lib/trino-parquet/src/test/java/io/trino/parquet/BenchmarkColumnarFilterParquetData.java b/lib/trino-parquet/src/test/java/io/trino/parquet/BenchmarkColumnarFilterParquetData.java index bd7194a51276..9f7918115838 100644 --- a/lib/trino-parquet/src/test/java/io/trino/parquet/BenchmarkColumnarFilterParquetData.java +++ b/lib/trino-parquet/src/test/java/io/trino/parquet/BenchmarkColumnarFilterParquetData.java @@ -29,6 +29,7 @@ import io.trino.parquet.reader.TestingParquetDataSource; import io.trino.parquet.writer.ParquetWriterOptions; import io.trino.spi.Page; +import io.trino.spi.connector.DynamicFilter; import io.trino.spi.function.OperatorType; import io.trino.spi.type.Type; import io.trino.sql.gen.ExpressionCompiler; @@ -207,7 +208,7 @@ public void setup() ImmutableList.of(new InputReferenceExpression(EXTENDED_PRICE, DOUBLE)), Optional.empty(), OptionalInt.empty()) - .get(); + .apply(DynamicFilter.EMPTY); List> columns = ImmutableList.of( LineItemColumn.EXTENDED_PRICE, diff --git a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestOrcPageSourceMemoryTracking.java b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestOrcPageSourceMemoryTracking.java index a2bd94bd693d..70019c71a196 100644 --- a/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestOrcPageSourceMemoryTracking.java +++ b/plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestOrcPageSourceMemoryTracking.java @@ -620,7 +620,7 @@ public SourceOperator newScanFilterAndProjectOperator(DriverContext driverContex new PlanNodeId("0"), (catalog) -> (session, split, table, columnHandles, dynamicFilter) -> pageSource, cursorProcessor, - pageProcessor, + (_) -> pageProcessor.get(), TEST_TABLE_HANDLE, columns.stream().map(ColumnHandle.class::cast).collect(toList()), DynamicFilter.EMPTY,