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
5 changes: 5 additions & 0 deletions presto-analyzer/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@
<artifactId>guava</artifactId>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.metadata;
package com.facebook.presto.sql.analyzer;

import com.facebook.presto.common.type.Type;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;

import java.util.List;
import java.util.Optional;

import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Collections.unmodifiableList;
import static java.util.Objects.requireNonNull;

public final class ViewDefinition
Expand All @@ -46,10 +44,12 @@ public ViewDefinition(
this.originalSql = requireNonNull(originalSql, "originalSql is null");
this.catalog = requireNonNull(catalog, "catalog is null");
this.schema = requireNonNull(schema, "schema is null");
this.columns = ImmutableList.copyOf(requireNonNull(columns, "columns is null"));
this.columns = unmodifiableList(requireNonNull(columns, "columns is null"));
this.owner = requireNonNull(owner, "owner is null");
this.runAsInvoker = runAsInvoker;
checkArgument(!runAsInvoker || !owner.isPresent(), "owner cannot be present with runAsInvoker");
if (runAsInvoker && owner.isPresent()) {
throw new IllegalArgumentException("owner cannot be present with runAsInvoker");
}
}

@JsonProperty
Expand Down Expand Up @@ -91,15 +91,14 @@ public boolean isRunAsInvoker()
@Override
public String toString()
{
return toStringHelper(this)
.add("originalSql", originalSql)
.add("catalog", catalog.orElse(null))
.add("schema", schema.orElse(null))
.add("columns", columns)
.add("owner", owner.orElse(null))
.add("runAsInvoker", runAsInvoker)
.omitNullValues()
.toString();
return "ViewDefinition{" +
"originalSql='" + originalSql + '\'' +
", catalog=" + catalog.orElse(null) +
", schema=" + schema.orElse(null) +
", columns=" + columns +
", owner=" + owner.orElse(null) +
", runAsInvoker=" + runAsInvoker +
'}';
}

