Skip to content

Commit 23ba092

Browse files
committed
Make the user name and password an option
1 parent 2f6c566 commit 23ba092

File tree

13 files changed

+117
-114
lines changed

13 files changed

+117
-114
lines changed

src/sqlancer/DatabaseFacade.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/sqlancer/DatabaseProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public interface DatabaseProvider<G extends GlobalState<O>, O> {
1515

1616
G generateGlobalState();
1717

18-
Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException;
18+
// TODO: should be type G
19+
Connection createDatabase(GlobalState<?> globalState) throws SQLException;
1920

2021

2122
/**

src/sqlancer/Main.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -377,19 +377,19 @@ private void runThread(final String databaseName) {
377377
} catch (Exception e) {
378378
throw new AssertionError(e);
379379
}
380+
GlobalState<?> state = (GlobalState<?>) provider.generateGlobalState();
380381
stateToRepro = provider.getStateToReproduce(databaseName);
382+
state.setState(stateToRepro);
381383
logger = new StateLogger(databaseName, provider, options);
382-
try (Connection con = provider.createDatabase(databaseName, stateToRepro)) {
384+
Randomly r = new Randomly();
385+
state.setRandomly(r);
386+
state.setDatabaseName(databaseName);
387+
state.setMainOptions(options);
388+
try (Connection con = provider.createDatabase(state)) {
383389
QueryManager manager = new QueryManager(con, stateToRepro);
384390
java.sql.DatabaseMetaData meta = con.getMetaData();
385391
stateToRepro.databaseVersion = meta.getDatabaseProductVersion();
386-
GlobalState<?> state = (GlobalState<?>) provider.generateGlobalState();
387-
state.setState(stateToRepro);
388-
Randomly r = new Randomly();
389-
state.setDatabaseName(databaseName);
390392
state.setConnection(con);
391-
state.setRandomly(r);
392-
state.setMainOptions(options);
393393
Object dmbsSpecificOptions = nameToOptions.get(jc.getParsedCommand());
394394
state.setDmbsSpecificOptions(dmbsSpecificOptions);
395395
state.setStateLogger(logger);

src/sqlancer/MainOptions.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ public class MainOptions {
3131

3232
@Parameter(names = "--log-each-select", description = "Logs every statement issued", arity = 1)
3333
private boolean logEachSelect = true;
34-
34+
35+
@Parameter(names="--username", description = "The user name used to log into the DBMS")
36+
private String userName = "sqlancer";
37+
38+
@Parameter(names="--password", description = "The password used to log into the DBMS")
39+
private String password = "sqlancer";
40+
3541
public int getMaxExpressionDepth() {
3642
return maxExpressionDepth;
3743
}
@@ -67,6 +73,14 @@ public int getNrStatementRetryCount() {
6773
public static enum DBMS {
6874
MariaDB, SQLite3, MySQL, PostgreSQL, TDEngine, CockroachDB, TiDB
6975
}
76+
77+
public String getUserName() {
78+
return userName;
79+
}
80+
81+
public String getPassword() {
82+
return password;
83+
}
7084

7185
public class DBMSConverter implements IStringConverter<DBMS> {
7286
@Override

src/sqlancer/clickhouse/ClickhouseProvider.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ public ClickhouseSchema getSchema() {
6868
public void generateAndTestDatabase(ClickhouseGlobalState globalState) throws SQLException {
6969
StateLogger logger = globalState.getLogger();
7070
QueryManager manager = globalState.getManager();
71-
globalState.setSchema(
72-
ClickhouseSchema.fromConnection(globalState.getConnection(), globalState.getDatabaseName()));
71+
globalState
72+
.setSchema(ClickhouseSchema.fromConnection(globalState.getConnection(), globalState.getDatabaseName()));
7373
for (int i = 0; i < Randomly.fromOptions(1); i++) {
7474
boolean success = false;
7575
do {
@@ -100,9 +100,9 @@ public void generateAndTestDatabase(ClickhouseGlobalState globalState) throws SQ
100100
});
101101
se.executeStatements();
102102
manager.incrementCreateDatabase();
103-
103+
104104
ClickhouseQueryPartitioningWhereTester oracle = new ClickhouseQueryPartitioningWhereTester(globalState);
105-
105+
106106
for (int i = 0; i < globalState.getOptions().getNrQueries(); i++) {
107107
try {
108108
oracle.check();
@@ -123,22 +123,25 @@ public void generateAndTestDatabase(ClickhouseGlobalState globalState) throws SQ
123123
}
124124

125125
@Override
126-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
126+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
127127
String url = "jdbc:clickhouse://localhost:8123/test";
128-
Connection con = DriverManager.getConnection(url, "", "password");
129-
state.statements.add(new QueryAdapter("USE test"));
130-
state.statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName + " CASCADE"));
128+
String databaseName = globalState.getDatabaseName();
129+
Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(),
130+
globalState.getOptions().getPassword());
131+
globalState.getState().statements.add(new QueryAdapter("USE test"));
132+
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName + " CASCADE"));
131133
String createDatabaseCommand = "CREATE DATABASE " + databaseName;
132-
state.statements.add(new QueryAdapter(createDatabaseCommand));
133-
state.statements.add(new QueryAdapter("USE " + databaseName));
134+
globalState.getState().statements.add(new QueryAdapter(createDatabaseCommand));
135+
globalState.getState().statements.add(new QueryAdapter("USE " + databaseName));
134136
try (Statement s = con.createStatement()) {
135137
s.execute("DROP DATABASE IF EXISTS " + databaseName);
136138
}
137139
try (Statement s = con.createStatement()) {
138140
s.execute(createDatabaseCommand);
139141
}
140142
con.close();
141-
con = DriverManager.getConnection("jdbc:clickhouse://localhost:8123/" + databaseName, "", "password");
143+
con = DriverManager.getConnection("jdbc:clickhouse://localhost:8123/" + databaseName,
144+
globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
142145
return con;
143146
}
144147

src/sqlancer/cockroachdb/CockroachDBProvider.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ public static enum Action {
7878
"EXPERIMENTAL SCRUB table " + g.getSchema().getRandomTable(t -> !t.isView()).getName(),
7979
// https://github.com/cockroachdb/cockroach/issues/46401
8080
Arrays.asList("scrub-fk: column \"t.rowid\" does not exist",
81-
"check-constraint: cannot access temporary tables of other sessions" /* https://github.com/cockroachdb/cockroach/issues/47031 */))),
81+
"check-constraint: cannot access temporary tables of other sessions" /*
82+
* https://github.com/
83+
* cockroachdb/cockroach
84+
* /issues/47031
85+
*/))),
8286
SPLIT((g) -> {
8387
StringBuilder sb = new StringBuilder("ALTER INDEX ");
8488
CockroachDBTable randomTable = g.getSchema().getRandomTable();
@@ -130,7 +134,8 @@ public void generateAndTestDatabase(CockroachDBGlobalState globalState) throws S
130134
globalState.setSchema(CockroachDBSchema.fromConnection(con, databaseName));
131135

132136
List<String> standardSettings = new ArrayList<String>();
133-
standardSettings.add("--Don't send automatic bug reports\n" + "SET CLUSTER SETTING debug.panic_on_failed_assertions = true;");
137+
standardSettings.add("--Don't send automatic bug reports\n"
138+
+ "SET CLUSTER SETTING debug.panic_on_failed_assertions = true;");
134139
standardSettings.add("SET CLUSTER SETTING diagnostics.reporting.enabled = false;");
135140
standardSettings.add("SET CLUSTER SETTING diagnostics.reporting.send_crash_reports = false;");
136141

@@ -285,22 +290,25 @@ public void generateAndTestDatabase(CockroachDBGlobalState globalState) throws S
285290
}
286291

287292
@Override
288-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
293+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
294+
String databaseName = globalState.getDatabaseName();
289295
String url = "jdbc:postgresql://localhost:26257/test";
290-
Connection con = DriverManager.getConnection(url, "root", "");
291-
state.statements.add(new QueryAdapter("USE test"));
292-
state.statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName + " CASCADE"));
296+
Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(),
297+
globalState.getOptions().getPassword());
298+
globalState.getState().statements.add(new QueryAdapter("USE test"));
299+
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName + " CASCADE"));
293300
String createDatabaseCommand = "CREATE DATABASE " + databaseName;
294-
state.statements.add(new QueryAdapter(createDatabaseCommand));
295-
state.statements.add(new QueryAdapter("USE " + databaseName));
301+
globalState.getState().statements.add(new QueryAdapter(createDatabaseCommand));
302+
globalState.getState().statements.add(new QueryAdapter("USE " + databaseName));
296303
try (Statement s = con.createStatement()) {
297304
s.execute("DROP DATABASE IF EXISTS " + databaseName);
298305
}
299306
try (Statement s = con.createStatement()) {
300307
s.execute(createDatabaseCommand);
301308
}
302309
con.close();
303-
con = DriverManager.getConnection("jdbc:postgresql://localhost:26257/" + databaseName, "root", "");
310+
con = DriverManager.getConnection("jdbc:postgresql://localhost:26257/" + databaseName,
311+
globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
304312
return con;
305313
}
306314

