Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ protected final OperatorFactory createHashProjectOperator(int operatorId, PlanNo
RowExpression translatedHashExpression = translate(hashExpression.get(), variableToInputMapping.build());

PageFunctionCompiler functionCompiler = new PageFunctionCompiler(localQueryRunner.getMetadata(), 0);
projections.add(functionCompiler.compileProjection(translatedHashExpression, Optional.empty()).get());
projections.add(functionCompiler.compileProjection(session.getSqlFunctionProperties(), translatedHashExpression, Optional.empty()).get());

return new FilterAndProjectOperator.FilterAndProjectOperatorFactory(
operatorId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ protected List<? extends OperatorFactory> createOperatorFactories()
// and quantity < 24;
OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "lineitem", "extendedprice", "discount", "shipdate", "quantity");

Supplier<PageProjection> projection = new PageFunctionCompiler(localQueryRunner.getMetadata(), 0).compileProjection(field(0, BIGINT), Optional.empty());
Supplier<PageProjection> projection = new PageFunctionCompiler(localQueryRunner.getMetadata(), 0).compileProjection(session.getSqlFunctionProperties(), field(0, BIGINT), Optional.empty());

FilterAndProjectOperator.FilterAndProjectOperatorFactory tpchQuery6Operator = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(
1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ protected List<? extends OperatorFactory> createOperatorFactories()
field(0, DOUBLE),
constant(50000.0, DOUBLE));
ExpressionCompiler expressionCompiler = new ExpressionCompiler(metadata, new PageFunctionCompiler(metadata, 0));
Supplier<PageProcessor> pageProcessor = expressionCompiler.compilePageProcessor(Optional.of(filter), ImmutableList.of(field(0, DOUBLE)));
Supplier<PageProcessor> pageProcessor = expressionCompiler.compilePageProcessor(localQueryRunner.getDefaultSession().getSqlFunctionProperties(), Optional.of(filter), ImmutableList.of(field(0, DOUBLE)));

FilterAndProjectOperator.FilterAndProjectOperatorFactory filterAndProjectOperator = new FilterAndProjectOperator.FilterAndProjectOperatorFactory(
1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.util.Set;
import java.util.stream.Stream;

import static com.facebook.presto.spi.function.FunctionImplementationType.BUILTIN;
import static com.facebook.presto.spi.function.FunctionKind.SCALAR;
import static com.facebook.presto.spi.type.TypeSignature.parseTypeSignature;
import static com.google.common.base.CaseFormat.LOWER_CAMEL;
Expand Down Expand Up @@ -79,6 +80,7 @@ public static FunctionMetadata removeTypeParameters(FunctionMetadata metadata)
argumentsBuilder.build(),
metadata.getReturnType(),
metadata.getFunctionKind(),
metadata.getImplementationType(),
metadata.isDeterministic(),
metadata.isCalledOnNullInput());
}
Expand All @@ -87,6 +89,7 @@ public static FunctionMetadata removeTypeParameters(FunctionMetadata metadata)
argumentsBuilder.build(),
metadata.getReturnType(),
metadata.getFunctionKind(),
metadata.getImplementationType(),
metadata.isDeterministic(),
metadata.isCalledOnNullInput());
}
Expand Down Expand Up @@ -155,9 +158,9 @@ private static FunctionMetadata methodToFunctionMetadata(ScalarTranslationHeader
}

if (header.getOperatorType().isPresent()) {
return new FunctionMetadata(header.getOperatorType().get(), argumentTypes.build(), returnType, SCALAR, header.isDeterministic(), header.isCalledOnNullInput());
return new FunctionMetadata(header.getOperatorType().get(), argumentTypes.build(), returnType, SCALAR, BUILTIN, header.isDeterministic(), header.isCalledOnNullInput());
}
return new FunctionMetadata(header.getName(), argumentTypes.build(), returnType, SCALAR, header.isDeterministic(), header.isCalledOnNullInput());
return new FunctionMetadata(header.getName(), argumentTypes.build(), returnType, SCALAR, BUILTIN, header.isDeterministic(), header.isCalledOnNullInput());
}

