@JsonCreator public static QualifiedObjectName valueOf(String name) { requireNonNull(name, "name is null"); ImmutableList<String> ids = ImmutableList.copyOf(Splitter.on('.').split(name)); checkArgument(ids.size() == 3, "Invalid name %s", name); return new QualifiedObjectName(ids.get(0), ids.get(1), ids.get(2)); }
@Override public void checkCanRenameTable(TransactionId transactionId, Identity identity, QualifiedObjectName tableName, QualifiedObjectName newTableName) { if (shouldDenyPrivilege(identity.getUser(), tableName.getObjectName(), RENAME_TABLE)) { denyRenameTable(tableName.toString(), newTableName.toString()); } if (denyPrivileges.isEmpty()) { super.checkCanRenameTable(transactionId, identity, tableName, newTableName); } }
@Override public void checkCanRenameTable(TransactionId transactionId, Identity identity, QualifiedObjectName tableName, QualifiedObjectName newTableName) { requireNonNull(identity, "identity is null"); requireNonNull(tableName, "tableName is null"); requireNonNull(newTableName, "newTableName is null"); authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); authorizationCheck(() -> systemAccessControl.get().checkCanRenameTable(identity, tableName.asCatalogSchemaTableName(), newTableName.asCatalogSchemaTableName())); CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { authorizationCheck(() -> entry.getAccessControl().checkCanRenameTable(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName(), newTableName.asSchemaTableName())); } }
public boolean matches(QualifiedObjectName objectName) { return Objects.equals(catalogName, objectName.getCatalogName()) && schemaName.map(schema -> Objects.equals(schema, objectName.getSchemaName())).orElse(true) && tableName.map(table -> Objects.equals(table, objectName.getObjectName())).orElse(true); }
public ConnectorId getConnectorId(Session session, QualifiedObjectName table) { if (table.getSchemaName().equals(INFORMATION_SCHEMA_NAME)) { return informationSchemaId; } if (systemTables.getTableHandle(session.toConnectorSession(systemTablesId), table.asSchemaTableName()) != null) { return systemTablesId; } return connectorId; }
public static void copyTable(QueryRunner queryRunner, QualifiedObjectName table, Session session) { long start = System.nanoTime(); log.info("Running import for %s", table.getObjectName()); @Language("SQL") String sql = format("CREATE TABLE %s AS SELECT * FROM %s", table.getObjectName(), table); long rows = (Long) queryRunner.execute(session, sql).getMaterializedRows().get(0).getField(0); log.info("Imported %s rows for %s in %s", rows, table.getObjectName(), nanosSince(start).convertToMostSuccinctTimeUnit()); } }
@Override public void revokeTablePrivileges(Session session, QualifiedObjectName tableName, Set<Privilege> privileges, PrestoPrincipal grantee, boolean grantOption) { CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, tableName.getCatalogName()); ConnectorId connectorId = catalogMetadata.getConnectorId(); ConnectorMetadata metadata = catalogMetadata.getMetadata(); metadata.revokeTablePrivileges(session.toConnectorSession(connectorId), tableName.asSchemaTableName(), privileges, grantee, grantOption); }
public void dropTable(String tableName) { Session session = localQueryRunner.getDefaultSession(); Metadata metadata = localQueryRunner.getMetadata(); Optional<TableHandle> tableHandle = metadata.getTableHandle(session, QualifiedObjectName.valueOf(tableName)); assertTrue(tableHandle.isPresent(), "Table " + tableName + " does not exist"); metadata.dropTable(session, tableHandle.get()); }
public boolean matches(QualifiedObjectName objectName) { return Objects.equals(catalogName, objectName.getCatalogName()) && schemaName.map(schema -> Objects.equals(schema, objectName.getSchemaName())).orElse(true) && tableName.map(table -> Objects.equals(table, objectName.getObjectName())).orElse(true); }
@Test public void blackHoleConnectorUsage() { assertThatQueryReturnsValue("CREATE TABLE nation as SELECT * FROM tpch.tiny.nation", 25L); List<QualifiedObjectName> tableNames = listBlackHoleTables(); assertTrue(tableNames.size() == 1, "Expected only one table."); assertTrue(tableNames.get(0).getObjectName().equals("nation"), "Expected 'nation' table."); assertThatQueryReturnsValue("INSERT INTO nation SELECT * FROM tpch.tiny.nation", 25L); assertThatQueryReturnsValue("INSERT INTO nation SELECT * FROM tpch.tiny.nation", 25L); assertThatQueryReturnsValue("SELECT count(*) FROM nation", 0L); assertThatQueryReturnsValue("DROP TABLE nation", true); }
@Override public void createView(Session session, QualifiedObjectName viewName, String viewData, boolean replace) { CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, viewName.getCatalogName()); ConnectorId connectorId = catalogMetadata.getConnectorId(); ConnectorMetadata metadata = catalogMetadata.getMetadata(); metadata.createView(session.toConnectorSession(connectorId), viewName.asSchemaTableName(), viewData, replace); }
public void dropTable(String tableName) { Session session = localQueryRunner.getDefaultSession(); Metadata metadata = localQueryRunner.getMetadata(); Optional<TableHandle> tableHandle = metadata.getTableHandle(session, QualifiedObjectName.valueOf(tableName)); assertTrue(tableHandle.isPresent(), "Table " + tableName + " does not exist"); metadata.dropTable(session, tableHandle.get()); }
@JsonCreator public static QualifiedObjectName valueOf(String name) { requireNonNull(name, "name is null"); ImmutableList<String> ids = ImmutableList.copyOf(Splitter.on('.').split(name)); checkArgument(ids.size() == 3, "Invalid name %s", name); return new QualifiedObjectName(ids.get(0), ids.get(1), ids.get(2)); }
@Override public void checkCanRenameTable(TransactionId transactionId, Identity identity, QualifiedObjectName tableName, QualifiedObjectName newTableName) { if (shouldDenyPrivilege(identity.getUser(), tableName.getObjectName(), RENAME_TABLE)) { denyRenameTable(tableName.toString(), newTableName.toString()); } if (denyPrivileges.isEmpty()) { super.checkCanRenameTable(transactionId, identity, tableName, newTableName); } }
@Override public void checkCanRenameTable(TransactionId transactionId, Identity identity, QualifiedObjectName tableName, QualifiedObjectName newTableName) { requireNonNull(identity, "identity is null"); requireNonNull(tableName, "tableName is null"); requireNonNull(newTableName, "newTableName is null"); authenticationCheck(() -> checkCanAccessCatalog(identity, tableName.getCatalogName())); authorizationCheck(() -> systemAccessControl.get().checkCanRenameTable(identity, tableName.asCatalogSchemaTableName(), newTableName.asCatalogSchemaTableName())); CatalogAccessControlEntry entry = getConnectorAccessControl(transactionId, tableName.getCatalogName()); if (entry != null) { authorizationCheck(() -> entry.getAccessControl().checkCanRenameTable(entry.getTransactionHandle(transactionId), identity.toConnectorIdentity(tableName.getCatalogName()), tableName.asSchemaTableName(), newTableName.asSchemaTableName())); } }
private InternalTable buildViews(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_VIEWS)); for (QualifiedTablePrefix prefix : prefixes) { for (Entry<QualifiedObjectName, ViewDefinition> entry : metadata.getViews(session, prefix).entrySet()) { table.add( entry.getKey().getCatalogName(), entry.getKey().getSchemaName(), entry.getKey().getObjectName(), entry.getValue().getOriginalSql()); } } return table.build(); }
@Test public void blackHoleConnectorUsage() { assertThatQueryReturnsValue("CREATE TABLE nation as SELECT * FROM tpch.tiny.nation", 25L); List<QualifiedObjectName> tableNames = listBlackHoleTables(); assertTrue(tableNames.size() == 1, "Expected only one table."); assertTrue(tableNames.get(0).getObjectName().equals("nation"), "Expected 'nation' table."); assertThatQueryReturnsValue("INSERT INTO nation SELECT * FROM tpch.tiny.nation", 25L); assertThatQueryReturnsValue("INSERT INTO nation SELECT * FROM tpch.tiny.nation", 25L); assertThatQueryReturnsValue("SELECT count(*) FROM nation", 0L); assertThatQueryReturnsValue("DROP TABLE nation", true); }
@Override public void grantTablePrivileges(Session session, QualifiedObjectName tableName, Set<Privilege> privileges, PrestoPrincipal grantee, boolean grantOption) { CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, tableName.getCatalogName()); ConnectorId connectorId = catalogMetadata.getConnectorId(); ConnectorMetadata metadata = catalogMetadata.getMetadata(); metadata.grantTablePrivileges(session.toConnectorSession(connectorId), tableName.asSchemaTableName(), privileges, grantee, grantOption); }
@TearDown(Level.Invocation) public void dropPointsTable() { queryRunner.inTransaction(queryRunner.getDefaultSession(), transactionSession -> { Metadata metadata = queryRunner.getMetadata(); Optional<TableHandle> tableHandle = metadata.getTableHandle(transactionSession, QualifiedObjectName.valueOf("memory.default.points")); assertTrue(tableHandle.isPresent(), "Table memory.default.points does not exist"); metadata.dropTable(transactionSession, tableHandle.get()); return null; }); }
private static QualifiedObjectName toQualifiedObjectName(String name, String catalog, String schema) { ImmutableList<String> ids = ImmutableList.copyOf(Splitter.on('.').split(name)); if (ids.size() == 3) { return new QualifiedObjectName(ids.get(0), ids.get(1), ids.get(2)); } if (ids.size() == 2) { return new QualifiedObjectName(catalog, ids.get(0), ids.get(1)); } if (ids.size() == 1) { return new QualifiedObjectName(catalog, schema, ids.get(0)); } throw new PrestoException(INVALID_SPATIAL_PARTITIONING, format("Invalid name: %s", name)); }