Search in sources :

Example 1 with LiteralEncoder

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

the class TestTupleDomainFilterUtils method setup.

@BeforeClass
public void setup() {
    metadata = createTestMetadataManager();
    literalEncoder = new LiteralEncoder(metadata.getBlockEncodingSerde());
}
Also used : LiteralEncoder(com.facebook.presto.sql.planner.LiteralEncoder) BeforeClass(org.testng.annotations.BeforeClass)

Example 2 with LiteralEncoder

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

the class SimplifyExpressions method createRewrite.

private static ExpressionRewriter createRewrite(Metadata metadata, SqlParser sqlParser) {
    requireNonNull(metadata, "metadata is null");
    requireNonNull(sqlParser, "sqlParser is null");
    LiteralEncoder literalEncoder = new LiteralEncoder(metadata.getBlockEncodingSerde());
    return (expression, context) -> rewrite(expression, context.getSession(), context.getVariableAllocator(), metadata, literalEncoder, sqlParser);
}
Also used : WarningCollector(com.facebook.presto.spi.WarningCollector) SymbolReference(com.facebook.presto.sql.tree.SymbolReference) NoOpVariableResolver(com.facebook.presto.sql.planner.NoOpVariableResolver) ImmutableSet(com.google.common.collect.ImmutableSet) Collections.emptyList(java.util.Collections.emptyList) Session(com.facebook.presto.Session) Rule(com.facebook.presto.sql.planner.iterative.Rule) Set(java.util.Set) ExtractCommonPredicatesExpressionRewriter.extractCommonPredicates(com.facebook.presto.sql.planner.iterative.rule.ExtractCommonPredicatesExpressionRewriter.extractCommonPredicates) SqlParser(com.facebook.presto.sql.parser.SqlParser) NodeRef(com.facebook.presto.sql.tree.NodeRef) LiteralEncoder(com.facebook.presto.sql.planner.LiteralEncoder) Expression(com.facebook.presto.sql.tree.Expression) PushDownNegationsExpressionRewriter.pushDownNegations(com.facebook.presto.sql.planner.iterative.rule.PushDownNegationsExpressionRewriter.pushDownNegations) PlanVariableAllocator(com.facebook.presto.sql.planner.PlanVariableAllocator) ExpressionAnalyzer.getExpressionTypes(com.facebook.presto.sql.analyzer.ExpressionAnalyzer.getExpressionTypes) Map(java.util.Map) Objects.requireNonNull(java.util.Objects.requireNonNull) ExpressionInterpreter(com.facebook.presto.sql.planner.ExpressionInterpreter) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Type(com.facebook.presto.common.type.Type) Metadata(com.facebook.presto.metadata.Metadata) LiteralEncoder(com.facebook.presto.sql.planner.LiteralEncoder)

Example 3 with LiteralEncoder

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

the class MaterializedViewUtils method generateBaseTablePredicates.