@SafeVarargs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ private static List<FilterFunction> toFilterFunctions(RowExpression filter, Conn

List<RowExpression> conjuncts = extractConjuncts(filter);
if (conjuncts.size() == 1) {
return ImmutableList.of(new FilterFunction(session, determinismEvaluator.isDeterministic(filter), predicateCompiler.compilePredicate(filter).get()));
return ImmutableList.of(new FilterFunction(session, determinismEvaluator.isDeterministic(filter), predicateCompiler.compilePredicate(session.getSqlFunctionProperties(), filter).get()));
}

// Use LinkedHashMap to preserve user-specified order of conjuncts. This will be the initial order in which filters are applied.
Expand All @@ -517,7 +517,7 @@ private static List<FilterFunction> toFilterFunctions(RowExpression filter, Conn

return inputsToConjuncts.values().stream()
.map(expressions -> binaryExpression(AND, expressions))
.map(predicate -> new FilterFunction(session, determinismEvaluator.isDeterministic(predicate), predicateCompiler.compilePredicate(predicate).get()))
.map(predicate -> new FilterFunction(session, determinismEvaluator.isDeterministic(predicate), predicateCompiler.compilePredicate(session.getSqlFunctionProperties(), predicate).get()))
.collect(toImmutableList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
import com.facebook.presto.spi.connector.ConnectorSplitManager;
import com.facebook.presto.spi.connector.ConnectorSplitManager.SplitSchedulingContext;
import com.facebook.presto.spi.connector.ConnectorTransactionHandle;
import com.facebook.presto.spi.function.SqlFunctionProperties;
import com.facebook.presto.spi.predicate.Domain;
import com.facebook.presto.spi.predicate.NullableValue;
import com.facebook.presto.spi.predicate.Range;
Expand Down Expand Up @@ -949,6 +950,12 @@ public boolean isLegacyTimestamp()
return session.isLegacyTimestamp();
}

@Override
public SqlFunctionProperties getSqlFunctionProperties()
{
return session.getSqlFunctionProperties();
}

@Override
public <T> T getProperty(String name, Class<T> type)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -522,8 +522,8 @@ public SourceOperator newScanFilterAndProjectOperator(DriverContext driverContex
for (int i = 0; i < types.size(); i++) {
projectionsBuilder.add(field(i, types.get(i)));
}
Supplier<CursorProcessor> cursorProcessor = EXPRESSION_COMPILER.compileCursorProcessor(Optional.empty(), projectionsBuilder.build(), "key");
Supplier<PageProcessor> pageProcessor = EXPRESSION_COMPILER.compilePageProcessor(Optional.empty(), projectionsBuilder.build());
Supplier<CursorProcessor> cursorProcessor = EXPRESSION_COMPILER.compileCursorProcessor(SESSION.getSqlFunctionProperties(), Optional.empty(), projectionsBuilder.build(), "key");
Supplier<PageProcessor> pageProcessor = EXPRESSION_COMPILER.compilePageProcessor(SESSION.getSqlFunctionProperties(), Optional.empty(), projectionsBuilder.build());
SourceOperatorFactory sourceOperatorFactory = new ScanFilterAndProjectOperatorFactory(
0,
new PlanNodeId("test"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.facebook.presto.spi.ConnectorId;
import com.facebook.presto.spi.ConnectorSession;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.function.SqlFunctionProperties;
import com.facebook.presto.spi.security.ConnectorIdentity;
import com.facebook.presto.spi.type.TimeZoneKey;
import com.google.common.collect.ImmutableMap;
Expand All @@ -39,7 +40,7 @@ public class FullConnectorSession
private final ConnectorId connectorId;
private final String catalog;
private final SessionPropertyManager sessionPropertyManager;
private final boolean isLegacyTimestamp;
private final SqlFunctionProperties sqlFunctionProperties;

public FullConnectorSession(Session session, ConnectorIdentity identity)
{
Expand All @@ -49,7 +50,7 @@ public FullConnectorSession(Session session, ConnectorIdentity identity)
this.connectorId = null;
this.catalog = null;
this.sessionPropertyManager = null;
this.isLegacyTimestamp = SystemSessionProperties.isLegacyTimestamp(session);
this.sqlFunctionProperties = session.getSqlFunctionProperties();
}

public FullConnectorSession(
Expand All @@ -66,7 +67,7 @@ public FullConnectorSession(
this.connectorId = requireNonNull(connectorId, "connectorId is null");
this.catalog = requireNonNull(catalog, "catalog is null");
this.sessionPropertyManager = requireNonNull(sessionPropertyManager, "sessionPropertyManager is null");
this.isLegacyTimestamp = SystemSessionProperties.isLegacyTimestamp(session);
this.sqlFunctionProperties = session.getSqlFunctionProperties();
}

public Session getSession()
Expand Down Expand Up @@ -125,7 +126,13 @@ public Optional<String> getClientInfo()
@Override
public boolean isLegacyTimestamp()
{
return isLegacyTimestamp;
return sqlFunctionProperties.isLegacyTimestamp();
}

@Override
public SqlFunctionProperties getSqlFunctionProperties()
{
return sqlFunctionProperties;
}

@Override
Expand Down
14 changes: 14 additions & 0 deletions presto-main/src/main/java/com/facebook/presto/Session.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.facebook.presto.spi.ConnectorSession;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.QueryId;
import com.facebook.presto.spi.function.SqlFunctionProperties;
import com.facebook.presto.spi.security.Identity;
import com.facebook.presto.spi.security.SelectedRole;
import com.facebook.presto.spi.session.ResourceEstimates;
Expand All @@ -43,6 +44,9 @@
import java.util.TimeZone;
import java.util.stream.Collectors;

import static com.facebook.presto.SystemSessionProperties.isLegacyRowFieldOrdinalAccessEnabled;
import static com.facebook.presto.SystemSessionProperties.isLegacyTimestamp;
import static com.facebook.presto.SystemSessionProperties.isParseDecimalLiteralsAsDouble;
import static com.facebook.presto.spi.ConnectorId.createInformationSchemaConnectorId;
import static com.facebook.presto.spi.ConnectorId.createSystemTablesConnectorId;
import static com.facebook.presto.spi.StandardErrorCode.NOT_FOUND;
Expand Down Expand Up @@ -409,6 +413,16 @@ public ConnectorSession toConnectorSession()
return new FullConnectorSession(this, identity.toConnectorIdentity());
}

public SqlFunctionProperties getSqlFunctionProperties()
{
return SqlFunctionProperties.builder()
.setTimeZoneKey(timeZoneKey)
.setLegacyRowFieldOrdinalAccessEnabled(isLegacyRowFieldOrdinalAccessEnabled(this))
.setLegacyTimestamp(isLegacyTimestamp(this))
.setParseDecimalLiteralAsDouble(isParseDecimalLiteralsAsDouble(this))
.build();
}

public ConnectorSession toConnectorSession(ConnectorId connectorId)
{
requireNonNull(connectorId, "connectorId is null");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
import com.facebook.presto.operator.scalar.ArrayUnionFunction;
import com.facebook.presto.operator.scalar.ArraysOverlapFunction;
import com.facebook.presto.operator.scalar.BitwiseFunctions;
import com.facebook.presto.operator.scalar.BuiltInScalarFunctionImplementation;
import com.facebook.presto.operator.scalar.CharacterStringCasts;
import com.facebook.presto.operator.scalar.ColorFunctions;
import com.facebook.presto.operator.scalar.CombineHashFunction;
Expand Down Expand Up @@ -125,7 +126,6 @@
import com.facebook.presto.operator.scalar.Re2JRegexpFunctions;
import com.facebook.presto.operator.scalar.Re2JRegexpReplaceLambdaFunction;
import com.facebook.presto.operator.scalar.RepeatFunction;
import com.facebook.presto.operator.scalar.ScalarFunctionImplementation;
import com.facebook.presto.operator.scalar.SequenceFunction;
import com.facebook.presto.operator.scalar.SessionFunctions;
import com.facebook.presto.operator.scalar.SplitToMapFunction;
Expand Down Expand Up @@ -158,6 +158,7 @@
import com.facebook.presto.spi.function.FunctionNamespaceManager;
import com.facebook.presto.spi.function.FunctionNamespaceTransactionHandle;
import com.facebook.presto.spi.function.OperatorType;
import com.facebook.presto.spi.function.ScalarFunctionImplementation;
import com.facebook.presto.spi.function.Signature;
import com.facebook.presto.spi.function.SqlFunction;
import com.facebook.presto.spi.relation.FullyQualifiedName;
Expand Down Expand Up @@ -247,6 +248,8 @@
import static com.facebook.presto.operator.scalar.ArrayToElementConcatFunction.ARRAY_TO_ELEMENT_CONCAT_FUNCTION;
import static com.facebook.presto.operator.scalar.ArrayToJsonCast.ARRAY_TO_JSON;
import static com.facebook.presto.operator.scalar.ArrayTransformFunction.ARRAY_TRANSFORM_FUNCTION;
import static com.facebook.presto.operator.scalar.BuiltInScalarFunctionImplementation.ArgumentProperty.valueTypeArgumentProperty;
import static com.facebook.presto.operator.scalar.BuiltInScalarFunctionImplementation.NullConvention.RETURN_NULL_ON_NULL;
import static com.facebook.presto.operator.scalar.CastFromUnknownOperator.CAST_FROM_UNKNOWN;
import static com.facebook.presto.operator.scalar.ConcatFunction.VARBINARY_CONCAT;
import static com.facebook.presto.operator.scalar.ConcatFunction.VARCHAR_CONCAT;
Expand Down Expand Up @@ -284,13 +287,12 @@
import static com.facebook.presto.operator.scalar.RowNotEqualOperator.ROW_NOT_EQUAL;
import static com.facebook.presto.operator.scalar.RowToJsonCast.ROW_TO_JSON;
import static com.facebook.presto.operator.scalar.RowToRowCast.ROW_TO_ROW_CAST;
import static com.facebook.presto.operator.scalar.ScalarFunctionImplementation.ArgumentProperty.valueTypeArgumentProperty;
import static com.facebook.presto.operator.scalar.ScalarFunctionImplementation.NullConvention.RETURN_NULL_ON_NULL;
import static com.facebook.presto.operator.scalar.TryCastFunction.TRY_CAST;
import static com.facebook.presto.operator.scalar.ZipFunction.ZIP_FUNCTIONS;
import static com.facebook.presto.operator.scalar.ZipWithFunction.ZIP_WITH_FUNCTION;
import static com.facebook.presto.operator.window.AggregateWindowFunction.supplier;
import static com.facebook.presto.spi.StandardErrorCode.FUNCTION_IMPLEMENTATION_MISSING;
import static com.facebook.presto.spi.function.FunctionImplementationType.BUILTIN;
import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE;
import static com.facebook.presto.spi.function.FunctionKind.SCALAR;
import static com.facebook.presto.spi.function.FunctionKind.WINDOW;
Expand Down Expand Up @@ -356,7 +358,7 @@ public class BuiltInFunctionNamespaceManager

private final TypeManager typeManager;
private final LoadingCache<Signature, SpecializedFunctionKey> specializedFunctionKeyCache;
private final LoadingCache<SpecializedFunctionKey, ScalarFunctionImplementation> specializedScalarCache;
private final LoadingCache<SpecializedFunctionKey, BuiltInScalarFunctionImplementation> specializedScalarCache;
private final LoadingCache<SpecializedFunctionKey, InternalAggregationFunction> specializedAggregationCache;
private final LoadingCache<SpecializedFunctionKey, WindowFunctionSupplier> specializedWindowCache;
private final MagicLiteralFunction magicLiteralFunction;
Expand Down Expand Up @@ -744,6 +746,7 @@ public FunctionMetadata getFunctionMetadata(FunctionHandle functionHandle)
signature.getArgumentTypes(),
signature.getReturnType(),
signature.getKind(),
BUILTIN,
function.isDeterministic(),
function.isCalledOnNullInput());
}
Expand All @@ -753,6 +756,7 @@ public FunctionMetadata getFunctionMetadata(FunctionHandle functionHandle)
signature.getArgumentTypes(),
signature.getReturnType(),
signature.getKind(),
BUILTIN,
function.isDeterministic(),
function.isCalledOnNullInput());
}
Expand Down Expand Up @@ -790,13 +794,14 @@ public InternalAggregationFunction getAggregateFunctionImplementation(FunctionHa
}
}

@Override
public ScalarFunctionImplementation getScalarFunctionImplementation(FunctionHandle functionHandle)
{
checkArgument(functionHandle instanceof BuiltInFunctionHandle, "Expect BuiltInFunctionHandle");
return getScalarFunctionImplementation(((BuiltInFunctionHandle) functionHandle).getSignature());
}

public ScalarFunctionImplementation getScalarFunctionImplementation(Signature signature)
public BuiltInScalarFunctionImplementation getScalarFunctionImplementation(Signature signature)
{
checkArgument(signature.getKind() == SCALAR, "%s is not a scalar function", signature);
checkArgument(signature.getTypeVariableConstraints().isEmpty(), "%s has unbound type parameters", signature);
Expand Down Expand Up @@ -963,7 +968,7 @@ public String getDescription()
}

@Override
public ScalarFunctionImplementation specialize(BoundVariables boundVariables, int arity, TypeManager typeManager, FunctionManager functionManager)
public BuiltInScalarFunctionImplementation specialize(BoundVariables boundVariables, int arity, TypeManager typeManager, FunctionManager functionManager)
{
Type parameterType = boundVariables.getTypeVariable("T");
Type type = boundVariables.getTypeVariable("R");
Expand All @@ -985,7 +990,7 @@ public ScalarFunctionImplementation specialize(BoundVariables boundVariables, in
parameterType.getJavaType(),
type.getJavaType());

return new ScalarFunctionImplementation(
return new BuiltInScalarFunctionImplementation(
false,
ImmutableList.of(valueTypeArgumentProperty(RETURN_NULL_ON_NULL)),
methodHandle);
Expand Down
Loading