src/sqlancer/mariadb/MariaDBProvider.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -254,13 +254,13 @@ public void generateAndTestDatabase(GlobalState<MariaDBOptions> globalState) thr
254254
}
255255

256256
@Override
257-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
258-
state.statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
259-
state.statements.add(new QueryAdapter("CREATE DATABASE " + databaseName));
260-
state.statements.add(new QueryAdapter("USE " + databaseName));
257+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
258+
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
259+
globalState.getState().statements.add(new QueryAdapter("CREATE DATABASE " + databaseName));
260+
globalState.getState().statements.add(new QueryAdapter("USE " + databaseName));
261261
// /?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
262262
String url = "jdbc:mariadb://localhost:3306";
263-
Connection con = DriverManager.getConnection(url, "lama", "password");
263+
Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
264264
try (Statement s = con.createStatement()) {
265265
s.execute("DROP DATABASE IF EXISTS " + databaseName);
266266
}

src/sqlancer/mysql/MySQLProvider.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import sqlancer.AbstractAction;
1414
import sqlancer.DatabaseProvider;
15+
import sqlancer.GlobalState;
1516
import sqlancer.IgnoreMeException;
1617
import sqlancer.Main.QueryManager;
1718
import sqlancer.Main.StateLogger;
@@ -234,12 +235,13 @@ public static int getNrRows(Connection con, MySQLTable table) throws SQLExceptio
234235
}
235236

