2020import sqlancer .postgres .ast .PostgresAggregate .PostgresAggregateFunction ;
2121import sqlancer .postgres .ast .PostgresAlias ;
2222import sqlancer .postgres .ast .PostgresExpression ;
23+ import sqlancer .postgres .ast .PostgresJoin ;
2324import sqlancer .postgres .ast .PostgresPostfixOperation ;
2425import sqlancer .postgres .ast .PostgresPostfixOperation .PostfixOperator ;
2526import sqlancer .postgres .ast .PostgresPrefixOperation ;
@@ -38,10 +39,13 @@ public PostgresQueryPartitioningAggregateTester(PostgresGlobalState state) {
3839 super (state );
3940 PostgresCommon .addGroupingErrors (errors );
4041 }
41-
42+
4243 public void check () throws SQLException {
4344 super .check ();
44- PostgresAggregateFunction aggregateFunction = Randomly .fromOptions (PostgresAggregateFunction .MAX , PostgresAggregateFunction .MIN , PostgresAggregateFunction .SUM , PostgresAggregateFunction .BIT_AND , PostgresAggregateFunction .BIT_OR , PostgresAggregateFunction .BOOL_AND , PostgresAggregateFunction .BOOL_OR );
45+ PostgresAggregateFunction aggregateFunction = Randomly .fromOptions (PostgresAggregateFunction .MAX ,
46+ PostgresAggregateFunction .MIN , PostgresAggregateFunction .SUM , PostgresAggregateFunction .BIT_AND ,
47+ PostgresAggregateFunction .BIT_OR , PostgresAggregateFunction .BOOL_AND , PostgresAggregateFunction .BOOL_OR ,
48+ PostgresAggregateFunction .COUNT );
4549 PostgresAggregate aggregate = gen .generateArgsForAggregate (aggregateFunction .getRandomReturnType (),
4650 aggregateFunction );
4751 List <PostgresExpression > fetchColumns = new ArrayList <>();
@@ -50,9 +54,6 @@ public void check() throws SQLException {
5054 fetchColumns .add (gen .generateAggregate ());
5155 }
5256 select .setFetchColumns (Arrays .asList (aggregate ));
53- // if (Randomly.getBooleanWithRatherLowProbability()) {
54- // select.setJoinList(PostgresNoRECTester.getJoins(from, state));
55- // }
5657 if (Randomly .getBooleanWithRatherLowProbability ()) {
5758 select .setOrderByExpressions (gen .generateOrderBy ());
5859 }
@@ -85,9 +86,9 @@ private String createMetamorphicUnionQuery(PostgresSelect select, PostgresAggreg
8586 PostgresExpression negatedClause = new PostgresPrefixOperation (whereClause , PrefixOperator .NOT );
8687 PostgresExpression notNullClause = new PostgresPostfixOperation (whereClause , PostfixOperator .IS_NULL );
8788 List <PostgresExpression > mappedAggregate = mapped (aggregate );
88- PostgresSelect leftSelect = getSelect (mappedAggregate , from , whereClause /* , select.getJoinList() */ );
89- PostgresSelect middleSelect = getSelect (mappedAggregate , from , negatedClause /* , select.getJoinList() */ );
90- PostgresSelect rightSelect = getSelect (mappedAggregate , from , notNullClause /* , select.getJoinList() */ );
89+ PostgresSelect leftSelect = getSelect (mappedAggregate , from , whereClause , select .getJoinClauses () );
90+ PostgresSelect middleSelect = getSelect (mappedAggregate , from , negatedClause , select .getJoinClauses () );
91+ PostgresSelect rightSelect = getSelect (mappedAggregate , from , notNullClause , select .getJoinClauses () );
9192 metamorphicQuery = "SELECT " + getOuterAggregateFunction (aggregate ).toString () + " FROM (" ;
9293 metamorphicQuery += PostgresVisitor .asString (leftSelect ) + " UNION ALL "
9394 + PostgresVisitor .asString (middleSelect ) + " UNION ALL " + PostgresVisitor .asString (rightSelect );
@@ -116,7 +117,7 @@ private String getAggregateResult(String queryString) throws SQLException {
116117 private List <PostgresExpression > mapped (PostgresAggregate aggregate ) {
117118 switch (aggregate .getFunction ()) {
118119 case SUM :
119- // case COUNT:
120+ case COUNT :
120121 case BIT_AND :
121122 case BIT_OR :
122123 case BOOL_AND :
@@ -150,21 +151,20 @@ private String getOuterAggregateFunction(PostgresAggregate aggregate) {
150151 switch (aggregate .getFunction ()) {
151152// case AVG:
152153// return "SUM(agg0::DECIMAL)/SUM(agg1)::DECIMAL";
153- // case COUNT:
154- // case COUNT_ROWS:
155- // return PostgresAggregateFunction.SUM.toString() + "(agg0)";
154+ case COUNT :
155+ return PostgresAggregateFunction .SUM .toString () + "(agg0)" ;
156156 default :
157157 return aggregate .getFunction ().toString () + "(agg0)" ;
158158 }
159159 }
160160
161161 private PostgresSelect getSelect (List <PostgresExpression > aggregates , List <PostgresExpression > from ,
162- PostgresExpression whereClause /* , List<PostgresJoin> joinList */ ) {
162+ PostgresExpression whereClause , List <PostgresJoin > joinList ) {
163163 PostgresSelect leftSelect = new PostgresSelect ();
164164 leftSelect .setFetchColumns (aggregates );
165165 leftSelect .setFromList (from );
166166 leftSelect .setWhereClause (whereClause );
167- // leftSelect.setJoinList (joinList);
167+ leftSelect .setJoinClauses (joinList );
168168 if (Randomly .getBooleanWithSmallProbability ()) {
169169 leftSelect .setGroupByExpressions (gen .generateExpressions (Randomly .smallNumber () + 1 ));
170170 }
0 commit comments