Skip to content

Commit f642b8a

Browse files
committed
[Postgres] Implement the expected value visitor for LIKE
1 parent f5e6485 commit f642b8a

3 files changed

Lines changed: 21 additions & 9 deletions

File tree

src/sqlancer/postgres/PostgresExpectedValueVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import sqlancer.postgres.ast.PostgresExpression;
1111
import sqlancer.postgres.ast.PostgresFunction;
1212
import sqlancer.postgres.ast.PostgresInOperation;
13+
import sqlancer.postgres.ast.PostgresLikeOperation;
1314
import sqlancer.postgres.ast.PostgresOrderByTerm;
1415
import sqlancer.postgres.ast.PostgresPOSIXRegularExpression;
1516
import sqlancer.postgres.ast.PostgresPostfixOperation;
@@ -169,4 +170,11 @@ public void visit(PostgresBinaryLogicalOperation op) {
169170
visit(op.getRight());
170171
}
171172

173+
@Override
174+
public void visit(PostgresLikeOperation op) {
175+
print(op);
176+
visit(op.getLeft());
177+
visit(op.getRight());
178+
}
179+
172180
}

src/sqlancer/postgres/PostgresToStringVisitor.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Optional;
44

55
import sqlancer.Randomly;
6+
import sqlancer.common.visitor.BinaryOperation;
67
import sqlancer.common.visitor.ToStringVisitor;
78
import sqlancer.postgres.PostgresSchema.PostgresDataType;
89
import sqlancer.postgres.ast.PostgresAggregate;
@@ -17,6 +18,7 @@
1718
import sqlancer.postgres.ast.PostgresInOperation;
1819
import sqlancer.postgres.ast.PostgresJoin;
1920
import sqlancer.postgres.ast.PostgresJoin.PostgresJoinType;
21+
import sqlancer.postgres.ast.PostgresLikeOperation;
2022
import sqlancer.postgres.ast.PostgresOrderByTerm;
2123
import sqlancer.postgres.ast.PostgresPOSIXRegularExpression;
2224
import sqlancer.postgres.ast.PostgresPostfixOperation;
@@ -340,13 +342,12 @@ public void visit(PostgresCollate op) {
340342

341343
@Override
342344
public void visit(PostgresBinaryLogicalOperation op) {
343-
sb.append("(");
344-
visit(op.getLeft());
345-
sb.append(")");
346-
sb.append(op.getOperatorRepresentation());
347-
sb.append("(");
348-
visit(op.getRight());
349-
sb.append(")");
345+
super.visit((BinaryOperation<PostgresExpression>) op);
346+
}
347+
348+
@Override
349+
public void visit(PostgresLikeOperation op) {
350+
super.visit((BinaryOperation<PostgresExpression>) op);
350351
}
351352

352353
}

src/sqlancer/postgres/PostgresVisitor.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import sqlancer.postgres.ast.PostgresExpression;
1515
import sqlancer.postgres.ast.PostgresFunction;
1616
import sqlancer.postgres.ast.PostgresInOperation;
17+
import sqlancer.postgres.ast.PostgresLikeOperation;
1718
import sqlancer.postgres.ast.PostgresOrderByTerm;
1819
import sqlancer.postgres.ast.PostgresPOSIXRegularExpression;
1920
import sqlancer.postgres.ast.PostgresPostfixOperation;
@@ -63,6 +64,8 @@ public interface PostgresVisitor {
6364

6465
void visit(PostgresBinaryLogicalOperation op);
6566

67+
void visit(PostgresLikeOperation op);
68+
6669
default void visit(PostgresExpression expression) {
6770
if (expression instanceof PostgresConstant) {
6871
visit((PostgresConstant) expression);
@@ -98,8 +101,8 @@ default void visit(PostgresExpression expression) {
98101
visit((PostgresFromTable) expression);
99102
} else if (expression instanceof PostgresSubquery) {
100103
visit((PostgresSubquery) expression);
101-
} else if (expression instanceof PostgresBinaryLogicalOperation) {
102-
visit((PostgresBinaryLogicalOperation) expression);
104+
} else if (expression instanceof PostgresLikeOperation) {
105+
visit((PostgresLikeOperation) expression);
103106
} else {
104107
throw new AssertionError(expression);
105108
}

0 commit comments

Comments
 (0)