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 @@ -160,8 +160,7 @@ public ListenableFuture<Void> execute(
// system path elements are not stored
.filter(element -> !element.getCatalogName().equals(GlobalSystemConnector.NAME))
.collect(toImmutableList()),
Optional.empty(),
properties);
Optional.empty());

Set<String> specifiedPropertyKeys = statement.getProperties().stream()
// property names are case-insensitive and normalized to lower case
Expand All @@ -172,7 +171,7 @@ public ListenableFuture<Void> execute(
.filter(specifiedPropertyKeys::contains)
.collect(toImmutableMap(Function.identity(), properties::get));
accessControl.checkCanCreateMaterializedView(session.toSecurityContext(), name, explicitlySetProperties);
plannerContext.getMetadata().createMaterializedView(session, name, definition, statement.isReplace(), statement.isNotExists());
plannerContext.getMetadata().createMaterializedView(session, name, definition, properties, statement.isReplace(), statement.isNotExists());

stateMachine.setOutput(analysis.getTarget());
stateMachine.setReferencedTables(analysis.getReferencedTables());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@
*/
package io.trino.metadata;

import com.google.common.collect.ImmutableMap;
import io.trino.spi.connector.CatalogSchemaName;
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.ConnectorMaterializedViewDefinition;
import io.trino.spi.security.Identity;

import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import static com.google.common.base.MoreObjects.toStringHelper;
Expand All @@ -34,7 +32,6 @@ public class MaterializedViewDefinition
{
private final Optional<Duration> gracePeriod;
private final Optional<CatalogSchemaTableName> storageTable;
private final Map<String, Object> properties;

public MaterializedViewDefinition(
String originalSql,
Expand All @@ -45,14 +42,12 @@ public MaterializedViewDefinition(
Optional<String> comment,
Identity owner,
List<CatalogSchemaName> path,
Optional<CatalogSchemaTableName> storageTable,
Map<String, Object> properties)
Optional<CatalogSchemaTableName> storageTable)
{
super(originalSql, catalog, schema, columns, comment, Optional.of(owner), path);
checkArgument(gracePeriod.isEmpty() || !gracePeriod.get().isNegative(), "gracePeriod cannot be negative: %s", gracePeriod);
this.gracePeriod = gracePeriod;
this.storageTable = requireNonNull(storageTable, "storageTable is null");
this.properties = ImmutableMap.copyOf(requireNonNull(properties, "properties is null"));
}

public Optional<Duration> getGracePeriod()
Expand All @@ -65,11 +60,6 @@ public Optional<CatalogSchemaTableName> getStorageTable()
return storageTable;
}

public Map<String, Object> getProperties()
{
return properties;
}

public ConnectorMaterializedViewDefinition toConnectorMaterializedViewDefinition()
{
return new ConnectorMaterializedViewDefinition(
Expand All @@ -83,8 +73,7 @@ public ConnectorMaterializedViewDefinition toConnectorMaterializedViewDefinition
getGracePeriod(),
getComment(),
getRunAsIdentity().map(Identity::getUser),
getPath(),
properties);
getPath());
}

@Override
Expand All @@ -100,7 +89,6 @@ public String toString()
.add("runAsIdentity", getRunAsIdentity())
.add("path", getPath())
.add("storageTable", storageTable.orElse(null))
.add("properties", properties)
.toString();
}
}
10 changes: 9 additions & 1 deletion core/trino-main/src/main/java/io/trino/metadata/Metadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,13 @@ default ResolvedFunction getCoercion(Type fromType, Type toType)
/**
* Creates the specified materialized view with the specified view definition.
*/
void createMaterializedView(Session session, QualifiedObjectName viewName, MaterializedViewDefinition definition, boolean replace, boolean ignoreExisting);
void createMaterializedView(
Session session,
QualifiedObjectName viewName,
MaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting);

/**
* Drops the specified materialized view.
Expand Down Expand Up @@ -740,6 +746,8 @@ default boolean isMaterializedView(Session session, QualifiedObjectName viewName
*/
Optional<MaterializedViewDefinition> getMaterializedView(Session session, QualifiedObjectName viewName);

