Skip to content

Commit 6ab49d0

Browse files
committed
Add ConnectorIdentifier to Connector
1 parent 3ade583 commit 6ab49d0

File tree

38 files changed

+437
-198
lines changed

38 files changed

+437
-198
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ public void createSchema(Session session, CatalogSchemaName schema, Map<String,
840840
CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, schema.getCatalogName());
841841
CatalogHandle catalogHandle = catalogMetadata.getCatalogHandle();
842842
ConnectorMetadata metadata = catalogMetadata.getMetadata(session);
843-
metadata.createSchema(session.toConnectorSession(catalogHandle), schema.getSchemaName(), properties, principal);
843+
metadata.createSchema(session.toConnectorSession(catalogHandle), schema.getSchema(), properties, principal);
844844
if (catalogMetadata.getSecurityManagement() == SYSTEM) {
845845
systemSecurityMetadata.schemaCreated(session, schema);
846846
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.trino.spi.TrinoException;
2121
import io.trino.spi.connector.CatalogSchemaName;
2222
import io.trino.spi.connector.ColumnMetadata;
23+
import io.trino.spi.connector.ConnectorIdentifier;
2324
import io.trino.spi.connector.ConnectorTableMetadata;
2425
import io.trino.spi.connector.EntityKindAndName;
2526
import io.trino.spi.connector.SchemaTableName;
@@ -166,6 +167,8 @@ public static CatalogSchemaName createCatalogSchemaName(Session session, Node no
166167
{
167168
String catalogName = session.getCatalog().orElse(null);
168169
String schemaName = session.getSchema().orElse(null);
170+
boolean isCatalogDelimited = false;
171+
boolean isSchemaDelimited = false;
169172

170173
if (schema.isPresent()) {
171174
List<String> parts = schema.get().getParts();
@@ -174,8 +177,10 @@ public static CatalogSchemaName createCatalogSchemaName(Session session, Node no
174177
}
175178
if (parts.size() == 2) {
176179
catalogName = parts.get(0);
180+
isCatalogDelimited = schema.get().isDelimitedPart(0);
177181
}
178182
schemaName = schema.get().getSuffix();
183+
isSchemaDelimited = schema.get().isDelimitedSuffix();
179184
}
180185

181186
if (catalogName == null) {
@@ -185,7 +190,9 @@ public static CatalogSchemaName createCatalogSchemaName(Session session, Node no
185190
throw semanticException(MISSING_SCHEMA_NAME, node, "Schema must be specified when session schema is not set");
186191
}
187192

188-
return new CatalogSchemaName(catalogName, schemaName);
193+
return new CatalogSchemaName(
194+
new ConnectorIdentifier(catalogName, isCatalogDelimited),
195+
new ConnectorIdentifier(schemaName, isSchemaDelimited));
189196
}
190197

191198
public static QualifiedObjectName createQualifiedObjectName(Session session, Node node, QualifiedName name)

core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.trino.spi.connector.ColumnPosition;
2727
import io.trino.spi.connector.ConnectorAccessControl;
2828
import io.trino.spi.connector.ConnectorAnalyzeMetadata;
29+
import io.trino.spi.connector.ConnectorIdentifier;
2930
import io.trino.spi.connector.ConnectorInsertTableHandle;
3031
import io.trino.spi.connector.ConnectorMaterializedViewDefinition;
3132
import io.trino.spi.connector.ConnectorMergeTableHandle;
@@ -343,28 +344,28 @@ public TableStatistics getTableStatistics(ConnectorSession session, ConnectorTab
343344
}
344345

345346
@Override
346-
public void createSchema(ConnectorSession session, String schemaName, Map<String, Object> properties, TrinoPrincipal owner)
347+
public void createSchema(ConnectorSession session, ConnectorIdentifier schema, Map<String, Object> properties, TrinoPrincipal owner)
347348
{
348-
Span span = startSpan("createSchema", schemaName);
349+
Span span = startSpan("createSchema", schema.getValue());
349350
try (var _ = scopedSpan(span)) {
350-
delegate.createSchema(session, schemaName, properties, owner);
351+
delegate.createSchema(session, schema, properties, owner);
351352
}
352353
}
353354

354355
@Override
355-
public void dropSchema(ConnectorSession session, String schemaName, boolean cascade)
356+
public void dropSchema(ConnectorSession session, ConnectorIdentifier schema, boolean cascade)
356357
{
357-
Span span = startSpan("dropSchema", schemaName)
358+
Span span = startSpan("dropSchema", schema.getValue())
358359
.setAttribute(TrinoAttributes.CASCADE, cascade);
359360
try (var _ = scopedSpan(span)) {
360-
delegate.dropSchema(session, schemaName, cascade);
361+
delegate.dropSchema(session, schema, cascade);
361362
}
362363
}
363364

364365
@Override
365-
public void renameSchema(ConnectorSession session, String source, String target)
366+
public void renameSchema(ConnectorSession session, ConnectorIdentifier source, ConnectorIdentifier target)
366367
{
367-
Span span = startSpan("renameSchema", source);
368+
Span span = startSpan("renameSchema", source.getValue());
368369
try (var _ = scopedSpan(span)) {
369370
delegate.renameSchema(session, source, target);
370371
}

core/trino-main/src/test/java/io/trino/connector/MockConnector.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import io.trino.spi.connector.Connector;
3838
import io.trino.spi.connector.ConnectorAccessControl;
3939
import io.trino.spi.connector.ConnectorCapabilities;
40+
import io.trino.spi.connector.ConnectorIdentifier;
4041
import io.trino.spi.connector.ConnectorInsertTableHandle;
4142
import io.trino.spi.connector.ConnectorMaterializedViewDefinition;
4243
import io.trino.spi.connector.ConnectorMergeSink;
@@ -529,16 +530,16 @@ public List<String> listSchemaNames(ConnectorSession session)
529530
}
530531

531532
@Override
532-
public void createSchema(ConnectorSession session, String schemaName, Map<String, Object> properties, TrinoPrincipal owner) {}
533+
public void createSchema(ConnectorSession session, ConnectorIdentifier schemaName, Map<String, Object> properties, TrinoPrincipal owner) {}
533534

534535
@Override
535-
public void renameSchema(ConnectorSession session, String source, String target) {}
536+
public void renameSchema(ConnectorSession session, ConnectorIdentifier source, ConnectorIdentifier target) {}
536537

537538
@Override
538539
public void setSchemaAuthorization(ConnectorSession session, String schemaName, TrinoPrincipal principal) {}
539540

540541
@Override
541-
public void dropSchema(ConnectorSession session, String schemaName, boolean cascade) {}
542+
public void dropSchema(ConnectorSession session, ConnectorIdentifier schemaName, boolean cascade) {}
542543

543544
@Override
544545
public ConnectorTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName, Optional<ConnectorTableVersion> startVersion, Optional<ConnectorTableVersion> endVersion)

core/trino-parser/src/main/java/io/trino/sql/tree/QualifiedName.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ public List<String> getParts()
8888
return parts;
8989
}
9090

91+
public boolean isDelimitedPart(int part)
92+
{
93+
if (part >= 0 && part < originalParts.size()) {
94+
return originalParts.get(part).isDelimited();
95+
}
96+
return false;
97+
}
98+
99+
public boolean isDelimitedSuffix()
100+
{
101+
if (!originalParts.isEmpty()) {
102+
return originalParts.getFirst().isDelimited();
103+
}
104+
return false;
105+
}
106+
91107
public List<Identifier> getOriginalParts()
92108
{
93109
return originalParts;

core/trino-spi/pom.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,30 @@
908908
<annotation>@com.google.errorprone.annotations.Immutable</annotation>
909909
<justification>Location converted to a record class</justification>
910910
</item>
911+
<item>
912+
<ignore>true</ignore>
913+
<code>java.annotation.removed</code>
914+
<old>method void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(java.lang.String, java.lang.String)</old>
915+
<new>method void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(java.lang.String, java.lang.String)</new>
916+
<annotation>@com.fasterxml.jackson.annotation.JsonCreator</annotation>
917+
<justification>Use of ConnectorIdentifier</justification>
918+
</item>
919+
<item>
920+
<ignore>true</ignore>
921+
<code>java.annotation.removed</code>
922+
<old>parameter void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(===java.lang.String===, java.lang.String)</old>
923+
<new>parameter void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(===java.lang.String===, java.lang.String)</new>
924+
<annotation>@com.fasterxml.jackson.annotation.JsonProperty("catalogName")</annotation>
925+
<justification>Use of ConnectorIdentifier</justification>
926+
</item>
927+
<item>
928+
<ignore>true</ignore>
929+
<code>java.annotation.removed</code>
930+
<old>parameter void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(java.lang.String, ===java.lang.String===)</old>
931+
<new>parameter void io.trino.spi.connector.CatalogSchemaName::&lt;init&gt;(java.lang.String, ===java.lang.String===)</new>
932+
<annotation>@com.fasterxml.jackson.annotation.JsonProperty("schemaName")</annotation>
933+
<justification>Use of ConnectorIdentifier</justification>
934+
</item>
911935
</differences>
912936
</revapi.differences>
913937
</analysisConfiguration>

core/trino-spi/src/main/java/io/trino/spi/connector/CatalogSchemaName.java

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,52 @@
1818

1919
import java.util.Objects;
2020

21-
import static java.util.Locale.ENGLISH;
21+
import static java.util.Objects.requireNonNull;
2222

2323
public final class CatalogSchemaName
2424
{
25-
private final String catalogName;
26-
private final String schemaName;
25+
private final ConnectorIdentifier catalog;
26+
private final ConnectorIdentifier schema;
2727

2828
@JsonCreator
2929
public CatalogSchemaName(
30-
@JsonProperty("catalogName") String catalogName,
31-
@JsonProperty("schemaName") String schemaName)
30+
@JsonProperty("catalog") ConnectorIdentifier catalog,
31+
@JsonProperty("schema") ConnectorIdentifier schema)
3232
{
33-
this.catalogName = catalogName.toLowerCase(ENGLISH);
34-
this.schemaName = schemaName.toLowerCase(ENGLISH);
33+
this.catalog = requireNonNull(catalog, "catalog is null");
34+
this.schema = requireNonNull(schema, "schema is null");
35+
}
36+
37+
public CatalogSchemaName(
38+
String catalog,
39+
String schema)
40+
{
41+
this.catalog = new ConnectorIdentifier(catalog, false);
42+
this.schema = new ConnectorIdentifier(schema, false);
43+
}
44+
45+
@JsonProperty
46+
public ConnectorIdentifier getCatalog()
47+
{
48+
return catalog;
49+
}
50+
51+
@JsonProperty
52+
public ConnectorIdentifier getSchema()
53+
{
54+
return schema;
3555
}
3656

3757
@JsonProperty
3858
public String getCatalogName()
3959
{
40-
return catalogName;
60+
return catalog.getValue();
4161
}
4262

4363
@JsonProperty
4464
public String getSchemaName()
4565
{
46-
return schemaName;
66+
return schema.getValue();
4767
}
4868

4969
@Override
@@ -56,19 +76,19 @@ public boolean equals(Object obj)
5676
return false;
5777
}
5878
CatalogSchemaName that = (CatalogSchemaName) obj;
59-
return Objects.equals(catalogName, that.catalogName) &&
60-
Objects.equals(schemaName, that.schemaName);
79+
return Objects.equals(catalog, that.catalog) &&
80+
Objects.equals(schema, that.schema);
6181
}
6282

