Java 类com.facebook.presto.sql.tree.LikePredicate 实例源码

项目:hue    文件:VeroGenExpFormatter.java   
@Override
protected String visitLikePredicate(LikePredicate node, Void context)
{
    StringBuilder builder = new StringBuilder();

    builder.append('(')
            .append(process(node.getValue(), null))
            .append(" LIKE ")
            .append(process(node.getPattern(), null));

    if (node.getEscape() != null) {
        builder.append(" ESCAPE ")
                .append(process(node.getEscape(), null));
    }

    builder.append(')');

    return builder.toString();
}
项目:presto-query-formatter    文件:ExpressionFormatter.java   
@Override
protected String visitLikePredicate(LikePredicate node, StackableAstVisitorContext<Integer> indent)
{
    StringBuilder builder = new StringBuilder();

    builder.append('(')
            .append(process(node.getValue(), indent))
            .append(" LIKE ")
            .append(process(node.getPattern(), indent));

    if (node.getEscape() != null) {
        builder.append(" ESCAPE ")
                .append(process(node.getEscape(), indent));
    }

    builder.append(')');

    return builder.toString();
}
项目:presto    文件:ExpressionInterpreter.java   
private Regex getConstantPattern(LikePredicate node)
{
    Regex result = likePatternCache.get(node);

    if (result == null) {
        StringLiteral pattern = (StringLiteral) node.getPattern();
        StringLiteral escape = (StringLiteral) node.getEscape();

        if (escape == null) {
            result = LikeFunctions.likePattern(pattern.getSlice());
        }
        else {
            result = LikeFunctions.likePattern(pattern.getSlice(), escape.getSlice());
        }

        likePatternCache.put(node, result);
    }

    return result;
}
项目:presto    文件:ExpressionFormatter.java   
@Override
protected String visitLikePredicate(LikePredicate node, Boolean unmangleNames)
{
    StringBuilder builder = new StringBuilder();

    builder.append('(')
            .append(process(node.getValue(), unmangleNames))
            .append(" LIKE ")
            .append(process(node.getPattern(), unmangleNames));

    if (node.getEscape() != null) {
        builder.append(" ESCAPE ")
                .append(process(node.getEscape(), unmangleNames));
    }

    builder.append(')');

    return builder.toString();
}
项目:EchoQuery    文件:ExpressionFormatter.java   
@Override
protected String visitLikePredicate(LikePredicate node, Boolean unmangleNames)
{
    StringBuilder builder = new StringBuilder();

    builder.append('(')
            .append(process(node.getValue(), unmangleNames))
            .append(" LIKE ")
            .append(process(node.getPattern(), unmangleNames));

    if (node.getEscape() != null) {
        builder.append(" ESCAPE ")
                .append(process(node.getEscape(), unmangleNames));
    }

    builder.append(')');

    return builder.toString();
}
项目:presto    文件:SqlToRowExpressionTranslator.java   
@Override
protected RowExpression visitLikePredicate(LikePredicate node, Void context)
{
    RowExpression value = process(node.getValue(), context);
    RowExpression pattern = process(node.getPattern(), context);

    if (node.getEscape() != null) {
        RowExpression escape = process(node.getEscape(), context);
        return call(likeSignature(), BOOLEAN, value, call(likePatternSignature(), LIKE_PATTERN, pattern, escape));
    }

    return call(likeSignature(), BOOLEAN, value, call(castSignature(LIKE_PATTERN, VARCHAR), LIKE_PATTERN, pattern));
}
项目:presto    文件:ExpressionAnalyzer.java   
@Override
protected Type visitLikePredicate(LikePredicate node, StackableAstVisitorContext<AnalysisContext> context)
{
    coerceType(context, node.getValue(), VARCHAR, "Left side of LIKE expression");
    coerceType(context, node.getPattern(), VARCHAR, "Pattern for LIKE expression");
    if (node.getEscape() != null) {
        coerceType(context, node.getEscape(), VARCHAR, "Escape for LIKE expression");
    }

    expressionTypes.put(node, BOOLEAN);
    return BOOLEAN;
}
项目:presto    文件:TestExpressionInterpreter.java   
private static void assertLike(byte[] value, String pattern, boolean expected)
{
    Expression predicate = new LikePredicate(
            rawStringLiteral(Slices.wrappedBuffer(value)),
            new StringLiteral(pattern),
            null);
    assertEquals(evaluate(predicate), expected);
}
项目:presto    文件:ExpressionInterpreter.java   
@Override
protected Object visitLikePredicate(LikePredicate node, Object context)
{
    Object value = process(node.getValue(), context);

    if (value == null) {
        return null;
    }

    if (value instanceof Slice &&
            node.getPattern() instanceof StringLiteral &&
            (node.getEscape() instanceof StringLiteral || node.getEscape() == null)) {
        // fast path when we know the pattern and escape are constant
        return LikeFunctions.like((Slice) value, getConstantPattern(node));
    }

    Object pattern = process(node.getPattern(), context);

    if (pattern == null) {
        return null;
    }

    Object escape = null;
    if (node.getEscape() != null) {
        escape = process(node.getEscape(), context);

        if (escape == null) {
            return null;
        }
    }

    if (value instanceof Slice &&
            pattern instanceof Slice &&
            (escape == null || escape instanceof Slice)) {
        Regex regex;
        if (escape == null) {
            regex = LikeFunctions.likePattern((Slice) pattern);
        }
        else {
            regex = LikeFunctions.likePattern((Slice) pattern, (Slice) escape);
        }

        return LikeFunctions.like((Slice) value, regex);
    }

    // if pattern is a constant without % or _ replace with a comparison
    if (pattern instanceof Slice && escape == null) {
        String stringPattern = ((Slice) pattern).toStringUtf8();
        if (!stringPattern.contains("%") && !stringPattern.contains("_")) {
            return new ComparisonExpression(ComparisonExpression.Type.EQUAL,
                    toExpression(value, expressionTypes.get(node.getValue())),
                    toExpression(pattern, expressionTypes.get(node.getPattern())));
        }
    }

    Expression optimizedEscape = null;
    if (node.getEscape() != null) {
        optimizedEscape = toExpression(escape, expressionTypes.get(node.getEscape()));
    }

    return new LikePredicate(
            toExpression(value, expressionTypes.get(node.getValue())),
            toExpression(pattern, expressionTypes.get(node.getPattern())),
            optimizedEscape);
}
项目:presto    文件:AggregationAnalyzer.java   
@Override
protected Boolean visitLikePredicate(LikePredicate node, Void context)
{
    return process(node.getValue(), context) && process(node.getPattern(), context);
}
项目:presto    文件:StatementAnalyzer.java   
@Override
protected RelationType visitShowTables(ShowTables showTables, AnalysisContext context)
{
    String catalogName = session.getCatalog().orElse(null);
    String schemaName = session.getSchema().orElse(null);

    Optional<QualifiedName> schema = showTables.getSchema();
    if (schema.isPresent()) {
        List<String> parts = schema.get().getParts();
        if (parts.size() > 2) {
            throw new SemanticException(INVALID_SCHEMA_NAME, showTables, "Too many parts in schema name: %s", schema);
        }
        if (parts.size() == 2) {
            catalogName = parts.get(0);
        }
        schemaName = schema.get().getSuffix();
    }

    if (catalogName == null) {
        throw new SemanticException(CATALOG_NOT_SPECIFIED, showTables, "Catalog must be specified when session catalog is not set");
    }
    if (schemaName == null) {
        throw new SemanticException(SCHEMA_NOT_SPECIFIED, showTables, "Schema must be specified when session schema is not set");
    }

    if (!metadata.listSchemaNames(session, catalogName).contains(schemaName)) {
        throw new SemanticException(MISSING_SCHEMA, showTables, "Schema '%s' does not exist", schemaName);
    }

    Expression predicate = equal(nameReference("table_schema"), new StringLiteral(schemaName));

    Optional<String> likePattern = showTables.getLikePattern();
    if (likePattern.isPresent()) {
        Expression likePredicate = new LikePredicate(nameReference("table_name"), new StringLiteral(likePattern.get()), null);
        predicate = logicalAnd(predicate, likePredicate);
    }

    Query query = simpleQuery(
            selectList(aliasedName("table_name", "Table")),
            from(catalogName, TABLE_TABLES),
            predicate,
            ordering(ascending("table_name")));

    return process(query, context);
}