Map<String, Object> getMaterializedViewProperties(Session session, QualifiedObjectName objectName, MaterializedViewDefinition materializedViewDefinition);

/**
* Method to get difference between the states of table at two different points in time/or as of given token-ids.
* The method is used by the engine to determine if a materialized view is current with respect to the tables it depends on.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1530,7 +1530,13 @@ public void dropView(Session session, QualifiedObjectName viewName)
}

@Override
public void createMaterializedView(Session session, QualifiedObjectName viewName, MaterializedViewDefinition definition, boolean replace, boolean ignoreExisting)
public void createMaterializedView(
Session session,
QualifiedObjectName viewName,
MaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting)
{
CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, viewName.getCatalogName());
CatalogHandle catalogHandle = catalogMetadata.getCatalogHandle();
Expand All @@ -1540,6 +1546,7 @@ public void createMaterializedView(Session session, QualifiedObjectName viewName
session.toConnectorSession(catalogHandle),
viewName.asSchemaTableName(),
definition.toConnectorMaterializedViewDefinition(),
properties,
replace,
ignoreExisting);
if (catalogMetadata.getSecurityManagement() == SYSTEM) {
Expand Down Expand Up @@ -1673,8 +1680,7 @@ private static MaterializedViewDefinition createMaterializedViewDefinition(Conne
view.getComment(),
runAsIdentity,
view.getPath(),
view.getStorageTable(),
view.getProperties());
view.getStorageTable());
}

private Optional<ConnectorMaterializedViewDefinition> getMaterializedViewInternal(Session session, QualifiedObjectName viewName)
Expand All @@ -1695,6 +1701,24 @@ private Optional<ConnectorMaterializedViewDefinition> getMaterializedViewInterna
return Optional.empty();
}

@Override
public Map<String, Object> getMaterializedViewProperties(Session session, QualifiedObjectName viewName, MaterializedViewDefinition materializedViewDefinition)
{
Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, viewName.getCatalogName());
if (catalog.isPresent()) {
CatalogMetadata catalogMetadata = catalog.get();
CatalogHandle catalogHandle = catalogMetadata.getCatalogHandle(session, viewName);
ConnectorMetadata metadata = catalogMetadata.getMetadataFor(session, catalogHandle);

ConnectorSession connectorSession = session.toConnectorSession(catalogHandle);
return ImmutableMap.copyOf(metadata.getMaterializedViewProperties(
connectorSession,
viewName.asSchemaTableName(),
materializedViewDefinition.toConnectorMaterializedViewDefinition()));
}
return ImmutableMap.of();
}

@Override
public MaterializedViewFreshness getMaterializedViewFreshness(Session session, QualifiedObjectName viewName)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@ protected Node visitShowCreate(ShowCreate node, Void context)

accessControl.checkCanShowCreateTable(session.toSecurityContext(), new QualifiedObjectName(catalogName.getValue(), schemaName.getValue(), tableName.getValue()));

Map<String, Object> properties = viewDefinition.get().getProperties();
Map<String, Object> properties = metadata.getMaterializedViewProperties(session, objectName, viewDefinition.get());
CatalogHandle catalogHandle = getRequiredCatalogHandle(metadata, session, node, catalogName.getValue());
Collection<PropertyMetadata<?>> allMaterializedViewProperties = materializedViewPropertyManager.getAllProperties(catalogHandle);
List<Property> propertyNodes = buildProperties(objectName, Optional.empty(), INVALID_MATERIALIZED_VIEW_PROPERTY, properties, allMaterializedViewProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,13 @@ public Optional<ConnectorViewDefinition> getView(ConnectorSession session, Schem
}

@Override
public void createMaterializedView(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition definition, boolean replace, boolean ignoreExisting)
public void createMaterializedView(
ConnectorSession session,
SchemaTableName viewName,
ConnectorMaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting)
{
if (replace) {
materializedViews.put(viewName, definition);
Expand Down Expand Up @@ -264,6 +270,12 @@ public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(Connect
return Optional.ofNullable(materializedViews.get(viewName));
}

@Override
public Map<String, Object> getMaterializedViewProperties(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition materializedViewDefinition)
{
return ImmutableMap.of();
}

@Override
public void dropMaterializedView(ConnectorSession session, SchemaTableName viewName)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1245,11 +1245,17 @@ public void validateScan(ConnectorSession session, ConnectorTableHandle handle)
}

@Override
public void createMaterializedView(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition definition, boolean replace, boolean ignoreExisting)
public void createMaterializedView(
ConnectorSession session,
SchemaTableName viewName,
ConnectorMaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting)
{
Span span = startSpan("createMaterializedView", viewName);
try (var ignored = scopedSpan(span)) {
delegate.createMaterializedView(session, viewName, definition, replace, ignoreExisting);
delegate.createMaterializedView(session, viewName, definition, properties, replace, ignoreExisting);
}
}

Expand Down Expand Up @@ -1289,6 +1295,15 @@ public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(Connect
}
}

@Override
public Map<String, Object> getMaterializedViewProperties(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition materializedViewDefinition)
{
Span span = startSpan("getMaterializedViewProperties", viewName);
try (var ignored = scopedSpan(span)) {
return delegate.getMaterializedViewProperties(session, viewName, materializedViewDefinition);
}
}

@Override
public MaterializedViewFreshness getMaterializedViewFreshness(ConnectorSession session, SchemaTableName name)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1302,11 +1302,17 @@ public void dropLanguageFunction(Session session, QualifiedObjectName name, Stri
}

@Override
public void createMaterializedView(Session session, QualifiedObjectName viewName, MaterializedViewDefinition definition, boolean replace, boolean ignoreExisting)
public void createMaterializedView(
Session session,
QualifiedObjectName viewName,
MaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting)
{
Span span = startSpan("createMaterializedView", viewName);
try (var ignored = scopedSpan(span)) {
delegate.createMaterializedView(session, viewName, definition, replace, ignoreExisting);
delegate.createMaterializedView(session, viewName, definition, properties, replace, ignoreExisting);
}
}

Expand Down Expand Up @@ -1355,6 +1361,15 @@ public Optional<MaterializedViewDefinition> getMaterializedView(Session session,
}
}

@Override
public Map<String, Object> getMaterializedViewProperties(Session session, QualifiedObjectName objectName, MaterializedViewDefinition materializedViewDefinition)
{
Span span = startSpan("getMaterializedViewProperties", objectName);
try (var ignored = scopedSpan(span)) {
return delegate.getMaterializedViewProperties(session, objectName, materializedViewDefinition);
}
}

@Override
public MaterializedViewFreshness getMaterializedViewFreshness(Session session, QualifiedObjectName name)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,13 @@ public void setViewAuthorization(ConnectorSession session, SchemaTableName viewN
public void dropView(ConnectorSession session, SchemaTableName viewName) {}

@Override
public void createMaterializedView(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition definition, boolean replace, boolean ignoreExisting) {}
public void createMaterializedView(
ConnectorSession session,
SchemaTableName viewName,
ConnectorMaterializedViewDefinition definition,
Map<String, Object> properties,
boolean replace,
boolean ignoreExisting) {}

@Override
public List<SchemaTableName> listMaterializedViews(ConnectorSession session, Optional<String> schemaName)
Expand All @@ -680,6 +686,12 @@ public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(Connect
return Optional.ofNullable(getMaterializedViews.apply(session, viewName.toSchemaTablePrefix()).get(viewName));
}

@Override
public Map<String, Object> getMaterializedViewProperties(ConnectorSession session, SchemaTableName viewName, ConnectorMaterializedViewDefinition materializedViewDefinition)
{
return ImmutableMap.of();
}

@Override
public MaterializedViewFreshness getMaterializedViewFreshness(ConnectorSession session, SchemaTableName viewName)
{
Expand Down
Loading