1+ package sqlancer .sqlite3 .queries ;
2+
3+ import java .sql .SQLException ;
4+ import java .util .ArrayList ;
5+ import java .util .List ;
6+ import java .util .stream .Collectors ;
7+
8+ import sqlancer .DatabaseProvider ;
9+ import sqlancer .Randomly ;
10+ import sqlancer .TestOracle ;
11+ import sqlancer .sqlite3 .SQLite3Provider .SQLite3GlobalState ;
12+ import sqlancer .sqlite3 .SQLite3Visitor ;
13+ import sqlancer .sqlite3 .ast .SQLite3Expression ;
14+ import sqlancer .sqlite3 .ast .SQLite3Expression .SQLite3ColumnName ;
15+
16+ public class SQLite3QueryPartitioningGroupByTester extends SQLite3QueryPartitioningBase {
17+
18+ public SQLite3QueryPartitioningGroupByTester (SQLite3GlobalState state ) {
19+ super (state );
20+ }
21+
22+ @ Override
23+ public void check () throws SQLException {
24+ super .check ();
25+ select .setGroupByClause (select .getFetchColumns ());
26+ select .setWhereClause (null );
27+ String originalQueryString = SQLite3Visitor .asString (select );
28+
29+ List <String > resultSet = DatabaseProvider .getResultSetFirstColumnAsString (originalQueryString , errors ,
30+ state .getConnection (), state );
31+
32+ select .setWhereClause (predicate );
33+ String firstQueryString = SQLite3Visitor .asString (select );
34+ select .setWhereClause (negatedPredicate );
35+ String secondQueryString = SQLite3Visitor .asString (select );
36+ select .setWhereClause (isNullPredicate );
37+ String thirdQueryString = SQLite3Visitor .asString (select );
38+ List <String > combinedString = new ArrayList <>();
39+ List <String > secondResultSet = TestOracle .getCombinedResultSetNoDuplicates (firstQueryString , secondQueryString ,
40+ thirdQueryString , combinedString , true , state , errors );
41+ TestOracle .assumeResultSetsAreEqual (resultSet , secondResultSet , originalQueryString , combinedString , state );
42+ }
43+
44+ List <SQLite3Expression > generateFetchColumns () {
45+ List <SQLite3Expression > columns = new ArrayList <>();
46+ columns = Randomly .nonEmptySubset (targetTables .getColumns ()).stream ().map (c -> new SQLite3ColumnName (c , null ))
47+ .collect (Collectors .toList ());
48+ return columns ;
49+ }
50+
51+ }
0 commit comments