Search in sources :

Example 31 with Symbol

use of com.facebook.presto.sql.planner.Symbol in project presto by prestodb.

the class TestExpressionInterpreter method optimize.

private static Object optimize(Expression expression) {
    Map<NodeRef<Expression>, Type> expressionTypes = getExpressionTypes(TEST_SESSION, METADATA, SQL_PARSER, SYMBOL_TYPES, expression, emptyList(), WarningCollector.NOOP);
    ExpressionInterpreter interpreter = expressionOptimizer(expression, METADATA, TEST_SESSION, expressionTypes);
    return interpreter.optimize(variable -> {
        Symbol symbol = new Symbol(variable.getName());
        Object value = symbolConstant(symbol);
        if (value == null) {
            return symbol.toSymbolReference();
        }
        return value;
    });
}
Also used : NodeRef(com.facebook.presto.sql.tree.NodeRef) VarbinaryType(com.facebook.presto.common.type.VarbinaryType) VarcharType.createVarcharType(com.facebook.presto.common.type.VarcharType.createVarcharType) ArrayType(com.facebook.presto.common.type.ArrayType) Type(com.facebook.presto.common.type.Type) DecimalType.createDecimalType(com.facebook.presto.common.type.DecimalType.createDecimalType) Symbol(com.facebook.presto.sql.planner.Symbol) RowExpressionInterpreter(com.facebook.presto.sql.planner.RowExpressionInterpreter) ExpressionInterpreter(com.facebook.presto.sql.planner.ExpressionInterpreter) RowExpressionInterpreter.rowExpressionInterpreter(com.facebook.presto.sql.planner.RowExpressionInterpreter.rowExpressionInterpreter)

Example 32 with Symbol

use of com.facebook.presto.sql.planner.Symbol in project presto by prestodb.

the class TestExpressionInterpreter method optimize.

private static Object optimize(RowExpression expression, Level level) {
    return new RowExpressionInterpreter(expression, METADATA, TEST_SESSION.toConnectorSession(), level).optimize(variable -> {
        Symbol symbol = new Symbol(variable.getName());
        Object value = symbolConstant(symbol);
        if (value == null) {
            return new VariableReferenceExpression(Optional.empty(), symbol.getName(), SYMBOL_TYPES.get(symbol.toSymbolReference()));
        }
        return value;
    });
}
Also used : Symbol(com.facebook.presto.sql.planner.Symbol) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) RowExpressionInterpreter(com.facebook.presto.sql.planner.RowExpressionInterpreter)

Example 33 with Symbol

use of com.facebook.presto.sql.planner.Symbol in project presto by prestodb.

the class Util method orderingSchemeMatches.

static boolean orderingSchemeMatches(List<Ordering> expectedOrderBy, OrderingScheme orderingScheme, SymbolAliases symbolAliases) {
    if (expectedOrderBy.size() != orderingScheme.getOrderByVariables().size()) {
        return false;
    }
    for (int i = 0; i < expectedOrderBy.size(); ++i) {
        Ordering ordering = expectedOrderBy.get(i);
        Symbol symbol = Symbol.from(symbolAliases.get(ordering.getField()));
        if (!symbol.equals(new Symbol(orderingScheme.getOrderByVariables().get(i).getName()))) {
            return false;
        }
        SortOrder sortOrder = getOnlyElement(Maps.filterKeys(orderingScheme.getOrderingsMap(), variable -> variable.getName().equals(symbol.getName())).values().iterator());
        if (!ordering.getSortOrder().equals(sortOrder)) {
            return false;
        }
    }
    return true;
}
Also used : SortOrder(com.facebook.presto.common.block.SortOrder) Session(com.facebook.presto.Session) Maps(com.google.common.collect.Maps) Domain(com.facebook.presto.common.predicate.Domain) TupleDomain(com.facebook.presto.common.predicate.TupleDomain) List(java.util.List) Ordering(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.Ordering) ColumnHandle(com.facebook.presto.spi.ColumnHandle) Symbol(com.facebook.presto.sql.planner.Symbol) Map(java.util.Map) Optional(java.util.Optional) TableHandle(com.facebook.presto.spi.TableHandle) OrderingScheme(com.facebook.presto.spi.plan.OrderingScheme) Metadata(com.facebook.presto.metadata.Metadata) Iterators.getOnlyElement(com.google.common.collect.Iterators.getOnlyElement) Symbol(com.facebook.presto.sql.planner.Symbol) Ordering(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.Ordering) SortOrder(com.facebook.presto.common.block.SortOrder)

