diff --git a/src/sqlancer/Main.java b/src/sqlancer/Main.java index 755ce36a8..3f5b92f3a 100644 --- a/src/sqlancer/Main.java +++ b/src/sqlancer/Main.java @@ -453,7 +453,7 @@ private String formatInteger(long intValue) { .testConnection(); } catch (Exception e) { System.err.println( - "SQLancer failed creating a test database, indicating that SQLancer might have failed connecting to the DBMS. In order to change the username and password, you can use the --username and --password options. Currently, SQLancer does not yet support passing a host and port (see https://github.com/sqlancer/sqlancer/issues/95).\n\n"); + "SQLancer failed creating a test database, indicating that SQLancer might have failed connecting to the DBMS. In order to change the username, password, host and port, you can use the --username, --password, --host and --port options.\n\n"); e.printStackTrace(); return options.getErrorExitCode(); } diff --git a/src/sqlancer/MainOptions.java b/src/sqlancer/MainOptions.java index 144826298..ff588de5f 100644 --- a/src/sqlancer/MainOptions.java +++ b/src/sqlancer/MainOptions.java @@ -7,6 +7,7 @@ @Parameters(separators = "=", commandDescription = "Options applicable to all DBMS") public class MainOptions { + public static final int NO_SET_PORT = -1; @Parameter(names = { "--help", "-h" }, description = "Lists all supported options and commands", help = true) private boolean help; // NOPMD @@ -49,6 +50,12 @@ public class MainOptions { @Parameter(names = "--password", description = "The password used to log into the DBMS") private String password = "sqlancer"; // NOPMD + @Parameter(names = "--host", description = "The host used to log into the DBMS") + private String host = null; // NOPMD + + @Parameter(names = "--port", description = "The port used to log into the DBMS") + private int port = MainOptions.NO_SET_PORT; // NOPMD + @Parameter(names = "--print-progress-information", description = "Whether to print progress information such as the number of databases generated or queries issued", arity = 1) private boolean printProgressInformation = true; // NOPMD @@ -151,6 +158,14 @@ public String getPassword() { return password; } + public String getHost() { + return host; + } + + public int getPort() { + return port; + } + public boolean printProgressInformation() { return printProgressInformation; } diff --git a/src/sqlancer/clickhouse/ClickHouseOptions.java b/src/sqlancer/clickhouse/ClickHouseOptions.java index 5ca84871e..5c26cb03b 100644 --- a/src/sqlancer/clickhouse/ClickHouseOptions.java +++ b/src/sqlancer/clickhouse/ClickHouseOptions.java @@ -18,8 +18,11 @@ import sqlancer.clickhouse.oracle.tlp.ClickHouseTLPWhereOracle; import sqlancer.common.oracle.TestOracle; -@Parameters(separators = "=", commandDescription = "ClickHouse") +@Parameters(separators = "=", commandDescription = "ClickHouse (default port: " + ClickHouseOptions.DEFAULT_PORT + + ", default host: " + ClickHouseOptions.DEFAULT_HOST) public class ClickHouseOptions implements DBMSSpecificOptions { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 8123; @Parameter(names = "--oracle") public List oracle = Arrays.asList(ClickHouseOracleFactory.TLPWhere); diff --git a/src/sqlancer/clickhouse/ClickHouseProvider.java b/src/sqlancer/clickhouse/ClickHouseProvider.java index c45db308c..297369ded 100644 --- a/src/sqlancer/clickhouse/ClickHouseProvider.java +++ b/src/sqlancer/clickhouse/ClickHouseProvider.java @@ -8,6 +8,7 @@ import sqlancer.AbstractAction; import sqlancer.IgnoreMeException; +import sqlancer.MainOptions; import sqlancer.Randomly; import sqlancer.SQLConnection; import sqlancer.SQLGlobalState; @@ -102,9 +103,18 @@ public void generateDatabase(ClickHouseGlobalState globalState) throws Exception @Override public SQLConnection createDatabase(ClickHouseGlobalState globalState) throws SQLException { + String host = globalState.getOptions().getHost(); + int port = globalState.getOptions().getPort(); + if (host == null) { + host = ClickHouseOptions.DEFAULT_HOST; + } + if (port == MainOptions.NO_SET_PORT) { + port = ClickHouseOptions.DEFAULT_PORT; + } + ClickHouseOptions clickHouseOptions = globalState.getDmbsSpecificOptions(); globalState.setClickHouseOptions(clickHouseOptions); - String url = "jdbc:clickhouse://localhost:8123/default"; + String url = String.format("jdbc:clickhouse://%s:%d/default", host, port); String databaseName = globalState.getDatabaseName(); Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword()); diff --git a/src/sqlancer/cockroachdb/CockroachDBOptions.java b/src/sqlancer/cockroachdb/CockroachDBOptions.java index 7772117b8..2af62ae69 100644 --- a/src/sqlancer/cockroachdb/CockroachDBOptions.java +++ b/src/sqlancer/cockroachdb/CockroachDBOptions.java @@ -23,8 +23,11 @@ import sqlancer.common.oracle.CompositeTestOracle; import sqlancer.common.oracle.TestOracle; -@Parameters(separators = "=", commandDescription = "Test CockroachDB") +@Parameters(separators = "=", commandDescription = "CockroachDB (default port: " + CockroachDBOptions.DEFAULT_PORT + + " default host: " + CockroachDBOptions.DEFAULT_HOST) public class CockroachDBOptions implements DBMSSpecificOptions { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 26257; @Parameter(names = "--oracle") public CockroachDBOracleFactory oracle = CockroachDBOracleFactory.NOREC; diff --git a/src/sqlancer/cockroachdb/CockroachDBProvider.java b/src/sqlancer/cockroachdb/CockroachDBProvider.java index ccfa4b13a..8b675459e 100644 --- a/src/sqlancer/cockroachdb/CockroachDBProvider.java +++ b/src/sqlancer/cockroachdb/CockroachDBProvider.java @@ -248,8 +248,16 @@ public void generateDatabase(CockroachDBGlobalState globalState) throws Exceptio @Override public SQLConnection createDatabase(CockroachDBGlobalState globalState) throws SQLException { + String host = globalState.getOptions().getHost(); + int port = globalState.getOptions().getPort(); + if (host == null) { + host = CockroachDBOptions.DEFAULT_HOST; + } + if (port == MainOptions.NO_SET_PORT) { + port = CockroachDBOptions.DEFAULT_PORT; + } String databaseName = globalState.getDatabaseName(); - String url = "jdbc:postgresql://localhost:26257/test"; + String url = String.format("jdbc:postgresql://%s:%d/test", host, port); Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword()); globalState.getState().logStatement("USE test"); diff --git a/src/sqlancer/mariadb/MariaDBOptions.java b/src/sqlancer/mariadb/MariaDBOptions.java index 6037bec86..63e142aec 100644 --- a/src/sqlancer/mariadb/MariaDBOptions.java +++ b/src/sqlancer/mariadb/MariaDBOptions.java @@ -14,8 +14,11 @@ import sqlancer.mariadb.MariaDBProvider.MariaDBGlobalState; import sqlancer.mariadb.oracle.MariaDBNoRECOracle; -@Parameters +@Parameters(separators = "=", commandDescription = "MariaDB (default port: " + MariaDBOptions.DEFAULT_PORT + + ", default host: " + MariaDBOptions.DEFAULT_HOST) public class MariaDBOptions implements DBMSSpecificOptions { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 3306; @Parameter(names = "--oracle") public List oracles = Arrays.asList(MariaDBOracleFactory.NOREC); diff --git a/src/sqlancer/mariadb/MariaDBProvider.java b/src/sqlancer/mariadb/MariaDBProvider.java index 602eaccae..dc0420fca 100644 --- a/src/sqlancer/mariadb/MariaDBProvider.java +++ b/src/sqlancer/mariadb/MariaDBProvider.java @@ -167,10 +167,18 @@ public SQLConnection createDatabase(MariaDBGlobalState globalState) throws SQLEx globalState.getState().logStatement("DROP DATABASE IF EXISTS " + globalState.getDatabaseName()); globalState.getState().logStatement("CREATE DATABASE " + globalState.getDatabaseName()); globalState.getState().logStatement("USE " + globalState.getDatabaseName()); - // /?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true - String url = "jdbc:mariadb://localhost:3306"; - Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), - globalState.getOptions().getPassword()); + String username = globalState.getOptions().getUserName(); + String password = globalState.getOptions().getPassword(); + String host = globalState.getOptions().getHost(); + int port = globalState.getOptions().getPort(); + if (host == null) { + host = MariaDBOptions.DEFAULT_HOST; + } + if (port == MainOptions.NO_SET_PORT) { + port = MariaDBOptions.DEFAULT_PORT; + } + String url = String.format("jdbc:mariadb://%s:%d", host, port); + Connection con = DriverManager.getConnection(url, username, password); try (Statement s = con.createStatement()) { s.execute("DROP DATABASE IF EXISTS " + globalState.getDatabaseName()); } diff --git a/src/sqlancer/mysql/MySQLOptions.java b/src/sqlancer/mysql/MySQLOptions.java index 3e4f755be..5540f00a8 100644 --- a/src/sqlancer/mysql/MySQLOptions.java +++ b/src/sqlancer/mysql/MySQLOptions.java @@ -14,8 +14,11 @@ import sqlancer.mysql.oracle.MySQLPivotedQuerySynthesisOracle; import sqlancer.mysql.oracle.MySQLTLPWhereOracle; -@Parameters +@Parameters(separators = "=", commandDescription = "MySQL (default port: " + MySQLOptions.DEFAULT_PORT + + ", default host: " + MySQLOptions.DEFAULT_HOST) public class MySQLOptions implements DBMSSpecificOptions { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 3306; @Parameter(names = "--oracle") public List oracles = Arrays.asList(MySQLOracleFactory.TLP_WHERE); diff --git a/src/sqlancer/mysql/MySQLProvider.java b/src/sqlancer/mysql/MySQLProvider.java index dd51f4982..447325951 100644 --- a/src/sqlancer/mysql/MySQLProvider.java +++ b/src/sqlancer/mysql/MySQLProvider.java @@ -7,6 +7,7 @@ import sqlancer.AbstractAction; import sqlancer.IgnoreMeException; +import sqlancer.MainOptions; import sqlancer.Randomly; import sqlancer.SQLConnection; import sqlancer.SQLProviderAdapter; @@ -149,13 +150,23 @@ public void generateDatabase(MySQLGlobalState globalState) throws Exception { @Override public SQLConnection createDatabase(MySQLGlobalState globalState) throws SQLException { + String username = globalState.getOptions().getUserName(); + String password = globalState.getOptions().getPassword(); + String host = globalState.getOptions().getHost(); + int port = globalState.getOptions().getPort(); + if (host == null) { + host = MySQLOptions.DEFAULT_HOST; + } + if (port == MainOptions.NO_SET_PORT) { + port = MySQLOptions.DEFAULT_PORT; + } String databaseName = globalState.getDatabaseName(); globalState.getState().logStatement("DROP DATABASE IF EXISTS " + databaseName); globalState.getState().logStatement("CREATE DATABASE " + databaseName); globalState.getState().logStatement("USE " + databaseName); - String url = "jdbc:mysql://localhost:3306/?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"; - Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), - globalState.getOptions().getPassword()); + String url = String.format("jdbc:mysql://%s:%d?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true", + host, port); + Connection con = DriverManager.getConnection(url, username, password); try (Statement s = con.createStatement()) { s.execute("DROP DATABASE IF EXISTS " + databaseName); } diff --git a/src/sqlancer/postgres/PostgresOptions.java b/src/sqlancer/postgres/PostgresOptions.java index 0e23fb710..6c0a97847 100644 --- a/src/sqlancer/postgres/PostgresOptions.java +++ b/src/sqlancer/postgres/PostgresOptions.java @@ -19,8 +19,11 @@ import sqlancer.postgres.oracle.tlp.PostgresTLPHavingOracle; import sqlancer.postgres.oracle.tlp.PostgresTLPWhereOracle; -@Parameters +@Parameters(separators = "=", commandDescription = "PostgreSQL (default port: " + PostgresOptions.DEFAULT_PORT + + ", default host: " + PostgresOptions.DEFAULT_HOST) public class PostgresOptions implements DBMSSpecificOptions { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 5432; @Parameter(names = "--bulk-insert", description = "Specifies whether INSERT statements should be issued in bulk", arity = 1) public boolean allowBulkInsert; @@ -32,7 +35,8 @@ public class PostgresOptions implements DBMSSpecificOptions { NOREC { diff --git a/src/sqlancer/postgres/PostgresProvider.java b/src/sqlancer/postgres/PostgresProvider.java index c5d295611..683ba95d1 100644 --- a/src/sqlancer/postgres/PostgresProvider.java +++ b/src/sqlancer/postgres/PostgresProvider.java @@ -10,6 +10,7 @@ import sqlancer.AbstractAction; import sqlancer.IgnoreMeException; +import sqlancer.MainOptions; import sqlancer.Randomly; import sqlancer.SQLConnection; import sqlancer.SQLProviderAdapter; @@ -54,6 +55,7 @@ public class PostgresProvider extends SQLProviderAdapter { + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 4000; @Parameter(names = "--oracle") public List oracle = Arrays.asList(TiDBOracleFactory.QUERY_PARTITIONING); diff --git a/src/sqlancer/tidb/TiDBProvider.java b/src/sqlancer/tidb/TiDBProvider.java index 1e1abf2a9..c744de3f2 100644 --- a/src/sqlancer/tidb/TiDBProvider.java +++ b/src/sqlancer/tidb/TiDBProvider.java @@ -7,6 +7,7 @@ import sqlancer.AbstractAction; import sqlancer.IgnoreMeException; +import sqlancer.MainOptions; import sqlancer.Randomly; import sqlancer.SQLConnection; import sqlancer.SQLGlobalState; @@ -132,8 +133,17 @@ public void generateDatabase(TiDBGlobalState globalState) throws Exception { @Override public SQLConnection createDatabase(TiDBGlobalState globalState) throws SQLException { + String host = globalState.getOptions().getHost(); + int port = globalState.getOptions().getPort(); + if (host == null) { + host = TiDBOptions.DEFAULT_HOST; + } + if (port == MainOptions.NO_SET_PORT) { + port = TiDBOptions.DEFAULT_PORT; + } + String databaseName = globalState.getDatabaseName(); - String url = "jdbc:mysql://127.0.0.1:4000/"; + String url = String.format("jdbc:mysql://%s:%d/", host, port); Connection con = DriverManager.getConnection(url, globalState.getOptions().getUserName(), globalState.getOptions().getPassword()); globalState.getState().logStatement("USE test"); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy