forked from sqlancer/sqlancer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathYSQLVisitor.java
More file actions
120 lines (95 loc) · 4.38 KB
/
YSQLVisitor.java
File metadata and controls
120 lines (95 loc) · 4.38 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package sqlancer.yugabyte.ysql;
import java.util.List;
import sqlancer.yugabyte.ysql.YSQLSchema.YSQLColumn;
import sqlancer.yugabyte.ysql.YSQLSchema.YSQLDataType;
import sqlancer.yugabyte.ysql.ast.YSQLAggregate;
import sqlancer.yugabyte.ysql.ast.YSQLBetweenOperation;
import sqlancer.yugabyte.ysql.ast.YSQLBinaryLogicalOperation;
import sqlancer.yugabyte.ysql.ast.YSQLCastOperation;
import sqlancer.yugabyte.ysql.ast.YSQLColumnValue;
import sqlancer.yugabyte.ysql.ast.YSQLConstant;
import sqlancer.yugabyte.ysql.ast.YSQLExpression;
import sqlancer.yugabyte.ysql.ast.YSQLFunction;
import sqlancer.yugabyte.ysql.ast.YSQLInOperation;
import sqlancer.yugabyte.ysql.ast.YSQLOrderByTerm;
import sqlancer.yugabyte.ysql.ast.YSQLPOSIXRegularExpression;
import sqlancer.yugabyte.ysql.ast.YSQLPostfixOperation;
import sqlancer.yugabyte.ysql.ast.YSQLPostfixText;
import sqlancer.yugabyte.ysql.ast.YSQLPrefixOperation;
import sqlancer.yugabyte.ysql.ast.YSQLSelect;
import sqlancer.yugabyte.ysql.ast.YSQLSelect.YSQLFromTable;
import sqlancer.yugabyte.ysql.ast.YSQLSelect.YSQLSubquery;
import sqlancer.yugabyte.ysql.ast.YSQLSimilarTo;
import sqlancer.yugabyte.ysql.gen.YSQLExpressionGenerator;
public interface YSQLVisitor {
static String asString(YSQLExpression expr) {
YSQLToStringVisitor visitor = new YSQLToStringVisitor();
visitor.visit(expr);
return visitor.get();
}
static String asExpectedValues(YSQLExpression expr) {
YSQLExpectedValueVisitor v = new YSQLExpectedValueVisitor();
v.visit(expr);
return v.get();
}
static String getExpressionAsString(YSQLGlobalState globalState, YSQLDataType type, List<YSQLColumn> columns) {
YSQLExpression expression = YSQLExpressionGenerator.generateExpression(globalState, columns, type);
YSQLToStringVisitor visitor = new YSQLToStringVisitor();
visitor.visit(expression);
return visitor.get();
}
void visit(YSQLConstant constant);
void visit(YSQLPostfixOperation op);
void visit(YSQLColumnValue c);
void visit(YSQLPrefixOperation op);
void visit(YSQLSelect op);
void visit(YSQLOrderByTerm op);
void visit(YSQLFunction f);
void visit(YSQLCastOperation cast);
void visit(YSQLBetweenOperation op);
void visit(YSQLInOperation op);
void visit(YSQLPostfixText op);
void visit(YSQLAggregate op);
void visit(YSQLSimilarTo op);
void visit(YSQLPOSIXRegularExpression op);
void visit(YSQLFromTable from);
void visit(YSQLSubquery subquery);
void visit(YSQLBinaryLogicalOperation op);
default void visit(YSQLExpression expression) {
if (expression instanceof YSQLConstant) {
visit((YSQLConstant) expression);
} else if (expression instanceof YSQLPostfixOperation) {
visit((YSQLPostfixOperation) expression);
} else if (expression instanceof YSQLColumnValue) {
visit((YSQLColumnValue) expression);
} else if (expression instanceof YSQLPrefixOperation) {
visit((YSQLPrefixOperation) expression);
} else if (expression instanceof YSQLSelect) {
visit((YSQLSelect) expression);
} else if (expression instanceof YSQLOrderByTerm) {
visit((YSQLOrderByTerm) expression);
} else if (expression instanceof YSQLFunction) {
visit((YSQLFunction) expression);
} else if (expression instanceof YSQLCastOperation) {
visit((YSQLCastOperation) expression);
} else if (expression instanceof YSQLBetweenOperation) {
visit((YSQLBetweenOperation) expression);
} else if (expression instanceof YSQLInOperation) {
visit((YSQLInOperation) expression);
} else if (expression instanceof YSQLAggregate) {
visit((YSQLAggregate) expression);
} else if (expression instanceof YSQLPostfixText) {
visit((YSQLPostfixText) expression);
} else if (expression instanceof YSQLSimilarTo) {
visit((YSQLSimilarTo) expression);
} else if (expression instanceof YSQLPOSIXRegularExpression) {
visit((YSQLPOSIXRegularExpression) expression);
} else if (expression instanceof YSQLFromTable) {
visit((YSQLFromTable) expression);
} else if (expression instanceof YSQLSubquery) {
visit((YSQLSubquery) expression);
} else {
throw new AssertionError(expression);
}
}
}