Skip to content

Commit b6870d9

Browse files
findepiprrvchr
authored andcommitted
New HsqlDB connector
1 parent 5d545c0 commit b6870d9

File tree

53 files changed

+2939
-558
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2939
-558
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ jobs:
370370
!:trino-hdfs,
371371
!:trino-hive,
372372
!:trino-hive-formats,
373+
!:trino-hsqldb,
373374
!:trino-hudi,
374375
!:trino-iceberg,
375376
!:trino-ignite,
@@ -491,6 +492,7 @@ jobs:
491492
- { modules: plugin/trino-hive }
492493
- { modules: plugin/trino-hive, profile: fte-tests }
493494
- { modules: plugin/trino-hive, profile: test-parquet }
495+
- { modules: plugin/trino-hsqldb }
494496
- { modules: plugin/trino-hudi }
495497
- { modules: plugin/trino-iceberg }
496498
- { modules: plugin/trino-iceberg, profile: cloud-tests }

client/trino-cli/src/main/java/io/trino/cli/ClientOptions.java

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import static com.google.common.base.Strings.nullToEmpty;
4848
import static io.trino.cli.TerminalUtils.getTerminal;
4949
import static io.trino.client.KerberosUtil.defaultCredentialCachePath;
50-
import static io.trino.client.ProtocolHeaders.TRINO_HEADERS;
5150
import static io.trino.client.uri.PropertyName.ACCESS_TOKEN;
5251
import static io.trino.client.uri.PropertyName.CATALOG;
5352
import static io.trino.client.uri.PropertyName.CLIENT_INFO;
@@ -57,7 +56,6 @@
5756
import static io.trino.client.uri.PropertyName.EXTERNAL_AUTHENTICATION;
5857
import static io.trino.client.uri.PropertyName.EXTERNAL_AUTHENTICATION_REDIRECT_HANDLERS;
5958
import static io.trino.client.uri.PropertyName.EXTRA_CREDENTIALS;
60-
import static io.trino.client.uri.PropertyName.EXTRA_HEADERS;
6159
import static io.trino.client.uri.PropertyName.HTTP_LOGGING_LEVEL;
6260
import static io.trino.client.uri.PropertyName.HTTP_PROXY;
6361
import static io.trino.client.uri.PropertyName.KERBEROS_CONFIG_PATH;
@@ -206,10 +204,6 @@ public class ClientOptions
206204
@Option(names = "--client-tags", paramLabel = "<tags>", description = "Client tags", converter = ClientTagsConverter.class)
207205
public Optional<Set<String>> clientTags;
208206

209-
@PropertyMapping(EXTRA_HEADERS)
210-
@Option(names = "--extra-header", paramLabel = "<header>", description = "Additional HTTP header to add to HTTP requests (property can be used multiple times; format is key=value)")
211-
public final List<ExtraHeader> extraHeaders = new ArrayList<>();
212-
213207
@PropertyMapping(TRACE_TOKEN)
214208
@Option(names = "--trace-token", paramLabel = "<token>", description = "Trace token")
215209
public Optional<String> traceToken;
@@ -428,9 +422,6 @@ public TrinoUri getTrinoUri(Map<PropertyName, String> restrictedProperties)
428422
if (!sessionProperties.isEmpty()) {
429423
builder.setSessionProperties(toProperties(sessionProperties));
430424
}
431-
if (!extraHeaders.isEmpty()) {
432-
builder.setExtraHeaders(toExtraHeaders(extraHeaders));
433-
}
434425
if (!resourceEstimates.isEmpty()) {
435426
builder.setResourceEstimates(toResourceEstimates(resourceEstimates));
436427
}
@@ -507,15 +498,6 @@ public static URI parseServer(String server)
507498
}
508499
}
509500

