diff --git a/core/trino-main/src/main/java/io/trino/cost/ScalarStatsCalculator.java b/core/trino-main/src/main/java/io/trino/cost/ScalarStatsCalculator.java index 8e117f810067..6ab31ac2acab 100644 --- a/core/trino-main/src/main/java/io/trino/cost/ScalarStatsCalculator.java +++ b/core/trino-main/src/main/java/io/trino/cost/ScalarStatsCalculator.java @@ -114,18 +114,18 @@ protected SymbolStatsEstimate visitConstant(Constant node, Void context) @Override protected SymbolStatsEstimate visitCall(Call node, Void context) { - if (node.function().getName().equals(builtinFunctionName(NEGATION))) { + if (node.function().name().equals(builtinFunctionName(NEGATION))) { SymbolStatsEstimate stats = process(node.arguments().getFirst()); return SymbolStatsEstimate.buildFrom(stats) .setLowValue(-stats.getHighValue()) .setHighValue(-stats.getLowValue()) .build(); } - else if (node.function().getName().equals(builtinFunctionName(ADD)) || - node.function().getName().equals(builtinFunctionName(SUBTRACT)) || - node.function().getName().equals(builtinFunctionName(MULTIPLY)) || - node.function().getName().equals(builtinFunctionName(DIVIDE)) || - node.function().getName().equals(builtinFunctionName(MODULUS))) { + else if (node.function().name().equals(builtinFunctionName(ADD)) || + node.function().name().equals(builtinFunctionName(SUBTRACT)) || + node.function().name().equals(builtinFunctionName(MULTIPLY)) || + node.function().name().equals(builtinFunctionName(DIVIDE)) || + node.function().name().equals(builtinFunctionName(MODULUS))) { return processArithmetic(node); } @@ -214,11 +214,11 @@ protected SymbolStatsEstimate processArithmetic(Call node) result.setLowValue(NaN) .setHighValue(NaN); } - else if (node.function().getName().equals(builtinFunctionName(DIVIDE)) && rightLow < 0 && rightHigh > 0) { + else if (node.function().name().equals(builtinFunctionName(DIVIDE)) && rightLow < 0 && rightHigh > 0) { result.setLowValue(Double.NEGATIVE_INFINITY) .setHighValue(Double.POSITIVE_INFINITY); } - else if (node.function().getName().equals(builtinFunctionName(MODULUS))) { + else if (node.function().name().equals(builtinFunctionName(MODULUS))) { double maxDivisor = max(abs(rightLow), abs(rightHigh)); if (leftHigh <= 0) { result.setLowValue(max(-maxDivisor, leftLow)) @@ -234,10 +234,10 @@ else if (leftLow >= 0) { } } else { - double v1 = operate(node.function().getName(), leftLow, rightLow); - double v2 = operate(node.function().getName(), leftLow, rightHigh); - double v3 = operate(node.function().getName(), leftHigh, rightLow); - double v4 = operate(node.function().getName(), leftHigh, rightHigh); + double v1 = operate(node.function().name(), leftLow, rightLow); + double v2 = operate(node.function().name(), leftLow, rightHigh); + double v3 = operate(node.function().name(), leftHigh, rightLow); + double v4 = operate(node.function().name(), leftHigh, rightHigh); double lowValue = min(v1, v2, v3, v4); double highValue = max(v1, v2, v3, v4); diff --git a/core/trino-main/src/main/java/io/trino/json/CachingResolver.java b/core/trino-main/src/main/java/io/trino/json/CachingResolver.java index 4d5d690ca2cf..cc8977beab8e 100644 --- a/core/trino-main/src/main/java/io/trino/json/CachingResolver.java +++ b/core/trino-main/src/main/java/io/trino/json/CachingResolver.java @@ -80,7 +80,7 @@ private ResolvedOperatorAndCoercions resolveOperators(OperatorType operatorType, return RESOLUTION_ERROR; } - BoundSignature signature = operator.getSignature(); + BoundSignature signature = operator.signature(); Optional leftCast = Optional.empty(); if (!signature.getArgumentTypes().get(0).equals(leftType)) { diff --git a/core/trino-main/src/main/java/io/trino/json/PathEvaluationVisitor.java b/core/trino-main/src/main/java/io/trino/json/PathEvaluationVisitor.java index e17b1448033c..7572d3153a04 100644 --- a/core/trino-main/src/main/java/io/trino/json/PathEvaluationVisitor.java +++ b/core/trino-main/src/main/java/io/trino/json/PathEvaluationVisitor.java @@ -336,7 +336,7 @@ protected List visitIrArithmeticBinary(IrArithmeticBinary node, PathEval throw new PathEvaluationException(e); } - return ImmutableList.of(TypedValue.fromValueAsObject(operators.getOperator().getSignature().getReturnType(), result)); + return ImmutableList.of(TypedValue.fromValueAsObject(operators.getOperator().signature().getReturnType(), result)); } @Override diff --git a/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java b/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java index 3d07912b3654..df01f2cbe6a8 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java +++ b/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java @@ -101,19 +101,19 @@ public ScalarFunctionImplementation getScalarFunctionImplementation(ResolvedFunc private ScalarFunctionImplementation getScalarFunctionImplementationInternal(ResolvedFunction resolvedFunction, InvocationConvention invocationConvention) { ScalarFunctionImplementation scalarFunctionImplementation; - if (isTrinoSqlLanguageFunction(resolvedFunction.getFunctionId())) { - scalarFunctionImplementation = languageFunctionProvider.specialize(resolvedFunction.getFunctionId(), invocationConvention, this); + if (isTrinoSqlLanguageFunction(resolvedFunction.functionId())) { + scalarFunctionImplementation = languageFunctionProvider.specialize(resolvedFunction.functionId(), invocationConvention, this); } else { FunctionDependencies functionDependencies = getFunctionDependencies(resolvedFunction); scalarFunctionImplementation = getFunctionProvider(resolvedFunction).getScalarFunctionImplementation( - resolvedFunction.getFunctionId(), - resolvedFunction.getSignature(), + resolvedFunction.functionId(), + resolvedFunction.signature(), functionDependencies, invocationConvention); } - verifyMethodHandleSignature(resolvedFunction.getSignature(), scalarFunctionImplementation, invocationConvention); + verifyMethodHandleSignature(resolvedFunction.signature(), scalarFunctionImplementation, invocationConvention); return scalarFunctionImplementation; } @@ -132,8 +132,8 @@ private AggregationImplementation getAggregationImplementationInternal(ResolvedF { FunctionDependencies functionDependencies = getFunctionDependencies(resolvedFunction); return getFunctionProvider(resolvedFunction).getAggregationImplementation( - resolvedFunction.getFunctionId(), - resolvedFunction.getSignature(), + resolvedFunction.functionId(), + resolvedFunction.signature(), functionDependencies); } @@ -152,8 +152,8 @@ private WindowFunctionSupplier getWindowFunctionSupplierInternal(ResolvedFunctio { FunctionDependencies functionDependencies = getFunctionDependencies(resolvedFunction); return getFunctionProvider(resolvedFunction).getWindowFunctionSupplier( - resolvedFunction.getFunctionId(), - resolvedFunction.getSignature(), + resolvedFunction.functionId(), + resolvedFunction.signature(), functionDependencies); } @@ -175,17 +175,17 @@ public TableFunctionProcessorProvider getTableFunctionProcessorProvider(TableFun private FunctionDependencies getFunctionDependencies(ResolvedFunction resolvedFunction) { - return new InternalFunctionDependencies(this::getScalarFunctionImplementation, resolvedFunction.getTypeDependencies(), resolvedFunction.getFunctionDependencies()); + return new InternalFunctionDependencies(this::getScalarFunctionImplementation, resolvedFunction.typeDependencies(), resolvedFunction.functionDependencies()); } private FunctionProvider getFunctionProvider(ResolvedFunction resolvedFunction) { - if (resolvedFunction.getCatalogHandle().equals(GlobalSystemConnector.CATALOG_HANDLE)) { + if (resolvedFunction.catalogHandle().equals(GlobalSystemConnector.CATALOG_HANDLE)) { return globalFunctionCatalog; } - FunctionProvider functionProvider = functionProviders.getService(resolvedFunction.getCatalogHandle()); - checkArgument(functionProvider != null, "No function provider for catalog: '%s' (function '%s')", resolvedFunction.getCatalogHandle(), resolvedFunction.getSignature().getName()); + FunctionProvider functionProvider = functionProviders.getService(resolvedFunction.catalogHandle()); + checkArgument(functionProvider != null, "No function provider for catalog: '%s' (function '%s')", resolvedFunction.catalogHandle(), resolvedFunction.signature().getName()); return functionProvider; } diff --git a/core/trino-main/src/main/java/io/trino/metadata/InternalFunctionDependencies.java b/core/trino-main/src/main/java/io/trino/metadata/InternalFunctionDependencies.java index bac8bc7134e0..e3b7314e96f4 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/InternalFunctionDependencies.java +++ b/core/trino-main/src/main/java/io/trino/metadata/InternalFunctionDependencies.java @@ -62,7 +62,7 @@ public InternalFunctionDependencies( this.specialization = specialization; this.types = ImmutableMap.copyOf(typeDependencies); this.functions = functionDependencies.stream() - .filter(function -> !isOperatorName(function.getSignature().getName().getFunctionName())) + .filter(function -> !isOperatorName(function.signature().getName().getFunctionName())) .collect(toImmutableMap(FunctionKey::new, identity())); this.operators = functionDependencies.stream() .filter(InternalFunctionDependencies::isOperator) @@ -91,7 +91,7 @@ public FunctionNullability getFunctionNullability(CatalogSchemaFunctionName name if (resolvedFunction == null) { throw new UndeclaredDependencyException(functionKey.toString()); } - return resolvedFunction.getFunctionNullability(); + return resolvedFunction.functionNullability(); } @Override @@ -102,7 +102,7 @@ public FunctionNullability getOperatorNullability(OperatorType operatorType, Lis if (resolvedFunction == null) { throw new UndeclaredDependencyException(operatorKey.toString()); } - return resolvedFunction.getFunctionNullability(); + return resolvedFunction.functionNullability(); } @Override @@ -113,7 +113,7 @@ public FunctionNullability getCastNullability(Type fromType, Type toType) if (resolvedFunction == null) { throw new UndeclaredDependencyException(castKey.toString()); } - return resolvedFunction.getFunctionNullability(); + return resolvedFunction.functionNullability(); } @Override @@ -191,13 +191,13 @@ private static List toTypeSignatures(List types) private static boolean isOperator(ResolvedFunction function) { - CatalogSchemaFunctionName name = function.getSignature().getName(); + CatalogSchemaFunctionName name = function.signature().getName(); return isBuiltinFunctionName(name) && isOperatorName(name.getFunctionName()) && unmangleOperator(name.getFunctionName()) != CAST; } private static boolean isCast(ResolvedFunction function) { - CatalogSchemaFunctionName name = function.getSignature().getName(); + CatalogSchemaFunctionName name = function.signature().getName(); return isBuiltinFunctionName(name) && isOperatorName(name.getFunctionName()) && unmangleOperator(name.getFunctionName()) == CAST; } @@ -208,8 +208,8 @@ public static final class FunctionKey private FunctionKey(ResolvedFunction resolvedFunction) { - name = resolvedFunction.getSignature().getName(); - argumentTypes = resolvedFunction.getSignature().getArgumentTypes().stream() + name = resolvedFunction.signature().getName(); + argumentTypes = resolvedFunction.signature().getArgumentTypes().stream() .map(Type::getTypeSignature) .collect(toImmutableList()); } @@ -256,8 +256,8 @@ public static final class OperatorKey private OperatorKey(ResolvedFunction resolvedFunction) { - operatorType = unmangleOperator(resolvedFunction.getSignature().getName().getFunctionName()); - argumentTypes = toTypeSignatures(resolvedFunction.getSignature().getArgumentTypes()); + operatorType = unmangleOperator(resolvedFunction.signature().getName().getFunctionName()); + argumentTypes = toTypeSignatures(resolvedFunction.signature().getArgumentTypes()); } private OperatorKey(OperatorType operatorType, List argumentTypes) @@ -302,8 +302,8 @@ private static final class CastKey private CastKey(ResolvedFunction resolvedFunction) { - fromType = resolvedFunction.getSignature().getArgumentTypes().get(0).getTypeSignature(); - toType = resolvedFunction.getSignature().getReturnType().getTypeSignature(); + fromType = resolvedFunction.signature().getArgumentTypes().get(0).getTypeSignature(); + toType = resolvedFunction.signature().getReturnType().getTypeSignature(); } private CastKey(TypeSignature fromType, TypeSignature toType) diff --git a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java index a8c53b8693ca..ed1b17d74ac3 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java +++ b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java @@ -2564,15 +2564,15 @@ public AggregationFunctionMetadata getAggregationFunctionMetadata(Session sessio { Signature functionSignature; AggregationFunctionMetadata aggregationFunctionMetadata; - if (resolvedFunction.getCatalogHandle().equals(GlobalSystemConnector.CATALOG_HANDLE)) { - functionSignature = functions.getFunctionMetadata(resolvedFunction.getFunctionId()).getSignature(); - aggregationFunctionMetadata = functions.getAggregationFunctionMetadata(resolvedFunction.getFunctionId()); + if (resolvedFunction.catalogHandle().equals(GlobalSystemConnector.CATALOG_HANDLE)) { + functionSignature = functions.getFunctionMetadata(resolvedFunction.functionId()).getSignature(); + aggregationFunctionMetadata = functions.getAggregationFunctionMetadata(resolvedFunction.functionId()); } else { - ConnectorSession connectorSession = session.toConnectorSession(resolvedFunction.getCatalogHandle()); - ConnectorMetadata metadata = getMetadata(session, resolvedFunction.getCatalogHandle()); - functionSignature = metadata.getFunctionMetadata(connectorSession, resolvedFunction.getFunctionId()).getSignature(); - aggregationFunctionMetadata = metadata.getAggregationFunctionMetadata(connectorSession, resolvedFunction.getFunctionId()); + ConnectorSession connectorSession = session.toConnectorSession(resolvedFunction.catalogHandle()); + ConnectorMetadata metadata = getMetadata(session, resolvedFunction.catalogHandle()); + functionSignature = metadata.getFunctionMetadata(connectorSession, resolvedFunction.functionId()).getSignature(); + aggregationFunctionMetadata = metadata.getAggregationFunctionMetadata(connectorSession, resolvedFunction.functionId()); } AggregationFunctionMetadataBuilder builder = AggregationFunctionMetadata.builder(); @@ -2581,7 +2581,7 @@ public AggregationFunctionMetadata getAggregationFunctionMetadata(Session sessio } if (!aggregationFunctionMetadata.getIntermediateTypes().isEmpty()) { - FunctionBinding functionBinding = toFunctionBinding(resolvedFunction.getFunctionId(), resolvedFunction.getSignature(), functionSignature); + FunctionBinding functionBinding = toFunctionBinding(resolvedFunction.functionId(), resolvedFunction.signature(), functionSignature); aggregationFunctionMetadata.getIntermediateTypes().stream() .map(typeSignature -> applyBoundVariables(typeSignature, functionBinding)) .forEach(builder::intermediateType); diff --git a/core/trino-main/src/main/java/io/trino/metadata/ResolvedFunction.java b/core/trino-main/src/main/java/io/trino/metadata/ResolvedFunction.java index 91a2509fab05..78992dfd1705 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/ResolvedFunction.java +++ b/core/trino-main/src/main/java/io/trino/metadata/ResolvedFunction.java @@ -13,8 +13,7 @@ */ package io.trino.metadata; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import io.trino.spi.connector.CatalogHandle; @@ -27,122 +26,37 @@ import io.trino.spi.type.TypeSignature; import java.util.Map; -import java.util.Objects; import java.util.Set; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -public class ResolvedFunction +public record ResolvedFunction( + BoundSignature signature, + CatalogHandle catalogHandle, + FunctionId functionId, + FunctionKind functionKind, + boolean deterministic, + FunctionNullability functionNullability, + Map typeDependencies, + Set functionDependencies) { - private final BoundSignature signature; - private final CatalogHandle catalogHandle; - private final FunctionId functionId; - private final FunctionKind functionKind; - private final boolean deterministic; - private final FunctionNullability functionNullability; - private final Map typeDependencies; - private final Set functionDependencies; - - @JsonCreator - public ResolvedFunction( - @JsonProperty("signature") BoundSignature signature, - @JsonProperty("catalogHandle") CatalogHandle catalogHandle, - @JsonProperty("id") FunctionId functionId, - @JsonProperty("functionKind") FunctionKind functionKind, - @JsonProperty("deterministic") boolean deterministic, - @JsonProperty("functionNullability") FunctionNullability functionNullability, - @JsonProperty("typeDependencies") Map typeDependencies, - @JsonProperty("functionDependencies") Set functionDependencies) + public ResolvedFunction { - this.signature = requireNonNull(signature, "signature is null"); - this.catalogHandle = requireNonNull(catalogHandle, "catalogHandle is null"); - this.functionId = requireNonNull(functionId, "functionId is null"); - this.functionKind = requireNonNull(functionKind, "functionKind is null"); - this.deterministic = deterministic; - this.functionNullability = requireNonNull(functionNullability, "functionNullability is null"); - this.typeDependencies = ImmutableMap.copyOf(requireNonNull(typeDependencies, "typeDependencies is null")); - this.functionDependencies = ImmutableSet.copyOf(requireNonNull(functionDependencies, "functionDependencies is null")); + requireNonNull(signature, "signature is null"); + requireNonNull(catalogHandle, "catalogHandle is null"); + requireNonNull(functionId, "functionId is null"); + requireNonNull(functionKind, "functionKind is null"); + requireNonNull(functionNullability, "functionNullability is null"); + typeDependencies = ImmutableMap.copyOf(requireNonNull(typeDependencies, "typeDependencies is null")); + functionDependencies = ImmutableSet.copyOf(requireNonNull(functionDependencies, "functionDependencies is null")); checkArgument(functionNullability.getArgumentNullable().size() == signature.getArgumentTypes().size(), "signature and functionNullability must have same argument count"); } - @JsonProperty - public BoundSignature getSignature() - { - return signature; - } - - @JsonProperty - public CatalogHandle getCatalogHandle() - { - return catalogHandle; - } - - @JsonProperty("id") - public FunctionId getFunctionId() - { - return functionId; - } - - @JsonProperty("functionKind") - public FunctionKind getFunctionKind() - { - return functionKind; - } - - @JsonProperty - public boolean isDeterministic() - { - return deterministic; - } - - @JsonProperty - public FunctionNullability getFunctionNullability() - { - return functionNullability; - } - - @JsonProperty - public Map getTypeDependencies() - { - return typeDependencies; - } - - @JsonProperty - public Set getFunctionDependencies() - { - return functionDependencies; - } - - public CatalogSchemaFunctionName getName() - { - return getSignature().getName(); - } - - @Override - public boolean equals(Object o) - { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ResolvedFunction that = (ResolvedFunction) o; - return Objects.equals(signature, that.signature) && - Objects.equals(catalogHandle, that.catalogHandle) && - Objects.equals(functionId, that.functionId) && - functionKind == that.functionKind && - deterministic == that.deterministic && - Objects.equals(functionNullability, that.functionNullability) && - Objects.equals(typeDependencies, that.typeDependencies) && - Objects.equals(functionDependencies, that.functionDependencies); - } - - @Override - public int hashCode() + @JsonIgnore // TODO: airlift/airlift#1141 + public CatalogSchemaFunctionName name() { - return Objects.hash(signature, catalogHandle, functionId, functionKind, deterministic, functionNullability, typeDependencies, functionDependencies); + return signature().getName(); } @Override diff --git a/core/trino-main/src/main/java/io/trino/sql/DynamicFilters.java b/core/trino-main/src/main/java/io/trino/sql/DynamicFilters.java index e3fec53c5186..f67ccd544fd9 100644 --- a/core/trino-main/src/main/java/io/trino/sql/DynamicFilters.java +++ b/core/trino-main/src/main/java/io/trino/sql/DynamicFilters.java @@ -185,7 +185,7 @@ public static Optional getDescriptor(Expression expression) private static boolean isDynamicFilterFunction(Call call) { - return isDynamicFilterFunction(call.function().getName()); + return isDynamicFilterFunction(call.function().name()); } public static boolean isDynamicFilterFunction(CatalogSchemaFunctionName functionName) diff --git a/core/trino-main/src/main/java/io/trino/sql/InterpretedFunctionInvoker.java b/core/trino-main/src/main/java/io/trino/sql/InterpretedFunctionInvoker.java index d6ecb5a0ca54..1abb43b15a1a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/InterpretedFunctionInvoker.java +++ b/core/trino-main/src/main/java/io/trino/sql/InterpretedFunctionInvoker.java @@ -60,7 +60,7 @@ public Object invoke(ResolvedFunction function, ConnectorSession session, Object */ public Object invoke(ResolvedFunction function, ConnectorSession session, List arguments) { - ScalarFunctionImplementation implementation = functionManager.getScalarFunctionImplementation(function, getInvocationConvention(function.getSignature(), function.getFunctionNullability())); + ScalarFunctionImplementation implementation = functionManager.getScalarFunctionImplementation(function, getInvocationConvention(function.signature(), function.functionNullability())); MethodHandle method = implementation.getMethodHandle(); List actualArguments = new ArrayList<>(); @@ -85,11 +85,11 @@ public Object invoke(ResolvedFunction function, ConnectorSession session, List getReferencedTables() public List getRoutines() { return resolvedFunctions.values().stream() - .map(value -> new RoutineInfo(value.function.getSignature().getName().getFunctionName(), value.getAuthorization())) + .map(value -> new RoutineInfo(value.function.signature().getName().getFunctionName(), value.getAuthorization())) .collect(toImmutableList()); } diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/DeterminismEvaluator.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/DeterminismEvaluator.java index 591481e085df..69db8b37345a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/analyzer/DeterminismEvaluator.java +++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/DeterminismEvaluator.java @@ -58,7 +58,7 @@ public Visitor(Function resolvedFunctionSupplier @Override protected Void visitFunctionCall(FunctionCall node, AtomicBoolean deterministic) { - if (!resolvedFunctionSupplier.apply(node).isDeterministic()) { + if (!resolvedFunctionSupplier.apply(node).deterministic()) { deterministic.set(false); return null; } diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/ExpressionAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/ExpressionAnalyzer.java index 671a56d90366..21575abd5e9c 100644 --- a/core/trino-main/src/main/java/io/trino/sql/analyzer/ExpressionAnalyzer.java +++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/ExpressionAnalyzer.java @@ -1375,7 +1375,7 @@ else if (isAggregation) { } if (node.getArguments().size() > 127) { - throw semanticException(TOO_MANY_ARGUMENTS, node, "Too many arguments for function call %s()", function.getSignature().getName().getFunctionName()); + throw semanticException(TOO_MANY_ARGUMENTS, node, "Too many arguments for function call %s()", function.signature().getName().getFunctionName()); } if (node.getOrderBy().isPresent()) { @@ -1387,7 +1387,7 @@ else if (isAggregation) { } } - BoundSignature signature = function.getSignature(); + BoundSignature signature = function.signature(); for (int i = 0; i < argumentTypes.size(); i++) { Expression expression = node.getArguments().get(i); Type expectedType = signature.getArgumentTypes().get(i); @@ -1655,7 +1655,7 @@ private void analyzeFrameRangeOffset(Expression offsetValue, FrameBound.Type bou } throw e; } - BoundSignature signature = function.getSignature(); + BoundSignature signature = function.signature(); Type expectedSortKeyType = signature.getArgumentTypes().getFirst(); if (!expectedSortKeyType.equals(sortKeyType)) { if (!typeCoercion.canCoerce(sortKeyType, expectedSortKeyType)) { @@ -2159,7 +2159,7 @@ protected Type visitTrim(Trim node, Context context) String functionName = node.getSpecification().getFunctionName(); ResolvedFunction function = plannerContext.getMetadata().resolveBuiltinFunction(functionName, fromTypes(actualTypes)); - List expectedTypes = function.getSignature().getArgumentTypes(); + List expectedTypes = function.signature().getArgumentTypes(); checkState(expectedTypes.size() == actualTypes.size(), "wrong argument number in the resolved signature"); Type actualTrimSourceType = actualTypes.getFirst(); @@ -2173,7 +2173,7 @@ protected Type visitTrim(Trim node, Context context) } resolvedFunctions.put(NodeRef.of(node), function); - return setExpressionType(node, function.getSignature().getReturnType()); + return setExpressionType(node, function.signature().getReturnType()); } @Override @@ -2664,7 +2664,7 @@ public Type visitJsonExists(JsonExists node, Context context) throw new TrinoException(e::getErrorCode, extractLocation(node), e.getMessage(), e); } resolvedFunctions.put(NodeRef.of(node), function); - Type type = function.getSignature().getReturnType(); + Type type = function.signature().getReturnType(); return setExpressionType(node, type); } @@ -2773,7 +2773,7 @@ private Type analyzeJsonValueExpression( } resolvedFunctions.put(NodeRef.of(node), function); - return function.getSignature().getReturnType(); + return function.signature().getReturnType(); } @Override @@ -2842,7 +2842,7 @@ private Type analyzeJsonQueryExpression( jsonOutputFunctions.put(NodeRef.of(node), outputFunction); // cast the output value to the declared returned type if necessary - Type outputType = outputFunction.getSignature().getReturnType(); + Type outputType = outputFunction.signature().getReturnType(); if (!outputType.equals(returnedType)) { try { plannerContext.getMetadata().getCoercion(outputType, returnedType); @@ -2871,7 +2871,7 @@ private List analyzeJsonPathInvocation(String functionName, Node node, Jso // resolve function to read the context item as JSON JsonFormat inputFormat = jsonPathInvocation.getInputFormat(); ResolvedFunction inputFunction = getInputFunction(inputType, inputFormat, inputExpression); - Type expectedType = inputFunction.getSignature().getArgumentType(0); + Type expectedType = inputFunction.signature().getArgumentType(0); coerceType(inputExpression, inputType, expectedType, format("%s function input argument", functionName)); jsonInputFunctions.put(NodeRef.of(inputExpression), inputFunction); @@ -2917,7 +2917,7 @@ private List analyzeJsonPathInvocation(String functionName, Node node, Jso if (parameterFormat.isPresent()) { // resolve function to read the parameter as JSON ResolvedFunction parameterInputFunction = getInputFunction(parameterType, parameterFormat.get(), parameter); - Type expectedParameterType = parameterInputFunction.getSignature().getArgumentType(0); + Type expectedParameterType = parameterInputFunction.signature().getArgumentType(0); coerceType(parameter, parameterType, expectedParameterType, format("%s function JSON path parameter", functionName)); jsonInputFunctions.put(NodeRef.of(parameter), parameterInputFunction); passedType = JSON_2016; @@ -3083,7 +3083,7 @@ protected Type visitJsonObject(JsonObject node, Context context) } // resolve function to read the value as JSON ResolvedFunction inputFunction = getInputFunction(valueType, format.get(), value); - Type expectedValueType = inputFunction.getSignature().getArgumentType(0); + Type expectedValueType = inputFunction.signature().getArgumentType(0); coerceType(value, valueType, expectedValueType, "value passed to JSON_OBJECT function"); jsonInputFunctions.put(NodeRef.of(value), inputFunction); valueType = JSON_2016; @@ -3148,7 +3148,7 @@ protected Type visitJsonObject(JsonObject node, Context context) jsonOutputFunctions.put(NodeRef.of(node), outputFunction); // cast the output value to the declared returned type if necessary - Type outputType = outputFunction.getSignature().getReturnType(); + Type outputType = outputFunction.signature().getReturnType(); if (!outputType.equals(returnedType)) { try { plannerContext.getMetadata().getCoercion(outputType, returnedType); @@ -3195,7 +3195,7 @@ protected Type visitJsonArray(JsonArray node, Context context) if (format.isPresent()) { // resolve function to read the value as JSON ResolvedFunction inputFunction = getInputFunction(elementType, format.get(), element); - Type expectedElementType = inputFunction.getSignature().getArgumentType(0); + Type expectedElementType = inputFunction.signature().getArgumentType(0); coerceType(element, elementType, expectedElementType, "value passed to JSON_ARRAY function"); jsonInputFunctions.put(NodeRef.of(element), inputFunction); elementType = JSON_2016; @@ -3258,7 +3258,7 @@ protected Type visitJsonArray(JsonArray node, Context context) jsonOutputFunctions.put(NodeRef.of(node), outputFunction); // cast the output value to the declared returned type if necessary - Type outputType = outputFunction.getSignature().getReturnType(); + Type outputType = outputFunction.signature().getReturnType(); if (!outputType.equals(returnedType)) { try { plannerContext.getMetadata().getCoercion(outputType, returnedType); @@ -3280,7 +3280,7 @@ private Type getOperator(Context context, Expression node, OperatorType operator BoundSignature operatorSignature; try { - operatorSignature = plannerContext.getMetadata().resolveOperator(operatorType, argumentTypes.build()).getSignature(); + operatorSignature = plannerContext.getMetadata().resolveOperator(operatorType, argumentTypes.build()).signature(); } catch (OperatorNotFoundException e) { throw semanticException(TYPE_MISMATCH, node, e, "%s", e.getMessage()); diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/JsonPathAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/JsonPathAnalyzer.java index 8fe45e9e6c5a..cf9dc1fc6f87 100644 --- a/core/trino-main/src/main/java/io/trino/sql/analyzer/JsonPathAnalyzer.java +++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/JsonPathAnalyzer.java @@ -151,7 +151,7 @@ protected Type visitAbsMethod(AbsMethod node, Void context) if (sourceType != null) { Type resultType; try { - resultType = metadata.resolveBuiltinFunction("abs", fromTypes(sourceType)).getSignature().getReturnType(); + resultType = metadata.resolveBuiltinFunction("abs", fromTypes(sourceType)).signature().getReturnType(); } catch (TrinoException e) { throw semanticException(INVALID_PATH, pathNode, e, "cannot perform JSON path abs() method with %s argument: %s", sourceType.getDisplayName(), e.getMessage()); @@ -171,7 +171,7 @@ protected Type visitArithmeticBinary(ArithmeticBinary node, Void context) if (leftType != null && rightType != null) { BoundSignature signature; try { - signature = metadata.resolveOperator(OperatorType.valueOf(node.getOperator().name()), ImmutableList.of(leftType, rightType)).getSignature(); + signature = metadata.resolveOperator(OperatorType.valueOf(node.getOperator().name()), ImmutableList.of(leftType, rightType)).signature(); } catch (OperatorNotFoundException e) { throw semanticException(INVALID_PATH, pathNode, e, "invalid operand types (%s and %s) in JSON path arithmetic binary expression: %s", leftType.getDisplayName(), rightType.getDisplayName(), e.getMessage()); @@ -198,7 +198,7 @@ protected Type visitArithmeticUnary(ArithmeticUnary node, Void context) } Type resultType; try { - resultType = metadata.resolveOperator(NEGATION, ImmutableList.of(sourceType)).getSignature().getReturnType(); + resultType = metadata.resolveOperator(NEGATION, ImmutableList.of(sourceType)).signature().getReturnType(); } catch (OperatorNotFoundException e) { throw semanticException(INVALID_PATH, pathNode, e, "invalid operand type (%s) in JSON path arithmetic unary expression: %s", sourceType.getDisplayName(), e.getMessage()); @@ -229,7 +229,7 @@ protected Type visitCeilingMethod(CeilingMethod node, Void context) if (sourceType != null) { Type resultType; try { - resultType = metadata.resolveBuiltinFunction("ceiling", fromTypes(sourceType)).getSignature().getReturnType(); + resultType = metadata.resolveBuiltinFunction("ceiling", fromTypes(sourceType)).signature().getReturnType(); } catch (TrinoException e) { throw semanticException(INVALID_PATH, pathNode, e, "cannot perform JSON path ceiling() method with %s argument: %s", sourceType.getDisplayName(), e.getMessage()); @@ -309,7 +309,7 @@ protected Type visitFloorMethod(FloorMethod node, Void context) if (sourceType != null) { Type resultType; try { - resultType = metadata.resolveBuiltinFunction("floor", fromTypes(sourceType)).getSignature().getReturnType(); + resultType = metadata.resolveBuiltinFunction("floor", fromTypes(sourceType)).signature().getReturnType(); } catch (TrinoException e) { throw semanticException(INVALID_PATH, pathNode, e, "cannot perform JSON path floor() method with %s argument: %s", sourceType.getDisplayName(), e.getMessage()); diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java index 1ba4ee6c3bc0..2c6bd7159acd 100644 --- a/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java +++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java @@ -4356,7 +4356,7 @@ private List analyzeWindowFunctions(QuerySpecification node, List< List argumentTypes = mappedCopy(windowFunction.getArguments(), analysis::getType); ResolvedFunction resolvedFunction = functionResolver.resolveFunction(session, windowFunction.getName(), fromTypes(argumentTypes), accessControl); - FunctionKind kind = resolvedFunction.getFunctionKind(); + FunctionKind kind = resolvedFunction.functionKind(); if (kind != AGGREGATE && kind != WINDOW) { throw semanticException(FUNCTION_NOT_WINDOW, node, "Not a window function: %s", windowFunction.getName()); } diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/WindowFunctionValidator.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/WindowFunctionValidator.java index 5d94342240eb..449110feaa9a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/analyzer/WindowFunctionValidator.java +++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/WindowFunctionValidator.java @@ -33,8 +33,8 @@ protected Void visitFunctionCall(FunctionCall functionCall, Analysis analysis) // pattern recognition functions are not resolved if (!analysis.isPatternRecognitionFunction(functionCall)) { ResolvedFunction resolvedFunction = analysis.getResolvedFunction(functionCall); - if (resolvedFunction != null && functionCall.getWindow().isEmpty() && resolvedFunction.getFunctionKind() == WINDOW) { - throw semanticException(MISSING_OVER, functionCall, "Window function %s requires an OVER clause", resolvedFunction.getSignature().getName()); + if (resolvedFunction != null && functionCall.getWindow().isEmpty() && resolvedFunction.functionKind() == WINDOW) { + throw semanticException(MISSING_OVER, functionCall, "Window function %s requires an OVER clause", resolvedFunction.signature().getName()); } } return super.visitFunctionCall(functionCall, analysis); diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/BytecodeUtils.java b/core/trino-main/src/main/java/io/trino/sql/gen/BytecodeUtils.java index bc5e4423bed5..b84470cfaef0 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/BytecodeUtils.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/BytecodeUtils.java @@ -163,8 +163,8 @@ public static BytecodeNode generateInvocation( { return generateInvocation( scope, - resolvedFunction.getSignature().getName().getFunctionName(), - resolvedFunction.getFunctionNullability(), + resolvedFunction.signature().getName().getFunctionName(), + resolvedFunction.functionNullability(), invocationConvention -> functionManager.getScalarFunctionImplementation(resolvedFunction, invocationConvention), arguments, binder); @@ -211,9 +211,9 @@ public static BytecodeNode generateFullInvocation( { return generateFullInvocation( scope, - resolvedFunction.getSignature().getName().getFunctionName(), - resolvedFunction.getFunctionNullability(), - resolvedFunction.getSignature().getArgumentTypes().stream() + resolvedFunction.signature().getName().getFunctionName(), + resolvedFunction.functionNullability(), + resolvedFunction.signature().getArgumentTypes().stream() .map(FunctionType.class::isInstance) .collect(toImmutableList()), invocationConvention -> functionManager.getScalarFunctionImplementation(resolvedFunction, invocationConvention), diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java b/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java index 33880eca930e..7f5441f9158f 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/InCodeGenerator.java @@ -215,7 +215,7 @@ public BytecodeNode generateExpression(BytecodeGeneratorContext generatorContext switchBlock = new BytecodeBlock() .comment("lookupSwitch(hashCode())") .getVariable(value) - .append(invoke(hashCodeBinding, resolvedHashCodeFunction.getSignature())) + .append(invoke(hashCodeBinding, resolvedHashCodeFunction.signature())) .invokeStatic(Long.class, "hashCode", int.class, long.class) .putVariable(expression) .append(switchBuilder.build()); diff --git a/core/trino-main/src/main/java/io/trino/sql/gen/NullIfCodeGenerator.java b/core/trino-main/src/main/java/io/trino/sql/gen/NullIfCodeGenerator.java index 45d9e9baf9ab..cf5d269b5391 100644 --- a/core/trino-main/src/main/java/io/trino/sql/gen/NullIfCodeGenerator.java +++ b/core/trino-main/src/main/java/io/trino/sql/gen/NullIfCodeGenerator.java @@ -54,8 +54,8 @@ public NullIfCodeGenerator(SpecialForm specialForm) List functionDependencies = specialForm.getFunctionDependencies(); checkArgument(functionDependencies.size() <= 3); equalsFunction = specialForm.getOperatorDependency(EQUAL); - firstCast = specialForm.getCastDependency(first.getType(), equalsFunction.getSignature().getArgumentTypes().get(0)); - secondCast = specialForm.getCastDependency(second.getType(), equalsFunction.getSignature().getArgumentTypes().get(0)); + firstCast = specialForm.getCastDependency(first.getType(), equalsFunction.signature().getArgumentTypes().get(0)); + secondCast = specialForm.getCastDependency(second.getType(), equalsFunction.signature().getArgumentTypes().get(0)); } @Override diff --git a/core/trino-main/src/main/java/io/trino/sql/ir/Call.java b/core/trino-main/src/main/java/io/trino/sql/ir/Call.java index a893599f4898..06d9390bf52a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/ir/Call.java +++ b/core/trino-main/src/main/java/io/trino/sql/ir/Call.java @@ -33,16 +33,16 @@ public record Call(ResolvedFunction function, List arguments) { arguments = ImmutableList.copyOf(arguments); - checkArgument(function.getSignature().getArgumentTypes().size() == arguments.size(), "Expected %s arguments, found: %s", function.getSignature().getArgumentTypes().size(), arguments.size()); + checkArgument(function.signature().getArgumentTypes().size() == arguments.size(), "Expected %s arguments, found: %s", function.signature().getArgumentTypes().size(), arguments.size()); for (int i = 0; i < arguments.size(); i++) { - validateType(function.getSignature().getArgumentType(i), arguments.get(i)); + validateType(function.signature().getArgumentType(i), arguments.get(i)); } } @Override public Type type() { - return function.getSignature().getReturnType(); + return function.signature().getReturnType(); } @Override @@ -61,7 +61,7 @@ public List children() public String toString() { return "%s(%s)".formatted( - isBuiltinFunctionName(function.getName()) ? function.getName().getFunctionName() : function.getName(), + isBuiltinFunctionName(function.name()) ? function.name().getFunctionName() : function.name(), arguments.stream() .map(Expression::toString) .collect(Collectors.joining(", "))); diff --git a/core/trino-main/src/main/java/io/trino/sql/ir/ExpressionFormatter.java b/core/trino-main/src/main/java/io/trino/sql/ir/ExpressionFormatter.java index 85b8b74ff7e9..5172a74e2547 100644 --- a/core/trino-main/src/main/java/io/trino/sql/ir/ExpressionFormatter.java +++ b/core/trino-main/src/main/java/io/trino/sql/ir/ExpressionFormatter.java @@ -102,9 +102,9 @@ protected String visitConstant(Constant node, Void context) @Override protected String visitCall(Call node, Void context) { - String name = isBuiltinFunctionName(node.function().getName()) ? - node.function().getName().getFunctionName() : - node.function().getName().toString(); + String name = isBuiltinFunctionName(node.function().name()) ? + node.function().name().getFunctionName() : + node.function().name().toString(); return name + '(' + joinExpressions(node.arguments()) + ')'; } diff --git a/core/trino-main/src/main/java/io/trino/sql/ir/IrExpressions.java b/core/trino-main/src/main/java/io/trino/sql/ir/IrExpressions.java index 4ca3fafe3064..1706df0739e0 100644 --- a/core/trino-main/src/main/java/io/trino/sql/ir/IrExpressions.java +++ b/core/trino-main/src/main/java/io/trino/sql/ir/IrExpressions.java @@ -87,10 +87,10 @@ private static boolean mayFail(PlannerContext plannerContext, Cast cast) private static boolean mayFail(ResolvedFunction function) { // TODO: these should be attributes of the function - CatalogSchemaFunctionName name = function.getName(); + CatalogSchemaFunctionName name = function.name(); return !name.equals(builtinFunctionName("length")) && !name.equals(builtinFunctionName("substring")) && !name.equals(builtinFunctionName(LIKE_FUNCTION_NAME)) && - !isDynamicFilterFunction(function.getName()); + !isDynamicFilterFunction(function.name()); } } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/ConnectorExpressionTranslator.java b/core/trino-main/src/main/java/io/trino/sql/planner/ConnectorExpressionTranslator.java index d7856a627621..22d37c7ff70f 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/ConnectorExpressionTranslator.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/ConnectorExpressionTranslator.java @@ -299,7 +299,7 @@ private Optional translateCall(String functionName, ResolvedFunction ResolvedFunctionCallBuilder builder = ResolvedFunctionCallBuilder.builder(resolved); for (int i = 0; i < arguments.size(); i++) { ConnectorExpression argument = arguments.get(i); - Type formalType = resolved.getSignature().getArgumentTypes().get(i); + Type formalType = resolved.signature().getArgumentTypes().get(i); Type argumentType = argument.getType(); Optional translated = translate(argument); if (translated.isEmpty()) { @@ -637,7 +637,7 @@ protected Optional visitCall(Call node, Void context) return Optional.empty(); } - CatalogSchemaFunctionName functionName = node.function().getName(); + CatalogSchemaFunctionName functionName = node.function().name(); checkArgument(!isDynamicFilterFunction(functionName), "Dynamic filter has no meaning for a connector, it should not be translated into ConnectorExpression"); if (functionName.equals(builtinFunctionName(LIKE_FUNCTION_NAME))) { @@ -711,7 +711,7 @@ private Optional translateLike(Call node) arguments.add(new io.trino.spi.expression.Constant(Slices.utf8Slice(matcher.getEscape().get().toString()), createVarcharType(1))); } } - else if (patternArgument instanceof Call call && call.function().getName().equals(builtinFunctionName(LIKE_PATTERN_FUNCTION_NAME))) { + else if (patternArgument instanceof Call call && call.function().name().equals(builtinFunctionName(LIKE_PATTERN_FUNCTION_NAME))) { Optional translatedPattern = process(call.arguments().get(0)); if (translatedPattern.isEmpty()) { return Optional.empty(); diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/DeterminismEvaluator.java b/core/trino-main/src/main/java/io/trino/sql/planner/DeterminismEvaluator.java index 81b8064efa31..3c53417ada09 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/DeterminismEvaluator.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/DeterminismEvaluator.java @@ -39,7 +39,7 @@ private static class Visitor @Override protected Void visitCall(Call node, AtomicBoolean deterministic) { - if (!node.function().isDeterministic()) { + if (!node.function().deterministic()) { deterministic.set(false); return null; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/DomainTranslator.java b/core/trino-main/src/main/java/io/trino/sql/planner/DomainTranslator.java index 2004589df4e0..0b23b0040c6a 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/DomainTranslator.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/DomainTranslator.java @@ -1034,7 +1034,7 @@ private Optional tryVisitLikeFunction(Call node, Boolean compl @Override protected ExtractionResult visitCall(Call node, Boolean complement) { - CatalogSchemaFunctionName name = node.function().getName(); + CatalogSchemaFunctionName name = node.function().name(); if (name.equals(builtinFunctionName("starts_with"))) { Optional result = tryVisitStartsWithFunction(node, complement); if (result.isPresent()) { diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/IrExpressionInterpreter.java b/core/trino-main/src/main/java/io/trino/sql/planner/IrExpressionInterpreter.java index 4bccb89bb953..27b135c7393c 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/IrExpressionInterpreter.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/IrExpressionInterpreter.java @@ -596,7 +596,7 @@ else if (!seen.contains(term)) { protected Expression visitCall(Call node, SymbolResolver context) { ResolvedFunction function = node.function(); - if (function.getName().getFunctionName().equals(mangleOperatorName(NEGATION))) { + if (function.name().getFunctionName().equals(mangleOperatorName(NEGATION))) { return processNegation(node, context); } @@ -604,7 +604,7 @@ protected Expression visitCall(Call node, SymbolResolver context) .map(argument -> processWithExceptionHandling(argument, context)) .toList(); - FunctionNullability nullability = function.getFunctionNullability(); + FunctionNullability nullability = function.functionNullability(); for (int i = 0; i < arguments.size(); i++) { Expression argument = arguments.get(i); if (isConstantNull(argument) && !nullability.isArgumentNullable(i)) { @@ -613,9 +613,9 @@ protected Expression visitCall(Call node, SymbolResolver context) } if ((evaluate || - function.isDeterministic() && // constant fold non-deterministic functions only in evaluation mode + function.deterministic() && // constant fold non-deterministic functions only in evaluation mode !isDynamicFilter(node) && - !function.getName().equals(FAIL_NAME) && + !function.name().equals(FAIL_NAME) && arguments.stream().allMatch(e -> e instanceof Constant || e instanceof Lambda && isDeterministic(e)))) { List argumentValues = arguments.stream() .map(argument -> switch (argument) { @@ -678,7 +678,7 @@ private Expression processNegation(Call negation, SymbolResolver context) return switch (value) { case Constant constant -> new Constant(negation.type(), functionInvoker.invoke(negation.function(), connectorSession, ImmutableList.of(constant.value()))); - case Call inner when inner.function().getName().equals(builtinFunctionName(NEGATION)) -> inner.arguments().getFirst(); // double negation + case Call inner when inner.function().name().equals(builtinFunctionName(NEGATION)) -> inner.arguments().getFirst(); // double negation case Expression inner -> new Call(negation.function(), ImmutableList.of(inner)); }; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java index ff1b97a004fe..9188f3fe56d1 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java @@ -1129,13 +1129,13 @@ public PhysicalOperation visitWindow(WindowNode node, LocalExecutionPlanContext } Symbol symbol = entry.getKey(); WindowFunctionSupplier windowFunctionSupplier = getWindowFunctionImplementation(resolvedFunction); - Type type = resolvedFunction.getSignature().getReturnType(); + Type type = resolvedFunction.signature().getReturnType(); List lambdas = function.getArguments().stream() .filter(Lambda.class::isInstance) .map(Lambda.class::cast) .collect(toImmutableList()); - List functionTypes = resolvedFunction.getSignature().getArgumentTypes().stream() + List functionTypes = resolvedFunction.signature().getArgumentTypes().stream() .filter(FunctionType.class::isInstance) .map(FunctionType.class::cast) .collect(toImmutableList()); @@ -1184,13 +1184,13 @@ public PhysicalOperation visitWindow(WindowNode node, LocalExecutionPlanContext private WindowFunctionSupplier getWindowFunctionImplementation(ResolvedFunction resolvedFunction) { - if (resolvedFunction.getFunctionKind() == FunctionKind.AGGREGATE) { - return uncheckedCacheGet(aggregationWindowFunctionSupplierCache, new FunctionKey(resolvedFunction.getFunctionId(), resolvedFunction.getSignature()), () -> { + if (resolvedFunction.functionKind() == FunctionKind.AGGREGATE) { + return uncheckedCacheGet(aggregationWindowFunctionSupplierCache, new FunctionKey(resolvedFunction.functionId(), resolvedFunction.signature()), () -> { AggregationImplementation aggregationImplementation = plannerContext.getFunctionManager().getAggregationImplementation(resolvedFunction); return new AggregationWindowFunctionSupplier( - resolvedFunction.getSignature(), + resolvedFunction.signature(), aggregationImplementation, - resolvedFunction.getFunctionNullability()); + resolvedFunction.functionNullability()); }); } return plannerContext.getFunctionManager().getWindowFunctionSupplier(resolvedFunction); @@ -1269,13 +1269,13 @@ public PhysicalOperation visitPatternRecognition(PatternRecognitionNode node, Lo } } WindowFunctionSupplier windowFunctionSupplier = getWindowFunctionImplementation(resolvedFunction); - Type type = resolvedFunction.getSignature().getReturnType(); + Type type = resolvedFunction.signature().getReturnType(); List lambdas = function.getArguments().stream() .filter(Lambda.class::isInstance) .map(Lambda.class::cast) .collect(toImmutableList()); - List functionTypes = resolvedFunction.getSignature().getArgumentTypes().stream() + List functionTypes = resolvedFunction.signature().getArgumentTypes().stream() .filter(FunctionType.class::isInstance) .map(FunctionType.class::cast) .collect(toImmutableList()); @@ -1454,7 +1454,7 @@ private Supplier prepareProjection(ExpressionAndValuePointers ex inputTypes.put( assignment.symbol(), switch (assignment.valuePointer()) { - case AggregationValuePointer pointer -> pointer.getFunction().getSignature().getReturnType(); + case AggregationValuePointer pointer -> pointer.getFunction().signature().getReturnType(); case ClassifierValuePointer pointer -> VARCHAR; case MatchNumberValuePointer pointer -> BIGINT; case ScalarValuePointer pointer -> pointer.getInputSymbol().type(); @@ -1509,7 +1509,7 @@ private ValueAccessors preparePhysicalValuePointers( AggregationImplementation aggregationImplementation = plannerContext.getFunctionManager().getAggregationImplementation(pointer.getFunction()); ImmutableList.Builder> builder = ImmutableList.builder(); - List signatureTypes = resolvedFunction.getSignature().getArgumentTypes(); + List signatureTypes = resolvedFunction.signature().getArgumentTypes(); for (int i = 0; i < pointer.getArguments().size(); i++) { builder.add(new SimpleEntry<>(pointer.getArguments().get(i), signatureTypes.get(i))); } @@ -1522,7 +1522,7 @@ private ValueAccessors preparePhysicalValuePointers( .map(Lambda.class::cast) .collect(toImmutableList()); - List functionTypes = resolvedFunction.getSignature().getArgumentTypes().stream() + List functionTypes = resolvedFunction.signature().getArgumentTypes().stream() .filter(FunctionType.class::isInstance) .map(FunctionType.class::cast) .collect(toImmutableList()); @@ -1575,13 +1575,13 @@ else if (matchNumberArgumentSymbol.isPresent() && symbol.equals(matchNumberArgum AggregationWindowFunctionSupplier aggregationWindowFunctionSupplier = uncheckedCacheGet( aggregationWindowFunctionSupplierCache, - new FunctionKey(resolvedFunction.getFunctionId(), resolvedFunction.getSignature()), + new FunctionKey(resolvedFunction.functionId(), resolvedFunction.signature()), () -> new AggregationWindowFunctionSupplier( - resolvedFunction.getSignature(), + resolvedFunction.signature(), aggregationImplementation, - resolvedFunction.getFunctionNullability())); + resolvedFunction.functionNullability())); matchAggregations.add(new MatchAggregationInstantiator( - resolvedFunction.getSignature(), + resolvedFunction.signature(), aggregationWindowFunctionSupplier, valueChannels, lambdaProviders, @@ -2539,7 +2539,7 @@ private Optional removeExpressionFromFilter(Expression filter, Expre private SpatialPredicate spatialTest(Call call, boolean probeFirst, Optional comparisonOperator) { - CatalogSchemaFunctionName functionName = call.function().getName(); + CatalogSchemaFunctionName functionName = call.function().name(); if (functionName.equals(builtinFunctionName(ST_CONTAINS))) { if (probeFirst) { return (buildGeometry, probeGeometry, radius) -> probeGeometry.contains(buildGeometry); @@ -3742,11 +3742,11 @@ private AggregatorFactory buildAggregatorFactory( AggregationImplementation aggregationImplementation = plannerContext.getFunctionManager().getAggregationImplementation(aggregation.getResolvedFunction()); AccumulatorFactory accumulatorFactory = uncheckedCacheGet( accumulatorFactoryCache, - new FunctionKey(resolvedFunction.getFunctionId(), resolvedFunction.getSignature()), + new FunctionKey(resolvedFunction.functionId(), resolvedFunction.signature()), () -> generateAccumulatorFactory( - resolvedFunction.getSignature(), + resolvedFunction.signature(), aggregationImplementation, - resolvedFunction.getFunctionNullability(), + resolvedFunction.functionNullability(), specializeAggregationLoops)); if (aggregation.isDistinct()) { @@ -3796,7 +3796,7 @@ private AggregatorFactory buildAggregatorFactory( .map(stateDescriptor -> stateDescriptor.getSerializer().getSerializedType()) .collect(toImmutableList()); Type intermediateType = (intermediateTypes.size() == 1) ? getOnlyElement(intermediateTypes) : RowType.anonymous(intermediateTypes); - Type finalType = resolvedFunction.getSignature().getReturnType(); + Type finalType = resolvedFunction.signature().getReturnType(); OptionalInt maskChannel = aggregation.getMask().stream() .mapToInt(value -> source.getLayout().get(value)) @@ -3806,7 +3806,7 @@ private AggregatorFactory buildAggregatorFactory( .filter(Lambda.class::isInstance) .map(Lambda.class::cast) .collect(toImmutableList()); - List functionTypes = resolvedFunction.getSignature().getArgumentTypes().stream() + List functionTypes = resolvedFunction.signature().getArgumentTypes().stream() .filter(FunctionType.class::isInstance) .map(FunctionType.class::cast) .collect(toImmutableList()); diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/NullabilityAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/planner/NullabilityAnalyzer.java index 25210a943375..6fe6c0666385 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/NullabilityAnalyzer.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/NullabilityAnalyzer.java @@ -106,7 +106,7 @@ protected Void visitFieldReference(FieldReference node, AtomicBoolean result) @Override protected Void visitCall(Call node, AtomicBoolean result) { - if (node.function().getFunctionNullability().isReturnNullable()) { + if (node.function().functionNullability().isReturnNullable()) { result.set(true); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/RelationPlanner.java b/core/trino-main/src/main/java/io/trino/sql/planner/RelationPlanner.java index bcc222d2577d..9cc543f48fd8 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/RelationPlanner.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/RelationPlanner.java @@ -1501,7 +1501,7 @@ else if (jsonTable.getPlan().orElseThrow() instanceof JsonTableDefaultPlan defau // cast to declared returned type Type expectedType = jsonTableRelationType.getFieldByIndex(i).getType(); - Type resultType = outputFunction.getSignature().getReturnType(); + Type resultType = outputFunction.signature().getReturnType(); if (!resultType.equals(expectedType)) { result = new Cast(result, expectedType); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/StatisticsAggregationPlanner.java b/core/trino-main/src/main/java/io/trino/sql/planner/StatisticsAggregationPlanner.java index e20dbe9d2819..5a7557a28673 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/StatisticsAggregationPlanner.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/StatisticsAggregationPlanner.java @@ -154,7 +154,7 @@ private ColumnStatisticsAggregation createAggregation(String functionName, Symbo private static ColumnStatisticsAggregation createAggregation(ResolvedFunction resolvedFunction, Symbol input, Type inputType) { - Type resolvedType = getOnlyElement(resolvedFunction.getSignature().getArgumentTypes()); + Type resolvedType = getOnlyElement(resolvedFunction.signature().getArgumentTypes()); verify(resolvedType.equals(inputType), "resolved function input type does not match the input type: %s != %s", resolvedType, inputType); return new ColumnStatisticsAggregation( new AggregationNode.Aggregation( @@ -164,7 +164,7 @@ private static ColumnStatisticsAggregation createAggregation(ResolvedFunction re Optional.empty(), Optional.empty(), Optional.empty()), - resolvedFunction.getSignature().getReturnType()); + resolvedFunction.signature().getReturnType()); } public static class TableStatisticAggregation diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/SymbolAllocator.java b/core/trino-main/src/main/java/io/trino/sql/planner/SymbolAllocator.java index e80c6d3a2006..c90d897957d8 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/SymbolAllocator.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/SymbolAllocator.java @@ -84,7 +84,7 @@ public Symbol newSymbol(String nameHint, Type type) public Symbol newSymbol(Expression expression) { String nameHint = switch (expression) { - case Call call -> call.function().getName().getFunctionName(); + case Call call -> call.function().name().getFunctionName(); case Reference reference -> reference.name(); default -> "expr"; }; diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/TranslationMap.java b/core/trino-main/src/main/java/io/trino/sql/planner/TranslationMap.java index 74f8531c5517..03bc84e9899c 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/TranslationMap.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/TranslationMap.java @@ -954,8 +954,8 @@ private io.trino.sql.ir.Expression translate(SubscriptExpression node) return new Call( operator, ImmutableList.of( - new io.trino.sql.ir.Cast(translateExpression(node.getBase()), operator.getSignature().getArgumentType(0)), - new io.trino.sql.ir.Cast(translateExpression(node.getIndex()), operator.getSignature().getArgumentType(1)))); + new io.trino.sql.ir.Cast(translateExpression(node.getBase()), operator.signature().getArgumentType(0)), + new io.trino.sql.ir.Cast(translateExpression(node.getIndex()), operator.signature().getArgumentType(1)))); } private io.trino.sql.ir.Expression translate(LambdaExpression node) @@ -995,7 +995,7 @@ private io.trino.sql.ir.Expression translate(JsonExists node) node.getJsonPathInvocation().getPathParameters().stream() .map(parameter -> translateExpression(parameter.getParameter())) .toList(), - resolvedFunction.getSignature().getArgumentType(2), + resolvedFunction.signature().getArgumentType(2), failOnError); IrJsonPath path = new JsonPathTranslator(session, plannerContext).rewriteToIr(analysis.getJsonPathAnalysis(node), orderedParameters.getParametersOrder()); @@ -1029,7 +1029,7 @@ private io.trino.sql.ir.Expression translate(JsonValue node) node.getJsonPathInvocation().getPathParameters().stream() .map(parameter -> translateExpression(parameter.getParameter())) .toList(), - resolvedFunction.getSignature().getArgumentType(2), + resolvedFunction.signature().getArgumentType(2), failOnError); IrJsonPath path = new JsonPathTranslator(session, plannerContext).rewriteToIr(analysis.getJsonPathAnalysis(node), orderedParameters.getParametersOrder()); @@ -1042,11 +1042,11 @@ private io.trino.sql.ir.Expression translate(JsonValue node) .add(new Constant(TINYINT, (long) node.getEmptyBehavior().ordinal())) .add(node.getEmptyDefault() .map(this::translateExpression) - .orElseGet(() -> new Constant(resolvedFunction.getSignature().getReturnType(), null))) + .orElseGet(() -> new Constant(resolvedFunction.signature().getReturnType(), null))) .add(new Constant(TINYINT, (long) node.getErrorBehavior().ordinal())) .add(node.getErrorDefault() .map(this::translateExpression) - .orElseGet(() -> new Constant(resolvedFunction.getSignature().getReturnType(), null))); + .orElseGet(() -> new Constant(resolvedFunction.signature().getReturnType(), null))); return new Call(resolvedFunction, arguments.build()); } @@ -1070,7 +1070,7 @@ private io.trino.sql.ir.Expression translate(JsonQuery node) node.getJsonPathInvocation().getPathParameters().stream() .map(parameter -> translateExpression(parameter.getParameter())) .toList(), - resolvedFunction.getSignature().getArgumentType(2), + resolvedFunction.signature().getArgumentType(2), failOnError); IrJsonPath path = new JsonPathTranslator(session, plannerContext).rewriteToIr(analysis.getJsonPathAnalysis(node), orderedParameters.getParametersOrder()); @@ -1098,7 +1098,7 @@ private io.trino.sql.ir.Expression translate(JsonQuery node) .map(plannerContext.getTypeManager()::getType) .orElse(VARCHAR); - Type resultType = outputFunction.getSignature().getReturnType(); + Type resultType = outputFunction.signature().getReturnType(); if (!resultType.equals(returnedType)) { result = new io.trino.sql.ir.Cast(result, returnedType); } @@ -1116,8 +1116,8 @@ private io.trino.sql.ir.Expression translate(JsonObject node) // prepare keys and values as rows if (node.getMembers().isEmpty()) { - checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.getSignature().getArgumentType(0))); - checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.getSignature().getArgumentType(1))); + checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.signature().getArgumentType(0))); + checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.signature().getArgumentType(1))); keysRow = new Constant(JSON_NO_PARAMETERS_ROW_TYPE, null); valuesRow = new Constant(JSON_NO_PARAMETERS_ROW_TYPE, null); } @@ -1165,7 +1165,7 @@ private io.trino.sql.ir.Expression translate(JsonObject node) .map(plannerContext.getTypeManager()::getType) .orElse(VARCHAR); - Type resultType = outputFunction.getSignature().getReturnType(); + Type resultType = outputFunction.signature().getReturnType(); if (!resultType.equals(returnedType)) { result = new io.trino.sql.ir.Cast(result, returnedType); } @@ -1182,7 +1182,7 @@ private io.trino.sql.ir.Expression translate(JsonArray node) // prepare elements as row if (node.getElements().isEmpty()) { - checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.getSignature().getArgumentType(0))); + checkState(JSON_NO_PARAMETERS_ROW_TYPE.equals(resolvedFunction.signature().getArgumentType(0))); elementsRow = new Constant(JSON_NO_PARAMETERS_ROW_TYPE, null); } else { @@ -1221,7 +1221,7 @@ private io.trino.sql.ir.Expression translate(JsonArray node) .map(plannerContext.getTypeManager()::getType) .orElse(VARCHAR); - Type resultType = outputFunction.getSignature().getReturnType(); + Type resultType = outputFunction.signature().getReturnType(); if (!resultType.equals(returnedType)) { result = new io.trino.sql.ir.Cast(result, returnedType); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ArraySortAfterArrayDistinct.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ArraySortAfterArrayDistinct.java index 22c77e15ba7c..2ac2ac0fe291 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ArraySortAfterArrayDistinct.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ArraySortAfterArrayDistinct.java @@ -79,14 +79,14 @@ public Visitor(Metadata metadata) public Expression rewriteCall(Call node, Void context, ExpressionTreeRewriter treeRewriter) { Call rewritten = treeRewriter.defaultRewrite(node, context); - if (node.function().getName().equals(ARRAY_DISTINCT_NAME) && + if (node.function().name().equals(ARRAY_DISTINCT_NAME) && getOnlyElement(rewritten.arguments()) instanceof Call) { Expression expression = getOnlyElement(rewritten.arguments()); Call call = (Call) expression; ResolvedFunction resolvedFunction = call.function(); - if (resolvedFunction.getName().equals(ARRAY_SORT_NAME)) { + if (resolvedFunction.name().equals(ARRAY_SORT_NAME)) { List arraySortArguments = call.arguments(); - List arraySortArgumentsTypes = resolvedFunction.getSignature().getArgumentTypes(); + List arraySortArgumentsTypes = resolvedFunction.signature().getArgumentTypes(); Call arrayDistinctCall = BuiltinFunctionCallBuilder.resolve(metadata) .setName(ArrayDistinctFunction.NAME) diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/CanonicalizeExpressionRewriter.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/CanonicalizeExpressionRewriter.java index a6868e96fa67..dfad934f1dce 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/CanonicalizeExpressionRewriter.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/CanonicalizeExpressionRewriter.java @@ -80,7 +80,7 @@ public Expression rewriteComparison(Comparison node, Void context, ExpressionTre @Override public Expression rewriteCall(Call node, Void context, ExpressionTreeRewriter treeRewriter) { - CatalogSchemaFunctionName functionName = node.function().getName(); + CatalogSchemaFunctionName functionName = node.function().name(); if (functionName.equals(MULTIPLY_BUILTIN_FUNCTION) || functionName.equals(ADD_BUILTIN_FUNCTION)) { @@ -92,8 +92,8 @@ public Expression rewriteCall(Call node, Void context, ExpressionTreeRewriter getPreAggregations(List extractCaseAggregation(Symbol aggregationSymbo } ResolvedFunction resolvedFunction = aggregation.getResolvedFunction(); - CatalogSchemaFunctionName name = resolvedFunction.getSignature().getName(); + CatalogSchemaFunctionName name = resolvedFunction.signature().getName(); if (!ALLOWED_FUNCTIONS.contains(name)) { // only cumulative aggregations (e.g. that can be split into aggregation of aggregations) are supported return Optional.empty(); @@ -366,7 +366,7 @@ private Optional extractCaseAggregation(Symbol aggregationSymbo return Optional.empty(); } - Type aggregationType = resolvedFunction.getSignature().getReturnType(); + Type aggregationType = resolvedFunction.signature().getReturnType(); ResolvedFunction cumulativeFunction; try { cumulativeFunction = plannerContext.getMetadata().resolveBuiltinFunction(name.getFunctionName(), fromTypes(aggregationType)); @@ -376,7 +376,7 @@ private Optional extractCaseAggregation(Symbol aggregationSymbo return Optional.empty(); } - if (!cumulativeFunction.getSignature().getReturnType().equals(aggregationType)) { + if (!cumulativeFunction.signature().getReturnType().equals(aggregationType)) { // aggregation type after rewrite must not change return Optional.empty(); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PruneCountAggregationOverScalar.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PruneCountAggregationOverScalar.java index b1936edaacb4..fcc45e02b043 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PruneCountAggregationOverScalar.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PruneCountAggregationOverScalar.java @@ -60,13 +60,13 @@ public Result apply(AggregationNode parent, Captures captures, Context context) if (!parent.hasDefaultOutput() || parent.getOutputSymbols().size() != 1) { return Result.empty(); } - FunctionId countFunctionId = metadata.resolveBuiltinFunction("count", ImmutableList.of()).getFunctionId(); + FunctionId countFunctionId = metadata.resolveBuiltinFunction("count", ImmutableList.of()).functionId(); Map assignments = parent.getAggregations(); for (Map.Entry entry : assignments.entrySet()) { AggregationNode.Aggregation aggregation = entry.getValue(); requireNonNull(aggregation, "aggregation is null"); ResolvedFunction resolvedFunction = aggregation.getResolvedFunction(); - if (!countFunctionId.equals(resolvedFunction.getFunctionId())) { + if (!countFunctionId.equals(resolvedFunction.functionId())) { return Result.empty(); } } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationIntoTableScan.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationIntoTableScan.java index 37333a7a9e06..ad7da7d3c694 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationIntoTableScan.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationIntoTableScan.java @@ -227,7 +227,7 @@ public static Optional pushAggregationIntoTableScan( private static AggregateFunction toAggregateFunction(AggregationNode.Aggregation aggregation) { - BoundSignature signature = aggregation.getResolvedFunction().getSignature(); + BoundSignature signature = aggregation.getResolvedFunction().signature(); ImmutableList.Builder arguments = ImmutableList.builder(); for (int i = 0; i < aggregation.getArguments().size(); i++) { diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java index e920afbbaec1..b8bd9f75d301 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java @@ -298,7 +298,7 @@ private MappedAggregationInfo createAggregationOverNull(AggregationNode referenc for (Map.Entry entry : referenceAggregation.getAggregations().entrySet()) { Symbol aggregationSymbol = entry.getKey(); Aggregation overNullAggregation = mapper.map(entry.getValue()); - Symbol overNullSymbol = symbolAllocator.newSymbol(overNullAggregation.getResolvedFunction().getSignature().getName().getFunctionName(), aggregationSymbol.type()); + Symbol overNullSymbol = symbolAllocator.newSymbol(overNullAggregation.getResolvedFunction().signature().getName().getFunctionName(), aggregationSymbol.type()); aggregationsOverNullBuilder.put(overNullSymbol, overNullAggregation); aggregationsSymbolMappingBuilder.put(aggregationSymbol, overNullSymbol); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushFilterThroughCountAggregation.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushFilterThroughCountAggregation.java index a25af938bebb..3037e6753582 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushFilterThroughCountAggregation.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushFilterThroughCountAggregation.java @@ -255,7 +255,7 @@ private static boolean isGroupedCountWithMask(AggregationNode aggregationNode) return false; } - BoundSignature signature = aggregation.getResolvedFunction().getSignature(); + BoundSignature signature = aggregation.getResolvedFunction().signature(); return signature.getArgumentTypes().isEmpty() && signature.getName().equals(COUNT_NAME); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushPartialAggregationThroughExchange.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushPartialAggregationThroughExchange.java index fecf9c57508f..2e33c08b96e1 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushPartialAggregationThroughExchange.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/PushPartialAggregationThroughExchange.java @@ -204,7 +204,7 @@ private PlanNode split(AggregationNode node, Context context) .map(plannerContext.getTypeManager()::getType) .collect(toImmutableList()); Type intermediateType = intermediateTypes.size() == 1 ? intermediateTypes.get(0) : RowType.anonymous(intermediateTypes); - Symbol intermediateSymbol = context.getSymbolAllocator().newSymbol(resolvedFunction.getSignature().getName().getFunctionName(), intermediateType); + Symbol intermediateSymbol = context.getSymbolAllocator().newSymbol(resolvedFunction.signature().getName().getFunctionName(), intermediateType); checkState(originalAggregation.getOrderingScheme().isEmpty(), "Aggregate with ORDER BY does not support partial aggregation"); intermediateAggregation.put( diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RemoveRedundantDateTrunc.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RemoveRedundantDateTrunc.java index 27c123c25192..b36641e6111d 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RemoveRedundantDateTrunc.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RemoveRedundantDateTrunc.java @@ -64,7 +64,7 @@ public Visitor(Session session, PlannerContext plannerContext) @Override public Expression rewriteCall(Call node, Void context, ExpressionTreeRewriter treeRewriter) { - CatalogSchemaFunctionName functionName = node.function().getName(); + CatalogSchemaFunctionName functionName = node.function().name(); if (functionName.equals(builtinFunctionName("date_trunc")) && node.arguments().size() == 2) { Expression unitExpression = node.arguments().get(0); Expression argument = node.arguments().get(1); diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ReplaceWindowWithRowNumber.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ReplaceWindowWithRowNumber.java index 9dca394259a9..a218fe43af22 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ReplaceWindowWithRowNumber.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/ReplaceWindowWithRowNumber.java @@ -42,7 +42,7 @@ public ReplaceWindowWithRowNumber(Metadata metadata) if (window.getWindowFunctions().size() != 1) { return false; } - BoundSignature signature = getOnlyElement(window.getWindowFunctions().values()).getResolvedFunction().getSignature(); + BoundSignature signature = getOnlyElement(window.getWindowFunctions().values()).getResolvedFunction().signature(); return signature.getArgumentTypes().isEmpty() && signature.getName().equals(ROW_NUMBER_NAME); }) .matching(window -> window.getOrderingScheme().isEmpty()); diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RewriteSpatialPartitioningAggregation.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RewriteSpatialPartitioningAggregation.java index bcf0293f3406..bdeaf71dde78 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RewriteSpatialPartitioningAggregation.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RewriteSpatialPartitioningAggregation.java @@ -79,7 +79,7 @@ public RewriteSpatialPartitioningAggregation(PlannerContext plannerContext) private static boolean hasSpatialPartitioningAggregation(AggregationNode aggregationNode) { return aggregationNode.getAggregations().values().stream() - .anyMatch(aggregation -> aggregation.getResolvedFunction().getSignature().getName().equals(NAME) && aggregation.getArguments().size() == 1); + .anyMatch(aggregation -> aggregation.getResolvedFunction().signature().getName().equals(NAME) && aggregation.getArguments().size() == 1); } @Override @@ -99,7 +99,7 @@ public Result apply(AggregationNode node, Captures captures, Context context) ImmutableMap.Builder envelopeAssignments = ImmutableMap.builder(); for (Map.Entry entry : node.getAggregations().entrySet()) { Aggregation aggregation = entry.getValue(); - CatalogSchemaFunctionName name = aggregation.getResolvedFunction().getSignature().getName(); + CatalogSchemaFunctionName name = aggregation.getResolvedFunction().signature().getName(); if (name.equals(NAME) && aggregation.getArguments().size() == 1) { Expression geometry = getOnlyElement(aggregation.getArguments()); Symbol envelopeSymbol = context.getSymbolAllocator().newSymbol("envelope", plannerContext.getTypeManager().getType(GEOMETRY_TYPE_SIGNATURE)); @@ -153,6 +153,6 @@ private boolean isStEnvelopeFunctionCall(Expression expression, ResolvedFunction return false; } - return call.function().getFunctionId().equals(stEnvelopeFunction.getFunctionId()); + return call.function().functionId().equals(stEnvelopeFunction.functionId()); } } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/SimplifyCountOverConstant.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/SimplifyCountOverConstant.java index 5d4520703535..185ac9fee62e 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/SimplifyCountOverConstant.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/SimplifyCountOverConstant.java @@ -103,7 +103,7 @@ public Result apply(AggregationNode parent, Captures captures, Context context) private boolean isCountOverConstant(AggregationNode.Aggregation aggregation, Assignments inputs) { - BoundSignature signature = aggregation.getResolvedFunction().getSignature(); + BoundSignature signature = aggregation.getResolvedFunction().signature(); if (!signature.getName().equals(COUNT_NAME) || signature.getArgumentTypes().size() != 1) { return false; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapDateTruncInComparison.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapDateTruncInComparison.java index 7f0ab9ae364e..1ec0a73e0d5f 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapDateTruncInComparison.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapDateTruncInComparison.java @@ -137,7 +137,7 @@ private Expression unwrapDateTrunc(Comparison expression) // This is provided by CanonicalizeExpressionRewriter. if (!(expression.left() instanceof Call call) || - !call.function().getName().equals(builtinFunctionName("date_trunc")) || + !call.function().name().equals(builtinFunctionName("date_trunc")) || call.arguments().size() != 2) { return expression; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapYearInComparison.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapYearInComparison.java index 341c3ae9ad2b..1f28367e0303 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapYearInComparison.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/UnwrapYearInComparison.java @@ -115,7 +115,7 @@ public Expression rewriteIn(In node, Void context, ExpressionTreeRewriter Expression value = in.value(); if (!(value instanceof Call call) || - !call.function().getName().equals(builtinFunctionName("year")) || + !call.function().name().equals(builtinFunctionName("year")) || call.arguments().size() != 1) { return in; } @@ -141,7 +141,7 @@ private Expression unwrapYear(Comparison expression) // Expect year on the left side and value on the right side of the comparison. // This is provided by CanonicalizeExpressionRewriter. if (!(expression.left() instanceof Call call) || - !call.function().getName().equals(builtinFunctionName("year")) || + !call.function().name().equals(builtinFunctionName("year")) || call.arguments().size() != 1) { return expression; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/Util.java b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/Util.java index e6d6869fc77a..fe65395031fe 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/Util.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/Util.java @@ -133,7 +133,7 @@ public static Optional toTopNRankingType(WindowNode node) return Optional.empty(); } - BoundSignature signature = getOnlyElement(node.getWindowFunctions().values()).getResolvedFunction().getSignature(); + BoundSignature signature = getOnlyElement(node.getWindowFunctions().values()).getResolvedFunction().signature(); if (!signature.getArgumentTypes().isEmpty()) { return Optional.empty(); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/IndexJoinOptimizer.java b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/IndexJoinOptimizer.java index 0ef060e20dbd..fa448cc26f84 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/IndexJoinOptimizer.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/IndexJoinOptimizer.java @@ -355,7 +355,7 @@ public PlanNode visitWindow(WindowNode node, RewriteContext context) { if (!node.getWindowFunctions().values().stream() .map(Function::getResolvedFunction) - .map(ResolvedFunction::getFunctionKind) + .map(ResolvedFunction::functionKind) .allMatch(AGGREGATE::equals)) { return node; } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/MetadataQueryOptimizer.java b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/MetadataQueryOptimizer.java index e5dbbfeeeed0..4941ef3b1454 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/MetadataQueryOptimizer.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/MetadataQueryOptimizer.java @@ -53,7 +53,6 @@ import java.util.Set; import static io.trino.metadata.GlobalFunctionCatalog.builtinFunctionName; -import static io.trino.sql.planner.DeterminismEvaluator.isDeterministic; import static java.util.Objects.requireNonNull; /** @@ -104,7 +103,7 @@ public PlanNode visitAggregation(AggregationNode node, RewriteContext cont { // supported functions are only MIN/MAX/APPROX_DISTINCT or distinct aggregates for (Aggregation aggregation : node.getAggregations().values()) { - if (!ALLOWED_FUNCTIONS.contains(aggregation.getResolvedFunction().getSignature().getName()) && !aggregation.isDistinct()) { + if (!ALLOWED_FUNCTIONS.contains(aggregation.getResolvedFunction().signature().getName()) && !aggregation.isDistinct()) { return context.defaultRewrite(node); } } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/OptimizeMixedDistinctAggregations.java b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/OptimizeMixedDistinctAggregations.java index cea1156c3d34..a49b96e14903 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/OptimizeMixedDistinctAggregations.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/optimizations/OptimizeMixedDistinctAggregations.java @@ -176,7 +176,7 @@ public PlanNode visitAggregation(AggregationNode node, RewriteContext toTopNRankingType(WindowNode node) return Optional.empty(); } Symbol rankingSymbol = getOnlyElement(node.getWindowFunctions().entrySet()).getKey(); - FunctionId functionId = node.getWindowFunctions().get(rankingSymbol).getResolvedFunction().getFunctionId(); + FunctionId functionId = node.getWindowFunctions().get(rankingSymbol).getResolvedFunction().functionId(); if (functionId.equals(rowNumberFunctionId)) { return Optional.of(ROW_NUMBER); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/plan/AggregationNode.java b/core/trino-main/src/main/java/io/trino/sql/planner/plan/AggregationNode.java index 845a6599639d..104e3f6c22d3 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/plan/AggregationNode.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/plan/AggregationNode.java @@ -480,11 +480,11 @@ private void verifyArguments(Step step) { int expectedArgumentCount; if (step == SINGLE || step == Step.PARTIAL) { - expectedArgumentCount = resolvedFunction.getSignature().getArgumentTypes().size(); + expectedArgumentCount = resolvedFunction.signature().getArgumentTypes().size(); } else { // Intermediate and final steps get the intermediate value and the lambda functions - expectedArgumentCount = 1 + (int) resolvedFunction.getSignature().getArgumentTypes().stream() + expectedArgumentCount = 1 + (int) resolvedFunction.signature().getArgumentTypes().stream() .filter(FunctionType.class::isInstance) .count(); } @@ -493,7 +493,7 @@ private void verifyArguments(Step step) expectedArgumentCount == arguments.size(), "%s aggregation function %s has %s arguments, but %s arguments were provided to function call", step, - resolvedFunction.getSignature(), + resolvedFunction.signature(), expectedArgumentCount, arguments.size()); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/plan/StatisticAggregations.java b/core/trino-main/src/main/java/io/trino/sql/planner/plan/StatisticAggregations.java index 85c2367e1a30..db4152f786f3 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/plan/StatisticAggregations.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/plan/StatisticAggregations.java @@ -73,7 +73,7 @@ public Parts createPartialAggregations(SymbolAllocator symbolAllocator, Session .map(plannerContext.getTypeManager()::getType) .collect(toImmutableList()); Type intermediateType = intermediateTypes.size() == 1 ? intermediateTypes.get(0) : RowType.anonymous(intermediateTypes); - Symbol partialSymbol = symbolAllocator.newSymbol(resolvedFunction.getSignature().getName().getFunctionName(), intermediateType); + Symbol partialSymbol = symbolAllocator.newSymbol(resolvedFunction.signature().getName().getFunctionName(), intermediateType); mappings.put(entry.getKey(), partialSymbol); partialAggregation.put(partialSymbol, new Aggregation( resolvedFunction, diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java b/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java index eb248806877c..ec5ba90e9345 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java @@ -2161,7 +2161,7 @@ public static String formatAggregation(Anonymizer anonymizer, Aggregation aggreg .map(anonymizer::anonymize) .collect(toImmutableList()); String arguments = Joiner.on(", ").join(anonymizedArguments); - if (aggregation.getArguments().isEmpty() && COUNT_NAME.equals(aggregation.getResolvedFunction().getSignature().getName())) { + if (aggregation.getArguments().isEmpty() && COUNT_NAME.equals(aggregation.getResolvedFunction().signature().getName())) { arguments = "*"; } if (aggregation.isDistinct()) { @@ -2189,7 +2189,7 @@ public static String formatAggregation(Anonymizer anonymizer, Aggregation aggreg private static String formatFunctionName(ResolvedFunction function) { - CatalogSchemaFunctionName name = function.getSignature().getName(); + CatalogSchemaFunctionName name = function.signature().getName(); if (isInlineFunction(name) || isBuiltinFunctionName(name)) { return name.getFunctionName(); } diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/sanity/TypeValidator.java b/core/trino-main/src/main/java/io/trino/sql/planner/sanity/TypeValidator.java index 10eeb162141a..83fbcb2c6472 100644 --- a/core/trino-main/src/main/java/io/trino/sql/planner/sanity/TypeValidator.java +++ b/core/trino-main/src/main/java/io/trino/sql/planner/sanity/TypeValidator.java @@ -68,10 +68,10 @@ public Void visitAggregation(AggregationNode node, Void context) Aggregation aggregation = entry.getValue(); switch (step) { case SINGLE -> { - checkSignature(symbol, aggregation.getResolvedFunction().getSignature()); - checkCall(symbol, aggregation.getResolvedFunction().getSignature(), aggregation.getArguments()); + checkSignature(symbol, aggregation.getResolvedFunction().signature()); + checkCall(symbol, aggregation.getResolvedFunction().signature(), aggregation.getArguments()); } - case FINAL -> checkSignature(symbol, aggregation.getResolvedFunction().getSignature()); + case FINAL -> checkSignature(symbol, aggregation.getResolvedFunction().signature()); case PARTIAL, INTERMEDIATE -> { // TODO } @@ -130,8 +130,8 @@ public Void visitUnion(UnionNode node, Void context) private void checkWindowFunctions(Map functions) { functions.forEach((symbol, function) -> { - checkSignature(symbol, function.getResolvedFunction().getSignature()); - checkCall(symbol, function.getResolvedFunction().getSignature(), function.getArguments()); + checkSignature(symbol, function.getResolvedFunction().signature()); + checkCall(symbol, function.getResolvedFunction().signature(), function.getArguments()); }); } diff --git a/core/trino-main/src/main/java/io/trino/sql/relational/CallExpression.java b/core/trino-main/src/main/java/io/trino/sql/relational/CallExpression.java index cbd871a62951..5c9787666731 100644 --- a/core/trino-main/src/main/java/io/trino/sql/relational/CallExpression.java +++ b/core/trino-main/src/main/java/io/trino/sql/relational/CallExpression.java @@ -52,7 +52,7 @@ public ResolvedFunction getResolvedFunction() @Override public Type getType() { - return resolvedFunction.getSignature().getReturnType(); + return resolvedFunction.signature().getReturnType(); } @JsonProperty @@ -64,7 +64,7 @@ public List getArguments() @Override public String toString() { - return resolvedFunction.getSignature().getName() + "(" + Joiner.on(", ").join(arguments) + ")"; + return resolvedFunction.signature().getName() + "(" + Joiner.on(", ").join(arguments) + ")"; } @Override diff --git a/core/trino-main/src/main/java/io/trino/sql/relational/DeterminismEvaluator.java b/core/trino-main/src/main/java/io/trino/sql/relational/DeterminismEvaluator.java index 98a182aad492..0b0dc85dd4e5 100644 --- a/core/trino-main/src/main/java/io/trino/sql/relational/DeterminismEvaluator.java +++ b/core/trino-main/src/main/java/io/trino/sql/relational/DeterminismEvaluator.java @@ -43,7 +43,7 @@ public Boolean visitConstant(ConstantExpression literal, Void context) public Boolean visitCall(CallExpression call, Void context) { ResolvedFunction resolvedFunction = call.getResolvedFunction(); - if (!resolvedFunction.isDeterministic()) { + if (!resolvedFunction.deterministic()) { return false; } diff --git a/core/trino-main/src/main/java/io/trino/sql/relational/SpecialForm.java b/core/trino-main/src/main/java/io/trino/sql/relational/SpecialForm.java index 820f6ecfda04..7b0a70b65cd2 100644 --- a/core/trino-main/src/main/java/io/trino/sql/relational/SpecialForm.java +++ b/core/trino-main/src/main/java/io/trino/sql/relational/SpecialForm.java @@ -76,7 +76,7 @@ public ResolvedFunction getOperatorDependency(OperatorType operator) { String mangleOperatorName = mangleOperatorName(operator); for (ResolvedFunction function : functionDependencies) { - if (function.getSignature().getName().getFunctionName().equalsIgnoreCase(mangleOperatorName)) { + if (function.signature().getName().getFunctionName().equalsIgnoreCase(mangleOperatorName)) { return function; } } @@ -90,7 +90,7 @@ public Optional getCastDependency(Type fromType, Type toType) } BoundSignature boundSignature = new BoundSignature(builtinFunctionName(CAST), toType, ImmutableList.of(fromType)); for (ResolvedFunction function : functionDependencies) { - if (function.getSignature().equals(boundSignature)) { + if (function.signature().equals(boundSignature)) { return Optional.of(function); } } diff --git a/core/trino-main/src/main/java/io/trino/sql/relational/SqlToRowExpressionTranslator.java b/core/trino-main/src/main/java/io/trino/sql/relational/SqlToRowExpressionTranslator.java index 5f2d849f40ff..c278da4581c2 100644 --- a/core/trino-main/src/main/java/io/trino/sql/relational/SqlToRowExpressionTranslator.java +++ b/core/trino-main/src/main/java/io/trino/sql/relational/SqlToRowExpressionTranslator.java @@ -431,8 +431,8 @@ protected RowExpression visitNullIf(NullIf node, Void context) ResolvedFunction resolvedFunction = metadata.resolveOperator(EQUAL, ImmutableList.of(first.getType(), second.getType())); List functionDependencies = ImmutableList.builder() .add(resolvedFunction) - .add(metadata.getCoercion(first.getType(), resolvedFunction.getSignature().getArgumentTypes().get(0))) - .add(metadata.getCoercion(second.getType(), resolvedFunction.getSignature().getArgumentTypes().get(0))) + .add(metadata.getCoercion(first.getType(), resolvedFunction.signature().getArgumentTypes().get(0))) + .add(metadata.getCoercion(second.getType(), resolvedFunction.signature().getArgumentTypes().get(0))) .build(); return new SpecialForm( diff --git a/core/trino-main/src/main/java/io/trino/sql/relational/optimizer/ExpressionOptimizer.java b/core/trino-main/src/main/java/io/trino/sql/relational/optimizer/ExpressionOptimizer.java index 7b95be9fdd9d..2ba2da2f9058 100644 --- a/core/trino-main/src/main/java/io/trino/sql/relational/optimizer/ExpressionOptimizer.java +++ b/core/trino-main/src/main/java/io/trino/sql/relational/optimizer/ExpressionOptimizer.java @@ -88,7 +88,7 @@ public RowExpression visitConstant(ConstantExpression literal, Void context) @Override public RowExpression visitCall(CallExpression call, Void context) { - if (call.getResolvedFunction().getSignature().getName().equals(builtinFunctionName(CAST))) { + if (call.getResolvedFunction().signature().getName().equals(builtinFunctionName(CAST))) { call = rewriteCast(call); } @@ -97,7 +97,7 @@ public RowExpression visitCall(CallExpression call, Void context) .collect(toImmutableList()); // TODO: optimize function calls with lambda arguments. For example, apply(x -> x + 2, 1) - if (arguments.stream().allMatch(ConstantExpression.class::isInstance) && call.getResolvedFunction().isDeterministic()) { + if (arguments.stream().allMatch(ConstantExpression.class::isInstance) && call.getResolvedFunction().deterministic()) { List constantArguments = arguments.stream() .map(ConstantExpression.class::cast) .map(ConstantExpression::getValue) @@ -192,7 +192,7 @@ private CallExpression rewriteCast(CallExpression call) { if (call.getArguments().get(0) instanceof CallExpression innerCall) { // Optimization for CAST(JSON_PARSE(...) AS ARRAY/MAP/ROW) - if (innerCall.getResolvedFunction().getSignature().getName().equals(JSON_PARSE_NAME)) { + if (innerCall.getResolvedFunction().signature().getName().equals(JSON_PARSE_NAME)) { checkArgument(innerCall.getType().equals(JSON)); checkArgument(innerCall.getArguments().size() == 1); Type returnType = call.getType(); diff --git a/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineAnalyzer.java index ef351f510d6b..1b650efd99c6 100644 --- a/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineAnalyzer.java +++ b/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineAnalyzer.java @@ -157,7 +157,7 @@ public SqlRoutineAnalysis analyze(Session session, AccessControl accessControl, Analysis analysis = visitor.getAnalysis(); - boolean actuallyDeterministic = analysis.getResolvedFunctions().stream().allMatch(ResolvedFunction::isDeterministic); + boolean actuallyDeterministic = analysis.getResolvedFunctions().stream().allMatch(ResolvedFunction::deterministic); boolean declaredDeterministic = getDeterministic(function).orElse(true); if (!declaredDeterministic && actuallyDeterministic) { diff --git a/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineHash.java b/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineHash.java index bb8e9fbfc2b6..d3b445411579 100644 --- a/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineHash.java +++ b/core/trino-main/src/main/java/io/trino/sql/routine/SqlRoutineHash.java @@ -301,23 +301,23 @@ private void hashLabel(IrLabel label) private void hashResolvedFunction(ResolvedFunction function) { - BoundSignature signature = function.getSignature(); + BoundSignature signature = function.signature(); hashString(signature.getName().toString()); hashType(signature.getReturnType()); hasher.putInt(signature.getArgumentTypes().size()); signature.getArgumentTypes().forEach(this::hashType); - hashString(function.getCatalogHandle().getId()); - hashString(function.getFunctionId().toString()); + hashString(function.catalogHandle().getId()); + hashString(function.functionId().toString()); - hasher.putInt(function.getTypeDependencies().size()); - function.getTypeDependencies().forEach((typeSignature, type) -> { + hasher.putInt(function.typeDependencies().size()); + function.typeDependencies().forEach((typeSignature, type) -> { hashString(typeSignature.toString()); hashType(type); }); - hasher.putInt(function.getFunctionDependencies().size()); - function.getFunctionDependencies().forEach(this::hashResolvedFunction); + hasher.putInt(function.functionDependencies().size()); + function.functionDependencies().forEach(this::hashResolvedFunction); } private void hashString(String string) diff --git a/core/trino-main/src/main/java/io/trino/tracing/TracingMetadata.java b/core/trino-main/src/main/java/io/trino/tracing/TracingMetadata.java index 9d229dbd4b9b..675662b43ebe 100644 --- a/core/trino-main/src/main/java/io/trino/tracing/TracingMetadata.java +++ b/core/trino-main/src/main/java/io/trino/tracing/TracingMetadata.java @@ -1318,8 +1318,8 @@ public ResolvedFunction getCoercion(CatalogSchemaFunctionName name, Type fromTyp public AggregationFunctionMetadata getAggregationFunctionMetadata(Session session, ResolvedFunction resolvedFunction) { Span span = startSpan("getAggregationFunctionMetadata") - .setAttribute(TrinoAttributes.CATALOG, resolvedFunction.getCatalogHandle().getCatalogName().toString()) - .setAttribute(TrinoAttributes.FUNCTION, resolvedFunction.getSignature().getName().toString()); + .setAttribute(TrinoAttributes.CATALOG, resolvedFunction.catalogHandle().getCatalogName().toString()) + .setAttribute(TrinoAttributes.FUNCTION, resolvedFunction.signature().getName().toString()); try (var ignored = scopedSpan(span)) { return delegate.getAggregationFunctionMetadata(session, resolvedFunction); } diff --git a/core/trino-main/src/main/java/io/trino/util/SpatialJoinUtils.java b/core/trino-main/src/main/java/io/trino/util/SpatialJoinUtils.java index 11ffcd58910c..dc32f5e6cad8 100644 --- a/core/trino-main/src/main/java/io/trino/util/SpatialJoinUtils.java +++ b/core/trino-main/src/main/java/io/trino/util/SpatialJoinUtils.java @@ -52,7 +52,7 @@ public static List extractSupportedSpatialFunctions(Expression filterExpre private static boolean isSupportedSpatialFunction(Call call) { - CatalogSchemaFunctionName functionName = call.function().getName(); + CatalogSchemaFunctionName functionName = call.function().name(); return functionName.equals(builtinFunctionName(ST_CONTAINS)) || functionName.equals(builtinFunctionName(ST_WITHIN)) || functionName.equals(builtinFunctionName(ST_INTERSECTS)); @@ -96,7 +96,7 @@ private static boolean isSupportedSpatialComparison(Comparison expression) private static boolean isSTDistance(Expression expression) { if (expression instanceof Call call) { - return call.function().getName().equals(builtinFunctionName(ST_DISTANCE)); + return call.function().name().equals(builtinFunctionName(ST_DISTANCE)); } return false; diff --git a/core/trino-main/src/test/java/io/trino/metadata/TestGlobalFunctionCatalog.java b/core/trino-main/src/test/java/io/trino/metadata/TestGlobalFunctionCatalog.java index 2c6a42d9e975..72dd5158d90c 100644 --- a/core/trino-main/src/test/java/io/trino/metadata/TestGlobalFunctionCatalog.java +++ b/core/trino-main/src/test/java/io/trino/metadata/TestGlobalFunctionCatalog.java @@ -64,7 +64,7 @@ public class TestGlobalFunctionCatalog @Test public void testIdentityCast() { - BoundSignature exactOperator = new TestingFunctionResolution().getCoercion(HYPER_LOG_LOG, HYPER_LOG_LOG).getSignature(); + BoundSignature exactOperator = new TestingFunctionResolution().getCoercion(HYPER_LOG_LOG, HYPER_LOG_LOG).signature(); assertThat(exactOperator).isEqualTo(new BoundSignature(builtinFunctionName(CAST), HYPER_LOG_LOG, ImmutableList.of(HYPER_LOG_LOG))); } @@ -87,7 +87,7 @@ public void testExactMatchBeforeCoercion() List argumentTypes = function.getSignature().getArgumentTypes().stream() .map(functionResolution.getPlannerContext().getTypeManager()::getType) .collect(toImmutableList()); - BoundSignature exactOperator = functionResolution.resolveOperator(operatorType, argumentTypes).getSignature(); + BoundSignature exactOperator = functionResolution.resolveOperator(operatorType, argumentTypes).signature(); assertThat(exactOperator.toSignature()).isEqualTo(function.getSignature()); foundOperator = true; } @@ -346,7 +346,7 @@ private BoundSignature resolveSignature() { return new TestingFunctionResolution(createFunctionsFromSignatures()) .resolveFunction(TEST_FUNCTION_NAME, fromTypeSignatures(parameterTypes)) - .getSignature(); + .signature(); } private InternalFunctionBundle createFunctionsFromSignatures() diff --git a/core/trino-main/src/test/java/io/trino/metadata/TestingFunctionResolution.java b/core/trino-main/src/test/java/io/trino/metadata/TestingFunctionResolution.java index eafe51ef59c9..e8d9cb1ac60a 100644 --- a/core/trino-main/src/test/java/io/trino/metadata/TestingFunctionResolution.java +++ b/core/trino-main/src/test/java/io/trino/metadata/TestingFunctionResolution.java @@ -159,8 +159,8 @@ public TestingAggregationFunction getAggregateFunction(String name, List { ResolvedFunction resolvedFunction = metadata.resolveBuiltinFunction(name, parameterTypes); return new TestingAggregationFunction( - resolvedFunction.getSignature(), - resolvedFunction.getFunctionNullability(), + resolvedFunction.signature(), + resolvedFunction.functionNullability(), plannerContext.getFunctionManager().getAggregationImplementation(resolvedFunction)); }); } diff --git a/core/trino-main/src/test/java/io/trino/operator/TestRealAverageAggregation.java b/core/trino-main/src/test/java/io/trino/operator/TestRealAverageAggregation.java index 7dea353bf0dd..0f7e400c7729 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestRealAverageAggregation.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestRealAverageAggregation.java @@ -164,8 +164,8 @@ public void testSlidingWindowForNaNAndInfinity() ResolvedFunction resolvedFunction = functionResolution.resolveFunction(getFunctionName(), fromTypes(getFunctionParameterTypes())); AggregationImplementation aggregationImplementation = functionResolution.getPlannerContext().getFunctionManager().getAggregationImplementation(resolvedFunction); WindowAccumulator aggregation = createWindowAccumulator(resolvedFunction, aggregationImplementation); - assertThat(resolvedFunction.getSignature().getReturnType().toString().contains("real")).isTrue(); - assertThat(resolvedFunction.getSignature().getName().toString().contains("avg")).isTrue(); + assertThat(resolvedFunction.signature().getReturnType().toString().contains("real")).isTrue(); + assertThat(resolvedFunction.signature().getName().toString().contains("avg")).isTrue(); int oldStart = 0; int oldWidth = 0; for (int start = 0; start < totalPositions; ++start) { @@ -189,7 +189,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); @@ -229,7 +229,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation2.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); diff --git a/core/trino-main/src/test/java/io/trino/operator/aggregation/AbstractTestAggregationFunction.java b/core/trino-main/src/test/java/io/trino/operator/aggregation/AbstractTestAggregationFunction.java index 6d4965ba3ee3..0c3deed68c6b 100644 --- a/core/trino-main/src/test/java/io/trino/operator/aggregation/AbstractTestAggregationFunction.java +++ b/core/trino-main/src/test/java/io/trino/operator/aggregation/AbstractTestAggregationFunction.java @@ -173,7 +173,7 @@ public void testSlidingWindow() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); @@ -189,9 +189,9 @@ protected static WindowAccumulator createWindowAccumulator(ResolvedFunction reso { try { Constructor constructor = generateWindowAccumulatorClass( - resolvedFunction.getSignature(), + resolvedFunction.signature(), aggregationImplementation, - resolvedFunction.getFunctionNullability()); + resolvedFunction.functionNullability()); return constructor.newInstance(ImmutableList.of()); } catch (ReflectiveOperationException e) { diff --git a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleAverageAggregation.java b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleAverageAggregation.java index 2606466d980d..12981201d2c1 100644 --- a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleAverageAggregation.java +++ b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleAverageAggregation.java @@ -101,8 +101,8 @@ public void testSlidingWindowForNaNAndInfinity() ResolvedFunction resolvedFunction = functionResolution.resolveFunction(getFunctionName(), fromTypes(getFunctionParameterTypes())); AggregationImplementation aggregationImplementation = functionResolution.getPlannerContext().getFunctionManager().getAggregationImplementation(resolvedFunction); WindowAccumulator aggregation = createWindowAccumulator(resolvedFunction, aggregationImplementation); - assertThat(resolvedFunction.getSignature().getReturnType().toString().contains("double")).isTrue(); - assertThat(resolvedFunction.getSignature().getName().toString().contains("avg")).isTrue(); + assertThat(resolvedFunction.signature().getReturnType().toString().contains("double")).isTrue(); + assertThat(resolvedFunction.signature().getName().toString().contains("avg")).isTrue(); int oldStart = 0; int oldWidth = 0; for (int start = 0; start < totalPositions; ++start) { @@ -126,7 +126,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); @@ -166,7 +166,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation2.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); diff --git a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleSumAggregation.java b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleSumAggregation.java index 46466c4c6d35..7fa86f5d3e55 100644 --- a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleSumAggregation.java +++ b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDoubleSumAggregation.java @@ -127,8 +127,8 @@ public void testSlidingWindowForNaNAndInfinity() ResolvedFunction resolvedFunction = functionResolution.resolveFunction(getFunctionName(), fromTypes(getFunctionParameterTypes())); AggregationImplementation aggregationImplementation = functionResolution.getPlannerContext().getFunctionManager().getAggregationImplementation(resolvedFunction); WindowAccumulator aggregation = createWindowAccumulator(resolvedFunction, aggregationImplementation); - assertThat(resolvedFunction.getSignature().getReturnType().toString().contains("double")).isTrue(); - assertThat(resolvedFunction.getSignature().getName().toString().contains("sum")).isTrue(); + assertThat(resolvedFunction.signature().getReturnType().toString().contains("double")).isTrue(); + assertThat(resolvedFunction.signature().getName().toString().contains("sum")).isTrue(); int oldStart = 0; int oldWidth = 0; for (int start = 0; start < totalPositions; ++start) { @@ -152,7 +152,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); @@ -192,7 +192,7 @@ public void testSlidingWindowForNaNAndInfinity() oldStart = start; oldWidth = width; - Type outputType = resolvedFunction.getSignature().getReturnType(); + Type outputType = resolvedFunction.signature().getReturnType(); BlockBuilder blockBuilder = outputType.createBlockBuilder(null, 1000); aggregation2.evaluateFinal(blockBuilder); Block block = blockBuilder.build(); diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/AggregationFunctionMatcher.java b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/AggregationFunctionMatcher.java index cdbb4acf70b4..c99da125f832 100644 --- a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/AggregationFunctionMatcher.java +++ b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/AggregationFunctionMatcher.java @@ -59,7 +59,7 @@ public Optional getAssignedSymbol(PlanNode node, Session session, Metada private static boolean aggregationMatches(Aggregation aggregation, AggregationFunction expectedCall) { - return Objects.equals(expectedCall.name(), aggregation.getResolvedFunction().getSignature().getName().getFunctionName()) && + return Objects.equals(expectedCall.name(), aggregation.getResolvedFunction().signature().getName().getFunctionName()) && Objects.equals(expectedCall.filter(), aggregation.getFilter()) && Objects.equals(expectedCall.orderBy(), aggregation.getOrderingScheme()) && Objects.equals(expectedCall.distinct(), aggregation.isDistinct()) && diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/ExpressionVerifier.java b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/ExpressionVerifier.java index 1fb5c819636c..2d85a7f29eee 100644 --- a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/ExpressionVerifier.java +++ b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/ExpressionVerifier.java @@ -277,7 +277,7 @@ protected Boolean visitCall(Call actual, Expression expectedExpression) return false; } - return actual.function().getName().equals(expected.function().getName()) && + return actual.function().name().equals(expected.function().name()) && process(actual.arguments(), expected.arguments()); } diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/WindowFunctionMatcher.java b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/WindowFunctionMatcher.java index a93c07e34322..bcfad93e4cc9 100644 --- a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/WindowFunctionMatcher.java +++ b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/WindowFunctionMatcher.java @@ -68,7 +68,7 @@ else if (node instanceof PatternRecognitionNode) { private boolean windowFunctionMatches(Function windowFunction, WindowFunction expectedCall, SymbolAliases aliases) { - return expectedCall.name().equals(windowFunction.getResolvedFunction().getSignature().getName().getFunctionName()) && + return expectedCall.name().equals(windowFunction.getResolvedFunction().signature().getName().getFunctionName()) && WindowFrameMatcher.matches(expectedCall.frame(), windowFunction.getFrame(), aliases) && expectedCall.arguments().equals(windowFunction.getArguments()); } diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/TestMergeAdjacentWindows.java b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/TestMergeAdjacentWindows.java index 6e77c42bbe41..1e36b7c76f87 100644 --- a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/TestMergeAdjacentWindows.java +++ b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/TestMergeAdjacentWindows.java @@ -155,8 +155,8 @@ public void testIdenticalAdjacentWindowSpecifications() .matches( window(windowMatcherBuilder -> windowMatcherBuilder .specification(specificationA) - .addFunction(windowFunction(AVG.getSignature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)) - .addFunction(windowFunction(SUM.getSignature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)), + .addFunction(windowFunction(AVG.signature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)) + .addFunction(windowFunction(SUM.signature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)), values(ImmutableMap.of(columnAAlias, 0)))); } @@ -193,8 +193,8 @@ public void testIntermediateProjectNodes() avgOutputAlias, PlanMatchPattern.expression(new Reference(DOUBLE, avgOutputAlias))), window(windowMatcherBuilder -> windowMatcherBuilder .specification(specificationA) - .addFunction(lagOutputAlias, windowFunction(LAG.getSignature().getName().getFunctionName(), ImmutableList.of(columnAAlias, oneAlias), DEFAULT_FRAME)) - .addFunction(avgOutputAlias, windowFunction(AVG.getSignature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)), + .addFunction(lagOutputAlias, windowFunction(LAG.signature().getName().getFunctionName(), ImmutableList.of(columnAAlias, oneAlias), DEFAULT_FRAME)) + .addFunction(avgOutputAlias, windowFunction(AVG.signature().getName().getFunctionName(), ImmutableList.of(columnAAlias), DEFAULT_FRAME)), strictProject( ImmutableMap.of( oneAlias, PlanMatchPattern.expression(new Constant(INTEGER, 1L)),