public ViewDefinition withOwner(String owner)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import com.facebook.presto.hive.metastore.MetastoreContext;
import com.facebook.presto.hive.metastore.SemiTransactionalHiveMetastore;
import com.facebook.presto.hive.metastore.Table;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.SchemaTableName;
import com.facebook.presto.spi.TableNotFoundException;
Expand Down Expand Up @@ -75,7 +75,7 @@ public static void validateMaterializedViewPartitionColumns(
SemiTransactionalHiveMetastore metastore,
MetastoreContext metastoreContext,
Table viewTable,
ConnectorMaterializedViewDefinition viewDefinition)
MaterializedViewDefinition viewDefinition)
{
SchemaTableName viewName = new SchemaTableName(viewTable.getDatabaseName(), viewTable.getTableName());

Expand Down Expand Up @@ -194,7 +194,7 @@ public static MaterializedDataPredicates getMaterializedDataPredicates(
// baseTable: t2, partitioned by [a]
// Output: t1_a -> t2.a
public static Optional<Map<String, String>> viewToBaseTableOnOuterJoinSideIndirectMappedPartitions(
ConnectorMaterializedViewDefinition viewDefinition,
MaterializedViewDefinition viewDefinition,
Table baseTable)
{
SchemaTableName schemaBaseTable = new SchemaTableName(baseTable.getDatabaseName(), baseTable.getTableName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
import com.facebook.presto.spi.ColumnHandle;
import com.facebook.presto.spi.ColumnMetadata;
import com.facebook.presto.spi.ConnectorInsertTableHandle;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.ConnectorMetadataUpdateHandle;
import com.facebook.presto.spi.ConnectorNewTableLayout;
import com.facebook.presto.spi.ConnectorOutputTableHandle;
Expand All @@ -64,6 +63,7 @@
import com.facebook.presto.spi.DiscretePredicates;
import com.facebook.presto.spi.InMemoryRecordSet;
import com.facebook.presto.spi.LocalProperty;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewNotFoundException;
import com.facebook.presto.spi.MaterializedViewStatus;
import com.facebook.presto.spi.PrestoException;
Expand Down Expand Up @@ -396,7 +396,7 @@ public class HiveMetadata
private static final String CSV_QUOTE_KEY = OpenCSVSerde.QUOTECHAR;
private static final String CSV_ESCAPE_KEY = OpenCSVSerde.ESCAPECHAR;

private static final JsonCodec<ConnectorMaterializedViewDefinition> MATERIALIZED_VIEW_JSON_CODEC = jsonCodec(ConnectorMaterializedViewDefinition.class);
private static final JsonCodec<MaterializedViewDefinition> MATERIALIZED_VIEW_JSON_CODEC = jsonCodec(MaterializedViewDefinition.class);

private final boolean allowCorruptWritesForTesting;
private final SemiTransactionalHiveMetastore metastore;
Expand Down Expand Up @@ -2392,7 +2392,7 @@ public Map<SchemaTableName, ConnectorViewDefinition> getViews(ConnectorSession s
}

@Override
public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(ConnectorSession session, SchemaTableName viewName)
public Optional<MaterializedViewDefinition> getMaterializedView(ConnectorSession session, SchemaTableName viewName)
{
requireNonNull(viewName, "viewName is null");

Expand All @@ -2415,7 +2415,7 @@ public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(Connect
public MaterializedViewStatus getMaterializedViewStatus(ConnectorSession session, SchemaTableName materializedViewName, TupleDomain<String> baseQueryDomain)
{
MetastoreContext metastoreContext = getMetastoreContext(session);
ConnectorMaterializedViewDefinition viewDefinition = getMaterializedView(session, materializedViewName)
MaterializedViewDefinition viewDefinition = getMaterializedView(session, materializedViewName)
.orElseThrow(() -> new MaterializedViewNotFoundException(materializedViewName));

List<Table> baseTables = viewDefinition.getBaseTables().stream()
Expand Down Expand Up @@ -2482,14 +2482,14 @@ public MaterializedViewStatus getMaterializedViewStatus(ConnectorSession session
}

@Override
public void createMaterializedView(ConnectorSession session, ConnectorTableMetadata viewMetadata, ConnectorMaterializedViewDefinition viewDefinition, boolean ignoreExisting)
public void createMaterializedView(ConnectorSession session, ConnectorTableMetadata viewMetadata, MaterializedViewDefinition viewDefinition, boolean ignoreExisting)
{
if (isExternalTable(viewMetadata.getProperties())) {
throw new PrestoException(INVALID_TABLE_PROPERTY, "Specifying external location for materialized view is not supported.");
}

Table basicTable = prepareTable(session, viewMetadata, MATERIALIZED_VIEW);
viewDefinition = new ConnectorMaterializedViewDefinition(
viewDefinition = new MaterializedViewDefinition(
viewDefinition.getOriginalSql(),
viewDefinition.getSchema(),
viewDefinition.getTable(),
Expand Down Expand Up @@ -2529,7 +2529,7 @@ public void createMaterializedView(ConnectorSession session, ConnectorTableMetad
@Override
public void dropMaterializedView(ConnectorSession session, SchemaTableName viewName)
{
Optional<ConnectorMaterializedViewDefinition> view = getMaterializedView(session, viewName);
Optional<MaterializedViewDefinition> view = getMaterializedView(session, viewName);
if (!view.isPresent()) {
throw new MaterializedViewNotFoundException(viewName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import com.facebook.presto.hive.metastore.PrestoTableType;
import com.facebook.presto.hive.metastore.Storage;
import com.facebook.presto.hive.metastore.Table;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.SchemaTableName;
import com.facebook.presto.sql.planner.LiteralEncoder;
Expand Down Expand Up @@ -651,10 +651,10 @@ public TestingPartitionResult(String columnName, Type type, String partitionValu
}
}

private static ConnectorMaterializedViewDefinition getConnectorMaterializedViewDefinition(
private static MaterializedViewDefinition getConnectorMaterializedViewDefinition(
List<SchemaTableName> tables,
Map<String, Map<SchemaTableName, String>> originalColumnMapping)
{
return new ConnectorMaterializedViewDefinition(SQL, SCHEMA_NAME, TABLE_NAME, tables, Optional.empty(), originalColumnMapping, originalColumnMapping, ImmutableList.of(), Optional.empty());
return new MaterializedViewDefinition(SQL, SCHEMA_NAME, TABLE_NAME, tables, Optional.empty(), originalColumnMapping, originalColumnMapping, ImmutableList.of(), Optional.empty());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
import com.facebook.presto.metadata.MetadataManager;
import com.facebook.presto.metadata.QualifiedTablePrefix;
import com.facebook.presto.metadata.SessionPropertyManager;
import com.facebook.presto.metadata.ViewDefinition;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.TableHandle;
import com.facebook.presto.sql.analyzer.ViewDefinition;
import com.facebook.presto.transaction.TransactionInfo;
import com.facebook.presto.transaction.TransactionManager;
import com.fasterxml.jackson.core.JsonProcessingException;
Expand Down Expand Up @@ -137,7 +137,7 @@ public String getView(TransactionInfo transactionInfo, SessionRepresentation ses
public String getMaterializedView(TransactionInfo transactionInfo, SessionRepresentation session, QualifiedObjectName viewName)
{
transactionManager.tryRegisterTransaction(transactionInfo);
Optional<ConnectorMaterializedViewDefinition> connectorMaterializedViewDefinition =
Optional<MaterializedViewDefinition> connectorMaterializedViewDefinition =
metadataProvider.getMaterializedView(session.toSession(sessionPropertyManager), viewName);
return connectorMaterializedViewDefinition.map(materializedView -> writeValueAsString(materializedView, objectMapper))
.orElse(EMPTY_STRING);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import com.facebook.presto.metadata.DelegatingMetadataManager;
import com.facebook.presto.metadata.MetadataManager;
import com.facebook.presto.metadata.QualifiedTablePrefix;
import com.facebook.presto.metadata.ViewDefinition;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.TableHandle;
import com.facebook.presto.sql.analyzer.ViewDefinition;
import com.facebook.presto.transaction.TransactionManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
Expand Down Expand Up @@ -162,15 +162,15 @@ public Optional<ViewDefinition> getView(Session session, QualifiedObjectName vie
}

@Override
public Optional<ConnectorMaterializedViewDefinition> getMaterializedView(Session session, QualifiedObjectName viewName)
public Optional<MaterializedViewDefinition> getMaterializedView(Session session, QualifiedObjectName viewName)
{
String connectorMaterializedViewDefinitionJson = catalogServerClient.get().getMaterializedView(
transactionManager.getTransactionInfo(session.getRequiredTransactionId()),
session.toSessionRepresentation(),
viewName);
return connectorMaterializedViewDefinitionJson.isEmpty()
? Optional.empty()
: Optional.of(readValue(connectorMaterializedViewDefinitionJson, new TypeReference<ConnectorMaterializedViewDefinition>() {}));
: Optional.of(readValue(connectorMaterializedViewDefinitionJson, new TypeReference<MaterializedViewDefinition>() {}));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import com.facebook.presto.metadata.InternalTable;
import com.facebook.presto.metadata.Metadata;
import com.facebook.presto.metadata.QualifiedTablePrefix;
import com.facebook.presto.metadata.ViewDefinition;
import com.facebook.presto.security.AccessControl;
import com.facebook.presto.spi.ColumnHandle;
import com.facebook.presto.spi.ColumnMetadata;
Expand All @@ -37,6 +36,7 @@
import com.facebook.presto.spi.security.GrantInfo;
import com.facebook.presto.spi.security.PrestoPrincipal;
import com.facebook.presto.spi.security.RoleGrant;
import com.facebook.presto.sql.analyzer.ViewDefinition;
import com.google.common.collect.ImmutableList;

import java.util.ArrayList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import com.facebook.presto.spi.ColumnHandle;
import com.facebook.presto.spi.ColumnMetadata;
import com.facebook.presto.spi.ConnectorId;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.TableHandle;
import com.facebook.presto.spi.WarningCollector;
Expand Down Expand Up @@ -71,7 +71,7 @@ public ListenableFuture<?> execute(AddColumn statement, TransactionManager trans
return immediateFuture(null);
}

Optional<ConnectorMaterializedViewDefinition> optionalMaterializedView = metadata.getMaterializedView(session, tableName);
Optional<MaterializedViewDefinition> optionalMaterializedView = metadata.getMaterializedView(session, tableName);
if (optionalMaterializedView.isPresent()) {
if (!statement.isTableExists()) {
throw new SemanticException(NOT_SUPPORTED, statement, "'%s' is a materialized view, and add column is not supported", tableName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import com.facebook.presto.security.AccessControl;
import com.facebook.presto.spi.ColumnMetadata;
import com.facebook.presto.spi.ConnectorId;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.ConnectorTableMetadata;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.SchemaTableName;
import com.facebook.presto.spi.TableHandle;
Expand Down Expand Up @@ -133,7 +133,7 @@ public ListenableFuture<?> execute(CreateMaterializedView statement, Transaction
.collect(toImmutableList());

MaterializedViewColumnMappingExtractor extractor = new MaterializedViewColumnMappingExtractor(analysis, session);
ConnectorMaterializedViewDefinition viewDefinition = new ConnectorMaterializedViewDefinition(
MaterializedViewDefinition viewDefinition = new MaterializedViewDefinition(
sql,
viewName.getSchemaName(),
viewName.getObjectName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
import com.facebook.presto.Session;
import com.facebook.presto.common.QualifiedObjectName;
import com.facebook.presto.metadata.Metadata;
import com.facebook.presto.metadata.ViewDefinition;
import com.facebook.presto.security.AccessControl;
import com.facebook.presto.spi.ColumnMetadata;
import com.facebook.presto.spi.ConnectorTableMetadata;
import com.facebook.presto.spi.WarningCollector;
import com.facebook.presto.sql.analyzer.Analysis;
import com.facebook.presto.sql.analyzer.Analyzer;
import com.facebook.presto.sql.analyzer.FeaturesConfig;
import com.facebook.presto.sql.analyzer.ViewDefinition;
import com.facebook.presto.sql.parser.SqlParser;
import com.facebook.presto.sql.tree.CreateView;
import com.facebook.presto.sql.tree.Expression;
Expand All @@ -39,8 +39,8 @@

import static com.facebook.presto.metadata.MetadataUtil.createQualifiedObjectName;
import static com.facebook.presto.metadata.MetadataUtil.toSchemaTableName;
import static com.facebook.presto.metadata.ViewDefinition.ViewColumn;
import static com.facebook.presto.sql.SqlFormatterUtil.getFormattedSql;
import static com.facebook.presto.sql.analyzer.ViewDefinition.ViewColumn;
import static com.facebook.presto.sql.analyzer.utils.ParameterUtils.parameterExtractor;
import static com.facebook.presto.sql.tree.CreateView.Security.INVOKER;
import static com.google.common.collect.ImmutableList.toImmutableList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.facebook.presto.metadata.Metadata;
import com.facebook.presto.security.AccessControl;
import com.facebook.presto.spi.ColumnHandle;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.TableHandle;
import com.facebook.presto.spi.WarningCollector;
import com.facebook.presto.sql.analyzer.SemanticException;
Expand Down Expand Up @@ -59,7 +59,7 @@ public ListenableFuture<?> execute(DropColumn statement, TransactionManager tran
return immediateFuture(null);
}

Optional<ConnectorMaterializedViewDefinition> optionalMaterializedView = metadata.getMaterializedView(session, tableName);
Optional<MaterializedViewDefinition> optionalMaterializedView = metadata.getMaterializedView(session, tableName);
if (optionalMaterializedView.isPresent()) {
if (!statement.isTableExists()) {
throw new SemanticException(NOT_SUPPORTED, statement, "'%s' is a materialized view, and drop column is not supported", tableName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.facebook.presto.common.QualifiedObjectName;
import com.facebook.presto.metadata.Metadata;
import com.facebook.presto.security.AccessControl;
import com.facebook.presto.spi.ConnectorMaterializedViewDefinition;
import com.facebook.presto.spi.MaterializedViewDefinition;
import com.facebook.presto.spi.WarningCollector;
import com.facebook.presto.sql.analyzer.SemanticException;
import com.facebook.presto.sql.tree.DropMaterializedView;
Expand Down Expand Up @@ -46,7 +46,7 @@ public ListenableFuture<?> execute(DropMaterializedView statement, TransactionMa
{
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName());

Optional<ConnectorMaterializedViewDefinition> view = metadata.getMaterializedView(session, name);
Optional<MaterializedViewDefinition> view = metadata.getMaterializedView(session, name);
if (!view.isPresent()) {
if (!statement.isExists()) {
throw new SemanticException(MISSING_MATERIALIZED_VIEW, statement, "Materialized view '%s' does not exist", name);
Expand Down
Loading