forked from sqlancer/sqlancer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabendExpectedValueVisitor.java
More file actions
152 lines (128 loc) · 4.65 KB
/
Copy pathDatabendExpectedValueVisitor.java
File metadata and controls
152 lines (128 loc) · 4.65 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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package sqlancer.databend;
import java.util.List;
import sqlancer.databend.ast.DatabendAlias;
import sqlancer.databend.ast.DatabendBetweenOperation;
import sqlancer.databend.ast.DatabendBinaryOperation;
import sqlancer.databend.ast.DatabendColumnReference;
import sqlancer.databend.ast.DatabendConstant;
import sqlancer.databend.ast.DatabendExpression;
import sqlancer.databend.ast.DatabendFunctionOperation;
import sqlancer.databend.ast.DatabendInOperation;
import sqlancer.databend.ast.DatabendJoin;
import sqlancer.databend.ast.DatabendOrderByTerm;
import sqlancer.databend.ast.DatabendPostFixText;
import sqlancer.databend.ast.DatabendSelect;
import sqlancer.databend.ast.DatabendTableReference;
import sqlancer.databend.ast.DatabendUnaryPostfixOperation;
import sqlancer.databend.ast.DatabendUnaryPrefixOperation;
public class DatabendExpectedValueVisitor {
protected final StringBuilder sb = new StringBuilder();
private void print(DatabendExpression expr) {
sb.append(DatabendToStringVisitor.asString(expr));
sb.append(" -- ");
sb.append(expr.getExpectedValue());
sb.append("\n");
}
public void visit(DatabendExpression expr) {
assert expr != null;
if (expr instanceof DatabendColumnReference) {
visit((DatabendColumnReference) expr);
} else if (expr instanceof DatabendUnaryPostfixOperation) {
visit((DatabendUnaryPostfixOperation) expr);
} else if (expr instanceof DatabendUnaryPrefixOperation) {
visit((DatabendUnaryPrefixOperation) expr);
} else if (expr instanceof DatabendBinaryOperation) {
visit((DatabendBinaryOperation) expr);
} else if (expr instanceof DatabendTableReference) {
visit((DatabendTableReference) expr);
} else if (expr instanceof DatabendFunctionOperation<?>) {
visit((DatabendFunctionOperation<?>) expr);
} else if (expr instanceof DatabendBetweenOperation) {
visit((DatabendBetweenOperation) expr);
} else if (expr instanceof DatabendInOperation) {
visit((DatabendInOperation) expr);
} else if (expr instanceof DatabendOrderByTerm) {
visit((DatabendOrderByTerm) expr);
} else if (expr instanceof DatabendAlias) {
visit((DatabendAlias) expr);
} else if (expr instanceof DatabendPostFixText) {
visit((DatabendPostFixText) expr);
} else if (expr instanceof DatabendConstant) {
visit((DatabendConstant) expr);
} else if (expr instanceof DatabendSelect) {
visit((DatabendSelect) expr);
} else if (expr instanceof DatabendJoin) {
visit((DatabendJoin) expr);
} else {
throw new AssertionError(expr);
}
}
public void visit(DatabendColumnReference c) {
print(c);
}
public void visit(DatabendUnaryPostfixOperation op) {
print(op);
visit(op.getExpr());
}
public void visit(DatabendUnaryPrefixOperation op) {
print(op);
visit(op.getExpr());
}
public void visit(DatabendBinaryOperation op) {
print(op);
visit(op.getLeft());
visit(op.getRight());
}
public void visit(DatabendTableReference t) {
print(t);
}
public void visit(DatabendFunctionOperation<?> fun) {
print(fun);
visit(fun.getArgs());
}
public void visit(List<DatabendExpression> expressions) {
for (DatabendExpression expression : expressions) {
visit(expression);
}
}
public void visit(DatabendBetweenOperation op) {
print(op);
visit(op.getLeft());
visit(op.getMiddle());
visit(op.getRight());
}
public void visit(DatabendInOperation op) {
print(op);
visit(op.getLeft());
visit(op.getRight());
}
public void visit(DatabendOrderByTerm op) {
print(op);
visit(op.getExpr());
}
public void visit(DatabendAlias op) {
print(op);
visit(op.getExpr());
}
public void visit(DatabendPostFixText postFixText) {
print(postFixText);
visit(postFixText.getExpr());
}
public void visit(DatabendConstant constant) {
print(constant);
}
public void visit(DatabendSelect select) {
print(select.getWhereClause());
}
public void visit(DatabendJoin join) {
print(join.getOnCondition());
}
public String get() {
return sb.toString();
}
public static String asExpectedValues(DatabendExpression expr) {
DatabendExpectedValueVisitor v = new DatabendExpectedValueVisitor();
v.visit(expr);
return v.get();
}
}