Skip to content

Commit bada97a

Browse files
Add per-connection driver properties (#99)
Co-authored-by: Joseph Grogan <[email protected]>
1 parent 2e84b5a commit bada97a

File tree

34 files changed

+389
-188
lines changed

34 files changed

+389
-188
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ junit = "junit:junit:4.12"
2626
kafka-clients = "org.apache.kafka:kafka-clients:3.2.0"
2727
kubernetes-client = "io.kubernetes:client-java:18.0.0"
2828
kubernetes-extended-client = "io.kubernetes:client-java-extended:18.0.0"
29-
slf4j-simple = "org.slf4j:slf4j-simple:1.7.30"
30-
slf4j-api = "org.slf4j:slf4j-api:1.7.30"
29+
slf4j-simple = "org.slf4j:slf4j-simple:1.7.36"
30+
slf4j-api = "org.slf4j:slf4j-api:1.7.36"
3131
sqlline = "sqlline:sqlline:1.12.0"
3232
quidem = "net.hydromatic:quidem:0.11"
3333
venice = "com.linkedin.venice:venice-common:0.4.376"

hoptimator-api/src/main/java/com/linkedin/hoptimator/Catalog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.sql.SQLException;
44
import java.sql.Wrapper;
5+
import java.util.Properties;
56

67

78
/** Registers a set of tables, possibly within schemas and sub-schemas. */
@@ -11,5 +12,5 @@ public interface Catalog {
1112

1213
String description();
1314

14-
void register(Wrapper parentSchema) throws SQLException;
15+
void register(Wrapper parentSchema, Properties connectionProperties) throws SQLException;
1516
}

hoptimator-api/src/main/java/com/linkedin/hoptimator/ConfigProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
public interface ConfigProvider {
66

7-
Properties loadConfig(String namespace) throws Exception;
7+
Properties loadConfig(Properties connectionProperties) throws Exception;
88
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.linkedin.hoptimator;
22

33
import java.util.Collection;
4+
import java.util.Properties;
45

56

67
public interface ConnectorProvider {
78

8-
<T> Collection<Connector<T>> connectors(Class<T> clazz);
9+
<T> Collection<Connector<T>> connectors(Class<T> clazz, Properties connectionProperties);
910
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.linkedin.hoptimator;
22

33
import java.util.Collection;
4+
import java.util.Properties;
45

56

67
public interface DeployerProvider {
78

8-
<T> Collection<Deployer<T>> deployers(Class<T> clazz);
9+
<T> Collection<Deployer<T>> deployers(Class<T> clazz, Properties connectionProperties);
910
}

hoptimator-cli/src/main/java/sqlline/HoptimatorAppConfig.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import java.util.List;
88
import java.util.Scanner;
99

10-
import org.apache.calcite.jdbc.CalciteConnection;
1110
import org.apache.calcite.rel.RelRoot;
1211
import org.jline.reader.Completer;
1312

1413
import com.linkedin.hoptimator.SqlDialect;
14+
import com.linkedin.hoptimator.jdbc.HoptimatorConnection;
1515
import com.linkedin.hoptimator.jdbc.HoptimatorDriver;
1616
import com.linkedin.hoptimator.util.DeploymentService;
1717
import com.linkedin.hoptimator.util.planner.PipelineRel;
@@ -73,7 +73,7 @@ public String matches(String line) {
7373

7474
@Override
7575
public void execute(String line, DispatchCallback dispatchCallback) {
76-
if (!(sqlline.getConnection() instanceof CalciteConnection)) {
76+
if (!(sqlline.getConnection() instanceof HoptimatorConnection)) {
7777
sqlline.error("This connection doesn't support `!pipeline`.");
7878
dispatchCallback.setToFailure();
7979
return;
@@ -85,10 +85,10 @@ public void execute(String line, DispatchCallback dispatchCallback) {
8585
return;
8686
}
8787
String sql = split[1];
88-
CalciteConnection conn = (CalciteConnection) sqlline.getConnection();
88+
HoptimatorConnection conn = (HoptimatorConnection) sqlline.getConnection();
8989
try {
90-
RelRoot root = HoptimatorDriver.convert(conn.createPrepareContext(), sql).root;
91-
PipelineRel.Implementor plan = DeploymentService.plan(root);
90+
RelRoot root = HoptimatorDriver.convert(conn, sql).root;
91+
PipelineRel.Implementor plan = DeploymentService.plan(root, conn.connectionProperties());
9292
sqlline.output(plan.sql().apply(SqlDialect.ANSI));
9393
} catch (SQLException e) {
9494
sqlline.error(e);
@@ -142,7 +142,7 @@ public String matches(String line) {
142142

143143
@Override
144144
public void execute(String line, DispatchCallback dispatchCallback) {
145-
if (!(sqlline.getConnection() instanceof CalciteConnection)) {
145+
if (!(sqlline.getConnection() instanceof HoptimatorConnection)) {
146146
sqlline.error("This connection doesn't support `!specify`.");
147147
dispatchCallback.setToFailure();
148148
return;
@@ -154,10 +154,11 @@ public void execute(String line, DispatchCallback dispatchCallback) {
154154
return;
155155
}
156156
String sql = split[1];
157-
CalciteConnection conn = (CalciteConnection) sqlline.getConnection();
158-
RelRoot root = HoptimatorDriver.convert(conn.createPrepareContext(), sql).root;
157+
HoptimatorConnection conn = (HoptimatorConnection) sqlline.getConnection();
158+
RelRoot root = HoptimatorDriver.convert(conn, sql).root;
159159
try {
160-
List<String> specs = DeploymentService.plan(root).pipeline("sink").specify();
160+
List<String> specs = DeploymentService.plan(root, conn.connectionProperties())
161+
.pipeline("sink").specify();
161162
specs.forEach(x -> sqlline.output(x + "\n\n---\n\n"));
162163
} catch (SQLException e) {
163164
sqlline.error(e);

hoptimator-demodb/build.gradle

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,55 @@
11
plugins {
22
id 'java'
3+
id 'maven-publish'
34
}
45

56
dependencies {
67
implementation project(':hoptimator-api')
78
implementation project(':hoptimator-util')
89
implementation libs.calcite.core
910
}
11+
12+
publishing {
13+
repositories {
14+
maven {
15+
name 'GitHubPackages'
16+
url = 'https://maven.pkg.github.com/linkedin/Hoptimator'
17+
credentials {
18+
username = System.getenv('GITHUB_ACTOR')
19+
password = System.getenv('GITHUB_TOKEN')
20+
}
21+
}
22+
maven {
23+
name 'LinkedInJFrog'
24+
url 'https://linkedin.jfrog.io/artifactory/hoptimator'
25+
credentials {
26+
username = System.getenv('JFROG_USERNAME')
27+
password = System.getenv('JFROG_API_KEY')
28+
}
29+
}
30+
}
31+
publications {
32+
maven(MavenPublication) {
33+
groupId = 'com.linkedin.hoptimator'
34+
artifactId = 'hoptimator-demodb'
35+
version = System.getenv('VERSION')
36+
from components.java
37+
pom {
38+
name = 'hoptimator-api'
39+
description = 'In-memory database driver for testing'
40+
url = 'https://github.com/linkedin/Hoptimator'
41+
licenses {
42+
license {
43+
name = 'BSD 2-Clause'
44+
url = 'https://raw.githubusercontent.com/linkedin/Hoptimator/main/LICENSE'
45+
}
46+
}
47+
scm {
48+
connection = 'scm:git:git://github.com:linkedin/Hoptimator.git'
49+
developerConnection = 'scm:git:ssh://github.com:linkedin/Hoptimator.git'
50+
url = 'https://github.com/linkedin/Hoptimator'
51+
}
52+
}
53+
}
54+
}
55+
}

hoptimator-jdbc/build.gradle

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ java {
5454
targetCompatibility = JavaVersion.VERSION_11
5555
}
5656

57+
// Work-around for gradle test fixtures bug, which spontaneously started publishing
58+
// junit-bom to maven, for some reason.
59+
components.java.withVariantsFromConfiguration(configurations.testFixturesApiElements) {
60+
skip()
61+
}
62+
63+
components.java.withVariantsFromConfiguration(configurations.testFixturesRuntimeElements) {
64+
skip()
65+
}
66+
5767
publishing {
5868
repositories {
5969
maven {
@@ -97,4 +107,4 @@ publishing {
97107
}
98108
}
99109
}
100-
}
110+
}

hoptimator-jdbc/src/main/java/com/linkedin/hoptimator/jdbc/BuiltinCatalogProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collection;
44
import java.util.Collections;
5+
import java.util.Properties;
56

67
import com.linkedin.hoptimator.Catalog;
78
import com.linkedin.hoptimator.CatalogProvider;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.linkedin.hoptimator.jdbc;
2+
3+
import java.sql.Connection;
4+
import java.sql.Statement;
5+
import java.sql.SQLException;
6+
import java.util.Properties;
7+
8+
import org.apache.calcite.jdbc.CalciteConnection;
9+
import org.apache.calcite.jdbc.CalcitePrepare;
10+
11+
import com.linkedin.hoptimator.util.DelegatingConnection;
12+
13+
14+
public class HoptimatorConnection extends DelegatingConnection {
15+
16+
private final CalciteConnection connection;
17+
private final Properties connectionProperties;
18+
19+
public HoptimatorConnection(CalciteConnection connection, Properties connectionProperties) {
20+
super(connection);
21+
this.connection = connection;
22+
this.connectionProperties = connectionProperties;
23+
}
24+
25+
@Override
26+
public Statement createStatement() throws SQLException {
27+
return connection.createStatement();
28+
}
29+
30+
public Properties connectionProperties() {
31+
return connectionProperties;
32+
}
33+
34+
public CalcitePrepare.Context createPrepareContext() {
35+
return connection.createPrepareContext();
36+
}
37+
38+
public CalciteConnection calciteConnection() {
39+
return connection;
40+
}
41+
}

0 commit comments

Comments
 (0)