-
Notifications
You must be signed in to change notification settings - Fork 397
Expand file tree
/
Copy pathSQLite3TLPBase.java
More file actions
71 lines (62 loc) · 2.69 KB
/
SQLite3TLPBase.java
File metadata and controls
71 lines (62 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package sqlancer.sqlite3.oracle.tlp;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import sqlancer.Randomly;
import sqlancer.common.gen.ExpressionGenerator;
import sqlancer.common.oracle.TernaryLogicPartitioningOracleBase;
import sqlancer.common.oracle.TestOracle;
import sqlancer.sqlite3.SQLite3Errors;
import sqlancer.sqlite3.SQLite3GlobalState;
import sqlancer.sqlite3.ast.SQLite3Expression;
import sqlancer.sqlite3.ast.SQLite3Expression.Join;
import sqlancer.sqlite3.ast.SQLite3Expression.SQLite3ColumnName;
import sqlancer.sqlite3.ast.SQLite3Select;
import sqlancer.sqlite3.gen.SQLite3Common;
import sqlancer.sqlite3.gen.SQLite3ExpressionGenerator;
import sqlancer.sqlite3.schema.SQLite3Schema;
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Column;
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Table;
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Tables;
public class SQLite3TLPBase extends TernaryLogicPartitioningOracleBase<SQLite3Expression, SQLite3GlobalState>
implements TestOracle<SQLite3GlobalState> {
SQLite3Schema s;
SQLite3Tables targetTables;
SQLite3ExpressionGenerator gen;
SQLite3Select select;
public SQLite3TLPBase(SQLite3GlobalState state) {
super(state);
SQLite3Errors.addExpectedExpressionErrors(errors);
SQLite3Errors.addQueryErrors(errors);
}
@Override
public void check() throws SQLException {
s = state.getSchema();
targetTables = s.getRandomTableNonEmptyTables();
gen = new SQLite3ExpressionGenerator(state).setColumns(targetTables.getColumns());
initializeTernaryPredicateVariants();
select = new SQLite3Select();
select.setFetchColumns(generateFetchColumns());
List<SQLite3Table> tables = targetTables.getTables();
List<Join> joinStatements = gen.getRandomJoinClauses(tables);
List<SQLite3Expression> tableRefs = SQLite3Common.getTableRefs(tables, s);
select.setJoinClauses(joinStatements.stream().collect(Collectors.toList()));
select.setFromList(tableRefs);
select.setWhereClause(null);
}
List<SQLite3Expression> generateFetchColumns() {
List<SQLite3Expression> columns = new ArrayList<>();
if (Randomly.getBoolean()) {
columns.add(new SQLite3ColumnName(SQLite3Column.createDummy("*"), null));
} else {
columns = Randomly.nonEmptySubset(targetTables.getColumns()).stream()
.map(c -> new SQLite3ColumnName(c, null)).collect(Collectors.toList());
}
return columns;
}
@Override
protected ExpressionGenerator<SQLite3Expression> getGen() {
return gen;
}
}