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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@

import com.google.common.collect.ImmutableList;
import com.google.common.primitives.Booleans;
import io.trino.spi.function.FunctionKind;

import java.util.Collections;
import java.util.List;

import static com.google.common.base.Preconditions.checkArgument;
import static io.trino.metadata.FunctionKind.AGGREGATE;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.metadata.FunctionKind.WINDOW;
import static io.trino.spi.function.FunctionKind.AGGREGATE;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.spi.function.FunctionKind.WINDOW;
import static java.util.Objects.requireNonNull;

public class FunctionMetadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.trino.metadata.FunctionKind.AGGREGATE;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.metadata.GlobalFunctionCatalog.GLOBAL_CATALOG;
import static io.trino.metadata.GlobalFunctionCatalog.GLOBAL_SCHEMA;
import static io.trino.spi.StandardErrorCode.AMBIGUOUS_FUNCTION_CALL;
import static io.trino.spi.StandardErrorCode.FUNCTION_IMPLEMENTATION_MISSING;
import static io.trino.spi.StandardErrorCode.FUNCTION_NOT_FOUND;
import static io.trino.spi.function.FunctionKind.AGGREGATE;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.sql.analyzer.TypeSignatureProvider.fromTypeSignatures;
import static io.trino.type.UnknownType.UNKNOWN;
import static java.lang.String.format;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static io.trino.metadata.FunctionKind.AGGREGATE;
import static io.trino.metadata.Signature.isOperatorName;
import static io.trino.metadata.Signature.unmangleOperator;
import static io.trino.spi.function.FunctionKind.AGGREGATE;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.BooleanType.BOOLEAN;
import static io.trino.spi.type.IntegerType.INTEGER;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.airlift.json.JsonCodecFactory;
import io.airlift.json.ObjectMapperProvider;
import io.trino.collect.cache.NonEvictableLoadingCache;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.type.Type;
import io.trino.spi.type.TypeId;
import io.trino.spi.type.TypeSignature;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.AccessDeniedException;
import io.trino.spi.security.Identity;
import io.trino.spi.security.Privilege;
Expand Down Expand Up @@ -530,7 +531,7 @@ void checkCanRevokeRoles(SecurityContext context,
*
* @throws AccessDeniedException if not allowed
*/
void checkCanExecuteFunction(SecurityContext context, QualifiedObjectName functionName);
void checkCanExecuteFunction(SecurityContext context, FunctionKind functionKind, QualifiedObjectName functionName);

/**
* Check if identity is allowed to execute given table procedure on given table
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import io.trino.spi.connector.ConnectorAccessControl;
import io.trino.spi.connector.ConnectorSecurityContext;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Identity;
import io.trino.spi.security.PrincipalType;
import io.trino.spi.security.Privilege;
Expand Down Expand Up @@ -1135,19 +1136,23 @@ public void checkCanExecuteFunction(SecurityContext context, String functionName
}

@Override
public void checkCanExecuteFunction(SecurityContext securityContext, QualifiedObjectName functionName)
public void checkCanExecuteFunction(SecurityContext securityContext, FunctionKind functionKind, QualifiedObjectName functionName)
{
requireNonNull(securityContext, "securityContext is null");
requireNonNull(functionKind, "functionKind is null");
requireNonNull(functionName, "functionName is null");
Comment thread
kasiafi marked this conversation as resolved.
Outdated

checkCanAccessCatalog(securityContext, functionName.getCatalogName());

systemAuthorizationCheck(control -> control.checkCanExecuteFunction(securityContext.toSystemSecurityContext(), functionName.asCatalogSchemaRoutineName()));
systemAuthorizationCheck(control -> control.checkCanExecuteFunction(
securityContext.toSystemSecurityContext(),
functionKind,
functionName.asCatalogSchemaRoutineName()));

catalogAuthorizationCheck(
functionName.getCatalogName(),
securityContext,
(control, context) -> control.checkCanExecuteFunction(context, functionName.asSchemaRoutineName()));
(control, context) -> control.checkCanExecuteFunction(context, functionKind, functionName.asSchemaRoutineName()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Identity;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
Expand Down Expand Up @@ -366,7 +367,7 @@ public void checkCanExecuteFunction(SecurityContext context, String functionName
}

@Override
public void checkCanExecuteFunction(SecurityContext context, QualifiedObjectName functionName)
public void checkCanExecuteFunction(SecurityContext context, FunctionKind functionKind, QualifiedObjectName functionName)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Identity;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
Expand Down Expand Up @@ -492,7 +493,7 @@ public void checkCanExecuteFunction(SecurityContext context, String functionName
}

@Override
public void checkCanExecuteFunction(SecurityContext context, QualifiedObjectName functionName)
public void checkCanExecuteFunction(SecurityContext context, FunctionKind functionKind, QualifiedObjectName functionName)
{
denyExecuteFunction(functionName.toString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Identity;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
Expand Down Expand Up @@ -449,9 +450,9 @@ public void checkCanExecuteFunction(SecurityContext context, String functionName
}

@Override
public void checkCanExecuteFunction(SecurityContext context, QualifiedObjectName functionName)
public void checkCanExecuteFunction(SecurityContext context, FunctionKind functionKind, QualifiedObjectName functionName)
{
delegate().checkCanExecuteFunction(context, functionName);
delegate().checkCanExecuteFunction(context, functionKind, functionName);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import io.trino.spi.connector.ConnectorSecurityContext;
import io.trino.spi.connector.SchemaRoutineName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.security.ViewExpression;
Expand Down Expand Up @@ -447,10 +448,10 @@ public void checkCanExecuteTableProcedure(ConnectorSecurityContext context, Sche
}

@Override
public void checkCanExecuteFunction(ConnectorSecurityContext context, SchemaRoutineName function)
public void checkCanExecuteFunction(ConnectorSecurityContext context, FunctionKind functionKind, SchemaRoutineName function)
{
checkArgument(context == null, "context must be null");
accessControl.checkCanExecuteFunction(securityContext, new QualifiedObjectName(catalogName, function.getSchemaName(), function.getRoutineName()));
accessControl.checkCanExecuteFunction(securityContext, functionKind, new QualifiedObjectName(catalogName, function.getSchemaName(), function.getRoutineName()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import io.trino.execution.Column;
import io.trino.execution.warnings.WarningCollector;
import io.trino.metadata.AnalyzePropertyManager;
import io.trino.metadata.FunctionKind;
import io.trino.metadata.MaterializedViewDefinition;
import io.trino.metadata.Metadata;
import io.trino.metadata.OperatorNotFoundException;
Expand Down Expand Up @@ -66,6 +65,7 @@
import io.trino.spi.connector.PointerType;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.function.OperatorType;
import io.trino.spi.ptf.Argument;
import io.trino.spi.ptf.ArgumentSpecification;
Expand Down Expand Up @@ -254,8 +254,6 @@
import static com.google.common.collect.Iterables.getLast;
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.trino.SystemSessionProperties.getMaxGroupingSets;
import static io.trino.metadata.FunctionKind.AGGREGATE;
import static io.trino.metadata.FunctionKind.WINDOW;
import static io.trino.metadata.MetadataUtil.createQualifiedObjectName;
import static io.trino.metadata.MetadataUtil.getRequiredCatalogHandle;
import static io.trino.spi.StandardErrorCode.AMBIGUOUS_NAME;
Expand Down Expand Up @@ -303,6 +301,8 @@
import static io.trino.spi.StandardErrorCode.VIEW_IS_RECURSIVE;
import static io.trino.spi.StandardErrorCode.VIEW_IS_STALE;
import static io.trino.spi.connector.StandardWarningCode.REDUNDANT_ORDER_BY;
import static io.trino.spi.function.FunctionKind.AGGREGATE;
import static io.trino.spi.function.FunctionKind.WINDOW;
import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.ptf.ReturnTypeSpecification.OnlyPassThrough.ONLY_PASS_THROUGH;
import static io.trino.spi.type.BigintType.BIGINT;
Expand Down Expand Up @@ -1481,7 +1481,7 @@ protected Scope visitTableFunctionInvocation(TableFunctionInvocation node, Optio
CatalogName catalogName = tableFunctionMetadata.getCatalogName();

QualifiedObjectName functionName = new QualifiedObjectName(catalogName.getCatalogName(), function.getSchema(), function.getName());
accessControl.checkCanExecuteFunction(SecurityContext.of(session), functionName);
accessControl.checkCanExecuteFunction(SecurityContext.of(session), FunctionKind.TABLE, functionName);

Map<String, Argument> passedArguments = analyzeArguments(node, function.getArguments(), node.getArguments());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import io.trino.sql.tree.DefaultExpressionTraversalVisitor;
import io.trino.sql.tree.FunctionCall;

import static io.trino.metadata.FunctionKind.WINDOW;
import static io.trino.spi.StandardErrorCode.MISSING_OVER;
import static io.trino.spi.function.FunctionKind.WINDOW;
import static io.trino.sql.analyzer.SemanticExceptions.semanticException;
import static java.util.Objects.requireNonNull;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
import io.trino.index.IndexManager;
import io.trino.metadata.BoundSignature;
import io.trino.metadata.FunctionId;
import io.trino.metadata.FunctionKind;
import io.trino.metadata.Metadata;
import io.trino.metadata.ResolvedFunction;
import io.trino.metadata.TableExecuteHandle;
Expand Down Expand Up @@ -161,6 +160,7 @@
import io.trino.spi.connector.DynamicFilter;
import io.trino.spi.connector.RecordSet;
import io.trino.spi.connector.SortOrder;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.NullableValue;
import io.trino.spi.type.RowType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
import io.trino.connector.CatalogName;
import io.trino.execution.warnings.WarningCollector;
import io.trino.metadata.ColumnPropertyManager;
import io.trino.metadata.FunctionKind;
import io.trino.metadata.FunctionManager;
import io.trino.metadata.FunctionMetadata;
import io.trino.metadata.MaterializedViewDefinition;
import io.trino.metadata.MaterializedViewPropertyManager;
Expand All @@ -45,6 +43,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.ConnectorTableMetadata;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.PrincipalType;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.session.PropertyMetadata;
Expand Down Expand Up @@ -173,7 +172,6 @@ public final class ShowQueriesRewrite
@Inject
public ShowQueriesRewrite(
Metadata metadata,
FunctionManager functionManager,
SqlParser parser,
AccessControl accessControl,
SessionPropertyManager sessionPropertyManager,
Expand Down Expand Up @@ -822,6 +820,8 @@ private static String getFunctionType(FunctionMetadata function)
return "window";
case SCALAR:
return "scalar";
case TABLE:
throw new IllegalArgumentException("Unexpected function kind: " + kind); // TODO https://github.com/trinodb/trino/issues/12550
}
throw new IllegalArgumentException("Unsupported function kind: " + kind);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Identity;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
Expand Down Expand Up @@ -243,7 +244,7 @@ public void checkCanExecuteProcedure(SecurityContext context, QualifiedObjectNam
public void checkCanExecuteFunction(SecurityContext context, String functionName) {}

@Override
public void checkCanExecuteFunction(SecurityContext context, QualifiedObjectName functionName) {}
public void checkCanExecuteFunction(SecurityContext context, FunctionKind functionKind, QualifiedObjectName functionName) {}

@Override
public void checkCanExecuteTableProcedure(SecurityContext context, QualifiedObjectName tableName, String procedureName) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1123,7 +1123,6 @@ private AnalyzerFactory createAnalyzerFactory(QueryExplainerFactory queryExplain
new DescribeOutputRewrite(sqlParser),
new ShowQueriesRewrite(
plannerContext.getMetadata(),
plannerContext.getFunctionManager(),
sqlParser,
accessControl,
sessionPropertyManager,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@
import java.util.Set;

import static io.trino.metadata.FunctionId.toFunctionId;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.metadata.RedirectionAwareTableHandle.noRedirection;
import static io.trino.spi.StandardErrorCode.FUNCTION_NOT_FOUND;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.spi.type.DoubleType.DOUBLE;
import static io.trino.type.InternalTypeManager.TESTING_TYPE_MANAGER;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import java.util.regex.Pattern;

import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.spi.type.VarcharType.createVarcharType;
import static java.lang.Integer.parseInt;
import static org.testng.Assert.assertEquals;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5990,7 +5990,6 @@ private Analyzer createAnalyzer(Session session, AccessControl accessControl)
{
StatementRewrite statementRewrite = new StatementRewrite(ImmutableSet.of(new ShowQueriesRewrite(
plannerContext.getMetadata(),
plannerContext.getFunctionManager(),
SQL_PARSER,
accessControl,
new SessionPropertyManager(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static io.trino.metadata.FunctionId.toFunctionId;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.DoubleType.DOUBLE;
import static io.trino.spi.type.RealType.REAL;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@
import static io.airlift.testing.Assertions.assertEqualsIgnoreCase;
import static io.trino.SessionTestUtils.TEST_SESSION;
import static io.trino.metadata.FunctionId.toFunctionId;
import static io.trino.metadata.FunctionKind.SCALAR;
import static io.trino.metadata.LiteralFunction.LITERAL_FUNCTION_NAME;
import static io.trino.operator.scalar.JoniRegexpCasts.castVarcharToJoniRegexp;
import static io.trino.operator.scalar.JsonFunctions.castVarcharToJsonPath;
import static io.trino.operator.scalar.StringFunctions.castVarcharToCodePoints;
import static io.trino.spi.function.FunctionKind.SCALAR;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.CharType.createCharType;
import static io.trino.spi.type.DateTimeEncoding.packDateTimeWithZone;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/
package io.trino.spi.connector;

import io.trino.spi.function.FunctionKind;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.security.ViewExpression;
Expand Down Expand Up @@ -598,11 +599,11 @@ default void checkCanExecuteTableProcedure(ConnectorSecurityContext context, Sch
}

/**
* Check if identity is allowed to execute function.
* Check if identity is allowed to execute function
*
* @throws io.trino.spi.security.AccessDeniedException if not allowed
*/
default void checkCanExecuteFunction(ConnectorSecurityContext context, SchemaRoutineName function)
default void checkCanExecuteFunction(ConnectorSecurityContext context, FunctionKind functionKind, SchemaRoutineName function)
{
denyExecuteFunction(function.toString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.trino.metadata;
package io.trino.spi.function;

public enum FunctionKind
{
SCALAR,
AGGREGATE,
WINDOW
WINDOW,
TABLE,
}
Loading