236237
@Override
237-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
238-
state.statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
239-
state.statements.add(new QueryAdapter("CREATE DATABASE " + databaseName));
240-
state.statements.add(new QueryAdapter("USE " + databaseName));
238+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
239+
String databaseName = globalState.getDatabaseName();
240+
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
241+
globalState.getState().statements.add(new QueryAdapter("CREATE DATABASE " + databaseName));
242+
globalState.getState().statements.add(new QueryAdapter("USE " + databaseName));
241243
String url = "jdbc:mysql://localhost:3306/?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true";
242-
Connection con = DriverManager.getConnection(url, "lama", "password");
244+
Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
243245
try (Statement s = con.createStatement()) {
244246
s.execute("DROP DATABASE IF EXISTS " + databaseName);
245247
}

src/sqlancer/postgres/PostgresProvider.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import sqlancer.AbstractAction;
1414
import sqlancer.CompositeTestOracle;
1515
import sqlancer.DatabaseProvider;
16+
import sqlancer.GlobalState;
1617
import sqlancer.IgnoreMeException;
1718
import sqlancer.Main.QueryManager;
1819
import sqlancer.Main.StateLogger;
@@ -262,29 +263,30 @@ public void generateAndTestDatabase(PostgresGlobalState globalState) throws SQLE
262263
}
263264