Example 34 with Symbol

use of com.facebook.presto.sql.planner.Symbol in project presto by prestodb.

the class MarkDistinctMatcher method detailMatches.

@Override
public MatchResult detailMatches(PlanNode node, StatsProvider stats, Session session, Metadata metadata, SymbolAliases symbolAliases) {
    checkState(shapeMatches(node), "Plan testing framework error: shapeMatches returned false in detailMatches in %s", this.getClass().getName());
    MarkDistinctNode markDistinctNode = (MarkDistinctNode) node;
    if (!markDistinctNode.getHashVariable().map(variable -> new Symbol(variable.getName())).equals(hashSymbol.map(alias -> alias.toSymbol(symbolAliases)))) {
        return NO_MATCH;
    }
    if (!markDistinctNode.getDistinctVariables().stream().map(VariableReferenceExpression::getName).map(Symbol::new).collect(toImmutableSet()).equals(distinctSymbols.stream().map(alias -> alias.toSymbol(symbolAliases)).collect(toImmutableSet()))) {
        return NO_MATCH;
    }
    return match(markerSymbol.toString(), createSymbolReference(markDistinctNode.getMarkerVariable()));
}
Also used : Session(com.facebook.presto.Session) StatsProvider(com.facebook.presto.cost.StatsProvider) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) Preconditions.checkState(com.google.common.base.Preconditions.checkState) PlanNode(com.facebook.presto.spi.plan.PlanNode) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) Symbol(com.facebook.presto.sql.planner.Symbol) MatchResult.match(com.facebook.presto.sql.planner.assertions.MatchResult.match) Objects.requireNonNull(java.util.Objects.requireNonNull) Optional(java.util.Optional) ImmutableSet.toImmutableSet(com.google.common.collect.ImmutableSet.toImmutableSet) NO_MATCH(com.facebook.presto.sql.planner.assertions.MatchResult.NO_MATCH) Metadata(com.facebook.presto.metadata.Metadata) MarkDistinctNode(com.facebook.presto.spi.plan.MarkDistinctNode) ExpressionTreeUtils.createSymbolReference(com.facebook.presto.sql.analyzer.ExpressionTreeUtils.createSymbolReference) MoreObjects.toStringHelper(com.google.common.base.MoreObjects.toStringHelper) MarkDistinctNode(com.facebook.presto.spi.plan.MarkDistinctNode) Symbol(com.facebook.presto.sql.planner.Symbol) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression)

Example 35 with Symbol

use of com.facebook.presto.sql.planner.Symbol in project presto by prestodb.

the class TestSwapAdjacentWindowsBySpecifications method subsetComesFirst.

