@@ -34,9 +34,22 @@ public SymbolFunction()
34
34
result = new SymbolFunctionResult ();
35
35
}
36
36
37
- public abstract SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException ;
37
+ public static SymbolFunctionResult match (SymbolFunction syFn , Object row , PartitionIterator <Object > pItr ) throws WindowingException
38
+ {
39
+ int resetToIdx = pItr .getIndex () - 1 ;
40
+ try
41
+ {
42
+ return syFn .match (row , pItr );
43
+ }
44
+ finally
45
+ {
46
+ pItr .resetToIndex (resetToIdx );
47
+ }
48
+ }
49
+
50
+ protected abstract SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException ;
38
51
39
- public abstract boolean isOptional ();
52
+ protected abstract boolean isOptional ();
40
53
41
54
public static class Symbol extends SymbolFunction
42
55
{
@@ -51,12 +64,12 @@ public Symbol(ExprNodeEvaluator symbolExprEval, ObjectInspector symbolOI)
51
64
PrimitiveObjectInspectorFactory .javaBooleanObjectInspector );
52
65
}
53
66
54
- public SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
67
+ protected SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
55
68
{
56
69
Object val = null ;
57
70
try
58
71
{
59
- symbolExprEval .evaluate (row );
72
+ val = symbolExprEval .evaluate (row );
60
73
}
61
74
catch (HiveException he )
62
75
{
@@ -69,7 +82,7 @@ public SymbolFunctionResult match(Object row, PartitionIterator<Object> pItr) th
69
82
return result ;
70
83
}
71
84
72
- public boolean isOptional ()
85
+ protected boolean isOptional ()
73
86
{
74
87
return false ;
75
88
}
@@ -84,7 +97,7 @@ public Star(SymbolFunction symbolFn)
84
97
this .symbolFn = symbolFn ;
85
98
}
86
99
87
- public SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
100
+ protected SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
88
101
{
89
102
result .matches = true ;
90
103
SymbolFunctionResult rowResult = symbolFn .match (row , pItr );
@@ -95,11 +108,11 @@ public SymbolFunctionResult match(Object row, PartitionIterator<Object> pItr) th
95
108
rowResult = symbolFn .match (row , pItr );
96
109
}
97
110
98
- result .nextRow = pItr .getIndex ();
111
+ result .nextRow = pItr .getIndex () - 1 ;
99
112
return result ;
100
113
}
101
114
102
- public boolean isOptional ()
115
+ protected boolean isOptional ()
103
116
{
104
117
return true ;
105
118
}
@@ -114,14 +127,14 @@ public Plus(SymbolFunction symbolFn)
114
127
this .symbolFn = symbolFn ;
115
128
}
116
129
117
- public SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
130
+ protected SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
118
131
{
119
132
SymbolFunctionResult rowResult = symbolFn .match (row , pItr );
120
133
121
134
if ( !rowResult .matches )
122
135
{
123
136
result .matches = false ;
124
- result .nextRow = pItr .getIndex ();
137
+ result .nextRow = pItr .getIndex () - 1 ;
125
138
return result ;
126
139
}
127
140
@@ -132,11 +145,11 @@ public SymbolFunctionResult match(Object row, PartitionIterator<Object> pItr) th
132
145
rowResult = symbolFn .match (row , pItr );
133
146
}
134
147
135
- result .nextRow = pItr .getIndex ();
148
+ result .nextRow = pItr .getIndex () - 1 ;
136
149
return result ;
137
150
}
138
151
139
- public boolean isOptional ()
152
+ protected boolean isOptional ()
140
153
{
141
154
return false ;
142
155
}
@@ -162,7 +175,7 @@ public Chain(ArrayList<SymbolFunction> components)
162
175
* - but if we come to a non optional Symbol Fn, return false.
163
176
* - if we match all Fns in the chain return true.
164
177
*/
165
- public SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
178
+ protected SymbolFunctionResult match (Object row , PartitionIterator <Object > pItr ) throws WindowingException
166
179
{
167
180
SymbolFunctionResult componentResult = null ;
168
181
for (SymbolFunction sFn : components )
@@ -176,7 +189,7 @@ public SymbolFunctionResult match(Object row, PartitionIterator<Object> pItr) th
176
189
result .nextRow = componentResult .nextRow ;
177
190
return result ;
178
191
}
179
- row = pItr .hasNext () ? pItr . next () : null ;
192
+ row = pItr .resetToIndex ( componentResult . nextRow ) ;
180
193
}
181
194
else
182
195
{
@@ -194,7 +207,7 @@ public SymbolFunctionResult match(Object row, PartitionIterator<Object> pItr) th
194
207
return result ;
195
208
}
196
209
197
- public boolean isOptional ()
210
+ protected boolean isOptional ()
198
211
{
199
212
return false ;
200
213
}
0 commit comments