Skip to content

Commit

Permalink
Refactor qualifyObjectName method to FunctionAndTypeResolver
Browse files Browse the repository at this point in the history
  • Loading branch information
pdabre12 committed Nov 18, 2024
1 parent 88e7f08 commit 1b88d3b
Show file tree
Hide file tree
Showing 12 changed files with 29 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.facebook.presto.spi.function.SqlFunction;
import com.facebook.presto.spi.function.SqlFunctionId;
import com.facebook.presto.spi.function.SqlInvokedFunction;
import com.facebook.presto.sql.tree.QualifiedName;

import java.util.Collection;
import java.util.List;
Expand All @@ -49,4 +50,6 @@ FunctionHandle resolveFunction(
boolean isTypeOnlyCoercion(Type actualType, Type expectedType);

FunctionHandle lookupCast(String castType, Type fromType, Type toType);

QualifiedObjectName qualifyObjectName(QualifiedName name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import java.util.Map;
import java.util.Optional;

import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.sql.analyzer.utils.ParameterUtils.parameterExtractor;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.util.concurrent.Futures.immediateFuture;
Expand Down Expand Up @@ -72,7 +71,7 @@ public ListenableFuture<?> execute(AlterFunction statement, TransactionManager t
Analyzer analyzer = new Analyzer(session, metadata, sqlParser, accessControl, Optional.empty(), parameters, parameterLookup, warningCollector);
analyzer.analyze(statement);

QualifiedObjectName functionName = qualifyObjectName(statement.getFunctionName());
QualifiedObjectName functionName = metadata.getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(statement.getFunctionName());
AlterRoutineCharacteristics alterRoutineCharacteristics = new AlterRoutineCharacteristics(
statement.getCharacteristics().getNullCallClause()
.map(com.facebook.presto.sql.tree.RoutineCharacteristics.NullCallClause::name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
import java.util.Optional;

import static com.facebook.presto.common.type.TypeSignature.parseTypeSignature;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.metadata.SessionFunctionHandle.SESSION_NAMESPACE;
import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
import static com.facebook.presto.spi.function.FunctionVersion.notVersioned;
Expand Down Expand Up @@ -107,7 +106,7 @@ private SqlInvokedFunction createSqlInvokedFunction(CreateFunction statement, Me
{
QualifiedObjectName functionName = statement.isTemporary() ?
QualifiedObjectName.valueOf(SESSION_NAMESPACE, statement.getFunctionName().getSuffix()) :
qualifyObjectName(statement.getFunctionName());
metadata.getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(statement.getFunctionName());
List<Parameter> parameters = statement.getParameters().stream()
.map(parameter -> new Parameter(parameter.getName().toString(), parseTypeSignature(parameter.getType())))
.collect(toImmutableList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import java.util.Map;
import java.util.Optional;

import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.metadata.SessionFunctionHandle.SESSION_NAMESPACE;
import static com.facebook.presto.sql.analyzer.utils.ParameterUtils.parameterExtractor;
import static com.google.common.collect.ImmutableList.toImmutableList;
Expand Down Expand Up @@ -82,7 +81,7 @@ public ListenableFuture<?> execute(DropFunction statement, TransactionManager tr
}
else {
metadata.getFunctionAndTypeManager().dropFunction(
qualifyObjectName(statement.getFunctionName()),
metadata.getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(statement.getFunctionName()),
parameterTypes,
statement.isExists());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,17 @@ public FunctionHandle lookupCast(String castType, Type fromType, Type toType)
{
return FunctionAndTypeManager.this.lookupCast(CastType.valueOf(castType), fromType, toType);
}

public QualifiedObjectName qualifyObjectName(QualifiedName name)
{
if (!name.getPrefix().isPresent()) {
return QualifiedObjectName.valueOf(DEFAULT_NAMESPACE, name.getSuffix());
}
if (name.getOriginalParts().size() != 3) {
throw new PrestoException(FUNCTION_NOT_FOUND, format("Functions that are not temporary or builtin must be referenced by 'catalog.schema.function_name', found: %s", name));
}
return QualifiedObjectName.valueOf(name.getParts().get(0), name.getParts().get(1), name.getParts().get(2));
}
};
}

Expand Down Expand Up @@ -417,17 +428,6 @@ else if (!exists) {
}
}

public static QualifiedObjectName qualifyObjectName(QualifiedName name)
{
if (!name.getPrefix().isPresent()) {
return QualifiedObjectName.valueOf(DEFAULT_NAMESPACE, name.getSuffix());
}
if (name.getOriginalParts().size() != 3) {
throw new PrestoException(FUNCTION_NOT_FOUND, format("Functions that are not temporary or builtin must be referenced by 'catalog.schema.function_name', found: %s", name));
}
return QualifiedObjectName.valueOf(name.getParts().get(0), name.getParts().get(1), name.getParts().get(2));
}

/**
* Resolves a function using implicit type coercions. We enforce explicit naming for dynamic function namespaces.
* All unqualified function names will only be resolved against the built-in static function namespace. While it is
Expand Down Expand Up @@ -597,7 +597,7 @@ public boolean nullIfSpecialFormEnabled()
*/
public FunctionHandle lookupFunction(String name, List<TypeSignatureProvider> parameterTypes)
{
QualifiedObjectName functionName = qualifyObjectName(QualifiedName.of(name));
QualifiedObjectName functionName = getFunctionAndTypeResolver().qualifyObjectName(QualifiedName.of(name));
if (parameterTypes.stream().noneMatch(TypeSignatureProvider::hasDependency)) {
return lookupCachedFunction(functionName, parameterTypes);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@
import static com.facebook.presto.common.type.VarbinaryType.VARBINARY;
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
import static com.facebook.presto.metadata.BuiltInTypeAndFunctionNamespaceManager.DEFAULT_NAMESPACE;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.spi.StandardErrorCode.OPERATOR_NOT_FOUND;
import static com.facebook.presto.spi.StandardWarningCode.SEMANTIC_WARNING;
import static com.facebook.presto.sql.NodeUtils.getSortItemsFromOrderBy;
Expand Down Expand Up @@ -1826,7 +1825,11 @@ public static FunctionHandle resolveFunction(
FunctionAndTypeResolver functionAndTypeResolver)
{
try {
return functionAndTypeResolver.resolveFunction(sessionFunctions, transactionId, qualifyObjectName(node.getName()), argumentTypes);
return functionAndTypeResolver.resolveFunction(
sessionFunctions,
transactionId,
functionAndTypeResolver.qualifyObjectName(node.getName()),
argumentTypes);
}
catch (PrestoException e) {
if (e.getErrorCode().getCode() == StandardErrorCode.FUNCTION_NOT_FOUND.toErrorCode().getCode()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@
import static com.facebook.presto.common.type.TypeUtils.writeNativeValue;
import static com.facebook.presto.common.type.VarcharType.createVarcharType;
import static com.facebook.presto.metadata.CastType.CAST;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
import static com.facebook.presto.spi.function.FunctionImplementationType.JAVA;
import static com.facebook.presto.spi.function.FunctionImplementationType.SQL;
Expand Down Expand Up @@ -919,7 +918,7 @@ protected Object visitFunctionCall(FunctionCall node, Object context)
FunctionHandle functionHandle = metadata.getFunctionAndTypeManager().resolveFunction(
Optional.of(session.getSessionFunctions()),
session.getTransactionId(),
qualifyObjectName(node.getName()),
metadata.getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(node.getName()),
fromTypes(argumentTypes));
FunctionMetadata functionMetadata = metadata.getFunctionAndTypeManager().getFunctionMetadata(functionHandle);
if (!functionMetadata.isCalledOnNullInput()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@
import static com.facebook.presto.common.type.VarcharType.createVarcharType;
import static com.facebook.presto.metadata.CastType.CAST;
import static com.facebook.presto.metadata.CastType.TRY_CAST;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.spi.relation.SpecialFormExpression.Form.AND;
import static com.facebook.presto.spi.relation.SpecialFormExpression.Form.BIND;
import static com.facebook.presto.spi.relation.SpecialFormExpression.Form.COALESCE;
Expand Down Expand Up @@ -520,7 +519,7 @@ protected RowExpression visitFunctionCall(FunctionCall node, Context context)
functionAndTypeResolver.resolveFunction(
Optional.of(sessionFunctions),
transactionId,
qualifyObjectName(node.getName()),
functionAndTypeResolver.qualifyObjectName(node.getName()),
argumentTypes),
getType(node),
arguments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@
import static com.facebook.presto.connector.informationSchema.InformationSchemaMetadata.TABLE_TABLES;
import static com.facebook.presto.connector.informationSchema.InformationSchemaMetadata.TABLE_TABLE_PRIVILEGES;
import static com.facebook.presto.metadata.BuiltInTypeAndFunctionNamespaceManager.DEFAULT_NAMESPACE;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.metadata.MetadataListing.listCatalogs;
import static com.facebook.presto.metadata.MetadataListing.listSchemas;
import static com.facebook.presto.metadata.MetadataUtil.createCatalogSchemaName;
Expand Down Expand Up @@ -587,7 +586,7 @@ else if (constraint instanceof UniqueConstraint) {
@Override
protected Node visitShowCreateFunction(ShowCreateFunction node, Void context)
{
QualifiedObjectName functionName = qualifyObjectName(node.getName());
QualifiedObjectName functionName = metadata.getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(node.getName());
Collection<? extends SqlFunction> functions = metadata.getFunctionAndTypeManager().getFunctions(session, functionName);
if (node.getParameterTypes().isPresent()) {
List<TypeSignature> parameterTypes = node.getParameterTypes().get().stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
import static com.facebook.presto.common.type.TimestampWithTimeZoneType.TIMESTAMP_WITH_TIME_ZONE;
import static com.facebook.presto.common.type.TypeSignature.parseTypeSignature;
import static com.facebook.presto.metadata.FunctionAndTypeManager.createTestFunctionAndTypeManager;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.operator.scalar.ScalarFunctionImplementationChoice.ArgumentProperty.valueTypeArgumentProperty;
import static com.facebook.presto.operator.scalar.ScalarFunctionImplementationChoice.NullConvention.RETURN_NULL_ON_NULL;
import static com.facebook.presto.spi.function.FunctionKind.SCALAR;
Expand Down Expand Up @@ -475,7 +474,7 @@ private FunctionHandle resolveFunctionHandle()
return functionAndTypeManager.resolveFunction(
Optional.empty(),
TEST_SESSION.getTransactionId(),
qualifyObjectName(QualifiedName.of(TEST_FUNCTION_NAME)),
functionAndTypeManager.getFunctionAndTypeResolver().qualifyObjectName(QualifiedName.of(TEST_FUNCTION_NAME)),
fromTypeSignatures(parameterTypes));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import java.util.Optional;

import static com.facebook.presto.metadata.FunctionAndTypeManager.createTestFunctionAndTypeManager;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.metadata.FunctionExtractor.extractFunctions;
import static com.facebook.presto.operator.aggregation.AggregationTestUtils.assertAggregation;
import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypeSignatures;
Expand Down Expand Up @@ -88,7 +87,7 @@ protected final JavaAggregationFunctionImplementation getFunction()
FunctionHandle functionHandle = functionAndTypeManager.resolveFunction(
Optional.empty(),
session.getTransactionId(),
qualifyObjectName(QualifiedName.of(getFunctionName())),
functionAndTypeManager.getFunctionAndTypeResolver().qualifyObjectName(QualifiedName.of(getFunctionName())),
parameterTypes);
return functionAndTypeManager.getJavaAggregateFunctionImplementation(functionHandle);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
import static com.facebook.presto.common.type.BigintType.BIGINT;
import static com.facebook.presto.common.type.BooleanType.BOOLEAN;
import static com.facebook.presto.common.type.VarcharType.VARCHAR;
import static com.facebook.presto.metadata.FunctionAndTypeManager.qualifyObjectName;
import static com.facebook.presto.spi.plan.JoinDistributionType.PARTITIONED;
import static com.facebook.presto.spi.plan.JoinDistributionType.REPLICATED;
import static com.facebook.presto.spi.plan.JoinType.INNER;
Expand Down Expand Up @@ -580,7 +579,7 @@ public void testDoesNotFireForNonDeterministicFilter()
tester.getMetadata().getFunctionAndTypeManager().resolveFunction(
Optional.empty(),
Optional.empty(),
qualifyObjectName(RANDOM),
tester.getMetadata().getFunctionAndTypeManager().getFunctionAndTypeResolver().qualifyObjectName(RANDOM),
ImmutableList.of()),
BIGINT,
ImmutableList.of())))))
Expand Down

0 comments on commit 1b88d3b

Please sign in to comment.