diff --git a/plugin/trino-raptor-legacy/pom.xml b/plugin/trino-raptor-legacy/pom.xml
index 5a34128e1799..655b77ad07ee 100644
--- a/plugin/trino-raptor-legacy/pom.xml
+++ b/plugin/trino-raptor-legacy/pom.xml
@@ -63,16 +63,6 @@
configuration
-
- io.airlift
- dbpool
-
-
-
- io.airlift
- discovery
-
-
io.airlift
http-client
diff --git a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java
index 49f6c1d18f7d..ebb8d74ecb93 100644
--- a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java
+++ b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/DatabaseMetadataModule.java
@@ -13,37 +13,20 @@
*/
package io.trino.plugin.raptor.legacy.metadata;
-import com.google.common.reflect.TypeParameter;
-import com.google.common.reflect.TypeToken;
import com.google.inject.Binder;
-import com.google.inject.Injector;
-import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.Provides;
-import com.google.inject.Scopes;
-import com.google.inject.TypeLiteral;
import io.airlift.configuration.AbstractConfigurationAwareModule;
-import io.airlift.dbpool.H2EmbeddedDataSourceModule;
-import io.airlift.dbpool.MySqlDataSource;
-import io.airlift.dbpool.MySqlDataSourceConfig;
-import io.airlift.discovery.client.ServiceDescriptor;
-import io.airlift.discovery.client.testing.StaticServiceSelector;
import io.trino.plugin.raptor.legacy.util.DaoSupplier;
import org.jdbi.v3.core.ConnectionFactory;
import org.jdbi.v3.core.Jdbi;
-import javax.inject.Inject;
-import javax.inject.Provider;
import javax.inject.Singleton;
-import javax.sql.DataSource;
-import java.lang.reflect.Type;
+import java.sql.DriverManager;
-import static com.google.common.base.Preconditions.checkState;
import static io.airlift.configuration.ConditionalModule.conditionalModule;
import static io.airlift.configuration.ConfigBinder.configBinder;
-import static io.airlift.discovery.client.ServiceDescriptor.serviceDescriptor;
-import static java.util.Objects.requireNonNull;
public class DatabaseMetadataModule
extends AbstractConfigurationAwareModule
@@ -54,93 +37,63 @@ protected void setup(Binder ignored)
install(conditionalModule(
DatabaseConfig.class,
config -> "mysql".equals(config.getDatabaseType()),
- binder -> {
- binder.install(new MySqlDataSourceModule());
- bindDaoSupplier(binder, ShardDao.class, MySqlShardDao.class);
- }));
+ new MySqlModule()));
install(conditionalModule(
DatabaseConfig.class,
config -> "h2".equals(config.getDatabaseType()),
- binder -> {
- binder.install(new H2EmbeddedDataSourceModule("metadata", ForMetadata.class));
- bindDaoSupplier(binder, ShardDao.class, H2ShardDao.class);
- }));
+ new H2Module()));
}
- @ForMetadata
- @Singleton
- @Provides
- public ConnectionFactory createConnectionFactory(@ForMetadata DataSource dataSource)
- {
- return dataSource::getConnection;
- }
-
- public static void bindDaoSupplier(Binder binder, Class baseType, Class type)
- {
- binder.bind(daoSupplierTypeToken(baseType))
- .toProvider(new DaoSupplierProvider<>(type))
- .in(Scopes.SINGLETON);
- }
-
- @SuppressWarnings("unchecked")
- private static TypeLiteral> daoSupplierTypeToken(Class type)
- {
- Type javaType = new TypeToken>() {}
- .where(new TypeParameter<>() {}, TypeToken.of(type))
- .getType();
- return (TypeLiteral>) TypeLiteral.get(javaType);
- }
-
- private static class DaoSupplierProvider
- implements Provider>
+ private static class MySqlModule
+ implements Module
{
- private final Class type;
- private Injector injector;
-
- public DaoSupplierProvider(Class type)
+ @Override
+ public void configure(Binder binder)
{
- this.type = requireNonNull(type, "type is null");
+ configBinder(binder).bindConfig(JdbcDatabaseConfig.class);
}
- @Inject
- public void setInjector(Injector injector)
+ @Provides
+ @Singleton
+ @ForMetadata
+ public static ConnectionFactory createConnectionFactory(JdbcDatabaseConfig config)
{
- this.injector = injector;
+ String url = config.getUrl();
+ return () -> DriverManager.getConnection(url);
}
- @Override
- public DaoSupplier get()
+ @Provides
+ @Singleton
+ public static DaoSupplier createShardDaoSupplier(@ForMetadata Jdbi dbi)
{
- checkState(injector != null, "injector was not set");
- Jdbi dbi = injector.getInstance(Key.get(Jdbi.class, ForMetadata.class));
- return new DaoSupplier<>(dbi, type);
+ return new DaoSupplier<>(dbi, MySqlShardDao.class);
}
}
- private static class MySqlDataSourceModule
+ private static class H2Module
implements Module
{
@Override
public void configure(Binder binder)
{
- configBinder(binder).bindConfig(JdbcDatabaseConfig.class);
- configBinder(binder).bindConfig(MySqlDataSourceConfig.class, ForMetadata.class, "metadata");
- configBinder(binder).bindConfigDefaults(MySqlDataSourceConfig.class, ForMetadata.class, config -> {
- config.setMaxConnections(100);
- config.setDefaultFetchSize(1000);
- });
+ configBinder(binder).bindConfig(H2DatabaseConfig.class);
}
- @ForMetadata
+ @Provides
@Singleton
+ @ForMetadata
+ public static ConnectionFactory createConnectionFactory(H2DatabaseConfig config)
+ {
+ String url = "jdbc:h2:" + config.getFilename();
+ return () -> DriverManager.getConnection(url);
+ }
+
@Provides
- DataSource createDataSource(JdbcDatabaseConfig config, @ForMetadata MySqlDataSourceConfig mysqlConfig)
+ @Singleton
+ public static DaoSupplier createShardDaoSupplier(@ForMetadata Jdbi dbi)
{
- ServiceDescriptor descriptor = serviceDescriptor("mysql")
- .addProperty("jdbc", config.getUrl())
- .build();
- return new MySqlDataSource(new StaticServiceSelector(descriptor), mysqlConfig);
+ return new DaoSupplier<>(dbi, H2ShardDao.class);
}
}
}
diff --git a/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java
new file mode 100644
index 000000000000..a99fc3b88505
--- /dev/null
+++ b/plugin/trino-raptor-legacy/src/main/java/io/trino/plugin/raptor/legacy/metadata/H2DatabaseConfig.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.trino.plugin.raptor.legacy.metadata;
+
+import io.airlift.configuration.Config;
+
+import javax.validation.constraints.NotNull;
+
+public class H2DatabaseConfig
+{
+ private String filename;
+
+ @NotNull
+ public String getFilename()
+ {
+ return filename;
+ }
+
+ @Config("metadata.db.filename")
+ public H2DatabaseConfig setFilename(String filename)
+ {
+ this.filename = filename;
+ return this;
+ }
+}
diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java
deleted file mode 100644
index 4d61164179b6..000000000000
--- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorBenchmarkQueryRunner.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.trino.plugin.raptor.legacy;
-
-import com.google.common.collect.ImmutableMap;
-import io.trino.Session;
-import io.trino.benchmark.BenchmarkSuite;
-import io.trino.plugin.tpch.TpchConnectorFactory;
-import io.trino.spi.connector.ConnectorFactory;
-import io.trino.testing.LocalQueryRunner;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-
-import static com.google.common.collect.Iterables.getOnlyElement;
-import static io.trino.testing.TestingSession.testSessionBuilder;
-import static java.util.Objects.requireNonNull;
-
-public final class RaptorBenchmarkQueryRunner
-{
- private static final String TPCH_CACHE_DIR = System.getProperty("tpchCacheDir", "/tmp/presto_tpch/data_cache");
-
- private RaptorBenchmarkQueryRunner()
- {
- }
-
- public static void main(String[] args)
- throws IOException
- {
- String outputDirectory = requireNonNull(System.getProperty("outputDirectory"), "Must specify -DoutputDirectory=...");
- try (LocalQueryRunner localQueryRunner = createLocalQueryRunner()) {
- new BenchmarkSuite(localQueryRunner, outputDirectory).runAllBenchmarks();
- }
- }
-
- public static LocalQueryRunner createLocalQueryRunner()
- {
- Session session = testSessionBuilder()
- .setCatalog("raptor")
- .setSchema("benchmark")
- .build();
- LocalQueryRunner localQueryRunner = LocalQueryRunner.create(session);
-
- // add tpch
- localQueryRunner.createCatalog("tpch", new TpchConnectorFactory(1), ImmutableMap.of());
-
- // add raptor
- ConnectorFactory raptorConnectorFactory = getOnlyElement(new RaptorPlugin()
- .getConnectorFactories());
- Map config = createRaptorConfig(TPCH_CACHE_DIR);
- localQueryRunner.createCatalog("raptor", raptorConnectorFactory, config);
-
- if (!localQueryRunner.tableExists(session, "orders")) {
- localQueryRunner.execute("CREATE TABLE orders AS SELECT * FROM tpch.sf1.orders");
- }
- if (!localQueryRunner.tableExists(session, "lineitem")) {
- localQueryRunner.execute("CREATE TABLE lineitem AS SELECT * FROM tpch.sf1.lineitem");
- }
- return localQueryRunner;
- }
-
- private static Map createRaptorConfig(String cacheDir)
- {
- File dataDir = new File(cacheDir);
- File databaseDir = new File(dataDir, "db");
-
- return ImmutableMap.builder()
- .put("metadata.db.type", "h2")
- .put("metadata.db.filename", databaseDir.getAbsolutePath())
- .put("storage.data-directory", dataDir.getAbsolutePath())
- .put("storage.compress", "false")
- .buildOrThrow();
- }
-}
diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java
index ffbcb406850d..a972a8437d1c 100644
--- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java
+++ b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/RaptorQueryRunner.java
@@ -63,7 +63,6 @@ public static DistributedQueryRunner createRaptorQueryRunner(
Map raptorProperties = ImmutableMap.builder()
.putAll(extraRaptorProperties)
.put("metadata.db.type", "h2")
- .put("metadata.db.connections.max", "100")
.put("metadata.db.filename", new File(baseDir, "db").getAbsolutePath())
.put("storage.data-directory", new File(baseDir, "data").getAbsolutePath())
.put("storage.max-shard-rows", "2000")
diff --git a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java
similarity index 79%
rename from plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java
rename to plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java
index b2d422cf7d1f..4ba21cdfa209 100644
--- a/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestJdbcDatabaseConfig.java
+++ b/plugin/trino-raptor-legacy/src/test/java/io/trino/plugin/raptor/legacy/metadata/TestH2DatabaseConfig.java
@@ -22,24 +22,24 @@
import static io.airlift.configuration.testing.ConfigAssertions.assertRecordedDefaults;
import static io.airlift.configuration.testing.ConfigAssertions.recordDefaults;
-public class TestJdbcDatabaseConfig
+public class TestH2DatabaseConfig
{
@Test
public void testDefaults()
{
- assertRecordedDefaults(recordDefaults(JdbcDatabaseConfig.class)
- .setUrl(null));
+ assertRecordedDefaults(recordDefaults(H2DatabaseConfig.class)
+ .setFilename(null));
}
@Test
public void testExplicitPropertyMappings()
{
Map properties = ImmutableMap.builder()
- .put("metadata.db.url", "jdbc:test://example.net/test")
+ .put("metadata.db.filename", "/tmp/db")
.buildOrThrow();
- JdbcDatabaseConfig expected = new JdbcDatabaseConfig()
- .setUrl("jdbc:test://example.net/test");
+ H2DatabaseConfig expected = new H2DatabaseConfig()
+ .setFilename("/tmp/db");
assertFullMapping(properties, expected);
}