Search in sources :

Example 11 with JdbcColumnHandle

use of io.trino.plugin.jdbc.JdbcColumnHandle in project trino by trinodb.

the class ImplementAvgFloatingPoint method rewrite.

@Override
public Optional<JdbcExpression> rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext<String> context) {
    Variable argument = captures.get(ARGUMENT);
    JdbcColumnHandle columnHandle = (JdbcColumnHandle) context.getAssignment(argument.getName());
    verify(aggregateFunction.getOutputType() == columnHandle.getColumnType());
    return Optional.of(new JdbcExpression(format("avg(%s)", context.rewriteExpression(argument).orElseThrow()), columnHandle.getJdbcTypeHandle()));
}
Also used : Variable(io.trino.spi.expression.Variable) JdbcColumnHandle(io.trino.plugin.jdbc.JdbcColumnHandle) JdbcExpression(io.trino.plugin.jdbc.JdbcExpression)

Example 12 with JdbcColumnHandle

use of io.trino.plugin.jdbc.JdbcColumnHandle in project trino by trinodb.

the class ImplementCorr method rewrite.

@Override
public Optional<JdbcExpression> rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext<String> context) {
    List<Variable> arguments = captures.get(ARGUMENTS);
    verify(arguments.size() == 2);
    Variable argument1 = arguments.get(0);
    Variable argument2 = arguments.get(1);
    JdbcColumnHandle columnHandle1 = (JdbcColumnHandle) context.getAssignment(argument1.getName());
    verify(aggregateFunction.getOutputType().equals(columnHandle1.getColumnType()));
    return Optional.of(new JdbcExpression(format("corr(%s, %s)", context.rewriteExpression(argument1).orElseThrow(), context.rewriteExpression(argument2).orElseThrow()), columnHandle1.getJdbcTypeHandle()));
}
Also used : Variable(io.trino.spi.expression.Variable) JdbcColumnHandle(io.trino.plugin.jdbc.JdbcColumnHandle) JdbcExpression(io.trino.plugin.jdbc.JdbcExpression)

Example 13 with JdbcColumnHandle

use of io.trino.plugin.jdbc.JdbcColumnHandle in project trino by trinodb.

the class ImplementCountDistinct method rewrite.

@Override
public Optional<JdbcExpression> rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext<String> context) {
    Variable argument = captures.get(ARGUMENT);
    JdbcColumnHandle columnHandle = (JdbcColumnHandle) context.getAssignment(argument.getName());
    verify(aggregateFunction.getOutputType() == BIGINT);
    boolean isCaseSensitiveType = columnHandle.getColumnType() instanceof CharType || columnHandle.getColumnType() instanceof VarcharType;
    if (aggregateFunction.isDistinct() && !isRemoteCollationSensitive && isCaseSensitiveType) {
        // Remote database is case insensitive or compares values differently from Trino
        return Optional.empty();
    }
    return Optional.of(new JdbcExpression(format("count(DISTINCT %s)", context.rewriteExpression(argument).orElseThrow()), bigintTypeHandle));
}
Also used : Variable(io.trino.spi.expression.Variable) VarcharType(io.trino.spi.type.VarcharType) JdbcColumnHandle(io.trino.plugin.jdbc.JdbcColumnHandle) JdbcExpression(io.trino.plugin.jdbc.JdbcExpression) CharType(io.trino.spi.type.CharType)

Example 14 with JdbcColumnHandle

use of io.trino.plugin.jdbc.JdbcColumnHandle in project trino by trinodb.

the class ImplementCovarianceSamp method rewrite.

@Override
public Optional<JdbcExpression> rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext<String> context) {
    List<Variable> arguments = captures.get(ARGUMENTS);
    verify(arguments.size() == 2);
    Variable argument1 = arguments.get(0);
    Variable argument2 = arguments.get(1);
    JdbcColumnHandle columnHandle1 = (JdbcColumnHandle) context.getAssignment(argument1.getName());
    verify(aggregateFunction.getOutputType().equals(columnHandle1.getColumnType()));
    return Optional.of(new JdbcExpression(format("covar_samp(%s, %s)", context.rewriteExpression(argument1).orElseThrow(), context.rewriteExpression(argument2).orElseThrow()), columnHandle1.getJdbcTypeHandle()));
}
Also used : Variable(io.trino.spi.expression.Variable) JdbcColumnHandle(io.trino.plugin.jdbc.JdbcColumnHandle) JdbcExpression(io.trino.plugin.jdbc.JdbcExpression)

Example 15 with JdbcColumnHandle

use of io.trino.plugin.jdbc.JdbcColumnHandle in project trino by trinodb.

the class ImplementRegrIntercept method rewrite.

@Override
public Optional<JdbcExpression> rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext<String> context) {
    List<Variable> arguments = captures.get(ARGUMENTS);
    verify(arguments.size() == 2);
    Variable argument1 = arguments.get(0);
    Variable argument2 = arguments.get(1);
    JdbcColumnHandle columnHandle1 = (JdbcColumnHandle) context.getAssignment(argument1.getName());
    verify(aggregateFunction.getOutputType().equals(columnHandle1.getColumnType()));
    return Optional.of(new JdbcExpression(format("regr_intercept(%s, %s)", context.rewriteExpression(argument1).orElseThrow(), context.rewriteExpression(argument2).orElseThrow()), columnHandle1.getJdbcTypeHandle()));
}
Also used : Variable(io.trino.spi.expression.Variable) JdbcColumnHandle(io.trino.plugin.jdbc.JdbcColumnHandle) JdbcExpression(io.trino.plugin.jdbc.JdbcExpression)

Aggregations

JdbcColumnHandle (io.trino.plugin.jdbc.JdbcColumnHandle)27 JdbcExpression (io.trino.plugin.jdbc.JdbcExpression)18 Variable (io.trino.spi.expression.Variable)18 JdbcTableHandle (io.trino.plugin.jdbc.JdbcTableHandle)8 TrinoException (io.trino.spi.TrinoException)3 Connection (java.sql.Connection)3 SQLException (java.sql.SQLException)3 ArrayList (java.util.ArrayList)3 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)2 Lists (com.google.common.collect.Lists)2 Logger (io.airlift.log.Logger)2 JdbcTypeHandle (io.trino.plugin.jdbc.JdbcTypeHandle)2 HostAddress (io.trino.spi.HostAddress)2 ConnectorSession (io.trino.spi.connector.ConnectorSession)2 ConnectorSplit (io.trino.spi.connector.ConnectorSplit)2 ConnectorSplitManager (io.trino.spi.connector.ConnectorSplitManager)2 ConnectorSplitSource (io.trino.spi.connector.ConnectorSplitSource)2 ConnectorTableHandle (io.trino.spi.connector.ConnectorTableHandle)2 ConnectorTransactionHandle (io.trino.spi.connector.ConnectorTransactionHandle)2