Skip to content

Commit 38bf58c

Browse files
committed
Add a method to get the test oracle factories from the DBMS-specific options
1 parent db6cab5 commit 38bf58c

15 files changed

Lines changed: 119 additions & 18 deletions
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package sqlancer;
22

3-
public interface DBMSSpecificOptions {
3+
import java.util.List;
4+
5+
public interface DBMSSpecificOptions<F extends OracleFactory<? extends GlobalState<?, ?>>> {
6+
7+
List<F> getTestOracleFactory();
48

59
}

src/sqlancer/DatabaseProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.sql.Connection;
55
import java.sql.SQLException;
66

7-
public interface DatabaseProvider<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions> {
7+
public interface DatabaseProvider<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions<?>> {
88

99
/**
1010
* Gets the the {@link GlobalState} class.

src/sqlancer/GlobalState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* @param <O>
1313
* the option parameter.
1414
*/
15-
public abstract class GlobalState<O extends DBMSSpecificOptions, S> {
15+
public abstract class GlobalState<O extends DBMSSpecificOptions<?>, S> {
1616

1717
private Connection con;
1818
private Randomly r;

src/sqlancer/Main.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ public static void main(String[] args) {
288288
System.exit(executeMain(args));
289289
}
290290

291-
public static class DBMSExecutor<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions> {
291+
public static class DBMSExecutor<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions<?>> {
292292

293293
private final DatabaseProvider<G, O> provider;
294294
private final MainOptions options;
@@ -363,7 +363,7 @@ public StateToReproduce getStateToReproduce() {
363363
}
364364
}
365365

366-
public static class DBMSExecutorFactory<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions> {
366+
public static class DBMSExecutorFactory<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions<?>> {
367367

368368
private final DatabaseProvider<G, O> provider;
369369
private final MainOptions options;

src/sqlancer/ProviderAdapter.java

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

66
import sqlancer.StateToReproduce.OracleRunReproductionState;
77

8-
public abstract class ProviderAdapter<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions>
8+
public abstract class ProviderAdapter<G extends GlobalState<O, ?>, O extends DBMSSpecificOptions<?>>
99
implements DatabaseProvider<G, O> {
1010

1111
private final Class<G> globalClass;

src/sqlancer/clickhouse/ClickHouseOptions.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import sqlancer.DBMSSpecificOptions;
1111
import sqlancer.OracleFactory;
1212
import sqlancer.TestOracle;
13+
import sqlancer.clickhouse.ClickHouseOptions.ClickHouseOracleFactory;
1314
import sqlancer.clickhouse.ClickHouseProvider.ClickHouseGlobalState;
1415
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPAggregateOracle;
1516
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPDistinctOracle;
@@ -18,7 +19,7 @@
1819
import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPWhereOracle;
1920

2021
@Parameters(separators = "=", commandDescription = "ClickHouse")
21-
public class ClickHouseOptions implements DBMSSpecificOptions {
22+
public class ClickHouseOptions implements DBMSSpecificOptions<ClickHouseOracleFactory> {
2223

2324
@Parameter(names = "--oracle")
2425
public List<ClickHouseOracleFactory> oracle = Arrays.asList(ClickHouseOracleFactory.TLPWhere);
@@ -59,4 +60,9 @@ public TestOracle create(ClickHouseProvider.ClickHouseGlobalState globalState) t
5960
};
6061

6162
}
63+
64+
@Override
65+
public List<ClickHouseOracleFactory> getTestOracleFactory() {
66+
return oracle;
67+
}
6268
}

src/sqlancer/cockroachdb/CockroachDBOptions.java

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

33
import java.sql.SQLException;
44
import java.util.ArrayList;
5+
import java.util.Arrays;
56
import java.util.List;
67

78
import com.beust.jcommander.Parameter;
@@ -11,6 +12,7 @@
1112
import sqlancer.DBMSSpecificOptions;
1213
import sqlancer.OracleFactory;
1314
import sqlancer.TestOracle;
15+
import sqlancer.cockroachdb.CockroachDBOptions.CockroachDBOracleFactory;
1416
import sqlancer.cockroachdb.CockroachDBProvider.CockroachDBGlobalState;
1517
import sqlancer.cockroachdb.oracle.CockroachDBNoRECOracle;
1618
import sqlancer.cockroachdb.oracle.tlp.CockroachDBTLPAggregateOracle;
@@ -22,7 +24,7 @@
2224
import sqlancer.cockroachdb.oracle.tlp.CockroachDBTLPWhereOracle;
2325

2426
@Parameters(separators = "=", commandDescription = "Test CockroachDB")
25-
public class CockroachDBOptions implements DBMSSpecificOptions {
27+
public class CockroachDBOptions implements DBMSSpecificOptions<CockroachDBOracleFactory> {
2628

2729
@Parameter(names = "--oracle")
2830
public CockroachDBOracleFactory oracle = CockroachDBOracleFactory.NOREC;
@@ -105,4 +107,9 @@ public TestOracle create(CockroachDBGlobalState globalState) throws SQLException
105107
"--increased-vectorization" }, description = "Generate VECTORIZE=on with a higher probability (which found a number of bugs in the past)")
106108
public boolean makeVectorizationMoreLikely = true;
107109

110+
@Override
111+
public List<CockroachDBOracleFactory> getTestOracleFactory() {
112+
return Arrays.asList(oracle);
113+
}
114+
108115
}

src/sqlancer/duckdb/DuckDBOptions.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import sqlancer.DBMSSpecificOptions;
1313
import sqlancer.OracleFactory;
1414
import sqlancer.TestOracle;
15+
import sqlancer.duckdb.DuckDBOptions.DuckDBOracleFactory;
1516
import sqlancer.duckdb.DuckDBProvider.DuckDBGlobalState;
1617
import sqlancer.duckdb.test.DuckDBNoRECOracle;
1718
import sqlancer.duckdb.test.DuckDBQueryPartitioningAggregateTester;
@@ -21,7 +22,7 @@
2122
import sqlancer.duckdb.test.DuckDBQueryPartitioningWhereTester;
2223

2324
@Parameters
24-
public class DuckDBOptions implements DBMSSpecificOptions {
25+
public class DuckDBOptions implements DBMSSpecificOptions<DuckDBOracleFactory> {
2526

2627
@Parameter(names = "--test-collate", arity = 1)
2728
public boolean testCollate = true;
@@ -90,7 +91,7 @@ public class DuckDBOptions implements DBMSSpecificOptions {
9091
public int maxNumUpdates = 5;
9192

9293
@Parameter(names = "--oracle")
93-
public List<DuckDBOracleFactory> oracle = Arrays.asList(DuckDBOracleFactory.QUERY_PARTITIONING);
94+
public List<DuckDBOracleFactory> oracles = Arrays.asList(DuckDBOracleFactory.QUERY_PARTITIONING);
9495

9596
public enum DuckDBOracleFactory implements OracleFactory<DuckDBGlobalState> {
9697
NOREC {
@@ -148,4 +149,9 @@ public TestOracle create(DuckDBGlobalState globalState) throws SQLException {
148149

149150
}
150151

152+
@Override
153+
public List<DuckDBOracleFactory> getTestOracleFactory() {
154+
return oracles;
155+
}
156+
151157
}

src/sqlancer/duckdb/DuckDBProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void generateDatabase(DuckDBGlobalState globalState) throws SQLException
120120

121121
@Override
122122
protected TestOracle getTestOracle(DuckDBGlobalState globalState) throws SQLException {
123-
return new CompositeTestOracle(globalState.getDmbsSpecificOptions().oracle.stream().map(o -> {
123+
return new CompositeTestOracle(globalState.getDmbsSpecificOptions().oracles.stream().map(o -> {
124124
try {
125125
return o.create(globalState);
126126
} catch (SQLException e1) {
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,40 @@
11
package sqlancer.mariadb;
22

3+
import java.sql.SQLException;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
import com.beust.jcommander.Parameter;
38
import com.beust.jcommander.Parameters;
49

510
import sqlancer.DBMSSpecificOptions;
11+
import sqlancer.OracleFactory;
12+
import sqlancer.TestOracle;
13+
import sqlancer.mariadb.MariaDBOptions.MariaDBOracleFactory;
14+
import sqlancer.mariadb.MariaDBProvider.MariaDBGlobalState;
15+
import sqlancer.mariadb.oracle.MariaDBNoRECOracle;
616

717
@Parameters
8-
public class MariaDBOptions implements DBMSSpecificOptions {
18+
public class MariaDBOptions implements DBMSSpecificOptions<MariaDBOracleFactory> {
19+
20+
@Parameter(names = "--oracle")
21+
public List<MariaDBOracleFactory> oracles = Arrays.asList(MariaDBOracleFactory.NOREC);
22+
23+
public enum MariaDBOracleFactory implements OracleFactory<MariaDBGlobalState> {
24+
25+
NOREC {
26+
27+
@Override
28+
public TestOracle create(MariaDBGlobalState globalState) throws SQLException {
29+
return new MariaDBNoRECOracle(globalState);
30+
}
31+
32+
}
33+
}
34+
35+
@Override
36+
public List<MariaDBOracleFactory> getTestOracleFactory() {
37+
return oracles;
38+
}
939

1040
}

0 commit comments

Comments
 (0)