6383
@Override
6484
public int hashCode()
6585
{
66-
return Objects.hash(catalogName, schemaName);
86+
return Objects.hash(catalog, schema);
6787
}
6888

6989
@Override
7090
public String toString()
7191
{
72-
return catalogName + '.' + schemaName;
92+
return catalog.getValue() + '.' + schema.getValue();
7393
}
7494
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
package io.trino.spi.connector;
15+
16+
import com.fasterxml.jackson.annotation.JsonCreator;
17+
import com.fasterxml.jackson.annotation.JsonProperty;
18+
19+
import java.util.Objects;
20+
21+
import static java.util.Locale.ENGLISH;
22+
import static java.util.Objects.requireNonNull;
23+
24+
public class ConnectorIdentifier
25+
{
26+
private final String value;
27+
private final boolean delimited;
28+
29+
@JsonCreator
30+
public ConnectorIdentifier(String value, boolean delimited)
31+
{
32+
this.value = requireNonNull(value, "value is null");
33+
this.delimited = delimited;
34+
}
35+
36+
@JsonProperty
37+
public String getValue()
38+
{
39+
return delimited ? value : canonicalize();
40+
}
41+
42+
@JsonProperty
43+
public boolean isDelimited()
44+
{
45+
return delimited;
46+
}
47+
48+
@Override
49+
public boolean equals(Object o)
50+
{
51+
if (this == o) {
52+
return true;
53+
}
54+
if (o == null || getClass() != o.getClass()) {
55+
return false;
56+
}
57+
ConnectorIdentifier that = (ConnectorIdentifier) o;
58+
return Objects.equals(this.getValue(), that.getValue());
59+
}
60+
61+
@Override
62+
public int hashCode()
63+
{
64+
return Objects.hash(value, delimited);
65+
}
66+
67+
@Override
68+
public String toString()
69+
{
70+
return value;
71+
}
72+
73+
private String canonicalize()
74+
{
75+
return value.toLowerCase(ENGLISH);
76+
}
77+
}

core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,14 @@ default TableStatistics getTableStatistics(ConnectorSession session, ConnectorTa
444444
* Creates a schema.
445445
*/
446446
default void createSchema(ConnectorSession session, String schemaName, Map<String, Object> properties, TrinoPrincipal owner)
447+
{
448+
createSchema(session, new ConnectorIdentifier(schemaName, true), properties, owner);
449+
}
450+
451+
/**
452+
* Creates a schema.
453+
*/
454+
default void createSchema(ConnectorSession session, ConnectorIdentifier schema, Map<String, Object> properties, TrinoPrincipal owner)
447455
{
448456
throw new TrinoException(NOT_SUPPORTED, "This connector does not support creating schemas");
449457
}
@@ -454,6 +462,16 @@ default void createSchema(ConnectorSession session, String schemaName, Map<Strin
454462
* @throws TrinoException with {@code SCHEMA_NOT_EMPTY} if {@code cascade} is false and the schema is not empty
455463
*/
456464
default void dropSchema(ConnectorSession session, String schemaName, boolean cascade)
465+
{
466+
dropSchema(session, new ConnectorIdentifier(schemaName, true), cascade);
467+
}
468+
469+
/**
470+
* Drops the specified schema.
471+
*
472+
* @throws TrinoException with {@code SCHEMA_NOT_EMPTY} if {@code cascade} is false and the schema is not empty
473+
*/
474+
default void dropSchema(ConnectorSession session, ConnectorIdentifier schema, boolean cascade)
457475
{
458476
throw new TrinoException(NOT_SUPPORTED, "This connector does not support dropping schemas");
459477
}
@@ -462,6 +480,14 @@ default void dropSchema(ConnectorSession session, String schemaName, boolean cas
462480
* Renames the specified schema.
463481
*/
464482
default void renameSchema(ConnectorSession session, String source, String target)
483+
{
484+
renameSchema(session, new ConnectorIdentifier(source, true), new ConnectorIdentifier(target, true));
485+
}
486+
487+
/**
488+
* Renames the specified schema.
489+
*/
490+
default void renameSchema(ConnectorSession session, ConnectorIdentifier source, ConnectorIdentifier target)
465491
{
466492
throw new TrinoException(NOT_SUPPORTED, "This connector does not support renaming schemas");
467493
}

0 commit comments

Comments
 (0)