use of io.trino.spi.procedure.Procedure in project trino by trinodb.
the class ProcedureRegistry method addProcedures.
public void addProcedures(CatalogName catalogName, Collection<Procedure> procedures) {
requireNonNull(catalogName, "catalogName is null");
requireNonNull(procedures, "procedures is null");
procedures.forEach(this::validateProcedure);
Map<SchemaTableName, Procedure> proceduresByName = Maps.uniqueIndex(procedures, procedure -> new SchemaTableName(procedure.getSchema(), procedure.getName()));
checkState(connectorProcedures.putIfAbsent(catalogName, proceduresByName) == null, "Procedures already registered for connector: %s", catalogName);
}
use of io.trino.spi.procedure.Procedure in project trino by trinodb.
the class ProcedureRegistry method validateProcedure.
private void validateProcedure(Procedure procedure) {
List<Class<?>> parameters = procedure.getMethodHandle().type().parameterList().stream().filter(type -> !ConnectorSession.class.equals(type)).filter(type -> !ConnectorAccessControl.class.equals(type)).collect(toList());
for (int i = 0; i < procedure.getArguments().size(); i++) {
Argument argument = procedure.getArguments().get(i);
Type type = 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());
}
}
use of io.trino.spi.procedure.Procedure in project trino by trinodb.
the class DeltaLakeModule method setup.
@Override
public void setup(Binder binder) {
Provider<CatalogName> catalogName = binder.getProvider(CatalogName.class);
configBinder(binder).bindConfig(DeltaLakeConfig.class);
configBinder(binder).bindConfig(HiveConfig.class);
// currently not configurable
binder.bind(MetastoreConfig.class).toInstance(new MetastoreConfig());
configBinder(binder).bindConfig(ParquetReaderConfig.class);
configBinder(binder).bindConfig(ParquetWriterConfig.class);
Multibinder<SystemTableProvider> systemTableProviders = newSetBinder(binder, SystemTableProvider.class);
systemTableProviders.addBinding().to(PropertiesSystemTableProvider.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeSessionProperties.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeTableProperties.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeAnalyzeProperties.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeTransactionManager.class).in(Scopes.SINGLETON);
binder.bind(ConnectorSplitManager.class).to(DeltaLakeSplitManager.class).in(Scopes.SINGLETON);
binder.bind(ConnectorPageSourceProvider.class).to(DeltaLakePageSourceProvider.class).in(Scopes.SINGLETON);
binder.bind(ConnectorPageSinkProvider.class).to(DeltaLakePageSinkProvider.class).in(Scopes.SINGLETON);
binder.bind(ConnectorNodePartitioningProvider.class).to(DeltaLakeNodePartitioningProvider.class).in(Scopes.SINGLETON);
binder.bind(LocationService.class).to(HiveLocationService.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeMetadataFactory.class).in(Scopes.SINGLETON);
binder.bind(CachingDeltaLakeStatisticsAccess.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeStatisticsAccess.class).to(CachingDeltaLakeStatisticsAccess.class).in(Scopes.SINGLETON);
binder.bind(DeltaLakeStatisticsAccess.class).annotatedWith(ForCachingDeltaLakeStatisticsAccess.class).to(MetaDirStatisticsAccess.class).in(Scopes.SINGLETON);
jsonCodecBinder(binder).bindJsonCodec(DeltaLakeStatistics.class);
binder.bind(HiveTransactionManager.class).in(Scopes.SINGLETON);
binder.bind(CheckpointSchemaManager.class).in(Scopes.SINGLETON);
jsonCodecBinder(binder).bindJsonCodec(LastCheckpoint.class);
binder.bind(CheckpointWriterManager.class).in(Scopes.SINGLETON);
binder.bind(TransactionLogAccess.class).in(Scopes.SINGLETON);
newExporter(binder).export(TransactionLogAccess.class).as(generator -> generator.generatedNameOf(TransactionLogAccess.class, catalogName.get().toString()));
binder.bind(TransactionLogWriterFactory.class).in(Scopes.SINGLETON);
binder.bind(TransactionLogSynchronizerManager.class).in(Scopes.SINGLETON);
binder.bind(NoIsolationSynchronizer.class).in(Scopes.SINGLETON);
MapBinder<String, TransactionLogSynchronizer> logSynchronizerMapBinder = newMapBinder(binder, String.class, TransactionLogSynchronizer.class);
// S3
jsonCodecBinder(binder).bindJsonCodec(S3TransactionLogSynchronizer.LockFileContents.class);
logSynchronizerMapBinder.addBinding("s3").to(S3TransactionLogSynchronizer.class).in(Scopes.SINGLETON);
logSynchronizerMapBinder.addBinding("s3a").to(S3TransactionLogSynchronizer.class).in(Scopes.SINGLETON);
logSynchronizerMapBinder.addBinding("s3n").to(S3TransactionLogSynchronizer.class).in(Scopes.SINGLETON);
// Azure
logSynchronizerMapBinder.addBinding("abfs").to(AzureTransactionLogSynchronizer.class).in(Scopes.SINGLETON);
logSynchronizerMapBinder.addBinding("abfss").to(AzureTransactionLogSynchronizer.class).in(Scopes.SINGLETON);
jsonCodecBinder(binder).bindJsonCodec(DataFileInfo.class);
jsonCodecBinder(binder).bindJsonCodec(DeltaLakeUpdateResult.class);
binder.bind(DeltaLakeWriterStats.class).in(Scopes.SINGLETON);
binder.bind(FileFormatDataSourceStats.class).in(Scopes.SINGLETON);
newExporter(binder).export(FileFormatDataSourceStats.class).as(generator -> generator.generatedNameOf(FileFormatDataSourceStats.class, catalogName.get().toString()));
Multibinder<Procedure> procedures = newSetBinder(binder, Procedure.class);
procedures.addBinding().toProvider(DropExtendedStatsProcedure.class).in(Scopes.SINGLETON);
procedures.addBinding().toProvider(VacuumProcedure.class).in(Scopes.SINGLETON);
Multibinder<TableProcedureMetadata> tableProcedures = newSetBinder(binder, TableProcedureMetadata.class);
tableProcedures.addBinding().toProvider(OptimizeTableProcedure.class).in(Scopes.SINGLETON);
}
Aggregations