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 @@ -1658,7 +1658,7 @@ public MaterializedViewFreshness getMaterializedViewFreshness(Session session, Q
ConnectorSession connectorSession = session.toConnectorSession(catalogHandle);
return metadata.getMaterializedViewFreshness(connectorSession, viewName.asSchemaTableName());
}
return new MaterializedViewFreshness(STALE);
return new MaterializedViewFreshness(STALE, Optional.empty());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,14 +252,6 @@ public interface AccessControl
*/
void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName table);

/**
* Filter the list of columns to those visible to the identity.
*
* @deprecated Use {@link #filterColumns(SecurityContext, String, Map)}
*/
@Deprecated
Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns);

/**
* Filter lists of columns of multiple tables to those visible to the identity.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -627,32 +627,6 @@ public void checkCanShowColumns(SecurityContext securityContext, CatalogSchemaTa
catalogAuthorizationCheck(table.getCatalogName(), securityContext, (control, context) -> control.checkCanShowColumns(context, table.getSchemaTableName()));
}

@Override
public Set<String> filterColumns(SecurityContext securityContext, CatalogSchemaTableName table, Set<String> columns)
{
requireNonNull(securityContext, "securityContext is null");
requireNonNull(table, "tableName is null");

if (columns.isEmpty()) {
// Do not call plugin-provided implementation unnecessarily.
return ImmutableSet.of();
}

if (filterTables(securityContext, table.getCatalogName(), ImmutableSet.of(table.getSchemaTableName())).isEmpty()) {
return ImmutableSet.of();
}

for (SystemAccessControl systemAccessControl : getSystemAccessControls()) {
columns = systemAccessControl.filterColumns(securityContext.toSystemSecurityContext(), table, columns);
}

ConnectorAccessControl connectorAccessControl = getConnectorAccessControl(securityContext.getTransactionId(), table.getCatalogName());
if (connectorAccessControl != null) {
columns = connectorAccessControl.filterColumns(toConnectorSecurityContext(table.getCatalogName(), securityContext), table.getSchemaTableName(), columns);
}
return columns;
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext securityContext, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,6 @@ public void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName
{
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns)
{
return columns;
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,12 +263,6 @@ public void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName
denyShowColumns(table.toString());
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns)
{
return ImmutableSet.of();
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,12 +233,6 @@ public void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName
delegate().checkCanShowColumns(context, table);
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns)
{
return delegate().filterColumns(context, tableName, columns);
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,13 +184,6 @@ public void checkCanShowColumns(ConnectorSecurityContext context, SchemaTableNam
accessControl.checkCanShowColumns(securityContext, new CatalogSchemaTableName(catalogName, tableName));
}

@Override
public Set<String> filterColumns(ConnectorSecurityContext context, SchemaTableName tableName, Set<String> columns)
{
checkArgument(context == null, "context must be null");
return accessControl.filterColumns(securityContext, new CatalogSchemaTableName(catalogName, tableName), columns);
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(ConnectorSecurityContext context, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package io.trino.security;

import io.trino.metadata.QualifiedObjectName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.security.AccessDeniedException;
import io.trino.spi.security.ViewExpression;
Expand Down Expand Up @@ -54,12 +53,6 @@ public void checkCanSelectFromColumns(SecurityContext context, QualifiedObjectNa
wrapAccessDeniedException(() -> delegate.checkCanCreateViewWithSelectFromColumns(context, tableName, columnNames));
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns)
{
return delegate.filterColumns(context, tableName, columns);
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4415,11 +4415,14 @@ private List<Field> filterInaccessibleFields(List<Field> fields)

tableFieldsMap.asMap().forEach((table, tableFields) -> {
Set<String> accessibleColumns = accessControl.filterColumns(
session.toSecurityContext(),
table.asCatalogSchemaTableName(),
tableFields.stream()
.map(field -> field.getOriginColumnName().get())
.collect(toImmutableSet()));
session.toSecurityContext(),
table.getCatalogName(),
ImmutableMap.of(
table.asSchemaTableName(),
tableFields.stream()
.map(field -> field.getOriginColumnName().get())
.collect(toImmutableSet())))
.getOrDefault(table.asSchemaTableName(), ImmutableSet.of());
accessibleFields.addAll(tableFields.stream()
.filter(field -> accessibleColumns.contains(field.getOriginColumnName().get()))
.collect(toImmutableList()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
Expand Down Expand Up @@ -640,19 +641,12 @@ public void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName
}
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName table, Set<String> columns)
{
Set<String> visibleColumns = localFilterColumns(context, table.getSchemaTableName(), columns);
return super.filterColumns(context, table, visibleColumns);
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
tableColumns = tableColumns.entrySet().stream()
.collect(toImmutableMap(
Map.Entry::getKey,
Entry::getKey,
e -> localFilterColumns(context, e.getKey(), e.getValue())));
return super.filterColumns(context, catalogName, tableColumns);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,19 +320,10 @@ public void checkCanShowColumns(SecurityContext context, CatalogSchemaTableName
}
}

@Override
public Set<String> filterColumns(SecurityContext context, CatalogSchemaTableName tableName, Set<String> columns)
{
Span span = startSpan("filterColumns");
try (var ignored = scopedSpan(span)) {
return delegate.filterColumns(context, tableName, columns);
}
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(SecurityContext context, String catalogName, Map<SchemaTableName, Set<String>> tableColumns)
{
Span span = startSpan("filterColumns bulk");
Span span = startSpan("filterColumns");
try (var ignored = scopedSpan(span)) {
return delegate.filterColumns(context, catalogName, tableColumns);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -685,7 +685,7 @@ public MaterializedViewFreshness getMaterializedViewFreshness(ConnectorSession s
{
ConnectorMaterializedViewDefinition view = getMaterializedViews.apply(session, viewName.toSchemaTablePrefix()).get(viewName);
checkArgument(view != null, "Materialized view %s does not exist", viewName);
return new MaterializedViewFreshness(view.getStorageTable().isPresent() ? FRESH : STALE);
return new MaterializedViewFreshness(view.getStorageTable().isPresent() ? FRESH : STALE, Optional.empty());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@ public TestColumnMask()
Optional.empty(),
Optional.empty(),
ImmutableList.of(
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(25).getTypeId()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId())),
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(25).getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId(), Optional.empty())),
Optional.of(Duration.ZERO),
Optional.empty(),
Optional.of(VIEW_OWNER),
Expand All @@ -131,10 +131,10 @@ public TestColumnMask()
Optional.empty(),
Optional.empty(),
ImmutableList.of(
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(25).getTypeId()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId())),
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(25).getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId(), Optional.empty())),
Optional.of(Duration.ZERO),
Optional.empty(),
Optional.of(VIEW_OWNER),
Expand All @@ -147,10 +147,10 @@ public TestColumnMask()
Optional.empty(),
Optional.empty(),
ImmutableList.of(
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(2).getTypeId()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId())),
new ConnectorMaterializedViewDefinition.Column("nationkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("name", VarcharType.createVarcharType(2).getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("regionkey", BigintType.BIGINT.getTypeId(), Optional.empty()),
new ConnectorMaterializedViewDefinition.Column("comment", VarcharType.createVarcharType(152).getTypeId(), Optional.empty())),
Optional.of(Duration.ZERO),
Optional.empty(),
Optional.of(VIEW_OWNER),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private static ConnectorMaterializedViewDefinition someMaterializedView()
Optional.empty(),
Optional.empty(),
Optional.empty(),
ImmutableList.of(new Column("test", BIGINT.getTypeId())),
ImmutableList.of(new Column("test", BIGINT.getTypeId(), Optional.empty())),
Optional.of(Duration.ZERO),
Optional.empty(),
Optional.of("owner"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,6 @@

public interface Connector
{
/**
* @deprecated use {@link #beginTransaction(IsolationLevel, boolean, boolean)}
*/
@Deprecated
default ConnectorTransactionHandle beginTransaction(IsolationLevel isolationLevel, boolean readOnly)
{
throw new UnsupportedOperationException();
}

