|
12 | 12 | import java.util.HashMap; |
13 | 13 | import java.util.List; |
14 | 14 | import java.util.Map; |
| 15 | +import java.util.ServiceLoader; |
15 | 16 | import java.util.concurrent.ExecutorService; |
16 | 17 | import java.util.concurrent.Executors; |
17 | 18 | import java.util.concurrent.ScheduledExecutorService; |
|
21 | 22 | import com.beust.jcommander.JCommander; |
22 | 23 | import com.beust.jcommander.JCommander.Builder; |
23 | 24 |
|
24 | | -import sqlancer.arangodb.ArangoDBProvider; |
25 | | -import sqlancer.citus.CitusProvider; |
26 | | -import sqlancer.clickhouse.ClickHouseProvider; |
27 | | -import sqlancer.cockroachdb.CockroachDBProvider; |
28 | 25 | import sqlancer.common.log.Loggable; |
29 | 26 | import sqlancer.common.query.Query; |
30 | 27 | import sqlancer.common.query.SQLancerResultSet; |
31 | | -import sqlancer.cosmos.CosmosProvider; |
32 | | -import sqlancer.duckdb.DuckDBProvider; |
33 | | -import sqlancer.h2.H2Provider; |
34 | | -import sqlancer.mariadb.MariaDBProvider; |
35 | | -import sqlancer.mongodb.MongoDBProvider; |
36 | | -import sqlancer.mysql.MySQLProvider; |
37 | | -import sqlancer.oceanbase.OceanBaseProvider; |
38 | | -import sqlancer.postgres.PostgresProvider; |
39 | | -import sqlancer.sqlite3.SQLite3Provider; |
40 | | -import sqlancer.tidb.TiDBProvider; |
41 | 28 |
|
42 | 29 | public final class Main { |
43 | 30 |
|
@@ -543,22 +530,21 @@ private boolean run(MainOptions options, ExecutorService execService, |
543 | 530 | return threadsShutdown == 0 ? 0 : options.getErrorExitCode(); |
544 | 531 | } |
545 | 532 |
|
| 533 | + /** |
| 534 | + * To register a new provider, it is necessary to implement the DatabaseProvider interface and add an additional |
| 535 | + * configuration file, see https://docs.oracle.com/javase/9/docs/api/java/util/ServiceLoader.html. Currently, we use |
| 536 | + * an @AutoService annotation to create the configuration file automatically. This allows SQLancer to pick up |
| 537 | + * providers in other JARs on the classpath. |
| 538 | + * |
| 539 | + * @return The list of service providers on the classpath |
| 540 | + */ |
546 | 541 | static List<DatabaseProvider<?, ?, ?>> getDBMSProviders() { |
547 | 542 | List<DatabaseProvider<?, ?, ?>> providers = new ArrayList<>(); |
548 | | - providers.add(new SQLite3Provider()); |
549 | | - providers.add(new CockroachDBProvider()); |
550 | | - providers.add(new MySQLProvider()); |
551 | | - providers.add(new MariaDBProvider()); |
552 | | - providers.add(new TiDBProvider()); |
553 | | - providers.add(new PostgresProvider()); |
554 | | - providers.add(new CitusProvider()); |
555 | | - providers.add(new ClickHouseProvider()); |
556 | | - providers.add(new DuckDBProvider()); |
557 | | - providers.add(new H2Provider()); |
558 | | - providers.add(new MongoDBProvider()); |
559 | | - providers.add(new CosmosProvider()); |
560 | | - providers.add(new ArangoDBProvider()); |
561 | | - providers.add(new OceanBaseProvider()); |
| 543 | + @SuppressWarnings("rawtypes") |
| 544 | + ServiceLoader<DatabaseProvider> loader = ServiceLoader.load(DatabaseProvider.class); |
| 545 | + for (DatabaseProvider<?, ?, ?> provider : loader) { |
| 546 | + providers.add(provider); |
| 547 | + } |
562 | 548 | return providers; |
563 | 549 | } |
564 | 550 |
|
|
0 commit comments