procedures = new ProcedureRegistry(typeManager); this.typeManager = requireNonNull(typeManager, "types is null"); this.viewCodec = requireNonNull(viewCodec, "viewCodec is null");
private synchronized void addConnectorInternal(MaterializedConnector connector) { checkState(!stopped.get(), "ConnectorManager is stopped"); ConnectorId connectorId = connector.getConnectorId(); checkState(!connectors.containsKey(connectorId), "A connector %s already exists", connectorId); connectors.put(connectorId, connector); splitManager.addConnectorSplitManager(connectorId, connector.getSplitManager()); pageSourceManager.addConnectorPageSourceProvider(connectorId, connector.getPageSourceProvider()); connector.getPageSinkProvider() .ifPresent(pageSinkProvider -> pageSinkManager.addConnectorPageSinkProvider(connectorId, pageSinkProvider)); connector.getIndexProvider() .ifPresent(indexProvider -> indexManager.addIndexProvider(connectorId, indexProvider)); connector.getPartitioningProvider() .ifPresent(partitioningProvider -> nodePartitioningManager.addPartitioningProvider(connectorId, partitioningProvider)); metadataManager.getProcedureRegistry().addProcedures(connectorId, connector.getProcedures()); connector.getAccessControl() .ifPresent(accessControl -> accessControlManager.addCatalogAccessControl(connectorId, accessControl)); metadataManager.getTablePropertyManager().addProperties(connectorId, connector.getTableProperties()); metadataManager.getColumnPropertyManager().addProperties(connectorId, connector.getColumnProperties()); metadataManager.getSchemaPropertyManager().addProperties(connectorId, connector.getSchemaProperties()); metadataManager.getSessionPropertyManager().addConnectorSessionProperties(connectorId, connector.getSessionProperties()); }
private void validateProcedure(Procedure procedure) { List<Class<?>> parameters = procedure.getMethodHandle().type().parameterList().stream() .filter(type -> !ConnectorSession.class.isAssignableFrom(type)) .collect(toList()); for (int i = 0; i < procedure.getArguments().size(); i++) { Argument argument = procedure.getArguments().get(i); Type type = typeManager.getType(argument.getType()); Class<?> argumentType = Primitives.unwrap(parameters.get(i)); Class<?> expectedType = getObjectType(type); checkArgument(expectedType.equals(argumentType), "Argument '%s' has invalid type %s (expected %s)", argument.getName(), argumentType.getName(), expectedType.getName()); } }
ConnectorId connectorId = metadata.getCatalogHandle(stateMachine.getSession(), procedureName.getCatalogName()) .orElseThrow(() -> new SemanticException(MISSING_CATALOG, call, "Catalog %s does not exist", procedureName.getCatalogName())); Procedure procedure = metadata.getProcedureRegistry().resolve(connectorId, procedureName.asSchemaTableName());
private synchronized void removeConnectorInternal(ConnectorId connectorId) { splitManager.removeConnectorSplitManager(connectorId); pageSourceManager.removeConnectorPageSourceProvider(connectorId); pageSinkManager.removeConnectorPageSinkProvider(connectorId); indexManager.removeIndexProvider(connectorId); nodePartitioningManager.removePartitioningProvider(connectorId); metadataManager.getProcedureRegistry().removeProcedures(connectorId); accessControlManager.removeCatalogAccessControl(connectorId); metadataManager.getTablePropertyManager().removeProperties(connectorId); metadataManager.getColumnPropertyManager().removeProperties(connectorId); metadataManager.getSchemaPropertyManager().removeProperties(connectorId); metadataManager.getSessionPropertyManager().removeConnectorSessionProperties(connectorId); MaterializedConnector materializedConnector = connectors.remove(connectorId); if (materializedConnector != null) { Connector connector = materializedConnector.getConnector(); try (ThreadContextClassLoader ignored = new ThreadContextClassLoader(connector.getClass().getClassLoader())) { connector.shutdown(); } catch (Throwable t) { log.error(t, "Error shutting down connector: %s", connectorId); } } }
public final synchronized void addProcedure(String catalog, Procedure procedure) { validateProcedure(procedure); QualifiedObjectName name = new QualifiedObjectName(catalog, procedure.getSchema(), procedure.getName()); checkArgument(!procedures.containsKey(name), "Procedure already registered: %s", name); procedures = ImmutableMap.<QualifiedObjectName, Procedure>builder() .putAll(procedures) .put(name, procedure) .build(); }
metadataManager.getProcedureRegistry().addProcedure(catalogName, procedure);
Procedure procedure = metadata.getProcedureRegistry().resolve(procedureName);
private static Class<?> getObjectType(Type type) { if (type.equals(BOOLEAN)) { return boolean.class; } if (type.equals(BIGINT)) { return long.class; } if (type.equals(DOUBLE)) { return double.class; } if (type.equals(VARCHAR)) { return String.class; } if (type.getTypeSignature().getBase().equals(ARRAY)) { getObjectType(type.getTypeParameters().get(0)); return List.class; } if (type.getTypeSignature().getBase().equals(MAP)) { getObjectType(type.getTypeParameters().get(0)); getObjectType(type.getTypeParameters().get(1)); return Map.class; } throw new IllegalArgumentException("Unsupported argument type: " + type.getDisplayName()); } }
@BeforeClass public void setUp() { TestingPrestoServer coordinator = ((DistributedQueryRunner) getQueryRunner()).getCoordinator(); tester = coordinator.getProcedureTester(); // register procedures in the bogus testing catalog ProcedureRegistry procedureRegistry = coordinator.getMetadata().getProcedureRegistry(); TestingProcedures procedures = new TestingProcedures(coordinator.getProcedureTester()); procedureRegistry.addProcedures( new ConnectorId(TESTING_CATALOG), procedures.getProcedures(PROCEDURE_SCHEMA)); session = testSessionBuilder() .setCatalog(TESTING_CATALOG) .setSchema(PROCEDURE_SCHEMA) .build(); }
@Inject public MetadataManager(FeaturesConfig featuresConfig, TypeManager typeManager, JsonCodec<ViewDefinition> viewCodec, BlockEncodingSerde blockEncodingSerde, SessionPropertyManager sessionPropertyManager, TablePropertyManager tablePropertyManager, TransactionManager transactionManager) { functions = new FunctionRegistry(typeManager, blockEncodingSerde, featuresConfig.isExperimentalSyntaxEnabled()); procedures = new ProcedureRegistry(); this.typeManager = requireNonNull(typeManager, "types is null"); this.viewCodec = requireNonNull(viewCodec, "viewCodec is null"); this.blockEncodingSerde = requireNonNull(blockEncodingSerde, "blockEncodingSerde is null"); this.sessionPropertyManager = requireNonNull(sessionPropertyManager, "sessionPropertyManager is null"); this.tablePropertyManager = requireNonNull(tablePropertyManager, "tablePropertyManager is null"); this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); verifyComparableOrderableContract(); }
private static void validateProcedure(Procedure procedure) { List<Class<?>> parameters = procedure.getMethodHandle().type().parameterList().stream() .filter(type -> !ConnectorSession.class.isAssignableFrom(type)) .collect(toList()); for (int i = 0; i < procedure.getArguments().size(); i++) { Argument argument = procedure.getArguments().get(i); Class<?> argumentType = Primitives.unwrap(parameters.get(i)); Class<?> expectedType = getObjectType(argument.getType()); checkArgument(expectedType.equals(argumentType), "Argument '%s' has invalid type %s (expected %s)", argument.getName(), argumentType.getName(), expectedType.getName()); } }
@BeforeClass public void setUp() { TestingPrestoServer coordinator = ((DistributedQueryRunner) getQueryRunner()).getCoordinator(); tester = coordinator.getProcedureTester(); // register procedures in the bogus testing catalog ProcedureRegistry procedureRegistry = coordinator.getMetadata().getProcedureRegistry(); TestingProcedures procedures = new TestingProcedures(coordinator.getProcedureTester()); procedureRegistry.addProcedures( new ConnectorId(TESTING_CATALOG), procedures.getProcedures(PROCEDURE_SCHEMA)); session = testSessionBuilder() .setCatalog(TESTING_CATALOG) .setSchema(PROCEDURE_SCHEMA) .build(); }
private static Class<?> getObjectType(Type type) { if (type.equals(BOOLEAN)) { return boolean.class; } if (type.equals(BIGINT)) { return long.class; } if (type.equals(DOUBLE)) { return double.class; } if (type.equals(VARCHAR)) { return String.class; } if (type.getTypeSignature().getBase().equals(ARRAY)) { getObjectType(type.getTypeParameters().get(0)); return List.class; } if (type.getTypeSignature().getBase().equals(MAP)) { getObjectType(type.getTypeParameters().get(0)); getObjectType(type.getTypeParameters().get(1)); return Map.class; } throw new IllegalArgumentException("Unsupported argument type: " + type.getDisplayName()); } }