/**
* Start a new transaction and return a handle for it. The engine will call
* {@link #getMetadata} to fetch the metadata instance for the transaction.
Expand All @@ -56,26 +47,14 @@ default ConnectorTransactionHandle beginTransaction(IsolationLevel isolationLeve
*/
default ConnectorTransactionHandle beginTransaction(IsolationLevel isolationLevel, boolean readOnly, boolean autoCommit)
{
return beginTransaction(isolationLevel, readOnly);
throw new UnsupportedOperationException();
}

/**
* Guaranteed to be called at most once per transaction. The returned metadata will only be accessed
* in a single threaded context.
*/
default ConnectorMetadata getMetadata(ConnectorSession session, ConnectorTransactionHandle transactionHandle)
{
return getMetadata(transactionHandle);
}

/**
* Guaranteed to be called at most once per transaction. The returned metadata will only be accessed
* in a single threaded context.
*
* @deprecated use {@link #getMetadata(ConnectorSession, ConnectorTransactionHandle)}
*/
@Deprecated
default ConnectorMetadata getMetadata(ConnectorTransactionHandle transactionHandle)
{
throw new UnsupportedOperationException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static io.trino.spi.security.AccessDeniedException.denyAddColumn;
import static io.trino.spi.security.AccessDeniedException.denyAlterColumn;
Expand Down Expand Up @@ -83,6 +82,7 @@
import static io.trino.spi.security.AccessDeniedException.denyTruncateTable;
import static io.trino.spi.security.AccessDeniedException.denyUpdateTableColumns;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.Collections.emptySet;

public interface ConnectorAccessControl
Expand Down Expand Up @@ -275,26 +275,12 @@ default void checkCanShowColumns(ConnectorSecurityContext context, SchemaTableNa
denyShowColumns(tableName.getTableName());
}

/**
* Filter the list of columns to those visible to the identity.
*
* @deprecated Use {@link #filterColumns(ConnectorSecurityContext, Map)}
*/
@Deprecated
default Set<String> filterColumns(ConnectorSecurityContext context, SchemaTableName tableName, Set<String> columns)
{
return emptySet();
}

/**
* Filter lists of columns of multiple tables to those visible to the identity.
*/
default Map<SchemaTableName, Set<String>> filterColumns(ConnectorSecurityContext context, Map<SchemaTableName, Set<String>> tableColumns)
{
return tableColumns.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> filterColumns(context, entry.getKey(), entry.getValue())));
return emptyMap();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,6 @@ public static final class Column
private final TypeId type;
private final Optional<String> comment;

@Deprecated
public Column(String name, TypeId type)
{
this(name, type, Optional.empty());
}

public Column(String name, TypeId type, Optional<String> comment)
{
this.name = requireNonNull(name, "name is null");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,6 @@ public final class MaterializedViewFreshness
private final Freshness freshness;
private final Optional<Instant> lastFreshTime;

@Deprecated
public MaterializedViewFreshness(Freshness freshness)
{
this(freshness, Optional.empty());
}

public MaterializedViewFreshness(Freshness freshness, Optional<Instant> lastFreshTime)
{
this.freshness = requireNonNull(freshness, "freshness is null");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,6 @@ public void checkCanShowColumns(ConnectorSecurityContext context, SchemaTableNam
}
}

@Override
public Set<String> filterColumns(ConnectorSecurityContext context, SchemaTableName tableName, Set<String> columns)
{
try (ThreadContextClassLoader ignored = new ThreadContextClassLoader(classLoader)) {
return delegate.filterColumns(context, tableName, columns);
}
}

@Override
public Map<SchemaTableName, Set<String>> filterColumns(ConnectorSecurityContext context, Map<SchemaTableName, Set<String>> tableColumns)
{
Expand Down
Loading