Skip to content

Commit eb82de2

Browse files
committed
Migrate TableProceduresPropertyManager to CatalogServiceProviderModule
1 parent 64c0ee6 commit eb82de2

File tree

8 files changed

+20
-100
lines changed

8 files changed

+20
-100
lines changed

core/trino-main/src/main/java/io/trino/connector/CatalogServiceProviderModule.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.trino.metadata.MaterializedViewPropertyManager;
2727
import io.trino.metadata.SchemaPropertyManager;
2828
import io.trino.metadata.SessionPropertyManager;
29+
import io.trino.metadata.TableProceduresPropertyManager;
2930
import io.trino.metadata.TablePropertyManager;
3031
import io.trino.spi.connector.ConnectorIndexProvider;
3132
import io.trino.spi.connector.ConnectorNodePartitioningProvider;
@@ -140,4 +141,11 @@ public static AnalyzePropertyManager createAnalyzePropertyManager(ConnectorServi
140141
{
141142
return new AnalyzePropertyManager(new ConnectorCatalogServiceProvider<>("analyze properties", connectorServicesProvider, ConnectorServices::getAnalyzeProperties));
142143
}
144+
145+
@Provides
146+
@Singleton
147+
public static TableProceduresPropertyManager createTableProceduresPropertyManager(ConnectorServicesProvider connectorServicesProvider)
148+
{
149+
return new TableProceduresPropertyManager(new ConnectorCatalogServiceProvider<>("table procedures", connectorServicesProvider, ConnectorServices::getTableProcedures));
150+
}
143151
}

core/trino-main/src/main/java/io/trino/connector/ConnectorManager.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import io.trino.metadata.HandleResolver;
3535
import io.trino.metadata.InternalNodeManager;
3636
import io.trino.metadata.Metadata;
37-
import io.trino.metadata.TableProceduresPropertyManager;
3837
import io.trino.security.AccessControlManager;
3938
import io.trino.server.PluginClassLoader;
4039
import io.trino.spi.PageIndexerFactory;
@@ -109,7 +108,6 @@ public class ConnectorManager
109108
private final TransactionManager transactionManager;
110109
private final EventListenerManager eventListenerManager;
111110
private final TypeManager typeManager;
112-
private final TableProceduresPropertyManager tableProceduresPropertyManager;
113111

114112
private final boolean schedulerIncludeCoordinator;
115113

@@ -135,7 +133,6 @@ public ConnectorManager(
135133
TransactionManager transactionManager,
136134
EventListenerManager eventListenerManager,
137135
TypeManager typeManager,
138-
TableProceduresPropertyManager tableProceduresPropertyManager,
139136
NodeSchedulerConfig nodeSchedulerConfig)
140137
{
141138
this.metadata = metadata;
@@ -150,7 +147,6 @@ public ConnectorManager(
150147
this.transactionManager = transactionManager;
151148
this.eventListenerManager = eventListenerManager;
152149
this.typeManager = typeManager;
153-
this.tableProceduresPropertyManager = tableProceduresPropertyManager;
154150
this.schedulerIncludeCoordinator = nodeSchedulerConfig.isIncludeCoordinator();
155151
}
156152

@@ -279,16 +275,11 @@ private synchronized void addConnectorInternal(ConnectorServices connector)
279275

280276
connector.getAccessControl()
281277
.ifPresent(accessControl -> accessControlManager.addCatalogAccessControl(catalogName, accessControl));
282-
283-
for (TableProcedureMetadata tableProcedure : connector.getTableProcedures().getTableProcedures()) {
284-
tableProceduresPropertyManager.addProperties(catalogName, tableProcedure.getName(), tableProcedure.getProperties());
285-
}
286278
}
287279