264265
@Override
265-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
266+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
266267
String url = "jdbc:postgresql://localhost:5432/test";
267-
Connection con = DriverManager.getConnection(url, "lama", "password");
268-
state.statements.add(new QueryAdapter("\\c test;"));
269-
state.statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
268+
String databaseName = globalState.getDatabaseName();
269+
Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
270+
globalState.getState().statements.add(new QueryAdapter("\\c test;"));
271+
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
270272
String createDatabaseCommand = getCreateDatabaseCommand(databaseName, con);
271-
state.statements.add(new QueryAdapter(createDatabaseCommand));
272-
state.statements.add(new QueryAdapter("\\c " + databaseName));
273+
globalState.getState().statements.add(new QueryAdapter(createDatabaseCommand));
274+
globalState.getState().statements.add(new QueryAdapter("\\c " + databaseName));
273275
try (Statement s = con.createStatement()) {
274276
s.execute("DROP DATABASE IF EXISTS " + databaseName);
275277
}
276278
try (Statement s = con.createStatement()) {
277279
s.execute(createDatabaseCommand);
278280
}
279281
con.close();
280-
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/" + databaseName, "lama", "password");
282+
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/" + databaseName, globalState.getOptions().getUserName(), globalState.getOptions().getPassword());
281283
List<String> statements = Arrays.asList(
282284
// "CREATE EXTENSION IF NOT EXISTS btree_gin;",
283285
// "CREATE EXTENSION IF NOT EXISTS btree_gist;", // TODO: undefined symbol: elog_start
284286
"CREATE EXTENSION IF NOT EXISTS pg_prewarm;", "SET max_parallel_workers_per_gather=16");
285287
for (String s : statements) {
286288
QueryAdapter query = new QueryAdapter(s);
287-
state.statements.add(query);
289+
globalState.getState().statements.add(query);
288290
query.execute(con);
289291
}
290292
// new QueryAdapter("set jit_above_cost = 0; set jit_inline_above_cost = 0; set jit_optimize_above_cost = 0;").execute(con);

src/sqlancer/sqlite3/SQLite3Provider.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package sqlancer.sqlite3;
22

3+
import java.io.File;
34
import java.io.FileWriter;
45
import java.io.IOException;
56
import java.sql.Connection;
7+
import java.sql.DriverManager;
68
import java.sql.ResultSet;
79
import java.sql.SQLException;
810
import java.sql.Statement;
@@ -11,7 +13,6 @@
1113
import java.util.List;
1214
import java.util.stream.Collectors;
1315

14-
import sqlancer.DatabaseFacade;
1516
import sqlancer.DatabaseProvider;
1617
import sqlancer.GlobalState;
1718
import sqlancer.IgnoreMeException;
@@ -417,8 +418,13 @@ private void addSensiblePragmaDefaults(Connection con) throws SQLException {
417418
}
418419

419420
@Override
420-
public Connection createDatabase(String databaseName, StateToReproduce state) throws SQLException {
421-
return DatabaseFacade.createDatabase(databaseName);
421+
public Connection createDatabase(GlobalState<?> globalState) throws SQLException {
422+
File dataBase = new File("." + File.separator + "databases", globalState.getDatabaseName() + ".db");
423+
if (dataBase.exists()) {
424+
dataBase.delete();
425+
}
426+
String url = "jdbc:sqlite:" + dataBase.getAbsolutePath();
427+
return DriverManager.getConnection(url);
422428
}
423429

424430
@Override

0 commit comments

Comments
 (0)