Skip to content
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
*/
package com.facebook.presto.benchmark;

import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.AggregationOperator.AggregationOperatorFactory;
import com.facebook.presto.operator.OperatorFactory;
import com.facebook.presto.operator.aggregation.InternalAggregationFunction;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.sql.planner.plan.AggregationNode.Step;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
import com.facebook.presto.testing.LocalQueryRunner;
Expand All @@ -26,7 +26,7 @@
import java.util.Optional;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.type.BigintType.BIGINT;

public class CountAggregationBenchmark
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.metadata.MetadataManager;
import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.AggregationOperator.AggregationOperatorFactory;
import com.facebook.presto.operator.OperatorFactory;
import com.facebook.presto.operator.aggregation.InternalAggregationFunction;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.sql.planner.plan.AggregationNode.Step;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
import com.facebook.presto.testing.LocalQueryRunner;
Expand All @@ -27,7 +27,7 @@
import java.util.Optional;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;

public class DoubleSumAggregationBenchmark
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.benchmark.HandTpchQuery1.TpchQuery1Operator.TpchQuery1OperatorFactory;
import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.DriverContext;
import com.facebook.presto.operator.HashAggregationOperator.HashAggregationOperatorFactory;
import com.facebook.presto.operator.Operator;
Expand All @@ -24,6 +23,7 @@
import com.facebook.presto.spi.Page;
import com.facebook.presto.spi.PageBuilder;
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.type.Type;
import com.facebook.presto.sql.planner.plan.AggregationNode.Step;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
Expand All @@ -37,7 +37,7 @@
import java.util.Optional;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.type.BigintType.BIGINT;
import static com.facebook.presto.spi.type.DateType.DATE;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*/
package com.facebook.presto.benchmark;

import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.AggregationOperator.AggregationOperatorFactory;
import com.facebook.presto.operator.FilterAndProjectOperator;
import com.facebook.presto.operator.OperatorFactory;
Expand All @@ -26,6 +25,7 @@
import com.facebook.presto.spi.ConnectorSession;
import com.facebook.presto.spi.Page;
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.sql.gen.PageFunctionCompiler;
import com.facebook.presto.sql.planner.plan.AggregationNode.Step;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
Expand All @@ -39,7 +39,7 @@
import java.util.function.Supplier;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.type.BigintType.BIGINT;
import static com.facebook.presto.spi.type.DateType.DATE;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
*/
package com.facebook.presto.benchmark;

import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.HashAggregationOperator.HashAggregationOperatorFactory;
import com.facebook.presto.operator.OperatorFactory;
import com.facebook.presto.operator.aggregation.InternalAggregationFunction;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.type.Type;
import com.facebook.presto.sql.planner.plan.AggregationNode.Step;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
Expand All @@ -29,7 +29,7 @@
import java.util.Optional;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
import static io.airlift.units.DataSize.Unit.MEGABYTE;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
import com.facebook.presto.operator.FilterAndProjectOperator;
import com.facebook.presto.operator.OperatorFactory;
import com.facebook.presto.operator.project.PageProcessor;
import com.facebook.presto.spi.relation.column.ColumnExpression;
import com.facebook.presto.sql.gen.ExpressionCompiler;
import com.facebook.presto.sql.gen.PageFunctionCompiler;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
import com.facebook.presto.sql.relational.RowExpression;
import com.facebook.presto.testing.LocalQueryRunner;
import com.google.common.collect.ImmutableList;
import io.airlift.units.DataSize;
Expand All @@ -29,7 +29,7 @@
import java.util.function.Supplier;