288280
private synchronized void removeConnectorInternal(CatalogName catalogName)
289281
{
290282
accessControlManager.removeCatalogAccessControl(catalogName);
291-
tableProceduresPropertyManager.removeProperties(catalogName);
292283

293284
ConnectorServices connectorServices = connectors.remove(catalogName);
294285
if (connectorServices != null) {

core/trino-main/src/main/java/io/trino/metadata/TableProceduresPropertyManager.java

Lines changed: 7 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
import com.google.common.collect.Maps;
1717
import io.trino.Session;
1818
import io.trino.connector.CatalogName;
19+
import io.trino.connector.CatalogServiceProvider;
1920
import io.trino.security.AccessControl;
20-
import io.trino.spi.TrinoException;
21+
import io.trino.spi.connector.TableProcedureMetadata;
2122
import io.trino.spi.session.PropertyMetadata;
2223
import io.trino.sql.PlannerContext;
2324
import io.trino.sql.tree.Expression;
@@ -26,49 +27,24 @@
2627
import io.trino.sql.tree.Parameter;
2728
import io.trino.sql.tree.Property;
2829

29-
import java.util.List;
3030
import java.util.Map;
3131
import java.util.Map.Entry;
32-
import java.util.Objects;
3332
import java.util.Optional;
34-
import java.util.Set;
35-
import java.util.concurrent.ConcurrentHashMap;
36-
import java.util.concurrent.ConcurrentMap;
3733

38-
import static com.google.common.base.Preconditions.checkState;
3934
import static com.google.common.collect.ImmutableList.toImmutableList;
4035
import static com.google.common.collect.ImmutableMap.toImmutableMap;
41-
import static com.google.common.collect.ImmutableSet.toImmutableSet;
4236
import static io.trino.metadata.PropertyUtil.evaluateProperties;
4337
import static io.trino.spi.StandardErrorCode.INVALID_PROCEDURE_ARGUMENT;
44-
import static io.trino.spi.StandardErrorCode.NOT_FOUND;
4538
import static java.lang.String.format;
4639
import static java.util.Objects.requireNonNull;
4740

4841
public class TableProceduresPropertyManager
4942
{
50-
private final ConcurrentMap<Key, Map<String, PropertyMetadata<?>>> connectorProperties = new ConcurrentHashMap<>();
43+
private final CatalogServiceProvider<CatalogTableProcedures> tableProceduresProvider;
5144

52-
public void addProperties(CatalogName catalogName, String procedureName, List<PropertyMetadata<?>> properties)
45+
public TableProceduresPropertyManager(CatalogServiceProvider<CatalogTableProcedures> tableProceduresProvider)
5346
{
54-
requireNonNull(catalogName, "catalogName is null");
55-
requireNonNull(procedureName, "procedureName is null");
56-
requireNonNull(catalogName, "catalogName is null");
57-
58-
Map<String, PropertyMetadata<?>> propertiesByName = Maps.uniqueIndex(properties, PropertyMetadata::getName);
59-
60-
Key propertiesKey = new Key(catalogName, procedureName);
61-
checkState(connectorProperties.putIfAbsent(propertiesKey, propertiesByName) == null, "Properties for key %s are already registered", propertiesKey);
62-
}
63-
64-
public void removeProperties(CatalogName catalogName)
65-
{
66-
Set<Key> keysToRemove = connectorProperties.keySet().stream()
67-
.filter(key -> catalogName.equals(key.getCatalogName()))
68-
.collect(toImmutableSet());
69-
for (Key key : keysToRemove) {
70-
connectorProperties.remove(key);
71-
}
47+
this.tableProceduresProvider = requireNonNull(tableProceduresProvider, "tableProceduresProvider is null");
7248
}
7349

7450
public Map<String, Object> getProperties(
@@ -80,10 +56,8 @@ public Map<String, Object> getProperties(
8056
AccessControl accessControl,
8157
Map<NodeRef<Parameter>, Expression> parameters)
8258
{
83-
Map<String, PropertyMetadata<?>> supportedProperties = connectorProperties.get(new Key(catalog, procedureName));
84-
if (supportedProperties == null) {
85-
throw new TrinoException(NOT_FOUND, format("Catalog '%s' table procedure '%s' property not found", catalog, procedureName));
86-
}
59+
TableProcedureMetadata tableProcedure = tableProceduresProvider.getService(catalog).getTableProcedure(procedureName);
60+
Map<String, PropertyMetadata<?>> supportedProperties = Maps.uniqueIndex(tableProcedure.getProperties(), PropertyMetadata::getName);
8761

8862
Map<String, Optional<Object>> propertyValues = evaluateProperties(
8963
sqlPropertyValues.entrySet().stream()
@@ -101,52 +75,4 @@ public Map<String, Object> getProperties(
10175
.filter(entry -> entry.getValue().isPresent())
10276
.collect(toImmutableMap(Entry::getKey, entry -> entry.getValue().orElseThrow()));
10377
}
104-
105-
static final class Key
106-
{
107-
private final CatalogName catalogName;
108-
private final String procedureName;
109-
110-
private Key(CatalogName catalogName, String procedureName)
111-
{
112-
this.catalogName = requireNonNull(catalogName, "catalogName is null");
113-
this.procedureName = requireNonNull(procedureName, "procedureName is null");
114-
}
115-
116-
public CatalogName getCatalogName()
117-
{
118-
return catalogName;
119-
}
120-
121-
public String getProcedureName()
122-
{
123-
return procedureName;
124-
}
125-
126-
@Override
127-
public String toString()
128-
{
129-
return catalogName + ":" + procedureName;
130-
}
131-
132-
@Override
133-
public boolean equals(Object o)
134-
{
135-
if (this == o) {
136-
return true;
137-
}
138-
if (o == null || getClass() != o.getClass()) {
139-
return false;
140-
}
141-
Key key = (Key) o;
142-
return Objects.equals(catalogName, key.catalogName)
143-
&& Objects.equals(procedureName, key.procedureName);
144-
}
145-
146-
@Override
147-
public int hashCode()
148-
{
149-
return Objects.hash(catalogName, procedureName);
150-
}
151-
}
15278
}

core/trino-main/src/main/java/io/trino/server/ServerMainModule.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
import io.trino.metadata.SystemFunctionBundle;
8585
import io.trino.metadata.SystemSecurityMetadata;
8686
import io.trino.metadata.TableFunctionRegistry;
87-
import io.trino.metadata.TableProceduresPropertyManager;
8887
import io.trino.metadata.TableProceduresRegistry;
8988
import io.trino.metadata.TypeRegistry;
9089
import io.trino.operator.DirectExchangeClientConfig;
@@ -242,9 +241,6 @@ protected void setup(Binder binder)
242241
binder.bind(SystemSessionProperties.class).in(Scopes.SINGLETON);
243242
binder.bind(SessionPropertyDefaults.class).in(Scopes.SINGLETON);
244243

245-
// table procedures properties
246-
binder.bind(TableProceduresPropertyManager.class).in(Scopes.SINGLETON);
247-
248244
// node manager
249245
discoveryBinder(binder).bindSelector("trino");
250246
binder.bind(DiscoveryNodeManager.class).in(Scopes.SINGLETON);

core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzerFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,6 @@ public static StatementAnalyzerFactory createTestingStatementAnalyzerFactory(
133133
new SessionPropertyManager(),
134134
tablePropertyManager,
135135
analyzePropertyManager,
136-
new TableProceduresPropertyManager());
136+
new TableProceduresPropertyManager(CatalogServiceProvider.fail("procedures are not supported in testing analyzer")));
137137
}
138138
}

core/trino-main/src/main/java/io/trino/sql/planner/DomainTranslator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ public static ExtractionResult getExtractionResult(PlannerContext plannerContext
320320
new SessionPropertyManager(),
321321
new TablePropertyManager(CatalogServiceProvider.fail("table properties not supported in domain translator")),
322322
new AnalyzePropertyManager(CatalogServiceProvider.fail("analyze properties not supported in domain translator")),
323-
new TableProceduresPropertyManager()));
323+
new TableProceduresPropertyManager(CatalogServiceProvider.fail("procedures are not supported in domain translator"))));
324324
return new Visitor(plannerContext, session, types, typeAnalyzer).process(predicate, false);
325325
}
326326