@Test
public void subsetComesFirst() {
    String columnAAlias = "ALIAS_A";
    String columnBAlias = "ALIAS_B";
    ExpectedValueProvider<WindowNode.Specification> specificationA = specification(ImmutableList.of(columnAAlias), ImmutableList.of(), ImmutableMap.of());
    ExpectedValueProvider<WindowNode.Specification> specificationAB = specification(ImmutableList.of(columnAAlias, columnBAlias), ImmutableList.of(), ImmutableMap.of());
    Optional<Window> windowAB = Optional.of(new Window(ImmutableList.of(new SymbolReference("a"), new SymbolReference("b")), Optional.empty(), Optional.empty()));
    Optional<Window> windowA = Optional.of(new Window(ImmutableList.of(new SymbolReference("a")), Optional.empty(), Optional.empty()));
    tester().assertThat(new GatherAndMergeWindows.SwapAdjacentWindowsBySpecifications(0)).on(p -> p.window(new WindowNode.Specification(ImmutableList.of(p.variable("a")), Optional.empty()), ImmutableMap.of(p.variable("avg_1", DOUBLE), newWindowNodeFunction(ImmutableList.of(new Symbol("a")))), p.window(new WindowNode.Specification(ImmutableList.of(p.variable("a"), p.variable("b")), Optional.empty()), ImmutableMap.of(p.variable("avg_2", DOUBLE), newWindowNodeFunction(ImmutableList.of(new Symbol("b")))), p.values(p.variable("a"), p.variable("b"))))).matches(window(windowMatcherBuilder -> windowMatcherBuilder.specification(specificationAB).addFunction(functionCall("avg", Optional.empty(), ImmutableList.of(columnBAlias))), window(windowMatcherBuilder -> windowMatcherBuilder.specification(specificationA).addFunction(functionCall("avg", Optional.empty(), ImmutableList.of(columnAAlias))), values(ImmutableMap.of(columnAAlias, 0, columnBAlias, 1)))));
}
Also used : Window(com.facebook.presto.sql.tree.Window) PlanMatchPattern.specification(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.specification) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) Test(org.testng.annotations.Test) TypeSignatureProvider.fromTypes(com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes) Expressions.call(com.facebook.presto.sql.relational.Expressions.call) PlanMatchPattern.window(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.window) RANGE(com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE) ImmutableList(com.google.common.collect.ImmutableList) Symbol(com.facebook.presto.sql.planner.Symbol) UNBOUNDED_PRECEDING(com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING) PlanMatchPattern.functionCall(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.functionCall) BIGINT(com.facebook.presto.common.type.BigintType.BIGINT) SymbolReference(com.facebook.presto.sql.tree.SymbolReference) CURRENT_ROW(com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW) WindowNode(com.facebook.presto.sql.planner.plan.WindowNode) ImmutableMap(com.google.common.collect.ImmutableMap) DOUBLE(com.facebook.presto.common.type.DoubleType.DOUBLE) Collectors(java.util.stream.Collectors) List(java.util.List) BaseRuleTest(com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest) Window(com.facebook.presto.sql.tree.Window) MetadataManager.createTestMetadataManager(com.facebook.presto.metadata.MetadataManager.createTestMetadataManager) FunctionHandle(com.facebook.presto.spi.function.FunctionHandle) Optional(java.util.Optional) PlanMatchPattern.values(com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values) ExpectedValueProvider(com.facebook.presto.sql.planner.assertions.ExpectedValueProvider) WindowNode(com.facebook.presto.sql.planner.plan.WindowNode) SymbolReference(com.facebook.presto.sql.tree.SymbolReference) Symbol(com.facebook.presto.sql.planner.Symbol) Test(org.testng.annotations.Test) BaseRuleTest(com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest)

Aggregations

Symbol (com.facebook.presto.sql.planner.Symbol)38 List (java.util.List)13 Map (java.util.Map)13 VariableReferenceExpression (com.facebook.presto.spi.relation.VariableReferenceExpression)12 Optional (java.util.Optional)12 Session (com.facebook.presto.Session)9 ImmutableList (com.google.common.collect.ImmutableList)9 Metadata (com.facebook.presto.metadata.Metadata)8 Expression (com.facebook.presto.sql.tree.Expression)8 Preconditions.checkState (com.google.common.base.Preconditions.checkState)8 AggregationNode (com.facebook.presto.sql.planner.plan.AggregationNode)7 PlanNode (com.facebook.presto.spi.plan.PlanNode)6 NO_MATCH (com.facebook.presto.sql.planner.assertions.MatchResult.NO_MATCH)6 MatchResult.match (com.facebook.presto.sql.planner.assertions.MatchResult.match)6 ProjectNode (com.facebook.presto.sql.planner.plan.ProjectNode)6 FunctionCall (com.facebook.presto.sql.tree.FunctionCall)6 StatsProvider (com.facebook.presto.cost.StatsProvider)5 PlanNode (com.facebook.presto.sql.planner.plan.PlanNode)5 WindowNode (com.facebook.presto.sql.planner.plan.WindowNode)5 MoreObjects.toStringHelper (com.google.common.base.MoreObjects.toStringHelper)5