Skip to content

Commit 1e41016

Browse files
committed
[MySQL] Use common TLP-where oracle
1 parent 393c531 commit 1e41016

3 files changed

Lines changed: 32 additions & 90 deletions

File tree

src/sqlancer/mysql/MySQLErrors.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public static List<Pattern> getExpressionRegexErrors() {
3232
// "00000000000000000000-0"
3333
}
3434

35+
errors.add(Pattern.compile("Unknown column '.*' in 'order clause'"));
36+
3537
return errors;
3638
}
3739

src/sqlancer/mysql/oracle/MySQLQueryPartitioningBase.java

Lines changed: 0 additions & 61 deletions
This file was deleted.
Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
11
package sqlancer.mysql.oracle;
22

33
import java.sql.SQLException;
4-
import java.util.ArrayList;
5-
import java.util.Collections;
6-
import java.util.List;
74

8-
import sqlancer.ComparatorHelper;
9-
import sqlancer.Randomly;
5+
import sqlancer.Reproducer;
6+
import sqlancer.common.oracle.TLPWhereOracle;
7+
import sqlancer.common.oracle.TestOracle;
8+
import sqlancer.common.query.ExpectedErrors;
9+
import sqlancer.mysql.MySQLErrors;
1010
import sqlancer.mysql.MySQLGlobalState;
11-
import sqlancer.mysql.MySQLVisitor;
11+
import sqlancer.mysql.MySQLSchema;
12+
import sqlancer.mysql.MySQLSchema.MySQLColumn;
13+
import sqlancer.mysql.MySQLSchema.MySQLTable;
14+
import sqlancer.mysql.ast.MySQLExpression;
15+
import sqlancer.mysql.ast.MySQLJoin;
16+
import sqlancer.mysql.ast.MySQLSelect;
17+
import sqlancer.mysql.gen.MySQLExpressionGenerator;
1218

13-
public class MySQLTLPWhereOracle extends MySQLQueryPartitioningBase {
19+
public class MySQLTLPWhereOracle implements TestOracle<MySQLGlobalState> {
20+
21+
private final TLPWhereOracle<MySQLSelect, MySQLJoin, MySQLExpression, MySQLSchema, MySQLTable, MySQLColumn, MySQLGlobalState> oracle;
1422

1523
public MySQLTLPWhereOracle(MySQLGlobalState state) {
16-
super(state);
24+
MySQLExpressionGenerator gen = new MySQLExpressionGenerator(state);
25+
ExpectedErrors expectedErrors = ExpectedErrors.newErrors().with(MySQLErrors.getExpressionErrors())
26+
.withRegex(MySQLErrors.getExpressionRegexErrors()).build();
27+
28+
this.oracle = new TLPWhereOracle<>(state, gen, expectedErrors);
1729
}
1830

1931
@Override
2032
public void check() throws SQLException {
21-
super.check();
22-
select.setWhereClause(null);
23-
String originalQueryString = MySQLVisitor.asString(select);
24-
25-
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
26-
27-
if (Randomly.getBoolean()) {
28-
select.setOrderByClauses(gen.generateOrderBys());
29-
}
30-
select.setOrderByClauses(Collections.emptyList());
31-
select.setWhereClause(predicate);
32-
String firstQueryString = MySQLVisitor.asString(select);
33-
select.setWhereClause(negatedPredicate);
34-
String secondQueryString = MySQLVisitor.asString(select);
35-
select.setWhereClause(isNullPredicate);
36-
String thirdQueryString = MySQLVisitor.asString(select);
37-
List<String> combinedString = new ArrayList<>();
38-
List<String> secondResultSet = ComparatorHelper.getCombinedResultSet(firstQueryString, secondQueryString,
39-
thirdQueryString, combinedString, Randomly.getBoolean(), state, errors);
40-
ComparatorHelper.assumeResultSetsAreEqual(resultSet, secondResultSet, originalQueryString, combinedString,
41-
state);
33+
oracle.check();
4234
}
4335

36+
@Override
37+
public String getLastQueryString() {
38+
return oracle.getLastQueryString();
39+
}
40+
41+
@Override
42+
public Reproducer<MySQLGlobalState> getLastReproducer() {
43+
return oracle.getLastReproducer();
44+
}
4445
}

0 commit comments

Comments
 (0)