diff --git a/presto-hive/src/main/java/io/prestosql/plugin/hive/security/LegacyAccessControl.java b/presto-hive/src/main/java/io/prestosql/plugin/hive/security/LegacyAccessControl.java index 2a3fb1971..b3b756d79 100644 --- a/presto-hive/src/main/java/io/prestosql/plugin/hive/security/LegacyAccessControl.java +++ b/presto-hive/src/main/java/io/prestosql/plugin/hive/security/LegacyAccessControl.java @@ -281,12 +281,12 @@ public class LegacyAccessControl } @Override - public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } @Override - public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } diff --git a/presto-hive/src/main/java/io/prestosql/plugin/hive/security/SqlStandardAccessControl.java b/presto-hive/src/main/java/io/prestosql/plugin/hive/security/SqlStandardAccessControl.java index bff854417..36acf2c53 100644 --- a/presto-hive/src/main/java/io/prestosql/plugin/hive/security/SqlStandardAccessControl.java +++ b/presto-hive/src/main/java/io/prestosql/plugin/hive/security/SqlStandardAccessControl.java @@ -509,12 +509,12 @@ public class SqlStandardAccessControl } @Override - public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } @Override - public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } diff --git a/presto-hive/src/main/java/io/prestosql/plugin/hive/util/IndexCache.java b/presto-hive/src/main/java/io/prestosql/plugin/hive/util/IndexCache.java index f629ae313..ea5db84f3 100644 --- a/presto-hive/src/main/java/io/prestosql/plugin/hive/util/IndexCache.java +++ b/presto-hive/src/main/java/io/prestosql/plugin/hive/util/IndexCache.java @@ -67,7 +67,7 @@ public class IndexCache if (PropertyService.getBooleanProperty(HetuConstant.FILTER_ENABLED)) { loadDelay = PropertyService.getDurationProperty(HetuConstant.FILTER_CACHE_LOADING_DELAY).toMillis(); // in millisecond - Long refreshRate = Math.min(loadDelay / 2, 5000L); + long refreshRate = Math.max(loadDelay / 2, 5000L); int numThreads = Math.min(Runtime.getRuntime().availableProcessors(), PropertyService.getLongProperty(HetuConstant.FILTER_CACHE_LOADING_THREADS).intValue()); executor = Executors.newScheduledThreadPool(numThreads, threadFactory); CacheBuilder> cacheBuilder = CacheBuilder.newBuilder() diff --git a/presto-main/src/main/java/io/prestosql/execution/DropIndexTask.java b/presto-main/src/main/java/io/prestosql/execution/DropIndexTask.java index dc5b07369..05284c626 100644 --- a/presto-main/src/main/java/io/prestosql/execution/DropIndexTask.java +++ b/presto-main/src/main/java/io/prestosql/execution/DropIndexTask.java @@ -21,6 +21,7 @@ import io.prestosql.metadata.Metadata; import io.prestosql.metadata.QualifiedObjectName; import io.prestosql.security.AccessControl; import io.prestosql.spi.heuristicindex.IndexClient; +import io.prestosql.spi.heuristicindex.IndexRecord; import io.prestosql.sql.analyzer.SemanticException; import io.prestosql.sql.tree.DropIndex; import io.prestosql.sql.tree.Expression; @@ -34,7 +35,6 @@ import java.util.Collections; import java.util.List; import static com.google.common.util.concurrent.Futures.immediateFuture; -import static io.prestosql.metadata.MetadataUtil.createQualifiedObjectName; import static io.prestosql.sql.analyzer.SemanticErrorCode.MISSING_INDEX; public class DropIndexTask @@ -52,16 +52,17 @@ public class DropIndexTask IndexClient indexClient = heuristicIndexerManager.getIndexClient(); String indexName = statement.getIndexName().toString(); - Session session = stateMachine.getSession(); - QualifiedObjectName fullObjectName = createQualifiedObjectName(session, statement, statement.getIndexName()); - - accessControl.checkCanDropIndex(session.getRequiredTransactionId(), session.getIdentity(), fullObjectName); - try { + IndexRecord record = indexClient.getIndexRecord(indexName); // check indexName exist, call heuristic index api to drop index - if (indexClient.getIndexRecord(indexName) == null) { + if (record == null) { throw new SemanticException(MISSING_INDEX, statement, "Index '%s' does not exists", indexName); } + + QualifiedObjectName fullObjectName = QualifiedObjectName.valueOf(record.table); + Session session = stateMachine.getSession(); + accessControl.checkCanDropIndex(session.getRequiredTransactionId(), session.getIdentity(), fullObjectName); + List partitions = Collections.emptyList(); if (statement.getPartitions().isPresent()) { partitions = HeuristicIndexUtils.extractPartitions(statement.getPartitions().get()); diff --git a/presto-main/src/main/java/io/prestosql/execution/RenameIndexTask.java b/presto-main/src/main/java/io/prestosql/execution/RenameIndexTask.java index d3076fcc1..c896ed820 100644 --- a/presto-main/src/main/java/io/prestosql/execution/RenameIndexTask.java +++ b/presto-main/src/main/java/io/prestosql/execution/RenameIndexTask.java @@ -15,10 +15,8 @@ package io.prestosql.execution; import com.google.common.util.concurrent.ListenableFuture; -import io.prestosql.Session; import io.prestosql.heuristicindex.HeuristicIndexerManager; import io.prestosql.metadata.Metadata; -import io.prestosql.metadata.QualifiedObjectName; import io.prestosql.security.AccessControl; import io.prestosql.sql.tree.Expression; import io.prestosql.sql.tree.RenameIndex; @@ -27,7 +25,6 @@ import io.prestosql.transaction.TransactionManager; import java.util.List; import static com.google.common.util.concurrent.Futures.immediateFuture; -import static io.prestosql.metadata.MetadataUtil.createQualifiedObjectName; public class RenameIndexTask implements DataDefinitionTask @@ -41,12 +38,6 @@ public class RenameIndexTask @Override public ListenableFuture execute(RenameIndex statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List parameters, HeuristicIndexerManager heuristicIndexerManager) { - Session session = stateMachine.getSession(); - QualifiedObjectName oldIndexName = createQualifiedObjectName(session, statement, statement.getSource()); - QualifiedObjectName newIndexName = createQualifiedObjectName(session, statement, statement.getTarget()); - - accessControl.checkCanRenameIndex(session.getRequiredTransactionId(), session.getIdentity(), oldIndexName, newIndexName); - return immediateFuture(null); } } diff --git a/presto-main/src/main/java/io/prestosql/heuristicindex/IndexCache.java b/presto-main/src/main/java/io/prestosql/heuristicindex/IndexCache.java index f3e75bd11..2772cd4b7 100644 --- a/presto-main/src/main/java/io/prestosql/heuristicindex/IndexCache.java +++ b/presto-main/src/main/java/io/prestosql/heuristicindex/IndexCache.java @@ -63,7 +63,7 @@ public class IndexCache if (PropertyService.getBooleanProperty(HetuConstant.FILTER_ENABLED)) { loadDelay = PropertyService.getDurationProperty(HetuConstant.FILTER_CACHE_LOADING_DELAY).toMillis(); // in millisecond - long refreshRate = Math.min(loadDelay / 2, 5000L); + long refreshRate = Math.max(loadDelay / 2, 5000L); int numThreads = Math.min(Runtime.getRuntime().availableProcessors(), PropertyService.getLongProperty(HetuConstant.FILTER_CACHE_LOADING_THREADS).intValue()); executor = Executors.newScheduledThreadPool(numThreads, threadFactory); CacheBuilder> cacheBuilder = CacheBuilder.newBuilder() diff --git a/presto-main/src/main/java/io/prestosql/operator/CreateIndexOperator.java b/presto-main/src/main/java/io/prestosql/operator/CreateIndexOperator.java index 0beec0bba..454ad622a 100644 --- a/presto-main/src/main/java/io/prestosql/operator/CreateIndexOperator.java +++ b/presto-main/src/main/java/io/prestosql/operator/CreateIndexOperator.java @@ -14,6 +14,7 @@ */ package io.prestosql.operator; +import io.airlift.log.Logger; import io.airlift.slice.Slice; import io.prestosql.heuristicindex.HeuristicIndexerManager; import io.prestosql.spi.HetuConstant; @@ -52,6 +53,7 @@ public class CreateIndexOperator private final CreateIndexMetadata createIndexMetadata; private final HeuristicIndexerManager heuristicIndexerManager; private final AtomicBoolean recordCreated; + private static final Logger LOG = Logger.get(CreateIndexOperator.class); public CreateIndexOperator( OperatorContext operatorContext, @@ -199,8 +201,7 @@ public class CreateIndexOperator break; } default: - new IOException("Create level not supported"); - break; + throw new IllegalArgumentException("Create level not supported"); } } catch (IOException e) { diff --git a/presto-main/src/main/java/io/prestosql/security/AccessControl.java b/presto-main/src/main/java/io/prestosql/security/AccessControl.java index 0bd435fdf..eb404e1b5 100644 --- a/presto-main/src/main/java/io/prestosql/security/AccessControl.java +++ b/presto-main/src/main/java/io/prestosql/security/AccessControl.java @@ -214,14 +214,14 @@ public interface AccessControl * * @throws io.prestosql.spi.security.AccessDeniedException if not allowed */ - void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName); + void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName); /** * Check if identity is allowed to drop the specified index. * * @throws io.prestosql.spi.security.AccessDeniedException if not allowed */ - void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName); + void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName); /** * Check if identity is allowed to rename the specified index. @@ -233,12 +233,12 @@ public interface AccessControl /** * Check if identity is allowed to update the specified index. */ - default void checkCanUpdateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) {} + default void checkCanUpdateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) {} /** * Check if identity is allowed to show the specified index. */ - void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName); + void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName); /** * Check if identity is allowed to create the specified view. diff --git a/presto-main/src/main/java/io/prestosql/security/AccessControlManager.java b/presto-main/src/main/java/io/prestosql/security/AccessControlManager.java index d52b5fa75..2cbaaf385 100644 --- a/presto-main/src/main/java/io/prestosql/security/AccessControlManager.java +++ b/presto-main/src/main/java/io/prestosql/security/AccessControlManager.java @@ -520,34 +520,34 @@ public class AccessControlManager } @Override - public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { requireNonNull(identity, "identity is null"); - requireNonNull(indexName, "indexName is null"); + requireNonNull(tableName, "tableName is null"); - authenticationCheck(() -> checkCanAccessCatalog(identity, indexName.getCatalogName())); + authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); - authorizationCheck(() -> systemAccessControl.get().checkCanCreateIndex(identity, indexName.asCatalogSchemaTableName())); + authorizationCheck(() -> systemAccessControl.get().checkCanCreateIndex(identity, tableName.asCatalogSchemaTableName())); - CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, indexName.getCatalogName()); + CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { - authorizationCheck(() -> entry.getAccessControl().checkCanCreateIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(indexName.getCatalogName()), indexName.asSchemaTableName())); + authorizationCheck(() -> entry.getAccessControl().checkCanCreateIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName())); } } @Override - public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { requireNonNull(identity, "identity is null"); - requireNonNull(indexName, "indexName is null"); + requireNonNull(tableName, "tableName is null"); - authenticationCheck(() -> checkCanAccessCatalog(identity, indexName.getCatalogName())); + authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); - authorizationCheck(() -> systemAccessControl.get().checkCanDropIndex(identity, indexName.asCatalogSchemaTableName())); + authorizationCheck(() -> systemAccessControl.get().checkCanDropIndex(identity, tableName.asCatalogSchemaTableName())); - CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, indexName.getCatalogName()); + CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { - authorizationCheck(() -> entry.getAccessControl().checkCanDropIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(indexName.getCatalogName()), indexName.asSchemaTableName())); + authorizationCheck(() -> entry.getAccessControl().checkCanDropIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName())); } } @@ -569,36 +569,36 @@ public class AccessControlManager } @Override - public void checkCanUpdateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanUpdateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { requireNonNull(identity, "identity is null"); - requireNonNull(indexName, "indexName is null"); + requireNonNull(tableName, "tableName is null"); - authenticationCheck(() -> checkCanAccessCatalog(identity, indexName.getCatalogName())); + authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); - authorizationCheck(() -> systemAccessControl.get().checkCanUpdateIndex(identity, indexName.asCatalogSchemaTableName())); - CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, indexName.getCatalogName()); + authorizationCheck(() -> systemAccessControl.get().checkCanUpdateIndex(identity, tableName.asCatalogSchemaTableName())); + CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { - authorizationCheck(() -> entry.getAccessControl().checkCanUpdateIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(indexName.getCatalogName()), indexName.asSchemaTableName())); + authorizationCheck(() -> entry.getAccessControl().checkCanUpdateIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName())); } } @Override - public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { requireNonNull(identity, "identity is null"); - if (indexName == null) { + if (tableName == null) { authenticationCheck(() -> systemAccessControl.get().checkCanShowIndex(identity, null)); return; } - authenticationCheck(() -> checkCanAccessCatalog(identity, indexName.getCatalogName())); + authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); - authenticationCheck(() -> systemAccessControl.get().checkCanShowIndex(identity, indexName.asCatalogSchemaTableName())); - CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, indexName.getCatalogName()); + authenticationCheck(() -> systemAccessControl.get().checkCanShowIndex(identity, tableName.asCatalogSchemaTableName())); + CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { - authenticationCheck(() -> entry.getAccessControl().checkCanShowIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(indexName.getCatalogName()), indexName.asSchemaTableName())); + authenticationCheck(() -> entry.getAccessControl().checkCanShowIndex(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName())); } } diff --git a/presto-main/src/main/java/io/prestosql/security/AllowAllAccessControl.java b/presto-main/src/main/java/io/prestosql/security/AllowAllAccessControl.java index bdfdea9e7..db3aa5be5 100644 --- a/presto-main/src/main/java/io/prestosql/security/AllowAllAccessControl.java +++ b/presto-main/src/main/java/io/prestosql/security/AllowAllAccessControl.java @@ -146,12 +146,12 @@ public class AllowAllAccessControl } @Override - public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } @Override - public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } @@ -161,7 +161,7 @@ public class AllowAllAccessControl } @Override - public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } diff --git a/presto-main/src/main/java/io/prestosql/security/DenyAllAccessControl.java b/presto-main/src/main/java/io/prestosql/security/DenyAllAccessControl.java index bb54c240d..c1e6dea67 100644 --- a/presto-main/src/main/java/io/prestosql/security/DenyAllAccessControl.java +++ b/presto-main/src/main/java/io/prestosql/security/DenyAllAccessControl.java @@ -205,15 +205,15 @@ public class DenyAllAccessControl } @Override - public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { - denyCreateIndex(indexName.toString()); + denyCreateIndex(tableName.toString()); } @Override - public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { - denyDropIndex(indexName.toString()); + denyDropIndex(tableName.toString()); } @Override @@ -223,9 +223,9 @@ public class DenyAllAccessControl } @Override - public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { - denyShowIndex(indexName.toString()); + denyShowIndex(tableName.toString()); } @Override diff --git a/presto-main/src/main/java/io/prestosql/sql/analyzer/StatementAnalyzer.java b/presto-main/src/main/java/io/prestosql/sql/analyzer/StatementAnalyzer.java index 84b49159e..935bf95f8 100644 --- a/presto-main/src/main/java/io/prestosql/sql/analyzer/StatementAnalyzer.java +++ b/presto-main/src/main/java/io/prestosql/sql/analyzer/StatementAnalyzer.java @@ -143,6 +143,7 @@ import io.prestosql.sql.tree.Table; import io.prestosql.sql.tree.TableSubquery; import io.prestosql.sql.tree.Unnest; import io.prestosql.sql.tree.Update; +import io.prestosql.sql.tree.UpdateIndex; import io.prestosql.sql.tree.Use; import io.prestosql.sql.tree.VacuumTable; import io.prestosql.sql.tree.Values; @@ -806,6 +807,12 @@ class StatementAnalyzer return createAndAssignScope(node, scope); } + @Override + protected Scope visitUpdateIndex(UpdateIndex node, Optional scope) + { + return createAndAssignScope(node, scope); + } + @Override protected Scope visitComment(Comment node, Optional scope) { @@ -1034,11 +1041,8 @@ class StatementAnalyzer { if (analysis.getOriginalStatement() instanceof CreateIndex) { CreateIndex createIndex = (CreateIndex) analysis.getOriginalStatement(); - // check can create index - QualifiedObjectName indexFullName = MetadataUtil.createQualifiedObjectName(session, createIndex, createIndex.getIndexName()); - accessControl.checkCanCreateIndex(session.getRequiredTransactionId(), session.getIdentity(), indexFullName); - // check index parameters validate QualifiedObjectName tableFullName = MetadataUtil.createQualifiedObjectName(session, createIndex, createIndex.getTableName()); + accessControl.checkCanCreateIndex(session.getRequiredTransactionId(), session.getIdentity(), tableFullName); String tableName = tableFullName.toString(); // check whether catalog support create index if (!metadata.isHeuristicIndexSupported(session, tableFullName)) { diff --git a/presto-main/src/main/java/io/prestosql/sql/rewrite/ShowQueriesRewrite.java b/presto-main/src/main/java/io/prestosql/sql/rewrite/ShowQueriesRewrite.java index d0417651a..7d59aca96 100644 --- a/presto-main/src/main/java/io/prestosql/sql/rewrite/ShowQueriesRewrite.java +++ b/presto-main/src/main/java/io/prestosql/sql/rewrite/ShowQueriesRewrite.java @@ -27,7 +27,6 @@ import io.prestosql.execution.TableCacheInfo; import io.prestosql.execution.warnings.WarningCollector; import io.prestosql.heuristicindex.HeuristicIndexerManager; import io.prestosql.metadata.Metadata; -import io.prestosql.metadata.MetadataUtil; import io.prestosql.metadata.QualifiedObjectName; import io.prestosql.metadata.SessionPropertyManager.SessionPropertyValue; import io.prestosql.metadata.TableHandle; @@ -87,6 +86,7 @@ import io.prestosql.sql.tree.TableElement; import io.prestosql.sql.tree.Values; import java.io.IOException; +import java.io.UncheckedIOException; import java.util.Collections; import java.util.List; import java.util.Map; @@ -642,20 +642,23 @@ final class ShowQueriesRewrite @Override protected Node visitShowIndex(ShowIndex node, Void context) { - if (node.getIndexName() == null) { - accessControl.checkCanShowIndex(session.getRequiredTransactionId(), session.getIdentity(), null); - } - else { - QualifiedObjectName indexFullName = MetadataUtil.createQualifiedObjectName(session, node, QualifiedName.of(node.getIndexName())); - accessControl.checkCanShowIndex(session.getRequiredTransactionId(), session.getIdentity(), indexFullName); - } - - List indexRecords = null; + List indexRecords; try { indexRecords = readIndexRecords(node.getIndexName()); } catch (IOException e) { - e.printStackTrace(); + throw new UncheckedIOException("Error reading index records, ", e); + } + + // Access Control + if (node.getIndexName() == null) { + accessControl.checkCanShowIndex(session.getRequiredTransactionId(), session.getIdentity(), null); + } + else { + for (IndexRecord record : indexRecords) { + QualifiedObjectName indexFullName = QualifiedObjectName.valueOf(record.table); + accessControl.checkCanShowIndex(session.getRequiredTransactionId(), session.getIdentity(), indexFullName); + } } ImmutableList.Builder rows = ImmutableList.builder(); diff --git a/presto-main/src/test/java/io/prestosql/sql/rewrite/TestingRangerAccessControl.java b/presto-main/src/test/java/io/prestosql/sql/rewrite/TestingRangerAccessControl.java index ceccace5d..dbaae713f 100644 --- a/presto-main/src/test/java/io/prestosql/sql/rewrite/TestingRangerAccessControl.java +++ b/presto-main/src/test/java/io/prestosql/sql/rewrite/TestingRangerAccessControl.java @@ -183,12 +183,12 @@ public class TestingRangerAccessControl } @Override - public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanCreateIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } @Override - public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanDropIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } @@ -198,7 +198,7 @@ public class TestingRangerAccessControl } @Override - public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName indexName) + public void checkCanShowIndex(TransactionId transactionId, Identity identity, QualifiedObjectName tableName) { } diff --git a/presto-parser/src/main/java/io/prestosql/sql/SqlFormatter.java b/presto-parser/src/main/java/io/prestosql/sql/SqlFormatter.java index 200e77003..1e27118cc 100644 --- a/presto-parser/src/main/java/io/prestosql/sql/SqlFormatter.java +++ b/presto-parser/src/main/java/io/prestosql/sql/SqlFormatter.java @@ -114,6 +114,7 @@ import io.prestosql.sql.tree.TransactionMode; import io.prestosql.sql.tree.Union; import io.prestosql.sql.tree.Unnest; import io.prestosql.sql.tree.Update; +import io.prestosql.sql.tree.UpdateIndex; import io.prestosql.sql.tree.Use; import io.prestosql.sql.tree.Values; import io.prestosql.sql.tree.With; @@ -873,6 +874,13 @@ public final class SqlFormatter return null; } + @Override + protected Void visitUpdateIndex(UpdateIndex node, Integer context) + { + append(context, "UPDATE INDEX "); + return null; + } + @Override protected Void visitShowIndex(ShowIndex node, Integer context) { diff --git a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/AllowAllAccessControl.java b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/AllowAllAccessControl.java index 3ea3b9d83..8e82ddbf5 100644 --- a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/AllowAllAccessControl.java +++ b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/AllowAllAccessControl.java @@ -203,12 +203,12 @@ public class AllowAllAccessControl } @Override - public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } @Override - public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } diff --git a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/FileBasedAccessControl.java b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/FileBasedAccessControl.java index 5e606f80a..14a229400 100644 --- a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/FileBasedAccessControl.java +++ b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/FileBasedAccessControl.java @@ -310,12 +310,12 @@ public class FileBasedAccessControl } @Override - public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } @Override - public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { } diff --git a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/ForwardingConnectorAccessControl.java b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/ForwardingConnectorAccessControl.java index 40d70f195..a0ab5c49d 100644 --- a/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/ForwardingConnectorAccessControl.java +++ b/presto-plugin-toolkit/src/main/java/io/prestosql/plugin/base/security/ForwardingConnectorAccessControl.java @@ -252,15 +252,15 @@ public abstract class ForwardingConnectorAccessControl } @Override - public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { - delegate().checkCanCreateIndex(transactionHandle, identity, indexName); + delegate().checkCanCreateIndex(transactionHandle, identity, tableName); } @Override - public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + public void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { - delegate().checkCanDropIndex(transactionHandle, identity, indexName); + delegate().checkCanDropIndex(transactionHandle, identity, tableName); } @Override diff --git a/presto-spi/src/main/java/io/prestosql/spi/connector/ConnectorAccessControl.java b/presto-spi/src/main/java/io/prestosql/spi/connector/ConnectorAccessControl.java index a76459286..2bb945ea9 100644 --- a/presto-spi/src/main/java/io/prestosql/spi/connector/ConnectorAccessControl.java +++ b/presto-spi/src/main/java/io/prestosql/spi/connector/ConnectorAccessControl.java @@ -274,9 +274,9 @@ public interface ConnectorAccessControl * * @throws io.prestosql.spi.security.AccessDeniedException if not allowed */ - default void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + default void checkCanCreateIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { - denyCreateIndex(indexName.toString()); + denyCreateIndex(tableName.toString()); } /** @@ -284,9 +284,9 @@ public interface ConnectorAccessControl * * @throws io.prestosql.spi.security.AccessDeniedException if not allowed */ - default void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName indexName) + default void checkCanDropIndex(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, SchemaTableName tableName) { - denyDropIndex(indexName.toString()); + denyDropIndex(tableName.toString()); } /** diff --git a/presto-spi/src/main/java/io/prestosql/spi/security/AccessDeniedException.java b/presto-spi/src/main/java/io/prestosql/spi/security/AccessDeniedException.java index eeaafea67..ed2519988 100644 --- a/presto-spi/src/main/java/io/prestosql/spi/security/AccessDeniedException.java +++ b/presto-spi/src/main/java/io/prestosql/spi/security/AccessDeniedException.java @@ -226,9 +226,9 @@ public class AccessDeniedException throw new AccessDeniedException("Cannot create index"); } - public static void denyCreateIndex(String indexName) + public static void denyCreateIndex(String tableName) { - denyCreateIndex(indexName, null); + denyCreateIndex(tableName, null); } public static void denyCreateIndex(String indexName, String extraInfo)