Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions src/sqlancer/common/oracle/DQEBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import sqlancer.common.query.SQLQueryAdapter;
import sqlancer.common.query.SQLQueryError;
import sqlancer.common.schema.AbstractRelationalTable;
import sqlancer.mysql.MySQLSchema.MySQLTables;
import sqlancer.common.schema.AbstractTables;

/*
* In DBMSs, SELECT, UPDATE and DELETE queries utilize predicates (i.e., WHERE clauses) to specify which rows to retrieve, update or delete, respectively.
Expand Down Expand Up @@ -54,19 +54,15 @@ public DQEBase(S state) {
this.options = state.getOptions();
}

public abstract String generateSelectStatement(MySQLTables tables, String tableName, String whereClauseStr);
public abstract String generateSelectStatement(AbstractTables<?, ?> tables, String tableName,
String whereClauseStr);

public abstract String generateUpdateStatement(MySQLTables tables, String tableName, String whereClauseStr);
public abstract String generateUpdateStatement(AbstractTables<?, ?> tables, String tableName,
String whereClauseStr);

public abstract String generateDeleteStatement(MySQLTables tables, String tableName, String whereClauseStr);
public abstract String generateDeleteStatement(String tableName, String whereClauseStr);

/**
* Add auxiliary columns to the database A abstract method, subclasses need to implement it.
*
* @param table
*
* @throws SQLException
*/
// Add auxiliary columns to the database A abstract method, subclasses need to implement it.
public abstract void addAuxiliaryColumns(AbstractRelationalTable<?, ?, ?> table) throws SQLException;

public void dropAuxiliaryColumns(AbstractRelationalTable<?, ?, ?> table) throws SQLException {
Expand Down
17 changes: 10 additions & 7 deletions src/sqlancer/mysql/oracle/MySQLDQEOracle.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import sqlancer.common.query.SQLancerResultSet;
import sqlancer.common.schema.AbstractRelationalTable;
import sqlancer.common.schema.AbstractTable;
import sqlancer.common.schema.AbstractTables;
import sqlancer.mysql.MySQLErrors;
import sqlancer.mysql.MySQLGlobalState;
import sqlancer.mysql.MySQLSchema;
Expand Down Expand Up @@ -57,16 +58,17 @@ public MySQLDQEOracle(MySQLGlobalState state) {
}

@Override
public String generateSelectStatement(MySQLTables tables, String tableName, String whereClauseStr) {
public String generateSelectStatement(AbstractTables<?, ?> tables, String tableName, String whereClauseStr) {
operateOnSingleTable = tables.getTables().size() == 1;
List<String> selectColumns = new ArrayList<>();
for (MySQLTable table : tables.getTables()) {
MySQLTables mySQLTables = (MySQLTables) tables;
for (MySQLTable table : mySQLTables.getTables()) {
selectColumns.add(table.getName() + "." + COLUMN_ROWID);
}
if (operateOnSingleTable && Randomly.getBooleanWithSmallProbability()) {
generateOrderBy = true;
// generate order by columns
for (MySQLColumn column : Randomly.nonEmptySubset(tables.getColumns())) {
for (MySQLColumn column : Randomly.nonEmptySubset(mySQLTables.getColumns())) {
orderColumns.add(column.getFullQualifiedName());
}

Expand All @@ -88,9 +90,10 @@ public String generateSelectStatement(MySQLTables tables, String tableName, Stri
}

@Override
public String generateUpdateStatement(MySQLTables tables, String tableName, String whereClauseStr) {
public String generateUpdateStatement(AbstractTables<?, ?> tables, String tableName, String whereClauseStr) {
List<String> updateColumns = new ArrayList<>();
for (MySQLTable table : tables.getTables()) {
MySQLTables mySQLTables = (MySQLTables) tables;
for (MySQLTable table : mySQLTables.getTables()) {
updateColumns.add(String.format("%s = 1", table.getName() + "." + COLUMN_UPDATED));
}
String updateStmt = String.format("UPDATE %s SET %s WHERE %s", tableName, Strings.join(",", updateColumns),
Expand All @@ -105,7 +108,7 @@ public String generateUpdateStatement(MySQLTables tables, String tableName, Stri
}

@Override
public String generateDeleteStatement(MySQLTables tables, String tableName, String whereClauseStr) {
public String generateDeleteStatement(String tableName, String whereClauseStr) {
String deleteStmt;
if (operateOnSingleTable) {
deleteStmt = String.format("DELETE FROM %s WHERE %s", tableName, whereClauseStr);
Expand Down Expand Up @@ -141,7 +144,7 @@ public void check() throws SQLException {

String updateStmt = generateUpdateStatement(tables, tableName, whereClauseStr);

String deleteStmt = generateDeleteStatement(tables, tableName, whereClauseStr);
String deleteStmt = generateDeleteStatement(tableName, whereClauseStr);

for (MySQLTable table : tables.getTables()) {
addAuxiliaryColumns(table);
Expand Down
Loading