public static Map<SchemaTableName, Expression> generateBaseTablePredicates(Map<SchemaTableName, MaterializedViewStatus.MaterializedDataPredicates> predicatesFromBaseTables, Metadata metadata) {
    Map<SchemaTableName, Expression> baseTablePredicates = new HashMap<>();
    for (SchemaTableName baseTable : predicatesFromBaseTables.keySet()) {
        MaterializedViewStatus.MaterializedDataPredicates predicatesInfo = predicatesFromBaseTables.get(baseTable);
        List<String> partitionKeys = predicatesInfo.getColumnNames();
        ImmutableList<Expression> keyExpressions = partitionKeys.stream().map(Identifier::new).collect(toImmutableList());
        List<TupleDomain<String>> predicateDisjuncts = predicatesInfo.getPredicateDisjuncts();
        Expression disjunct = null;
        for (TupleDomain<String> predicateDisjunct : predicateDisjuncts) {
            Expression conjunct = null;
            Iterator<Expression> keyExpressionsIterator = keyExpressions.stream().iterator();
            Map<String, NullableValue> predicateKeyValue = extractFixedValues(predicateDisjunct).orElseThrow(() -> new IllegalStateException("predicateKeyValue is not present!"));
            for (String key : partitionKeys) {
                NullableValue nullableValue = predicateKeyValue.get(key);
                Expression expression;
                if (nullableValue.isNull()) {
                    expression = new IsNullPredicate(keyExpressionsIterator.next());
                } else {
                    LiteralEncoder literalEncoder = new LiteralEncoder(metadata.getBlockEncodingSerde());
                    Expression valueExpression = literalEncoder.toExpression(nullableValue.getValue(), nullableValue.getType(), false);
                    expression = new ComparisonExpression(EQUAL, keyExpressionsIterator.next(), valueExpression);
                }
                conjunct = conjunct == null ? expression : new LogicalBinaryExpression(AND, conjunct, expression);
            }
            disjunct = conjunct == null ? disjunct : disjunct == null ? conjunct : new LogicalBinaryExpression(OR, disjunct, conjunct);
        }
        // If no (fresh) partitions are found for table, that means we should not select from it
        if (disjunct == null) {
            disjunct = FALSE_LITERAL;
        }
        baseTablePredicates.put(baseTable, disjunct);
    }
    return baseTablePredicates;
}
Also used : LogicalBinaryExpression(com.facebook.presto.sql.tree.LogicalBinaryExpression) HashMap(java.util.HashMap) NullableValue(com.facebook.presto.common.predicate.NullableValue) SchemaTableName(com.facebook.presto.spi.SchemaTableName) ComparisonExpression(com.facebook.presto.sql.tree.ComparisonExpression) TupleDomain(com.facebook.presto.common.predicate.TupleDomain) ComparisonExpression(com.facebook.presto.sql.tree.ComparisonExpression) LogicalBinaryExpression(com.facebook.presto.sql.tree.LogicalBinaryExpression) Expression(com.facebook.presto.sql.tree.Expression) LiteralEncoder(com.facebook.presto.sql.planner.LiteralEncoder) IsNullPredicate(com.facebook.presto.sql.tree.IsNullPredicate) MaterializedViewStatus(com.facebook.presto.spi.MaterializedViewStatus)

Example 4 with LiteralEncoder

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

the class TestScalarStatsCalculator method testVarbinaryConstant.

@Test
public void testVarbinaryConstant() {
    MetadataManager metadata = createTestMetadataManager();
    LiteralEncoder literalEncoder = new LiteralEncoder(metadata.getBlockEncodingSerde());
    Expression expression = literalEncoder.toExpression(Slices.utf8Slice("ala ma kota"), VARBINARY);
    assertCalculate(expression).distinctValuesCount(1.0).lowValueUnknown().highValueUnknown().nullsFraction(0.0);
}
Also used : MetadataManager(com.facebook.presto.metadata.MetadataManager) MetadataManager.createTestMetadataManager(com.facebook.presto.metadata.MetadataManager.createTestMetadataManager) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) RowExpression(com.facebook.presto.spi.relation.RowExpression) Expression(com.facebook.presto.sql.tree.Expression) LiteralEncoder(com.facebook.presto.sql.planner.LiteralEncoder) Test(org.testng.annotations.Test)

Aggregations

LiteralEncoder (com.facebook.presto.sql.planner.LiteralEncoder)4 Expression (com.facebook.presto.sql.tree.Expression)3 Session (com.facebook.presto.Session)1 NullableValue (com.facebook.presto.common.predicate.NullableValue)1 TupleDomain (com.facebook.presto.common.predicate.TupleDomain)1 Type (com.facebook.presto.common.type.Type)1 Metadata (com.facebook.presto.metadata.Metadata)1 MetadataManager (com.facebook.presto.metadata.MetadataManager)1 MetadataManager.createTestMetadataManager (com.facebook.presto.metadata.MetadataManager.createTestMetadataManager)1 MaterializedViewStatus (com.facebook.presto.spi.MaterializedViewStatus)1 SchemaTableName (com.facebook.presto.spi.SchemaTableName)1 WarningCollector (com.facebook.presto.spi.WarningCollector)1 RowExpression (com.facebook.presto.spi.relation.RowExpression)1 VariableReferenceExpression (com.facebook.presto.spi.relation.VariableReferenceExpression)1 ExpressionAnalyzer.getExpressionTypes (com.facebook.presto.sql.analyzer.ExpressionAnalyzer.getExpressionTypes)1 SqlParser (com.facebook.presto.sql.parser.SqlParser)1 ExpressionInterpreter (com.facebook.presto.sql.planner.ExpressionInterpreter)1 NoOpVariableResolver (com.facebook.presto.sql.planner.NoOpVariableResolver)1 PlanVariableAllocator (com.facebook.presto.sql.planner.PlanVariableAllocator)1 Rule (com.facebook.presto.sql.planner.iterative.Rule)1