core/trino-main/src/main/java/io/trino/sql/planner/iterative/rule/RemoveUnsupportedDynamicFilters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public RemoveUnsupportedDynamicFilters(PlannerContext plannerContext)
105105
new SessionPropertyManager(),
106106
new TablePropertyManager(CatalogServiceProvider.fail("table properties not supported in testing analyzer")),
107107
new AnalyzePropertyManager(CatalogServiceProvider.fail("analyze properties not supported in testing analyzer")),
108-
new TableProceduresPropertyManager()));
108+
new TableProceduresPropertyManager(CatalogServiceProvider.fail("procedures are not supported in testing analyzer"))));
109109
}
110110

111111
@Override

core/trino-main/src/main/java/io/trino/testing/LocalQueryRunner.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@
229229
import static io.trino.connector.CatalogServiceProviderModule.createSchemaPropertyManager;
230230
import static io.trino.connector.CatalogServiceProviderModule.createSplitManagerProvider;
231231
import static io.trino.connector.CatalogServiceProviderModule.createTableFunctionProvider;
232+
import static io.trino.connector.CatalogServiceProviderModule.createTableProceduresPropertyManager;
232233
import static io.trino.connector.CatalogServiceProviderModule.createTableProceduresProvider;
233234
import static io.trino.connector.CatalogServiceProviderModule.createTablePropertyManager;
234235
import static io.trino.spi.connector.ConnectorSplitManager.SplitSchedulingStrategy.GROUPED_SCHEDULING;
@@ -386,8 +387,6 @@ private LocalQueryRunner(
386387
this.accessControl = new TestingAccessControlManager(transactionManager, eventListenerManager);
387388
accessControl.loadSystemAccessControl(AllowAllSystemAccessControl.NAME, ImmutableMap.of());
388389

389-
TableProceduresPropertyManager tableProceduresPropertyManager = new TableProceduresPropertyManager();
390-
391390
this.pageFunctionCompiler = new PageFunctionCompiler(functionManager, 0);
392391
this.expressionCompiler = new ExpressionCompiler(functionManager, pageFunctionCompiler);
393392
this.joinFilterFunctionCompiler = new JoinFilterFunctionCompiler(functionManager);
@@ -408,7 +407,6 @@ private LocalQueryRunner(
408407
transactionManager,
409408
eventListenerManager,
410409
typeManager,
411-
tableProceduresPropertyManager,
412410
nodeSchedulerConfig);
413411
this.splitManager = new SplitManager(createSplitManagerProvider(connectorManager), new QueryManagerConfig());
414412
this.pageSourceManager = new PageSourceManager(createPageSourceProvider(connectorManager));
@@ -424,6 +422,7 @@ private LocalQueryRunner(
424422
this.tablePropertyManager = createTablePropertyManager(connectorManager);
425423
this.materializedViewPropertyManager = createMaterializedViewPropertyManager(connectorManager);
426424
this.analyzePropertyManager = createAnalyzePropertyManager(connectorManager);
425+
TableProceduresPropertyManager tableProceduresPropertyManager = createTableProceduresPropertyManager(connectorManager);
427426

428427
this.statementAnalyzerFactory = new StatementAnalyzerFactory(
429428
plannerContext,

0 commit comments

Comments
 (0)