Skip to content

Commit 0ee67f2

Browse files
committed
Add a new method to generate the global state
1 parent 293a9b5 commit 0ee67f2

8 files changed

Lines changed: 54 additions & 8 deletions

File tree

src/sqlancer/DatabaseProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111
import sqlancer.Main.QueryManager;
1212
import sqlancer.Main.StateLogger;
1313

14-
public interface DatabaseProvider {
14+
public interface DatabaseProvider<G> {
1515

1616
void generateAndTestDatabase(final String databaseName, Connection con, StateLogger logger, StateToReproduce state,
1717
QueryManager manager, MainOptions options) throws SQLException;
18+
19+
G generateGlobalState();
1820

1921
Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException;
2022

src/sqlancer/cockroachdb/CockroachDBProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import sqlancer.StateToReproduce;
2828
import sqlancer.StateToReproduce.CockroachDBStateToReproduce;
2929
import sqlancer.TestOracle;
30+
import sqlancer.cockroachdb.CockroachDBProvider.CockroachDBGlobalState;
3031
import sqlancer.cockroachdb.gen.CockroachDBCreateStatisticsGenerator;
3132
import sqlancer.cockroachdb.gen.CockroachDBDeleteGenerator;
3233
import sqlancer.cockroachdb.gen.CockroachDBIndexGenerator;
@@ -41,7 +42,7 @@
4142
import sqlancer.cockroachdb.gen.CockroachDBViewGenerator;
4243
import sqlancer.cockroachdb.gen.RockroachDBCommentOnGenerator;
4344

44-
public class CockroachDBProvider implements DatabaseProvider {
45+
public class CockroachDBProvider implements DatabaseProvider<CockroachDBGlobalState> {
4546

4647
@FunctionalInterface
4748
public interface CockroachDBQueryProvider {
@@ -307,4 +308,9 @@ public void printDatabaseSpecificState(FileWriter writer, StateToReproduce state
307308
public StateToReproduce getStateToReproduce(String databaseName) {
308309
return new CockroachDBStateToReproduce(databaseName);
309310
}
311+
312+
@Override
313+
public CockroachDBGlobalState generateGlobalState() {
314+
return new CockroachDBGlobalState();
315+
}
310316
}

src/sqlancer/mariadb/MariaDBProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.List;
1010

1111
import sqlancer.DatabaseProvider;
12+
import sqlancer.GlobalState;
1213
import sqlancer.IgnoreMeException;
1314
import sqlancer.Main.QueryManager;
1415
import sqlancer.Main.StateLogger;
@@ -27,7 +28,7 @@
2728
import sqlancer.mariadb.gen.MariaDBUpdateGenerator;
2829
import sqlancer.sqlite3.gen.SQLite3Common;
2930

30-
public class MariaDBProvider implements DatabaseProvider {
31+
public class MariaDBProvider implements DatabaseProvider<GlobalState> {
3132

3233
public static final int MAX_EXPRESSION_DEPTH = 3;
3334
private final Randomly r = new Randomly();
@@ -288,4 +289,9 @@ public StateToReproduce getStateToReproduce(String databaseName) {
288289
return new MariaDBStateToReproduce(databaseName);
289290
}
290291

292+
@Override
293+
public GlobalState generateGlobalState() {
294+
return new GlobalState();
295+
}
296+
291297
}

src/sqlancer/mysql/MySQLProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.stream.Collectors;
1313

1414
import sqlancer.DatabaseProvider;
15+
import sqlancer.GlobalState;
1516
import sqlancer.IgnoreMeException;
1617
import sqlancer.Main.QueryManager;
1718
import sqlancer.Main.StateLogger;
@@ -40,7 +41,7 @@
4041
import sqlancer.sqlite3.gen.SQLite3Common;
4142
import sqlancer.sqlite3.queries.SQLite3PivotedQuerySynthesizer;
4243

43-
public class MySQLProvider implements DatabaseProvider {
44+
public class MySQLProvider implements DatabaseProvider<GlobalState> {
4445

4546
private final Randomly r = new Randomly();
4647
private QueryManager manager;
@@ -357,4 +358,9 @@ public StateToReproduce getStateToReproduce(String databaseName) {
357358
return new MySQLStateToReproduce(databaseName);
358359
}
359360

361+
@Override
362+
public GlobalState generateGlobalState() {
363+
return new GlobalState();
364+
}
365+
360366
}

src/sqlancer/postgres/PostgresProvider.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151
// EXISTS
5252
// IN
53-
public class PostgresProvider implements DatabaseProvider {
53+
public class PostgresProvider implements DatabaseProvider<PostgresGlobalState> {
5454

5555
public static boolean GENERATE_ONLY_KNOWN = false;
5656

@@ -389,4 +389,11 @@ public StateToReproduce getStateToReproduce(String databaseName) {
389389
return new PostgresStateToReproduce(databaseName);
390390
}
391391

392+
393+
394+
@Override
395+
public PostgresGlobalState generateGlobalState() {
396+
return new PostgresGlobalState();
397+
}
398+
392399
}

src/sqlancer/sqlite3/SQLite3Provider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import sqlancer.StateToReproduce;
2727
import sqlancer.StateToReproduce.SQLite3StateToReproduce;
2828
import sqlancer.TestOracle;
29+
import sqlancer.sqlite3.SQLite3Provider.SQLite3GlobalState;
2930
import sqlancer.sqlite3.gen.SQLite3AnalyzeGenerator;
3031
import sqlancer.sqlite3.gen.SQLite3Common;
3132
import sqlancer.sqlite3.gen.SQLite3CreateVirtualRtreeTabelGenerator;
@@ -51,7 +52,7 @@
5152
import sqlancer.sqlite3.schema.SQLite3Schema.Table;
5253
import sqlancer.sqlite3.schema.SQLite3Schema.Table.TableKind;
5354

54-
public class SQLite3Provider implements DatabaseProvider {
55+
public class SQLite3Provider implements DatabaseProvider<SQLite3GlobalState> {
5556

5657
@FunctionalInterface
5758
public interface SQLQueryProvider {
@@ -487,4 +488,9 @@ public StateToReproduce getStateToReproduce(String databaseName) {
487488
return new SQLite3StateToReproduce(databaseName);
488489
}
489490

491+
@Override
492+
public SQLite3GlobalState generateGlobalState() {
493+
return new SQLite3GlobalState();
494+
}
495+
490496
}

src/sqlancer/tdengine/TDEngineProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.stream.Collectors;
1313

1414
import sqlancer.DatabaseProvider;
15+
import sqlancer.GlobalState;
1516
import sqlancer.IgnoreMeException;
1617
import sqlancer.Main.QueryManager;
1718
import sqlancer.Main.StateLogger;
@@ -30,7 +31,7 @@
3031
import sqlancer.tdengine.gen.TDEngineRowGenerator;
3132
import sqlancer.tdengine.gen.TDEngineTableGenerator;
3233

33-
public class TDEngineProvider implements DatabaseProvider {
34+
public class TDEngineProvider implements DatabaseProvider<GlobalState> {
3435

3536
public static enum Action {
3637

@@ -314,4 +315,9 @@ public StateToReproduce getStateToReproduce(String databaseName) {
314315
return new TDEngineStateToReproduce(databaseName);
315316
}
316317

318+
@Override
319+
public GlobalState generateGlobalState() {
320+
return new GlobalState();
321+
}
322+
317323
}

src/sqlancer/tidb/TiDBProvider.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
import sqlancer.StateToReproduce.MySQLStateToReproduce;
2222
import sqlancer.StatementExecutor;
2323
import sqlancer.mysql.MySQLSchema;
24+
import sqlancer.tidb.TiDBProvider.TiDBGlobalState;
2425

25-
public class TiDBProvider implements DatabaseProvider {
26+
public class TiDBProvider implements DatabaseProvider<TiDBGlobalState> {
2627

2728
@FunctionalInterface
2829
public interface TiDBQueryProvider {
@@ -72,6 +73,11 @@ private static int mapActions(TiDBGlobalState globalState, Action a) {
7273
}
7374

7475
}
76+
77+
@Override
78+
public TiDBGlobalState generateGlobalState() {
79+
return new TiDBGlobalState();
80+
}
7581

7682
@Override
7783
public void generateAndTestDatabase(String databaseName, Connection con, StateLogger logger, StateToReproduce state,
@@ -160,4 +166,5 @@ public void printDatabaseSpecificState(FileWriter writer, StateToReproduce state
160166
public StateToReproduce getStateToReproduce(String databaseName) {
161167
return new MySQLStateToReproduce(databaseName);
162168
}
169+
163170
}

0 commit comments

Comments
 (0)