Skip to content

Commit b5eb215

Browse files
bajinshengmrigger
andauthored
Add interface to return queries by oracles (sqlancer#648)
Co-authored-by: Manuel Rigger <[email protected]>
1 parent fcb2b13 commit b5eb215

17 files changed

Lines changed: 119 additions & 9 deletions

src/sqlancer/cockroachdb/oracle/CockroachDBNoRECOracle.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,9 @@ private int getCount(SQLGlobalState<?, ?> globalState, SQLQueryAdapter q) throws
150150
return count;
151151
}
152152

153+
@Override
154+
public String getLastQueryString() {
155+
return optimizedQueryString;
156+
}
157+
153158
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPAggregateOracle.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,9 @@ private CockroachDBSelect getSelect(List<CockroachDBExpression> aggregates, List
195195
return leftSelect;
196196
}
197197

198+
@Override
199+
public String getLastQueryString() {
200+
return originalQuery;
201+
}
202+
198203
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPDistinctOracle.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
public class CockroachDBTLPDistinctOracle extends CockroachDBTLPBase {
1717

18+
private String generatedQueryString;
19+
1820
public CockroachDBTLPDistinctOracle(CockroachDBGlobalState state) {
1921
super(state);
2022
errors.add("GROUP BY term out of range");
@@ -25,7 +27,7 @@ public void check() throws SQLException {
2527
super.check();
2628
select.setDistinct(true);
2729
String originalQueryString = CockroachDBVisitor.asString(select);
28-
30+
generatedQueryString = originalQueryString;
2931
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
3032
select.setDistinct(false);
3133
CockroachDBExpression predicate = gen.generateExpression(CockroachDBDataType.BOOL.get());
@@ -41,4 +43,9 @@ public void check() throws SQLException {
4143
ComparatorHelper.assumeResultSetsAreEqual(resultSet, secondResultSet, originalQueryString, combinedString,
4244
state);
4345
}
46+
47+
@Override
48+
public String getLastQueryString() {
49+
return generatedQueryString;
50+
}
4451
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPExtendedWhereOracle.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
public class CockroachDBTLPExtendedWhereOracle extends CockroachDBTLPBase {
2020

2121
private CockroachDBExpression originalPredicate;
22+
private String generatedQueryString;
2223

2324
public CockroachDBTLPExtendedWhereOracle(CockroachDBGlobalState state) {
2425
super(state);
@@ -32,6 +33,7 @@ public void check() throws SQLException {
3233
originalPredicate = generatePredicate();
3334
select.setWhereClause(originalPredicate);
3435
String originalQueryString = CockroachDBVisitor.asString(select);
36+
generatedQueryString = originalQueryString;
3537
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
3638

3739
boolean allowOrderBy = Randomly.getBoolean();
@@ -56,4 +58,9 @@ public CockroachDBExpression combinePredicate(CockroachDBExpression expr) {
5658
return new CockroachDBBinaryLogicalOperation(originalPredicate, expr, CockroachDBBinaryLogicalOperator.AND);
5759

5860
}
61+
62+
@Override
63+
public String getLastQueryString() {
64+
return generatedQueryString;
65+
}
5966
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPGroupByOracle.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
public class CockroachDBTLPGroupByOracle extends CockroachDBTLPBase {
1616

17+
private String generatedQueryString;
18+
1719
public CockroachDBTLPGroupByOracle(CockroachDBGlobalState state) {
1820
super(state);
1921
}
@@ -24,7 +26,7 @@ public void check() throws SQLException {
2426
select.setGroupByExpressions(select.getFetchColumns());
2527
select.setWhereClause(null);
2628
String originalQueryString = CockroachDBVisitor.asString(select);
27-
29+
generatedQueryString = originalQueryString;
2830
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
2931

3032
select.setWhereClause(predicate);
@@ -46,4 +48,9 @@ List<CockroachDBExpression> generateFetchColumns() {
4648
.collect(Collectors.toList()));
4749
}
4850

51+
@Override
52+
public String getLastQueryString() {
53+
return generatedQueryString;
54+
}
55+
4956
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPHavingOracle.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
public class CockroachDBTLPHavingOracle extends CockroachDBTLPBase {
1515

16+
private String generatedQueryString;
17+
1618
public CockroachDBTLPHavingOracle(CockroachDBGlobalState state) {
1719
super(state);
1820
errors.add("GROUP BY term out of range");
@@ -31,6 +33,7 @@ public void check() throws SQLException {
3133
select.setGroupByExpressions(gen.generateExpressions(Randomly.smallNumber() + 1));
3234
select.setHavingClause(null);
3335
String originalQueryString = CockroachDBVisitor.asString(select);
36+
generatedQueryString = originalQueryString;
3437
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
3538

3639
CockroachDBExpression predicate = gen.generateExpression(CockroachDBDataType.BOOL.get());
@@ -52,4 +55,9 @@ protected CockroachDBExpression generatePredicate() {
5255
return gen.generateHavingClause();
5356
}
5457

58+
@Override
59+
public String getLastQueryString() {
60+
return generatedQueryString;
61+
}
62+
5563
}

src/sqlancer/cockroachdb/oracle/tlp/CockroachDBTLPWhereOracle.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
public class CockroachDBTLPWhereOracle extends CockroachDBTLPBase {
1818

19+
private String generatedQueryString;
20+
1921
public CockroachDBTLPWhereOracle(CockroachDBGlobalState state) {
2022
super(state);
2123
errors.add("GROUP BY term out of range");
@@ -25,7 +27,7 @@ public CockroachDBTLPWhereOracle(CockroachDBGlobalState state) {
2527
public void check() throws SQLException {
2628
super.check();
2729
String originalQueryString = CockroachDBVisitor.asString(select);
28-
30+
generatedQueryString = originalQueryString;
2931
List<String> resultSet = ComparatorHelper.getResultSetFirstColumnAsString(originalQueryString, errors, state);
3032

3133
boolean allowOrderBy = Randomly.getBoolean();
@@ -45,4 +47,9 @@ public void check() throws SQLException {
4547
ComparatorHelper.assumeResultSetsAreEqual(resultSet, secondResultSet, originalQueryString, combinedString,
4648
state);
4749
}
50+
51+
@Override
52+
public String getLastQueryString() {
53+
return generatedQueryString;
54+
}
4855
}

src/sqlancer/common/oracle/CompositeTestOracle.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class CompositeTestOracle<G extends GlobalState<?, ?, ?>> implements Test
99
private final List<TestOracle<G>> oracles;
1010
private final G globalState;
1111
private int i;
12+
private int iLast;
1213

1314
public CompositeTestOracle(List<TestOracle<G>> oracles, G globalState) {
1415
this.globalState = globalState;
@@ -19,6 +20,7 @@ public CompositeTestOracle(List<TestOracle<G>> oracles, G globalState) {
1920
public void check() throws Exception {
2021
try {
2122
oracles.get(i).check();
23+
iLast = i;
2224
boolean lastOracleIndex = i == oracles.size() - 1;
2325
if (!lastOracleIndex) {
2426
globalState.getManager().incrementSelectQueryCount();
@@ -27,4 +29,9 @@ public void check() throws Exception {
2729
i = (i + 1) % oracles.size();
2830
}
2931
}
32+
33+
@Override
34+
public String getLastQueryString() {
35+
return oracles.get(iLast).getLastQueryString();
36+
}
3037
}

src/sqlancer/common/oracle/TestOracle.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ public interface TestOracle<G extends GlobalState<?, ?, ?>> {
1010
default Reproducer<G> getLastReproducer() {
1111
return null;
1212
}
13+
14+
default String getLastQueryString() {
15+
throw new AssertionError("Not supported!");
16+
}
1317
}

src/sqlancer/sqlite3/oracle/SQLite3NoRECOracle.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ public Reproducer<SQLite3GlobalState> getLastReproducer() {
102102
return reproducer;
103103
}
104104

105+
@Override
106+
public String getLastQueryString() {
107+
return optimizedQueryString;
108+
}
109+
105110
private Function<SQLite3GlobalState, Integer> getUnoptimizedQuery(SQLite3Select select,
106111
SQLite3Expression randomWhereCondition) throws SQLException {
107112
SQLite3PostfixUnaryOperation isTrue = new SQLite3PostfixUnaryOperation(PostfixUnaryOperator.IS_TRUE,

0 commit comments

Comments
 (0)