510-
public static Map<String, String> toExtraHeaders(List<ExtraHeader> extraHeaders)
511-
{
512-
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
513-
for (ExtraHeader extraHeader : extraHeaders) {
514-
builder.put(extraHeader.getHeader(), extraHeader.getValue());
515-
}
516-
return builder.buildOrThrow();
517-
}
518-
519501
private static Map<String, String> toProperties(List<ClientSessionProperty> sessionProperties)
520502
{
521503
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
@@ -623,59 +605,6 @@ public int hashCode()
623605
}
624606
}
625607

626-
public static final class ExtraHeader
627-
{
628-
private final String header;
629-
private final String value;
630-
631-
public ExtraHeader(String headerAndValue)
632-
{
633-
List<String> nameValue = NAME_VALUE_SPLITTER.splitToList(headerAndValue);
634-
checkArgument(nameValue.size() == 2, "Header and value: %s", headerAndValue);
635-
this.header = nameValue.get(0);
636-
this.value = nameValue.get(1);
637-
638-
checkArgument(!TRINO_HEADERS.isProtocolHeader(header), "Header '%s' is a protocol header and cannot be set as an extra header", header);
639-
checkArgument(!header.isEmpty(), "Header name is empty");
640-
checkArgument(!value.isEmpty(), "Header value is empty");
641-
}
642-
643-
public ExtraHeader(String header, String value)
644-
{
645-
this.header = header;
646-
this.value = value;
647-
}
648-
649-
public String getHeader()
650-
{
651-
return header;
652-
}
653-
654-
public String getValue()
655-
{
656-
return value;
657-
}
658-
659-
@Override
660-
public boolean equals(Object o)
661-
{
662-
if (this == o) {
663-
return true;
664-
}
665-
if (o == null || getClass() != o.getClass()) {
666-
return false;
667-
}
668-
ExtraHeader other = (ExtraHeader) o;
669-
return Objects.equals(header, other.header) && Objects.equals(value, other.value);
670-
}
671-
672-
@Override
673-
public int hashCode()
674-
{
675-
return Objects.hash(header, value);
676-
}
677-
}
678-
679608
public static final class ClientSessionProperty
680609
{
681610
private static final Splitter NAME_SPLITTER = Splitter.on('.');

client/trino-cli/src/main/java/io/trino/cli/Trino.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import io.trino.cli.ClientOptions.ClientExtraCredential;
2121
import io.trino.cli.ClientOptions.ClientResourceEstimate;
2222
import io.trino.cli.ClientOptions.ClientSessionProperty;
23-
import io.trino.cli.ClientOptions.ExtraHeader;
2423
import org.jline.utils.AttributedStringBuilder;
2524
import org.jline.utils.AttributedStyle;
2625
import picocli.CommandLine;
@@ -63,7 +62,6 @@ public static CommandLine createCommandLine(Object command)
6362
.registerConverter(ClientResourceEstimate.class, ClientResourceEstimate::new)
6463
.registerConverter(ClientSessionProperty.class, ClientSessionProperty::new)
6564
.registerConverter(ClientExtraCredential.class, ClientExtraCredential::new)
66-
.registerConverter(ExtraHeader.class, ExtraHeader::new)
6765
.registerConverter(HostAndPort.class, HostAndPort::fromString)
6866
.registerConverter(Duration.class, Duration::valueOf)
6967
.setResourceBundle(new TrinoResourceBundle())

client/trino-cli/src/test/java/io/trino/cli/TestClientOptions.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -246,20 +246,6 @@ public void testExtraCredentials()
246246
new ClientOptions.ClientExtraCredential("test.token.bar", "bar")));
247247
}
248248

