Skip to content

Commit 0e9c492

Browse files
authored
feat: add visit context to Rel, Expression and FuncArg Visitors (#427)
Introduces a VisitationContext type parameter to the following core visitors * ExpressionVisitor * RelVisitor * FuncArgVisitor and updates all visit methods to consume it. This is also propagated to all subclasses of these visitors. The aim of this change is to make it easier to track visitation state for things like field references through subquery boundaries. BREAKING CHANGE: ExpressionVisitor methods have new Context parameter BREAKING CHANGE: RelVisitor methods have new Context parameter BREAKING CHANGE: FunArgVisitor methods have new Context parameter
1 parent f87929d commit 0e9c492

File tree

71 files changed

+1353
-941
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1353
-941
lines changed
Lines changed: 85 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,206 +1,208 @@
11
package io.substrait.expression;
22

3-
public abstract class AbstractExpressionVisitor<OUTPUT, EXCEPTION extends Exception>
4-
implements ExpressionVisitor<OUTPUT, EXCEPTION> {
5-
public abstract OUTPUT visitFallback(Expression expr);
3+
import io.substrait.util.VisitationContext;
4+
5+
public abstract class AbstractExpressionVisitor<O, C extends VisitationContext, E extends Exception>
6+
implements ExpressionVisitor<O, C, E> {
7+
public abstract O visitFallback(Expression expr, C context);
68

79
@Override
8-
public OUTPUT visit(Expression.NullLiteral expr) throws EXCEPTION {
9-
return visitFallback(expr);
10+
public O visit(Expression.NullLiteral expr, C context) throws E {
11+
return visitFallback(expr, context);
1012
}
1113

1214
@Override
13-
public OUTPUT visit(Expression.BoolLiteral expr) throws EXCEPTION {
14-
return visitFallback(expr);
15+
public O visit(Expression.BoolLiteral expr, C context) throws E {
16+
return visitFallback(expr, context);
1517
}
1618

1719
@Override
18-
public OUTPUT visit(Expression.I8Literal expr) throws EXCEPTION {
19-
return visitFallback(expr);
20+
public O visit(Expression.I8Literal expr, C context) throws E {
21+
return visitFallback(expr, context);
2022
}
2123

2224
@Override
23-
public OUTPUT visit(Expression.I16Literal expr) throws EXCEPTION {
24-
return visitFallback(expr);
25+
public O visit(Expression.I16Literal expr, C context) throws E {
26+
return visitFallback(expr, context);
2527
}
2628

2729
@Override
28-
public OUTPUT visit(Expression.I32Literal expr) throws EXCEPTION {
29-
return visitFallback(expr);
30+
public O visit(Expression.I32Literal expr, C context) throws E {
31+
return visitFallback(expr, context);
3032
}
3133

3234
@Override
33-
public OUTPUT visit(Expression.I64Literal expr) throws EXCEPTION {
34-
return visitFallback(expr);
35+
public O visit(Expression.I64Literal expr, C context) throws E {
36+
return visitFallback(expr, context);
3537
}
3638

3739
@Override
38-
public OUTPUT visit(Expression.FP32Literal expr) throws EXCEPTION {
39-
return visitFallback(expr);
40+
public O visit(Expression.FP32Literal expr, C context) throws E {
41+
return visitFallback(expr, context);
4042
}
4143

4244
@Override
43-
public OUTPUT visit(Expression.FP64Literal expr) throws EXCEPTION {
44-
return visitFallback(expr);
45+
public O visit(Expression.FP64Literal expr, C context) throws E {
46+
return visitFallback(expr, context);
4547
}
4648

4749
@Override
48-
public OUTPUT visit(Expression.StrLiteral expr) throws EXCEPTION {
49-
return visitFallback(expr);
50+
public O visit(Expression.StrLiteral expr, C context) throws E {
51+
return visitFallback(expr, context);
5052
}
5153

5254
@Override
53-
public OUTPUT visit(Expression.BinaryLiteral expr) throws EXCEPTION {
54-
return visitFallback(expr);
55+
public O visit(Expression.BinaryLiteral expr, C context) throws E {
56+
return visitFallback(expr, context);
5557
}
5658

5759
@Override
58-
public OUTPUT visit(Expression.TimeLiteral expr) throws EXCEPTION {
59-
return visitFallback(expr);
60+
public O visit(Expression.TimeLiteral expr, C context) throws E {
61+
return visitFallback(expr, context);
6062
}
6163

6264
@Override
63-
public OUTPUT visit(Expression.DateLiteral expr) throws EXCEPTION {
64-
return visitFallback(expr);
65+
public O visit(Expression.DateLiteral expr, C context) throws E {
66+
return visitFallback(expr, context);
6567
}
6668

6769
@Override
68-
public OUTPUT visit(Expression.TimestampLiteral expr) throws EXCEPTION {
69-
return visitFallback(expr);
70+
public O visit(Expression.TimestampLiteral expr, C context) throws E {
71+
return visitFallback(expr, context);
7072
}
7173

7274
@Override
73-
public OUTPUT visit(Expression.TimestampTZLiteral expr) throws EXCEPTION {
74-
return visitFallback(expr);
75+
public O visit(Expression.TimestampTZLiteral expr, C context) throws E {
76+
return visitFallback(expr, context);
7577
}
7678

7779
@Override
78-
public OUTPUT visit(Expression.PrecisionTimestampLiteral expr) throws EXCEPTION {
79-
return visitFallback(expr);
80+
public O visit(Expression.PrecisionTimestampLiteral expr, C context) throws E {
81+
return visitFallback(expr, context);
8082
}
8183

8284
@Override
83-
public OUTPUT visit(Expression.PrecisionTimestampTZLiteral expr) throws EXCEPTION {
84-
return visitFallback(expr);
85+
public O visit(Expression.PrecisionTimestampTZLiteral expr, C context) throws E {
86+
return visitFallback(expr, context);
8587
}
8688

8789
@Override
88-
public OUTPUT visit(Expression.IntervalYearLiteral expr) throws EXCEPTION {
89-
return visitFallback(expr);
90+
public O visit(Expression.IntervalYearLiteral expr, C context) throws E {
91+
return visitFallback(expr, context);
9092
}
9193

9294
@Override
93-
public OUTPUT visit(Expression.IntervalDayLiteral expr) throws EXCEPTION {
94-
return visitFallback(expr);
95+
public O visit(Expression.IntervalDayLiteral expr, C context) throws E {
96+
return visitFallback(expr, context);
9597
}
9698

9799
@Override
98-
public OUTPUT visit(Expression.IntervalCompoundLiteral expr) throws EXCEPTION {
99-
return visitFallback(expr);
100+
public O visit(Expression.IntervalCompoundLiteral expr, C context) throws E {
101+
return visitFallback(expr, context);
100102
}
101103

102104
@Override
103-
public OUTPUT visit(Expression.UUIDLiteral expr) throws EXCEPTION {
104-
return visitFallback(expr);
105+
public O visit(Expression.UUIDLiteral expr, C context) throws E {
106+
return visitFallback(expr, context);
105107
}
106108

107109
@Override
108-
public OUTPUT visit(Expression.FixedCharLiteral expr) throws EXCEPTION {
109-
return visitFallback(expr);
110+
public O visit(Expression.FixedCharLiteral expr, C context) throws E {
111+
return visitFallback(expr, context);
110112
}
111113

112114
@Override
113-
public OUTPUT visit(Expression.VarCharLiteral expr) throws EXCEPTION {
114-
return visitFallback(expr);
115+
public O visit(Expression.VarCharLiteral expr, C context) throws E {
116+
return visitFallback(expr, context);
115117
}
116118

117119
@Override
118-
public OUTPUT visit(Expression.FixedBinaryLiteral expr) throws EXCEPTION {
119-
return visitFallback(expr);
120+
public O visit(Expression.FixedBinaryLiteral expr, C context) throws E {
121+
return visitFallback(expr, context);
120122
}
121123

122124
@Override
123-
public OUTPUT visit(Expression.DecimalLiteral expr) throws EXCEPTION {
124-
return visitFallback(expr);
125+
public O visit(Expression.DecimalLiteral expr, C context) throws E {
126+
return visitFallback(expr, context);
125127
}
126128

127129
@Override
128-
public OUTPUT visit(Expression.MapLiteral expr) throws EXCEPTION {
129-
return visitFallback(expr);
130+
public O visit(Expression.MapLiteral expr, C context) throws E {
131+
return visitFallback(expr, context);
130132
}
131133

132134
@Override
133-
public OUTPUT visit(Expression.EmptyMapLiteral expr) throws EXCEPTION {
134-
return visitFallback(expr);
135+
public O visit(Expression.EmptyMapLiteral expr, C context) throws E {
136+
return visitFallback(expr, context);
135137
}
136138

137139
@Override
138-
public OUTPUT visit(Expression.ListLiteral expr) throws EXCEPTION {
139-
return visitFallback(expr);
140+
public O visit(Expression.ListLiteral expr, C context) throws E {
141+
return visitFallback(expr, context);
140142
}
141143

142144
@Override
143-
public OUTPUT visit(Expression.EmptyListLiteral expr) throws EXCEPTION {
144-
return visitFallback(expr);
145+
public O visit(Expression.EmptyListLiteral expr, C context) throws E {
146+
return visitFallback(expr, context);
145147
}
146148

147149
@Override
148-
public OUTPUT visit(Expression.StructLiteral expr) throws EXCEPTION {
149-
return visitFallback(expr);
150+
public O visit(Expression.StructLiteral expr, C context) throws E {
151+
return visitFallback(expr, context);
150152
}
151153

152154
@Override
153-
public OUTPUT visit(Expression.Switch expr) throws EXCEPTION {
154-
return visitFallback(expr);
155+
public O visit(Expression.Switch expr, C context) throws E {
156+
return visitFallback(expr, context);
155157
}
156158

157159
@Override
158-
public OUTPUT visit(Expression.IfThen expr) throws EXCEPTION {
159-
return visitFallback(expr);
160+
public O visit(Expression.IfThen expr, C context) throws E {
161+
return visitFallback(expr, context);
160162
}
161163

162164
@Override
163-
public OUTPUT visit(Expression.ScalarFunctionInvocation expr) throws EXCEPTION {
164-
return visitFallback(expr);
165+
public O visit(Expression.ScalarFunctionInvocation expr, C context) throws E {
166+
return visitFallback(expr, context);
165167
}
166168

167169
@Override
168-
public OUTPUT visit(Expression.WindowFunctionInvocation expr) throws EXCEPTION {
169-
return visitFallback(expr);
170+
public O visit(Expression.WindowFunctionInvocation expr, C context) throws E {
171+
return visitFallback(expr, context);
170172
}
171173

172174
@Override
173-
public OUTPUT visit(Expression.Cast expr) throws EXCEPTION {
174-
return visitFallback(expr);
175+
public O visit(Expression.Cast expr, C context) throws E {
176+
return visitFallback(expr, context);
175177
}
176178

177179
@Override
178-
public OUTPUT visit(Expression.SingleOrList expr) throws EXCEPTION {
179-
return visitFallback(expr);
180+
public O visit(Expression.SingleOrList expr, C context) throws E {
181+
return visitFallback(expr, context);
180182
}
181183

182184
@Override
183-
public OUTPUT visit(Expression.MultiOrList expr) throws EXCEPTION {
184-
return visitFallback(expr);
185+
public O visit(Expression.MultiOrList expr, C context) throws E {
186+
return visitFallback(expr, context);
185187
}
186188

187189
@Override
188-
public OUTPUT visit(FieldReference expr) throws EXCEPTION {
189-
return visitFallback(expr);
190+
public O visit(FieldReference expr, C context) throws E {
191+
return visitFallback(expr, context);
190192
}
191193

192194
@Override
193-
public OUTPUT visit(Expression.SetPredicate expr) throws EXCEPTION {
194-
return visitFallback(expr);
195+
public O visit(Expression.SetPredicate expr, C context) throws E {
196+
return visitFallback(expr, context);
195197
}
196198

197199
@Override
198-
public OUTPUT visit(Expression.ScalarSubquery expr) throws EXCEPTION {
199-
return visitFallback(expr);
200+
public O visit(Expression.ScalarSubquery expr, C context) throws E {
201+
return visitFallback(expr, context);
200202
}
201203

202204
@Override
203-
public OUTPUT visit(Expression.InPredicate expr) throws EXCEPTION {
204-
return visitFallback(expr);
205+
public O visit(Expression.InPredicate expr, C context) throws E {
206+
return visitFallback(expr, context);
205207
}
206208
}

core/src/main/java/io/substrait/expression/EnumArg.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.substrait.expression;
22

33
import io.substrait.extension.SimpleExtension;
4+
import io.substrait.util.VisitationContext;
45
import java.util.Optional;
56
import org.immutables.value.Value;
67

@@ -16,9 +17,10 @@ public interface EnumArg extends FunctionArg {
1617
Optional<String> value();
1718

1819
@Override
19-
default <R, E extends Throwable> R accept(
20-
SimpleExtension.Function fnDef, int argIdx, FuncArgVisitor<R, E> fnArgVisitor) throws E {
21-
return fnArgVisitor.visitEnumArg(fnDef, argIdx, this);
20+
default <R, C extends VisitationContext, E extends Throwable> R accept(
21+
SimpleExtension.Function fnDef, int argIdx, FuncArgVisitor<R, C, E> fnArgVisitor, C context)
22+
throws E {
23+
return fnArgVisitor.visitEnumArg(fnDef, argIdx, this, context);
2224
}
2325

2426
static EnumArg of(SimpleExtension.EnumArgument enumArg, String option) {

0 commit comments

Comments
 (0)