Skip to content

Commit f8d34ff

Browse files
committed
[SQLite3] Add a query partitioning base
1 parent 43fc707 commit f8d34ff

21 files changed

Lines changed: 152 additions & 72 deletions

src/sqlancer/sqlite3/SQLite3ExpectedValueVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import sqlancer.sqlite3.ast.SQLite3Expression.TypeLiteral;
2828
import sqlancer.sqlite3.ast.SQLite3Function;
2929
import sqlancer.sqlite3.ast.SQLite3RowValueExpression;
30-
import sqlancer.sqlite3.ast.SQLite3SelectStatement;
30+
import sqlancer.sqlite3.ast.SQLite3Select;
3131
import sqlancer.sqlite3.ast.SQLite3SetClause;
3232
import sqlancer.sqlite3.ast.SQLite3UnaryOperation;
3333
import sqlancer.sqlite3.ast.SQLite3WindowFunction;
@@ -92,7 +92,7 @@ public void visit(Function f) {
9292
}
9393

9494
@Override
95-
public void visit(SQLite3SelectStatement s, boolean inner) {
95+
public void visit(SQLite3Select s, boolean inner) {
9696
for (SQLite3Expression expr : s.getFetchColumns()) {
9797
if (expr instanceof SQLite3Aggregate) {
9898
visit(expr);

src/sqlancer/sqlite3/SQLite3ToStringVisitor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import sqlancer.sqlite3.ast.SQLite3Expression.TypeLiteral;
2828
import sqlancer.sqlite3.ast.SQLite3Function;
2929
import sqlancer.sqlite3.ast.SQLite3RowValueExpression;
30-
import sqlancer.sqlite3.ast.SQLite3SelectStatement;
30+
import sqlancer.sqlite3.ast.SQLite3Select;
3131
import sqlancer.sqlite3.ast.SQLite3SetClause;
3232
import sqlancer.sqlite3.ast.SQLite3WindowFunction;
3333
import sqlancer.sqlite3.ast.SQLite3WindowFunctionExpression;
@@ -92,7 +92,7 @@ public void visit(Function f) {
9292
sb.append(")");
9393
}
9494

95-
public void visit(SQLite3SelectStatement s, boolean inner) {
95+
public void visit(SQLite3Select s, boolean inner) {
9696
if (inner) {
9797
sb.append("(");
9898
}
@@ -115,7 +115,7 @@ public void visit(SQLite3SelectStatement s, boolean inner) {
115115
if (i != 0) {
116116
sb.append(", ");
117117
}
118-
if (s.getFromList().get(i) instanceof SQLite3SelectStatement) {
118+
if (s.getFromList().get(i) instanceof SQLite3Select) {
119119
sb.append("(");
120120
// TODO: fix this workaround
121121
visit(s.getFromList().get(i));

src/sqlancer/sqlite3/SQLite3Visitor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import sqlancer.sqlite3.ast.SQLite3Expression.TypeLiteral;
2727
import sqlancer.sqlite3.ast.SQLite3Function;
2828
import sqlancer.sqlite3.ast.SQLite3RowValueExpression;
29-
import sqlancer.sqlite3.ast.SQLite3SelectStatement;
29+
import sqlancer.sqlite3.ast.SQLite3Select;
3030
import sqlancer.sqlite3.ast.SQLite3SetClause;
3131
import sqlancer.sqlite3.ast.SQLite3UnaryOperation;
3232
import sqlancer.sqlite3.ast.SQLite3WindowFunction;
@@ -86,7 +86,7 @@ public default void visit(SQLite3PostfixUnaryOperation exp) {
8686

8787
public abstract void visit(Function f);
8888

89-
public abstract void visit(SQLite3SelectStatement s, boolean inner);
89+
public abstract void visit(SQLite3Select s, boolean inner);
9090

9191
public abstract void visit(SQLite3OrderingTerm term);
9292

@@ -159,8 +159,8 @@ public default void visit(SQLite3Expression expr) {
159159
visit((Subquery) expr);
160160
} else if (expr instanceof Join) {
161161
visit((Join) expr);
162-
} else if (expr instanceof SQLite3SelectStatement) {
163-
visit((SQLite3SelectStatement) expr, true);
162+
} else if (expr instanceof SQLite3Select) {
163+
visit((SQLite3Select) expr, true);
164164
} else if (expr instanceof SQLite3Exist) {
165165
visit((SQLite3Exist) expr);
166166
} else if (expr instanceof BinaryComparisonOperation) {
@@ -205,8 +205,8 @@ public static String asString(SQLite3Expression expr) {
205205
throw new AssertionError();
206206
}
207207
SQLite3ToStringVisitor visitor = new SQLite3ToStringVisitor();
208-
if (expr instanceof SQLite3SelectStatement) {
209-
visitor.visit((SQLite3SelectStatement) expr, false);
208+
if (expr instanceof SQLite3Select) {
209+
visitor.visit((SQLite3Select) expr, false);
210210
} else {
211211
visitor.visit(expr);
212212
}

src/sqlancer/sqlite3/ast/SQLite3SelectStatement.java renamed to src/sqlancer/sqlite3/ast/SQLite3Select.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Column.SQLite3CollateSequence;
77

8-
public class SQLite3SelectStatement extends SQLite3Expression {
8+
public class SQLite3Select extends SQLite3Expression {
99

1010
private SelectType fromOptions = SelectType.ALL;
1111
private List<SQLite3Expression> fromList = Collections.emptyList();

src/sqlancer/sqlite3/ast/SQLite3WindowFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public static SQLite3WindowFunction getRandom(List<SQLite3Column> columns, SQLit
2020
WindowFunction func = Randomly.fromOptions(WindowFunction.values());
2121
SQLite3Expression[] args = new SQLite3Expression[func.nrArgs];
2222
for (int i = 0; i < args.length; i++) {
23-
args[i] = new SQLite3ExpressionGenerator(globalState).setColumns(columns).getRandomExpression();
23+
args[i] = new SQLite3ExpressionGenerator(globalState).setColumns(columns).generateExpression();
2424
}
2525
return new SQLite3WindowFunction(func, args);
2626
}

src/sqlancer/sqlite3/gen/SQLite3ColumnBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public String createColumn(String columnName, SQLite3GlobalState globalState, Li
5656
switch (c) {
5757
case GENERATED_AS:
5858
sb.append(" GENERATED ALWAYS AS (");
59-
sb.append(SQLite3Visitor.asString(new SQLite3ExpressionGenerator(globalState).deterministicOnly().setColumns(columns.stream().filter(p -> !p.getName().contentEquals(columnName)).collect(Collectors.toList())).getRandomExpression()));
59+
sb.append(SQLite3Visitor.asString(new SQLite3ExpressionGenerator(globalState).deterministicOnly().setColumns(columns.stream().filter(p -> !p.getName().contentEquals(columnName)).collect(Collectors.toList())).generateExpression()));
6060
sb.append(")");
6161
break;
6262
case PRIMARY_KEY:

src/sqlancer/sqlite3/gen/SQLite3Common.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ public static String createIndexName(int nr) {
3939

4040
public static String getCheckConstraint(SQLite3GlobalState globalState, List<SQLite3Column> columns) {
4141
SQLite3Expression expression = new SQLite3ExpressionGenerator(globalState).setColumns(columns)
42-
.getRandomExpression();
42+
.generateExpression();
4343
return (" CHECK ( " + SQLite3Visitor.asString(expression) + ")");
4444
}
4545

4646
public static SQLite3Expression getTrueExpression(List<SQLite3Column> columns, SQLite3GlobalState globalState) {
4747
SQLite3Expression randomExpression = new SQLite3ExpressionGenerator(globalState).setColumns(columns)
48-
.getRandomExpression();
48+
.generateExpression();
4949
SQLite3Constant expectedValue = randomExpression.getExpectedValue();
5050
if (expectedValue == null) {
5151
throw new IgnoreMeException();
@@ -66,7 +66,7 @@ public static SQLite3Expression getTrueExpression(List<SQLite3Column> columns, S
6666
// https://www.sqlite.org/syntax/ordering-term.html
6767
public static String getOrderingTerm(List<SQLite3Column> columns, SQLite3GlobalState globalState) {
6868
SQLite3Expression randExpr = new SQLite3ExpressionGenerator(globalState).setColumns(columns)
69-
.getRandomExpression();
69+
.generateExpression();
7070
StringBuilder sb = new StringBuilder(SQLite3Visitor.asString(randExpr));
7171
sb.append(" ");
7272
if (Randomly.getBoolean()) {

src/sqlancer/sqlite3/gen/SQLite3ExpressionGenerator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public List<Join> getRandomJoinClauses(List<SQLite3Table> tables) {
120120
if (Randomly.getBoolean() && tables.size() > 1) {
121121
int nrJoinClauses = (int) Randomly.getNotCachedInteger(0, tables.size());
122122
for (int i = 1; i < nrJoinClauses; i++) {
123-
SQLite3Expression joinClause = getRandomExpression();
123+
SQLite3Expression joinClause = generateExpression();
124124
SQLite3Table table = Randomly.fromList(tables);
125125
tables.remove(table);
126126
JoinType options;
@@ -138,7 +138,7 @@ public List<Join> getRandomJoinClauses(List<SQLite3Table> tables) {
138138
}
139139

140140
public SQLite3Expression generateOrderingTerm() {
141-
SQLite3Expression expr = getRandomExpression();
141+
SQLite3Expression expr = generateExpression();
142142
// COLLATE is potentially already generated
143143
if (Randomly.getBoolean()) {
144144
expr = new SQLite3OrderingTerm(expr, Ordering.getRandomValue());
@@ -188,14 +188,14 @@ enum ExpressionType {
188188
CASE_OPERATOR, MATCH, AGGREGATE_FUNCTION, ROW_VALUE_COMPARISON, AND_OR_CHAIN
189189
}
190190

191-
public SQLite3Expression getRandomExpression() {
191+
public SQLite3Expression generateExpression() {
192192
return getRandomExpression(0);
193193
}
194194

195195
public List<SQLite3Expression> getRandomExpressions(int size) {
196196
List<SQLite3Expression> expressions = new ArrayList<>();
197197
for (int i = 0; i < size; i++) {
198-
expressions.add(getRandomExpression());
198+
expressions.add(generateExpression());
199199
}
200200
return expressions;
201201
}
@@ -639,7 +639,7 @@ public SQLite3Expression getRandomUnaryOperator(int depth) {
639639

640640
public SQLite3Expression getHavingClause() {
641641
allowAggreates = true;
642-
return getRandomExpression();
642+
return generateExpression();
643643
}
644644

645645
}

src/sqlancer/sqlite3/gen/ddl/SQLite3CreateTriggerGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private static void appendTableNameAndWhen(SQLite3GlobalState globalState, Strin
112112
if (Randomly.getBoolean()) {
113113
sb.append(" WHEN ");
114114
sb.append(SQLite3Visitor
115-
.asString(new SQLite3ExpressionGenerator(globalState).setColumns(table.getColumns()).getRandomExpression()));
115+
.asString(new SQLite3ExpressionGenerator(globalState).setColumns(table.getColumns()).generateExpression()));
116116
}
117117
}
118118

src/sqlancer/sqlite3/gen/ddl/SQLite3IndexGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private String createIndex(SQLite3Table t, List<SQLite3Column> columns) {
8080
if (i != 0) {
8181
sb.append(",");
8282
}
83-
SQLite3Expression expr = new SQLite3ExpressionGenerator(globalState).setColumns(columns).deterministicOnly().getRandomExpression();
83+
SQLite3Expression expr = new SQLite3ExpressionGenerator(globalState).setColumns(columns).deterministicOnly().generateExpression();
8484
SQLite3ToStringVisitor visitor = new SQLite3ToStringVisitor();
8585
visitor.fullyQualifiedNames = false;
8686
visitor.visit(expr);
@@ -93,7 +93,7 @@ private String createIndex(SQLite3Table t, List<SQLite3Column> columns) {
9393
sb.append(")");
9494
if (Randomly.getBoolean()) {
9595
sb.append(" WHERE ");
96-
SQLite3Expression expr = new SQLite3ExpressionGenerator(globalState).setColumns(columns).deterministicOnly().getRandomExpression();
96+
SQLite3Expression expr = new SQLite3ExpressionGenerator(globalState).setColumns(columns).deterministicOnly().generateExpression();
9797
SQLite3ToStringVisitor visitor = new SQLite3ToStringVisitor();
9898
visitor.fullyQualifiedNames = false;
9999
visitor.visit(expr);

0 commit comments

Comments
 (0)