249-
@Test
250-
public void testExtraHeaders()
251-
{
252-
Console console = createConsole("--extra-header", "X-Trino-Routing-Group=foo", "--extra-header", "x-foo=bar");
253-
ClientOptions options = console.clientOptions;
254-
assertThat(options.extraHeaders).isEqualTo(ImmutableList.of(
255-
new ClientOptions.ExtraHeader("X-Trino-Routing-Group", "foo"),
256-
new ClientOptions.ExtraHeader("x-foo", "bar")));
257-
258-
assertThatThrownBy(() -> createConsole("--extra-header", "X-Trino-User=Forbidden"))
259-
.hasCauseInstanceOf(IllegalArgumentException.class)
260-
.hasMessageContaining("Header 'X-Trino-User' is a protocol header and cannot be set as an extra header");
261-
}
262-
263249
@Test
264250
public void testSessionProperties()
265251
{

client/trino-client/src/main/java/io/trino/client/ClientSession.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ public class ClientSession
5151
private final ZoneId timeZone;
5252
private final Locale locale;
5353
private final Map<String, String> resourceEstimates;
54-
private final Map<String, String> extraHeaders;
5554
private final Map<String, String> properties;
5655
private final Map<String, String> preparedStatements;
5756
private final Map<String, ClientSelectedRole> roles;
@@ -88,7 +87,6 @@ private ClientSession(
8887
String source,
8988
Optional<String> traceToken,
9089
Set<String> clientTags,
91-
Map<String, String> extraHeaders,
9290
String clientInfo,
9391
Optional<String> catalog,
9492
Optional<String> schema,
@@ -114,7 +112,6 @@ private ClientSession(
114112
this.source = requireNonNull(source, "source is null");
115113
this.traceToken = requireNonNull(traceToken, "traceToken is null");
116114
this.clientTags = ImmutableSet.copyOf(requireNonNull(clientTags, "clientTags is null"));
117-
this.extraHeaders = ImmutableMap.copyOf(requireNonNull(extraHeaders, "extraHeaders is null"));
118115
this.clientInfo = clientInfo;
119116
this.catalog = catalog;
120117
this.schema = schema;
@@ -201,11 +198,6 @@ public Set<String> getClientTags()
201198
return clientTags;
202199
}
203200

204-
public Map<String, String> getExtraHeaders()
205-
{
206-
return extraHeaders;
207-
}
208-
209201
public String getClientInfo()
210202
{
211203
return clientInfo;
@@ -303,7 +295,6 @@ public String toString()
303295
.add("sessionUser", sessionUser)
304296
.add("authorizationUser", authorizationUser)
305297
.add("clientTags", clientTags)
306-
.add("extraHeaders", extraHeaders)
307298
.add("clientInfo", clientInfo)
308299
.add("catalog", catalog)
309300
.add("schema", schema)
@@ -333,7 +324,6 @@ public static final class Builder
333324
private String source;
334325
private Optional<String> traceToken = Optional.empty();
335326
private Set<String> clientTags = ImmutableSet.of();
336-
private Map<String, String> extraHeaders = ImmutableMap.of();
337327
private String clientInfo;
338328
private String catalog;
339329
private String schema;
@@ -364,7 +354,6 @@ private Builder(ClientSession clientSession)
364354
source = clientSession.getSource();
365355
traceToken = clientSession.getTraceToken();
366356
clientTags = clientSession.getClientTags();
367-
extraHeaders = clientSession.getExtraHeaders();
368357
clientInfo = clientSession.getClientInfo();
369358
catalog = clientSession.getCatalog().orElse(null);
370359
schema = clientSession.getSchema().orElse(null);
@@ -430,12 +419,6 @@ public Builder clientTags(Set<String> clientTags)
430419
return this;
431420
}
432421

433-
public Builder extraHeaders(Map<String, String> extraHeaders)
434-
{
435-
this.extraHeaders = extraHeaders;
436-
return this;
437-
}
438-
439422
public Builder clientInfo(String clientInfo)
440423
{
441424
this.clientInfo = clientInfo;
@@ -543,7 +526,6 @@ public ClientSession build()
543526
source,
544527
traceToken,
545528
clientTags,
546-
extraHeaders,
547529
clientInfo,
548530
Optional.ofNullable(catalog),
549531
Optional.ofNullable(schema),

client/trino-client/src/main/java/io/trino/client/OkHttpUtil.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import java.security.cert.X509Certificate;
5656
import java.util.Arrays;
5757
import java.util.List;
58-
import java.util.Map;
5958
import java.util.Optional;
6059
import java.util.concurrent.TimeUnit;
6160

@@ -110,17 +109,6 @@ public static Interceptor tokenAuth(String accessToken)
110109
.build());
111110
}
112111

113-
public static Interceptor extraHeaders(Map<String, String> extraHeaders)
114-
{
115-
requireNonNull(extraHeaders, "extraHeaders is null");
116-
117-
return chain -> {
118-
okhttp3.Request.Builder builder = chain.request().newBuilder();
119-
extraHeaders.forEach(builder::addHeader);
120-
return chain.proceed(builder.build());
121-
};
122-
}
123-
124112
public static void setupTimeouts(OkHttpClient.Builder clientBuilder, int timeout, TimeUnit unit)
125113
{
126114
clientBuilder

client/trino-client/src/main/java/io/trino/client/ProtocolHeaders.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,6 @@ private ProtocolHeaders(String name)
194194
responseOriginalRole = RESPONSE_SET_ORIGINAL_ROLES.withProtocolName(name);
195195
}
196196

197-
public boolean isProtocolHeader(String headerName)
198-
{
199-
for (Headers header : Headers.values()) {
200-
if (header.withProtocolName(name).equalsIgnoreCase(headerName)) {
201-
return true;
202-
}
203-
}
204-
return false;
205-
}
206-
207197
public String getProtocolName()
208198
{
209199
return name;

client/trino-client/src/main/java/io/trino/client/uri/ConnectionProperties.java

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.google.common.base.CharMatcher;
1717
import com.google.common.base.Joiner;
1818
import com.google.common.base.Splitter;
19-
import com.google.common.collect.ImmutableMap;
2019
import com.google.common.collect.ImmutableSet;
2120
import com.google.common.net.HostAndPort;
2221
import io.airlift.units.Duration;
@@ -45,7 +44,6 @@
4544
import static com.google.common.collect.Streams.stream;
4645
import static io.trino.client.ClientSelectedRole.Type.ALL;
4746
import static io.trino.client.ClientSelectedRole.Type.NONE;
48-
import static io.trino.client.ProtocolHeaders.TRINO_HEADERS;
4947
import static io.trino.client.uri.AbstractConnectionProperty.Validator;
5048
import static io.trino.client.uri.AbstractConnectionProperty.validator;
5149
import static io.trino.client.uri.ConnectionProperties.SslVerificationMode.FULL;
@@ -101,7 +99,6 @@ enum SslVerificationMode
10199
public static final ConnectionProperty<String, Map<String, String>> EXTRA_CREDENTIALS = new ExtraCredentials();
102100
public static final ConnectionProperty<String, String> CLIENT_INFO = new ClientInfo();
103101
public static final ConnectionProperty<String, Set<String>> CLIENT_TAGS = new ClientTags();
104-
public static final ConnectionProperty<String, Map<String, String>> EXTRA_HEADERS = new ExtraHeaders();
105102
public static final ConnectionProperty<String, String> TRACE_TOKEN = new TraceToken();
106103
public static final ConnectionProperty<String, Map<String, String>> SESSION_PROPERTIES = new SessionProperties();
107104
public static final ConnectionProperty<String, String> SOURCE = new Source();
@@ -142,7 +139,6 @@ enum SslVerificationMode
142139
.add(EXTERNAL_AUTHENTICATION_TIMEOUT)
143140
.add(EXTERNAL_AUTHENTICATION_TOKEN_CACHE)
144141
.add(EXTRA_CREDENTIALS)
145-
.add(EXTRA_HEADERS)
146142
.add(HOSTNAME_IN_CERTIFICATE)
147143
.add(HTTP_LOGGING_LEVEL)
148144
.add(HTTP_PROXY)
@@ -793,42 +789,6 @@ public static String toString(Map<String, String> values)
793789
}
794790
}
795791

