package sqlancer.mysql; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import sqlancer.DBMSSpecificOptions; import sqlancer.OracleFactory; import sqlancer.common.oracle.TestOracle; import sqlancer.mysql.MySQLOptions.MySQLOracleFactory; import sqlancer.mysql.oracle.MySQLCERTOracle; import sqlancer.mysql.oracle.MySQLFuzzer; import sqlancer.mysql.oracle.MySQLPivotedQuerySynthesisOracle; import sqlancer.mysql.oracle.MySQLTLPWhereOracle; @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); public enum MySQLOracleFactory implements OracleFactory { TLP_WHERE { @Override public TestOracle create(MySQLGlobalState globalState) throws SQLException { return new MySQLTLPWhereOracle(globalState); } }, PQS { @Override public TestOracle create(MySQLGlobalState globalState) throws SQLException { return new MySQLPivotedQuerySynthesisOracle(globalState); } @Override public boolean requiresAllTablesToContainRows() { return true; } }, CERT { @Override public TestOracle create(MySQLGlobalState globalState) throws SQLException { return new MySQLCERTOracle(globalState); } @Override public boolean requiresAllTablesToContainRows() { return true; } }, FUZZER { @Override public TestOracle create(MySQLGlobalState globalState) throws Exception { return new MySQLFuzzer(globalState); } }; } @Override public List getTestOracleFactory() { return oracles; } }