◐ Shell
reader mode source ↗
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
File filter
Conversations
Jump to
Diff view
Apply and reload
Show whitespace
Diff view
Apply and reload
16 changes: 16 additions & 0 deletions src/sqlancer/postgres/PostgresExpectedValueVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import sqlancer.postgres.ast.PostgresColumnReference;
import sqlancer.postgres.ast.PostgresColumnValue;
import sqlancer.postgres.ast.PostgresConstant;
import sqlancer.postgres.ast.PostgresExpression;
import sqlancer.postgres.ast.PostgresFunction;
import sqlancer.postgres.ast.PostgresInOperation;
Expand All @@ -24,6 +25,7 @@
import sqlancer.postgres.ast.PostgresSimilarTo;
import sqlancer.postgres.ast.PostgresTableReference;
import sqlancer.postgres.ast.PostgresWindowFunction;

public final class PostgresExpectedValueVisitor implements PostgresVisitor {

Expand Down Expand Up @@ -195,4 +197,18 @@ public void visit(PostgresLikeOperation op) {
visit(op.getRight());
}

}
10 changes: 10 additions & 0 deletions src/sqlancer/postgres/PostgresVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import sqlancer.postgres.ast.PostgresColumnReference;
import sqlancer.postgres.ast.PostgresColumnValue;
import sqlancer.postgres.ast.PostgresConstant;
import sqlancer.postgres.ast.PostgresExpression;
import sqlancer.postgres.ast.PostgresFunction;
import sqlancer.postgres.ast.PostgresInOperation;
Expand All @@ -27,6 +28,7 @@
import sqlancer.postgres.ast.PostgresSimilarTo;
import sqlancer.postgres.ast.PostgresTableReference;
import sqlancer.postgres.ast.PostgresWindowFunction;
import sqlancer.postgres.gen.PostgresExpressionGenerator;

public interface PostgresVisitor {
Expand Down Expand Up @@ -75,6 +77,10 @@ public interface PostgresVisitor {

void visit(PostgresWindowFunction windowFunction);

default void visit(PostgresExpression expression) {
if (expression instanceof PostgresConstant) {
visit((PostgresConstant) expression);
Expand Down Expand Up @@ -118,6 +124,10 @@ default void visit(PostgresExpression expression) {
visit((PostgresTableReference) expression);
} else if (expression instanceof PostgresWindowFunction) {
visit((PostgresWindowFunction) expression);
} else {
throw new AssertionError(expression);
}
65 changes: 65 additions & 0 deletions src/sqlancer/postgres/ast/PostgresCTE.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
9 changes: 9 additions & 0 deletions src/sqlancer/postgres/ast/PostgresSelect.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class PostgresSelect extends SelectBase<PostgresExpression>
private ForClause forClause;
private List<PostgresExpression> windowFunctions = new ArrayList<>();
private final Map<String, WindowDefinition> windowDefinitions = new HashMap<>();

public enum ForClause {
UPDATE("UPDATE"), NO_KEY_UPDATE("NO KEY UPDATE"), SHARE("SHARE"), KEY_SHARE("KEY SHARE");
Expand Up @@ -191,6 +192,14 @@ public ForClause getForClause() {
return forClause;
}

@Override
public String asString() {
return PostgresVisitor.asString(this);
Expand Down
54 changes: 54 additions & 0 deletions src/sqlancer/postgres/gen/PostgresExpressionGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import sqlancer.postgres.ast.PostgresColumnValue;
import sqlancer.postgres.ast.PostgresConcatOperation;
import sqlancer.postgres.ast.PostgresConstant;
import sqlancer.postgres.ast.PostgresExpression;
import sqlancer.postgres.ast.PostgresFunction;
import sqlancer.postgres.ast.PostgresFunction.PostgresFunctionWithResult;
@@ -68,6 +69,7 @@
import sqlancer.postgres.ast.PostgresWindowFunction;
import sqlancer.postgres.ast.PostgresWindowFunction.WindowFrame;
import sqlancer.postgres.ast.PostgresWindowFunction.WindowSpecification;

public class PostgresExpressionGenerator implements ExpressionGenerator<PostgresExpression>,
NoRECGenerator<PostgresSelect, PostgresJoin, PostgresExpression, PostgresTable, PostgresColumn>,
Expand Down Expand Up @@ -972,4 +974,56 @@ boolean mutateLimit(PostgresSelect select) {
}
return increase;
}
}
6 changes: 6 additions & 0 deletions src/sqlancer/postgres/gen/PostgresRandomQueryGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public static PostgresSelect createRandomQuery(int nrColumns, PostgresGlobalStat
columns.add(gen.generateExpression(0));
}
PostgresSelect select = new PostgresSelect();
select.setSelectType(SelectType.getRandom());
if (select.getSelectOption() == SelectType.DISTINCT && Randomly.getBoolean()) {
select.setDistinctOnClause(gen.generateExpression(0));
Expand Down
Loading
Toggle all file notes Toggle all file annotations