796-
private static class ExtraHeaders
797-
extends AbstractConnectionProperty<String, Map<String, String>>
798-
{
799-
private static final Validator<Properties> VALIDATE_EXTRA_HEADER = validator(
800-
ExtraHeaders::isNotReservedHeader,
801-
format("Connection property %s cannot override any of the Trino protocol headers", PropertyName.EXTRA_HEADERS));
802-
803-
public ExtraHeaders()
804-
{
805-
super(PropertyName.EXTRA_HEADERS, NOT_REQUIRED, VALIDATE_EXTRA_HEADER, converter(ExtraHeaders::parseExtraHeaders, ExtraHeaders::toString));
806-
}
807-
808-
// Extra headers consists of a list of header name value pairs.
809-
// E.g., `jdbc:trino://example.net:8080/?extraHeaders=X-Trino-Route:foo;X-Trino-Custom:bar` will send
810-
// HTTP headers `X-Trino-Route=foo` and `X-Trino-Custom=bar`.
811-
// These headers must not conflict with Trino protocol headers.
812-
public static Map<String, String> parseExtraHeaders(String extraHeadersString)
813-
{
814-
return new MapPropertyParser(PropertyName.EXTRA_HEADERS.toString()).parse(extraHeadersString);
815-
}
816-
817-
public static String toString(Map<String, String> values)
818-
{
819-
return values.entrySet().stream()
820-
.map(entry -> entry.getKey() + ":" + entry.getValue())
821-
.collect(Collectors.joining(";"));
822-
}
823-
824-
private static boolean isNotReservedHeader(Properties properties)
825-
{
826-
Map<String, String> extraHeaders = EXTRA_HEADERS.getValueOrDefault(properties, ImmutableMap.of());
827-
return extraHeaders.keySet().stream()
828-
.noneMatch(TRINO_HEADERS::isProtocolHeader);
829-
}
830-
}
831-
832792
private static class SessionProperties
833793
extends AbstractConnectionProperty<String, Map<String, String>>
834794
{

client/trino-client/src/main/java/io/trino/client/uri/HttpClientFactory.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
import static io.trino.client.KerberosUtil.defaultCredentialCachePath;
3232
import static io.trino.client.OkHttpUtil.basicAuth;
33-
import static io.trino.client.OkHttpUtil.extraHeaders;
3433
import static io.trino.client.OkHttpUtil.setupAlternateHostnameVerification;
3534
import static io.trino.client.OkHttpUtil.setupCookieJar;
3635
import static io.trino.client.OkHttpUtil.setupHttpLogging;
@@ -88,10 +87,6 @@ public static OkHttpClient.Builder toHttpClientBuilder(TrinoUri uri, String user
8887
builder.addNetworkInterceptor(tokenAuth(uri.getAccessToken().get()));
8988
}
9089

91-
if (!uri.getExtraHeaders().isEmpty()) {
92-
builder.addNetworkInterceptor(extraHeaders(uri.getExtraHeaders()));
93-
}
94-
9590
if (uri.isExternalAuthenticationEnabled()) {
9691
if (!uri.isUseSecureConnection()) {
9792
throw new RuntimeException("TLS/SSL required for authentication using external authorization");

client/trino-client/src/main/java/io/trino/client/uri/PropertyName.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public enum PropertyName
3131
CLIENT_INFO("clientInfo"),
3232
CLIENT_TAGS("clientTags"),
3333
DISABLE_COMPRESSION("disableCompression"),
34-
EXTRA_HEADERS("extraHeaders"),
3534
DNS_RESOLVER("dnsResolver"),
3635
DNS_RESOLVER_CONTEXT("dnsResolverContext"),
3736
ENCODING("encoding"),

0 commit comments

Comments
 (0)