import static com.facebook.presto.benchmark.BenchmarkQueryRunner.createLocalQueryRunner;
import static com.facebook.presto.metadata.Signature.internalOperator;
import static com.facebook.presto.metadata.InternalFunction.internalOperator;
import static com.facebook.presto.spi.function.OperatorType.GREATER_THAN_OR_EQUAL;
import static com.facebook.presto.spi.type.BooleanType.BOOLEAN;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
Expand All @@ -50,7 +50,7 @@ public PredicateFilterBenchmark(LocalQueryRunner localQueryRunner)
protected List<? extends OperatorFactory> createOperatorFactories()
{
OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice");
RowExpression filter = call(
ColumnExpression filter = call(
internalOperator(GREATER_THAN_OR_EQUAL, BOOLEAN.getTypeSignature(), ImmutableList.of(DOUBLE.getTypeSignature(), DOUBLE.getTypeSignature())),
BOOLEAN,
field(0, DOUBLE),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import com.facebook.presto.block.BlockAssertions;
import com.facebook.presto.geospatial.KdbTreeUtils;
import com.facebook.presto.geospatial.Rectangle;
import com.facebook.presto.metadata.FunctionKind;
import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.aggregation.Accumulator;
import com.facebook.presto.operator.aggregation.AccumulatorFactory;
import com.facebook.presto.operator.aggregation.GroupedAccumulator;
Expand All @@ -30,6 +28,8 @@
import com.facebook.presto.spi.Page;
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.function.FunctionKind;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.type.TypeSignature;
import com.google.common.collect.ImmutableList;
import com.google.common.primitives.Ints;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
import com.esri.core.geometry.ogc.OGCGeometry;
import com.facebook.presto.block.BlockAssertions;
import com.facebook.presto.geospatial.serde.GeometrySerde;
import com.facebook.presto.metadata.FunctionKind;
import com.facebook.presto.metadata.Signature;
import com.facebook.presto.operator.aggregation.InternalAggregationFunction;
import com.facebook.presto.operator.scalar.AbstractTestFunctions;
import com.facebook.presto.plugin.geospatial.GeoPlugin;
import com.facebook.presto.plugin.geospatial.GeometryType;
import com.facebook.presto.spi.Page;
import com.facebook.presto.spi.function.FunctionKind;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.type.Type;
import io.airlift.slice.Slice;
import org.testng.annotations.BeforeClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.classloader.ThreadContextClassLoader;
import com.facebook.presto.spi.predicate.TupleDomain;
import com.facebook.presto.spi.relation.column.ColumnExpression;
import com.facebook.presto.spi.type.Type;
import com.facebook.presto.sql.gen.ExpressionCompiler;
import com.facebook.presto.sql.gen.PageFunctionCompiler;
import com.facebook.presto.sql.planner.plan.PlanNodeId;
import com.facebook.presto.sql.relational.RowExpression;
import com.facebook.presto.testing.TestingConnectorSession;
import com.facebook.presto.testing.TestingSplit;
import com.facebook.presto.testing.TestingTransactionHandle;
Expand Down Expand Up @@ -505,7 +505,7 @@ public SourceOperator newTableScanOperator(DriverContext driverContext)
public SourceOperator newScanFilterAndProjectOperator(DriverContext driverContext)
{
ConnectorPageSource pageSource = newPageSource();
ImmutableList.Builder<RowExpression> projectionsBuilder = ImmutableList.builder();
ImmutableList.Builder<ColumnExpression> projectionsBuilder = ImmutableList.builder();
for (int i = 0; i < types.size(); i++) {
projectionsBuilder.add(field(i, types.get(i)));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import com.facebook.presto.spi.connector.ConnectorPageSinkProvider;
import com.facebook.presto.spi.connector.ConnectorPageSourceProvider;
import com.facebook.presto.spi.connector.ConnectorRecordSetProvider;
import com.facebook.presto.spi.connector.ConnectorRuleProvider;
import com.facebook.presto.spi.connector.ConnectorSplitManager;
import com.facebook.presto.spi.procedure.Procedure;
import com.facebook.presto.spi.session.PropertyMetadata;
Expand Down Expand Up @@ -85,6 +86,7 @@ public class ConnectorManager
private final SplitManager splitManager;
private final PageSourceManager pageSourceManager;
private final IndexManager indexManager;
private final ConnectorOptimizationRuleManager optimizationRuleManager;
private final NodePartitioningManager nodePartitioningManager;

private final PageSinkManager pageSinkManager;
Expand Down Expand Up @@ -112,7 +114,7 @@ public ConnectorManager(
SplitManager splitManager,
PageSourceManager pageSourceManager,
IndexManager indexManager,
NodePartitioningManager nodePartitioningManager,
ConnectorOptimizationRuleManager optimizationRuleManager, NodePartitioningManager nodePartitioningManager,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

One parameter a line

PageSinkManager pageSinkManager,
HandleResolver handleResolver,
InternalNodeManager nodeManager,
Expand All @@ -128,6 +130,7 @@ public ConnectorManager(
this.splitManager = splitManager;
this.pageSourceManager = pageSourceManager;
this.indexManager = indexManager;
this.optimizationRuleManager = optimizationRuleManager;
this.nodePartitioningManager = nodePartitioningManager;
this.pageSinkManager = pageSinkManager;
this.handleResolver = handleResolver;
Expand Down Expand Up @@ -256,6 +259,9 @@ private synchronized void addConnectorInternal(MaterializedConnector connector)
connector.getIndexProvider()
.ifPresent(indexProvider -> indexManager.addIndexProvider(connectorId, indexProvider));

connector.getRuleProvider()
.ifPresent(ruleProvider -> optimizationRuleManager.addRuleProvider(connectorId, ruleProvider));

connector.getPartitioningProvider()
.ifPresent(partitioningProvider -> nodePartitioningManager.addPartitioningProvider(connectorId, partitioningProvider));

Expand Down Expand Up @@ -288,6 +294,7 @@ private synchronized void removeConnectorInternal(ConnectorId connectorId)
splitManager.removeConnectorSplitManager(connectorId);
pageSourceManager.removeConnectorPageSourceProvider(connectorId);
pageSinkManager.removeConnectorPageSinkProvider(connectorId);
optimizationRuleManager.removeRuleProvider(connectorId);
indexManager.removeIndexProvider(connectorId);
nodePartitioningManager.removePartitioningProvider(connectorId);
metadataManager.getProcedureRegistry().removeProcedures(connectorId);
Expand Down Expand Up @@ -332,6 +339,7 @@ private static class MaterializedConnector
private final ConnectorPageSourceProvider pageSourceProvider;
private final Optional<ConnectorPageSinkProvider> pageSinkProvider;
private final Optional<ConnectorIndexProvider> indexProvider;
private final Optional<ConnectorRuleProvider> ruleProvider;
private final Optional<ConnectorNodePartitioningProvider> partitioningProvider;
private final Optional<ConnectorAccessControl> accessControl;
private final List<PropertyMetadata<?>> sessionProperties;
Expand Down Expand Up @@ -395,6 +403,15 @@ public MaterializedConnector(ConnectorId connectorId, Connector connector)
}
this.indexProvider = Optional.ofNullable(indexProvider);

ConnectorRuleProvider ruleProvider = null;
try {
ruleProvider = connector.getConnectorRuleProvider();
requireNonNull(ruleProvider, format("Connector %s returned a null rule provider", connectorId));
}
catch (UnsupportedOperationException ignored) {
}
this.ruleProvider = Optional.ofNullable(ruleProvider);

ConnectorNodePartitioningProvider partitioningProvider = null;
try {
partitioningProvider = connector.getNodePartitioningProvider();
Expand Down Expand Up @@ -473,6 +490,11 @@ public Optional<ConnectorIndexProvider> getIndexProvider()
return indexProvider;
}

public Optional<ConnectorRuleProvider> getRuleProvider()
{
return ruleProvider;
}

public Optional<ConnectorNodePartitioningProvider> getPartitioningProvider()
{
return partitioningProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.connector;

import com.facebook.presto.spi.connector.ConnectorOptimizationRule;
import com.facebook.presto.spi.connector.ConnectorRuleProvider;
import com.google.common.collect.ImmutableSet;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;

public class ConnectorOptimizationRuleManager
{
private final ConcurrentMap<ConnectorId, ConnectorRuleProvider> providers = new ConcurrentHashMap<>();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Use Map interface


public void addRuleProvider(ConnectorId connectorId, ConnectorRuleProvider ruleProvider)
{
requireNonNull(connectorId, "connectorId is null");
requireNonNull(ruleProvider, "ruleProvider is null");
checkState(providers.putIfAbsent(connectorId, ruleProvider) == null, "RuleProvider for connector '%s' is already registered", connectorId);
}

public void removeRuleProvider(ConnectorId connectorId)
{
providers.remove(connectorId);
}

public Set<ConnectorOptimizationRule> getRules(ConnectorId connectorId)
{
ConnectorRuleProvider provider = providers.get(connectorId);
if (provider == null) {
return ImmutableSet.of();
}
return provider.getRules();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
import com.facebook.presto.Session;
import com.facebook.presto.metadata.FunctionRegistry;
import com.facebook.presto.metadata.Metadata;
import com.facebook.presto.metadata.Signature;
import com.facebook.presto.spi.ConnectorSession;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.type.BigintType;
import com.facebook.presto.spi.type.BooleanType;
import com.facebook.presto.spi.type.DateType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.facebook.presto.spi.function.InvocationConvention;
import com.facebook.presto.spi.function.InvocationConvention.InvocationArgumentConvention;
import com.facebook.presto.spi.function.InvocationConvention.InvocationReturnConvention;
import com.facebook.presto.spi.function.Signature;
import com.google.common.annotations.VisibleForTesting;

import java.util.List;
Expand Down
Loading