sparkql 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +4 -0
- data/GRAMMAR.md +5 -4
- data/VERSION +1 -1
- data/lib/sparkql/parser.rb +197 -177
- data/lib/sparkql/parser.y +4 -2
- data/lib/sparkql/parser_tools.rb +34 -18
- data/test/unit/parser_test.rb +35 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTIxMGFmY2I2YTljYzEwNGNlMzMzOGFkMDg1NjM0YmY1MDZjZTliOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YmVkZGFkODQ5OWE1Mzc4MDdmNGNjZjM0NzM2YWI5OWRlOTk0MmM3Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjgxMWJlMDFlODY5NGJhZGE4NzU2ZjE5NmI2YzI1MWM2MDU3MzgwZTc1YzA3
|
10
|
+
MWQ1Njg4MTI0MjBjNWRlZTU0ZWU5NTc2MjUwYmU1ZTVjMDkxMDQ4ZjMxYjFh
|
11
|
+
OWFkMDU1OWVlODg4NTZhZDQ1NjY4ODU4MDI1NTgxNjlkZWQ0NTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjZkMDdlYTZkZWZlZDgxMzkyZjQ5MWY5MDA4ZjRmNGQ2OGIxN2U5YWRlZTMw
|
14
|
+
NTMyYmFjM2E0M2FhOGY2NGI4NDFiZDUzZGEwZGNmMGIyMmY0NzA3OTQzMzI0
|
15
|
+
MTAzODg2ODU4NzA1NTY1MjFhMzdmZWMzN2EyYmZlMjA3MDk5NmY=
|
data/CHANGELOG.md
CHANGED
data/GRAMMAR.md
CHANGED
@@ -46,8 +46,7 @@ and criteria for comparing the value of the field to the value(s) of the
|
|
46
46
|
condition. The result of evaluating the expression on a resource is a true of
|
47
47
|
false for matching the criteria. We are separating functions and arithmetic
|
48
48
|
based on if we are acting on the field side or the literal side. This is to
|
49
|
-
allow literal folding on the literal side
|
50
|
-
to see if a field is in the expression.
|
49
|
+
allow literal folding on the literal side.
|
51
50
|
|
52
51
|
|
53
52
|
```
|
@@ -96,6 +95,8 @@ One or more expressions encased in parenthesis. There are limitations on nesting
|
|
96
95
|
| field_arithmetic_expression MUL field_arithmetic_expression
|
97
96
|
| field_arithmetic_expression DIV field_arithmetic_expression
|
98
97
|
| field_arithmetic_expression MOD field_arithmetic_expression
|
98
|
+
| LPAREN field_arithmetic_expression RPAREN
|
99
|
+
| UMINUS field_arithmetic_expression
|
99
100
|
| literals
|
100
101
|
| field_function_expression
|
101
102
|
;
|
@@ -117,6 +118,8 @@ on filtering values
|
|
117
118
|
: arithmetic_condition
|
118
119
|
| literal_list
|
119
120
|
| literal
|
121
|
+
| LPAREN condition RPAREN
|
122
|
+
| UMINUS condition
|
120
123
|
;
|
121
124
|
arithmetic_condition
|
122
125
|
: condition ADD condition
|
@@ -203,8 +206,6 @@ Literals that support multiple values in a list for a condition
|
|
203
206
|
: INTEGER
|
204
207
|
| DECIMAL
|
205
208
|
| CHARACTER
|
206
|
-
| LPAREN literals RPAREN
|
207
|
-
| UMINUS literals
|
208
209
|
;
|
209
210
|
```
|
210
211
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.3
|
data/lib/sparkql/parser.rb
CHANGED
@@ -16,140 +16,148 @@ module Sparkql
|
|
16
16
|
##### State transition tables begin ###
|
17
17
|
|
18
18
|
racc_action_table = [
|
19
|
-
|
20
|
-
9,
|
21
|
-
35,
|
22
|
-
|
23
|
-
22,
|
24
|
-
|
25
|
-
|
19
|
+
11, 33, 34, 35, 31, 32, 25, 24, 8, 64,
|
20
|
+
9, 65, 17, 23, 18, 19, 20, 11, 33, 34,
|
21
|
+
35, 38, 21, 22, 33, 34, 35, 9, 88, 17,
|
22
|
+
89, 18, 19, 20, 11, 80, 81, 82, 39, 21,
|
23
|
+
22, 105, 8, 106, 9, 83, 17, 86, 18, 19,
|
24
|
+
20, 11, 80, 81, 82, 87, 21, 22, 25, 24,
|
25
|
+
nil, 37, nil, 17, nil, 18, 19, 20, 11, 26,
|
26
26
|
27, nil, nil, 21, 22, nil, nil, nil, 9, nil,
|
27
|
-
|
28
|
-
21, 22, nil, nil, nil,
|
29
|
-
|
30
|
-
nil, nil, 37, nil,
|
27
|
+
17, nil, 18, 19, 20, 11, nil, nil, nil, nil,
|
28
|
+
21, 22, nil, nil, nil, 9, nil, 17, nil, 18,
|
29
|
+
19, 20, 11, nil, nil, nil, nil, 21, 22, nil,
|
30
|
+
nil, nil, 37, nil, 17, nil, 18, 19, 20, 11,
|
31
31
|
nil, nil, nil, nil, 21, 22, nil, nil, nil, 37,
|
32
|
-
nil,
|
33
|
-
nil, 21, 22, nil, nil, nil, 37, nil,
|
34
|
-
|
35
|
-
nil, nil, nil, 37, nil,
|
36
|
-
|
37
|
-
37,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
32
|
+
nil, 17, nil, 18, 19, 20, 11, nil, nil, nil,
|
33
|
+
nil, 21, 22, nil, nil, nil, 37, nil, 17, nil,
|
34
|
+
18, 19, 20, 11, nil, nil, nil, nil, 21, 22,
|
35
|
+
nil, nil, nil, 37, nil, 17, nil, 18, 19, 20,
|
36
|
+
11, nil, nil, nil, nil, 21, 22, nil, nil, nil,
|
37
|
+
37, nil, 17, nil, 18, 19, 20, 11, nil, nil,
|
38
|
+
nil, nil, 21, 22, nil, nil, nil, 37, nil, 17,
|
39
|
+
nil, 18, 19, 20, 47, nil, nil, nil, nil, 21,
|
40
|
+
22, nil, nil, nil, 46, nil, 17, 47, 18, 19,
|
41
|
+
20, 51, 52, 53, 54, 55, nil, 46, nil, 17,
|
42
|
+
47, 18, 19, 20, 51, 52, 53, 54, 55, nil,
|
43
|
+
46, nil, 17, 47, 18, 19, 20, 51, 52, 53,
|
44
|
+
54, 55, nil, 46, nil, 17, 47, 18, 19, 20,
|
45
|
+
51, 52, 53, 54, 55, nil, 46, nil, 17, 47,
|
46
|
+
18, 19, 20, 51, 52, 53, 54, 55, nil, 46,
|
47
|
+
nil, 17, 47, 18, 19, 20, 51, 52, 53, 54,
|
48
|
+
55, nil, 46, nil, 17, 47, 18, 19, 20, 51,
|
49
|
+
52, 53, 54, 55, nil, 46, nil, 17, nil, 18,
|
50
|
+
19, 20, 51, 52, 53, 54, 55, 72, 17, nil,
|
51
|
+
18, 19, 20, 51, 52, 53, 54, 55, 21, 22,
|
52
|
+
17, nil, 18, 19, 20, 51, 52, 53, 54, 55,
|
53
|
+
21, 22, 33, 34, 35, 31, 32, 80, 81, 82,
|
54
|
+
78, 79, 65, nil, nil, 98, nil, 97, 18, 19,
|
55
|
+
20, 51, 52, 53, 54, 55, 17, nil, 58, 59,
|
56
|
+
nil, 60, 61, 62, 17, nil, 58, 59, nil, 60,
|
57
|
+
61, 62, 18, 19, 20, 51, 52, 53, 54, 55,
|
58
|
+
33, 34, 35, 31, 32, 80, 81, 82, 78, 79,
|
59
|
+
17, nil, 18, 19, 20 ]
|
55
60
|
|
56
61
|
racc_action_check = [
|
57
|
-
0,
|
58
|
-
0,
|
59
|
-
|
60
|
-
|
61
|
-
8,
|
62
|
-
9,
|
63
|
-
|
64
|
-
6, nil, nil,
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
nil, nil,
|
69
|
-
nil, nil, nil, nil,
|
70
|
-
nil,
|
71
|
-
nil,
|
72
|
-
|
73
|
-
nil, nil, nil,
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
79,
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
82, 82, 82, 82, 82, 82, 82,
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
62
|
+
0, 30, 30, 30, 30, 30, 29, 29, 0, 29,
|
63
|
+
0, 30, 0, 1, 0, 0, 0, 8, 66, 66,
|
64
|
+
66, 16, 0, 0, 67, 67, 67, 8, 73, 8,
|
65
|
+
73, 8, 8, 8, 9, 90, 90, 90, 23, 8,
|
66
|
+
8, 99, 9, 99, 9, 44, 9, 48, 9, 9,
|
67
|
+
9, 11, 91, 91, 91, 57, 9, 9, 2, 2,
|
68
|
+
nil, 11, nil, 11, nil, 11, 11, 11, 24, 6,
|
69
|
+
6, nil, nil, 11, 11, nil, nil, nil, 24, nil,
|
70
|
+
24, nil, 24, 24, 24, 25, nil, nil, nil, nil,
|
71
|
+
24, 24, nil, nil, nil, 25, nil, 25, nil, 25,
|
72
|
+
25, 25, 31, nil, nil, nil, nil, 25, 25, nil,
|
73
|
+
nil, nil, 31, nil, 31, nil, 31, 31, 31, 32,
|
74
|
+
nil, nil, nil, nil, 31, 31, nil, nil, nil, 32,
|
75
|
+
nil, 32, nil, 32, 32, 32, 33, nil, nil, nil,
|
76
|
+
nil, 32, 32, nil, nil, nil, 33, nil, 33, nil,
|
77
|
+
33, 33, 33, 34, nil, nil, nil, nil, 33, 33,
|
78
|
+
nil, nil, nil, 34, nil, 34, nil, 34, 34, 34,
|
79
|
+
35, nil, nil, nil, nil, 34, 34, nil, nil, nil,
|
80
|
+
35, nil, 35, nil, 35, 35, 35, 37, nil, nil,
|
81
|
+
nil, nil, 35, 35, nil, nil, nil, 37, nil, 37,
|
82
|
+
nil, 37, 37, 37, 26, nil, nil, nil, nil, 37,
|
83
|
+
37, nil, nil, nil, 26, nil, 26, 46, 26, 26,
|
84
|
+
26, 26, 26, 26, 26, 26, nil, 46, nil, 46,
|
85
|
+
47, 46, 46, 46, 46, 46, 46, 46, 46, nil,
|
86
|
+
47, nil, 47, 78, 47, 47, 47, 47, 47, 47,
|
87
|
+
47, 47, nil, 78, nil, 78, 79, 78, 78, 78,
|
88
|
+
78, 78, 78, 78, 78, nil, 79, nil, 79, 80,
|
89
|
+
79, 79, 79, 79, 79, 79, 79, 79, nil, 80,
|
90
|
+
nil, 80, 81, 80, 80, 80, 80, 80, 80, 80,
|
91
|
+
80, nil, 81, nil, 81, 82, 81, 81, 81, 81,
|
92
|
+
81, 81, 81, 81, nil, 82, nil, 82, nil, 82,
|
93
|
+
82, 82, 82, 82, 82, 82, 82, 38, 38, nil,
|
94
|
+
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
95
|
+
89, nil, 89, 89, 89, 89, 89, 89, 89, 89,
|
96
|
+
89, 89, 71, 71, 71, 71, 71, 84, 84, 84,
|
97
|
+
84, 84, 71, nil, nil, 86, nil, 84, 86, 86,
|
98
|
+
86, 86, 86, 86, 86, 86, 27, nil, 27, 27,
|
99
|
+
nil, 27, 27, 27, 87, nil, 87, 87, nil, 87,
|
100
|
+
87, 87, 106, 106, 106, 106, 106, 106, 106, 106,
|
101
|
+
10, 10, 10, 10, 10, 42, 42, 42, 42, 42,
|
102
|
+
83, nil, 83, 83, 83 ]
|
93
103
|
|
94
104
|
racc_action_pointer = [
|
95
|
-
-2,
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
nil, nil,
|
100
|
-
nil, nil, nil, nil, nil,
|
101
|
-
nil, nil, nil, nil, 15, 21, nil, nil,
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
nil,
|
105
|
+
-2, 13, 48, nil, nil, nil, 61, nil, 15, 32,
|
106
|
+
387, 49, nil, nil, nil, nil, 9, nil, nil, nil,
|
107
|
+
nil, nil, nil, 38, 66, 83, 202, 352, nil, -4,
|
108
|
+
-2, 100, 117, 134, 151, 168, nil, 185, 304, nil,
|
109
|
+
nil, nil, 392, nil, 30, nil, 215, 228, 35, nil,
|
110
|
+
nil, nil, nil, nil, nil, nil, nil, 40, nil, nil,
|
111
|
+
nil, nil, nil, nil, nil, nil, 15, 21, nil, nil,
|
112
|
+
nil, 339, nil, 15, nil, nil, nil, nil, 241, 254,
|
113
|
+
267, 280, 293, 386, 344, nil, 342, 360, nil, 316,
|
114
|
+
32, 49, nil, nil, nil, nil, nil, nil, nil, 28,
|
115
|
+
nil, nil, nil, nil, nil, nil, 366, nil ]
|
106
116
|
|
107
117
|
racc_action_default = [
|
108
|
-
-2, -
|
109
|
-
-13, -
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-10, -11, -6, -
|
113
|
-
-
|
114
|
-
-64, -65, -
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-30, -
|
118
|
-
-
|
118
|
+
-2, -70, -1, -3, -4, -5, -70, -8, -70, -70,
|
119
|
+
-13, -70, -21, -22, -23, -24, -70, -39, -54, -55,
|
120
|
+
-56, -68, -69, -70, -70, -70, -70, -70, -9, -70,
|
121
|
+
-13, -70, -70, -70, -70, -70, -20, -70, -70, 108,
|
122
|
+
-10, -11, -6, -25, -26, -27, -70, -70, -70, -49,
|
123
|
+
-50, -57, -58, -59, -60, -61, -7, -70, -62, -63,
|
124
|
+
-64, -65, -66, -67, -12, -19, -14, -15, -16, -17,
|
125
|
+
-18, -70, -35, -70, -40, -42, -43, -44, -70, -70,
|
126
|
+
-70, -70, -70, -70, -70, -29, -70, -70, -36, -70,
|
127
|
+
-30, -31, -32, -33, -34, -51, -52, -28, -37, -70,
|
128
|
+
-45, -47, -48, -53, -41, -38, -70, -46 ]
|
119
129
|
|
120
130
|
racc_goto_table = [
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
nil, nil, nil, nil, nil,
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
nil, nil, 97 ]
|
131
|
+
49, 1, 100, 56, 57, 73, 63, 28, 75, 99,
|
132
|
+
76, nil, 77, nil, 74, 42, 30, 2, 36, nil,
|
133
|
+
49, 49, 107, 40, 41, nil, 29, nil, nil, 48,
|
134
|
+
nil, nil, nil, nil, nil, 84, 85, nil, 66, 67,
|
135
|
+
68, 69, 70, nil, 71, nil, nil, nil, nil, 48,
|
136
|
+
48, nil, 49, 49, 49, 49, 49, 95, 101, 75,
|
137
|
+
102, 76, 96, 77, 103, 104, 63, 90, 91, 92,
|
138
|
+
93, 94, nil, nil, nil, nil, nil, nil, 101, nil,
|
139
|
+
102, 48, 48, 48, 48, 48 ]
|
131
140
|
|
132
141
|
racc_goto_check = [
|
133
|
-
11,
|
134
|
-
|
135
|
-
|
136
|
-
nil, nil, nil, nil, nil,
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
18, 18, 18, 18,
|
142
|
-
nil, nil, 11 ]
|
142
|
+
11, 1, 23, 8, 24, 19, 14, 3, 12, 21,
|
143
|
+
17, nil, 11, nil, 22, 7, 10, 2, 10, nil,
|
144
|
+
11, 11, 23, 3, 3, nil, 2, nil, nil, 18,
|
145
|
+
nil, nil, nil, nil, nil, 7, 7, nil, 10, 10,
|
146
|
+
10, 10, 10, nil, 10, nil, nil, nil, nil, 18,
|
147
|
+
18, nil, 11, 11, 11, 11, 11, 11, 17, 12,
|
148
|
+
11, 17, 14, 11, 24, 22, 14, 7, 7, 7,
|
149
|
+
7, 7, nil, nil, nil, nil, nil, nil, 17, nil,
|
150
|
+
11, 18, 18, 18, 18, 18 ]
|
143
151
|
|
144
152
|
racc_goto_pointer = [
|
145
|
-
nil,
|
146
|
-
-
|
147
|
-
nil, -
|
153
|
+
nil, 1, 17, -1, nil, nil, nil, -11, -24, nil,
|
154
|
+
7, -26, -30, nil, -21, nil, nil, -28, 3, -33,
|
155
|
+
nil, -77, -24, -84, -23 ]
|
148
156
|
|
149
157
|
racc_goto_default = [
|
150
158
|
nil, nil, nil, 3, 4, 5, 6, nil, nil, 7,
|
151
|
-
10,
|
152
|
-
|
159
|
+
10, 12, 13, 14, 15, 43, 44, 45, 16, nil,
|
160
|
+
50, nil, nil, nil, nil ]
|
153
161
|
|
154
162
|
racc_reduce_table = [
|
155
163
|
0, 0, :racc_error,
|
@@ -171,42 +179,44 @@ racc_reduce_table = [
|
|
171
179
|
3, 36, :_reduce_16,
|
172
180
|
3, 36, :_reduce_17,
|
173
181
|
3, 36, :_reduce_18,
|
182
|
+
3, 36, :_reduce_19,
|
183
|
+
2, 36, :_reduce_20,
|
174
184
|
1, 36, :_reduce_none,
|
175
185
|
1, 36, :_reduce_none,
|
176
186
|
1, 38, :_reduce_none,
|
177
187
|
1, 38, :_reduce_none,
|
178
188
|
1, 33, :_reduce_none,
|
179
|
-
1, 33, :
|
189
|
+
1, 33, :_reduce_26,
|
180
190
|
1, 33, :_reduce_none,
|
181
|
-
3,
|
182
|
-
|
183
|
-
3, 41, :_reduce_28,
|
184
|
-
3, 41, :_reduce_29,
|
191
|
+
3, 33, :_reduce_28,
|
192
|
+
2, 33, :_reduce_29,
|
185
193
|
3, 41, :_reduce_30,
|
186
|
-
3,
|
187
|
-
|
188
|
-
3,
|
189
|
-
|
194
|
+
3, 41, :_reduce_31,
|
195
|
+
3, 41, :_reduce_32,
|
196
|
+
3, 41, :_reduce_33,
|
197
|
+
3, 41, :_reduce_34,
|
198
|
+
3, 40, :_reduce_35,
|
199
|
+
4, 40, :_reduce_36,
|
200
|
+
3, 46, :_reduce_37,
|
201
|
+
4, 46, :_reduce_38,
|
190
202
|
1, 44, :_reduce_none,
|
191
203
|
1, 45, :_reduce_none,
|
192
|
-
3, 45, :
|
193
|
-
1, 48, :
|
204
|
+
3, 45, :_reduce_41,
|
205
|
+
1, 48, :_reduce_42,
|
194
206
|
1, 48, :_reduce_none,
|
195
207
|
1, 48, :_reduce_none,
|
196
208
|
1, 47, :_reduce_none,
|
197
|
-
3, 47, :
|
209
|
+
3, 47, :_reduce_46,
|
198
210
|
1, 49, :_reduce_none,
|
199
211
|
1, 49, :_reduce_none,
|
200
212
|
1, 42, :_reduce_none,
|
201
213
|
1, 42, :_reduce_none,
|
202
|
-
3, 42, :
|
203
|
-
3, 42, :
|
204
|
-
3, 34, :
|
214
|
+
3, 42, :_reduce_51,
|
215
|
+
3, 42, :_reduce_52,
|
216
|
+
3, 34, :_reduce_53,
|
205
217
|
1, 37, :_reduce_none,
|
206
218
|
1, 37, :_reduce_none,
|
207
219
|
1, 37, :_reduce_none,
|
208
|
-
3, 37, :_reduce_53,
|
209
|
-
2, 37, :_reduce_54,
|
210
220
|
1, 43, :_reduce_none,
|
211
221
|
1, 43, :_reduce_none,
|
212
222
|
1, 43, :_reduce_none,
|
@@ -221,9 +231,9 @@ racc_reduce_table = [
|
|
221
231
|
1, 39, :_reduce_none,
|
222
232
|
1, 39, :_reduce_none ]
|
223
233
|
|
224
|
-
racc_reduce_n =
|
234
|
+
racc_reduce_n = 70
|
225
235
|
|
226
|
-
racc_shift_n =
|
236
|
+
racc_shift_n = 108
|
227
237
|
|
228
238
|
racc_token_table = {
|
229
239
|
false => 0,
|
@@ -404,9 +414,15 @@ def _reduce_18(val, _values, result)
|
|
404
414
|
result
|
405
415
|
end
|
406
416
|
|
407
|
-
|
417
|
+
def _reduce_19(val, _values, result)
|
418
|
+
result = tokenize_arithmetic_group(val[1])
|
419
|
+
result
|
420
|
+
end
|
408
421
|
|
409
|
-
|
422
|
+
def _reduce_20(val, _values, result)
|
423
|
+
result = tokenize_arithmetic_negation(val[1])
|
424
|
+
result
|
425
|
+
end
|
410
426
|
|
411
427
|
# reduce 21 omitted
|
412
428
|
|
@@ -414,69 +430,69 @@ end
|
|
414
430
|
|
415
431
|
# reduce 23 omitted
|
416
432
|
|
417
|
-
|
418
|
-
result = tokenize_list(val[0])
|
419
|
-
result
|
420
|
-
end
|
433
|
+
# reduce 24 omitted
|
421
434
|
|
422
435
|
# reduce 25 omitted
|
423
436
|
|
424
437
|
def _reduce_26(val, _values, result)
|
425
|
-
result =
|
438
|
+
result = tokenize_list(val[0])
|
426
439
|
result
|
427
440
|
end
|
428
441
|
|
429
|
-
|
430
|
-
result = sub_fold(val[0], val[2])
|
431
|
-
result
|
432
|
-
end
|
442
|
+
# reduce 27 omitted
|
433
443
|
|
434
444
|
def _reduce_28(val, _values, result)
|
435
|
-
result =
|
445
|
+
result = group_fold(val[1])
|
436
446
|
result
|
437
447
|
end
|
438
448
|
|
439
449
|
def _reduce_29(val, _values, result)
|
440
|
-
result =
|
450
|
+
result = tokenize_literal_negation(val[1])
|
441
451
|
result
|
442
452
|
end
|
443
453
|
|
444
454
|
def _reduce_30(val, _values, result)
|
445
|
-
result =
|
455
|
+
result = add_fold(val[0], val[2])
|
446
456
|
result
|
447
457
|
end
|
448
458
|
|
449
459
|
def _reduce_31(val, _values, result)
|
450
|
-
result =
|
460
|
+
result = sub_fold(val[0], val[2])
|
451
461
|
result
|
452
462
|
end
|
453
463
|
|
454
464
|
def _reduce_32(val, _values, result)
|
455
|
-
result =
|
465
|
+
result = mul_fold(val[0], val[2])
|
456
466
|
result
|
457
467
|
end
|
458
468
|
|
459
469
|
def _reduce_33(val, _values, result)
|
460
|
-
result =
|
470
|
+
result = div_fold(val[0], val[2])
|
461
471
|
result
|
462
472
|
end
|
463
473
|
|
464
474
|
def _reduce_34(val, _values, result)
|
465
|
-
result =
|
475
|
+
result = mod_fold(val[0], val[2])
|
466
476
|
result
|
467
477
|
end
|
468
478
|
|
469
|
-
|
479
|
+
def _reduce_35(val, _values, result)
|
480
|
+
result = tokenize_function(val[0], [])
|
481
|
+
result
|
482
|
+
end
|
470
483
|
|
471
|
-
|
484
|
+
def _reduce_36(val, _values, result)
|
485
|
+
result = tokenize_function(val[0], val[2])
|
486
|
+
result
|
487
|
+
end
|
472
488
|
|
473
489
|
def _reduce_37(val, _values, result)
|
474
|
-
result =
|
490
|
+
result = tokenize_function(val[0], [])
|
475
491
|
result
|
476
492
|
end
|
477
493
|
|
478
494
|
def _reduce_38(val, _values, result)
|
479
|
-
result =
|
495
|
+
result = tokenize_function(val[0], val[2])
|
480
496
|
result
|
481
497
|
end
|
482
498
|
|
@@ -484,10 +500,13 @@ end
|
|
484
500
|
|
485
501
|
# reduce 40 omitted
|
486
502
|
|
487
|
-
|
503
|
+
def _reduce_41(val, _values, result)
|
504
|
+
result = tokenize_function_args(val[0], val[2])
|
505
|
+
result
|
506
|
+
end
|
488
507
|
|
489
508
|
def _reduce_42(val, _values, result)
|
490
|
-
result =
|
509
|
+
result = tokenize_field_arg(val[0])
|
491
510
|
result
|
492
511
|
end
|
493
512
|
|
@@ -497,38 +516,35 @@ end
|
|
497
516
|
|
498
517
|
# reduce 45 omitted
|
499
518
|
|
500
|
-
|
501
|
-
|
502
|
-
def _reduce_47(val, _values, result)
|
503
|
-
result = tokenize_multiple(val[0], val[2])
|
519
|
+
def _reduce_46(val, _values, result)
|
520
|
+
result = tokenize_function_args(val[0], val[2])
|
504
521
|
result
|
505
522
|
end
|
506
523
|
|
507
|
-
|
524
|
+
# reduce 47 omitted
|
525
|
+
|
526
|
+
# reduce 48 omitted
|
527
|
+
|
528
|
+
# reduce 49 omitted
|
529
|
+
|
530
|
+
# reduce 50 omitted
|
531
|
+
|
532
|
+
def _reduce_51(val, _values, result)
|
508
533
|
result = tokenize_multiple(val[0], val[2])
|
509
534
|
result
|
510
535
|
end
|
511
536
|
|
512
|
-
def
|
537
|
+
def _reduce_52(val, _values, result)
|
513
538
|
result = tokenize_multiple(val[0], val[2])
|
514
539
|
result
|
515
540
|
end
|
516
541
|
|
517
|
-
# reduce 50 omitted
|
518
|
-
|
519
|
-
# reduce 51 omitted
|
520
|
-
|
521
|
-
# reduce 52 omitted
|
522
|
-
|
523
542
|
def _reduce_53(val, _values, result)
|
524
|
-
result = val[
|
543
|
+
result = tokenize_multiple(val[0], val[2])
|
525
544
|
result
|
526
545
|
end
|
527
546
|
|
528
|
-
|
529
|
-
result = tokenize_literal_negation(val[1])
|
530
|
-
result
|
531
|
-
end
|
547
|
+
# reduce 54 omitted
|
532
548
|
|
533
549
|
# reduce 55 omitted
|
534
550
|
|
@@ -556,6 +572,10 @@ end
|
|
556
572
|
|
557
573
|
# reduce 67 omitted
|
558
574
|
|
575
|
+
# reduce 68 omitted
|
576
|
+
|
577
|
+
# reduce 69 omitted
|
578
|
+
|
559
579
|
def _reduce_none(val, _values, result)
|
560
580
|
val[0]
|
561
581
|
end
|
data/lib/sparkql/parser.y
CHANGED
@@ -98,6 +98,8 @@ rule
|
|
98
98
|
| field_arithmetic_expression MUL field_arithmetic_expression { result = tokenize_arithmetic(val[0], val[1], val[2]) }
|
99
99
|
| field_arithmetic_expression DIV field_arithmetic_expression { result = tokenize_arithmetic(val[0], val[1], val[2]) }
|
100
100
|
| field_arithmetic_expression MOD field_arithmetic_expression { result = tokenize_arithmetic(val[0], val[1], val[2]) }
|
101
|
+
| LPAREN field_arithmetic_expression RPAREN { result = tokenize_arithmetic_group(val[1]) }
|
102
|
+
| UMINUS field_arithmetic_expression { result = tokenize_arithmetic_negation(val[1]) }
|
101
103
|
| literals
|
102
104
|
| field_function_expression
|
103
105
|
;
|
@@ -117,6 +119,8 @@ rule
|
|
117
119
|
: arithmetic_condition
|
118
120
|
| literal_list { result = tokenize_list(val[0]) }
|
119
121
|
| literal
|
122
|
+
| LPAREN condition RPAREN { result = group_fold(val[1]) }
|
123
|
+
| UMINUS condition { result = tokenize_literal_negation(val[1]) }
|
120
124
|
;
|
121
125
|
|
122
126
|
arithmetic_condition
|
@@ -194,8 +198,6 @@ rule
|
|
194
198
|
: INTEGER
|
195
199
|
| DECIMAL
|
196
200
|
| CHARACTER
|
197
|
-
| LPAREN literals RPAREN { result = val[1] }
|
198
|
-
| UMINUS literals { result = tokenize_literal_negation(val[1]) }
|
199
201
|
;
|
200
202
|
|
201
203
|
##### Literal
|
data/lib/sparkql/parser_tools.rb
CHANGED
@@ -5,6 +5,8 @@ module Sparkql::ParserTools
|
|
5
5
|
DATE_TYPES = [:datetime, :date]
|
6
6
|
NUMBER_TYPES = [:decimal, :integer]
|
7
7
|
ARITHMETIC_TYPES = [:decimal, :integer, :field, :arithmetic]
|
8
|
+
GROUP = 'Group'.freeze
|
9
|
+
NEGATION = 'Negation'.freeze
|
8
10
|
|
9
11
|
def parse(str)
|
10
12
|
@lexer = Sparkql::Lexer.new(str)
|
@@ -24,24 +26,16 @@ module Sparkql::ParserTools
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def arithmetic_field(nested_representation)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
rhs[:field]
|
38
|
-
elsif lhs[:type] == :arithmetic
|
39
|
-
arithmetic_field(lhs)
|
40
|
-
elsif rhs[:type] == :arithmetic
|
41
|
-
arithmetic_field(rhs)
|
42
|
-
else
|
43
|
-
nil
|
44
|
-
end
|
29
|
+
return if nested_representation.nil?
|
30
|
+
|
31
|
+
return nested_representation[:value] if nested_representation[:type] == :field
|
32
|
+
return nested_representation[:field] if nested_representation.key?(:field)
|
33
|
+
|
34
|
+
field = arithmetic_field(nested_representation[:lhs])
|
35
|
+
return field unless field.nil?
|
36
|
+
|
37
|
+
field = arithmetic_field(nested_representation[:rhs])
|
38
|
+
return field unless field.nil?
|
45
39
|
end
|
46
40
|
|
47
41
|
def no_field_error(field, operator)
|
@@ -129,6 +123,24 @@ module Sparkql::ParserTools
|
|
129
123
|
expressions
|
130
124
|
end
|
131
125
|
|
126
|
+
def tokenize_arithmetic_group(lhs)
|
127
|
+
lhs = {type: :field, value: lhs} if lhs.is_a?(String)
|
128
|
+
{
|
129
|
+
type: :arithmetic,
|
130
|
+
op: GROUP,
|
131
|
+
lhs: lhs
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
def tokenize_arithmetic_negation(lhs)
|
136
|
+
lhs = {type: :field, value: lhs} if lhs.is_a?(String)
|
137
|
+
{
|
138
|
+
type: :arithmetic,
|
139
|
+
op: NEGATION,
|
140
|
+
lhs: lhs
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
132
144
|
def tokenize_list(list)
|
133
145
|
return if list.nil?
|
134
146
|
validate_multiple_values list[:value]
|
@@ -245,6 +257,10 @@ module Sparkql::ParserTools
|
|
245
257
|
true
|
246
258
|
end
|
247
259
|
|
260
|
+
def group_fold(exp)
|
261
|
+
exp
|
262
|
+
end
|
263
|
+
|
248
264
|
def add_fold(n1, n2)
|
249
265
|
return if arithmetic_error?(n1) || arithmetic_error?(n2)
|
250
266
|
|
data/test/unit/parser_test.rb
CHANGED
@@ -732,6 +732,16 @@ class ParserTest < Test::Unit::TestCase
|
|
732
732
|
parser_errors("Field Eq -'Stringval'")
|
733
733
|
end
|
734
734
|
|
735
|
+
|
736
|
+
test "field negation" do
|
737
|
+
@parser = Parser.new
|
738
|
+
expressions = @parser.parse('-Test Eq 10')
|
739
|
+
assert !@parser.errors?
|
740
|
+
|
741
|
+
assert_equal 'Negation', expressions.first[:field_manipulations][:op]
|
742
|
+
assert_equal 'Test', expressions.first[:field]
|
743
|
+
end
|
744
|
+
|
735
745
|
def test_substring
|
736
746
|
filter = "Name Eq substring('Andy', 1)"
|
737
747
|
@parser = Parser.new
|
@@ -1097,6 +1107,31 @@ class ParserTest < Test::Unit::TestCase
|
|
1097
1107
|
parser_errors("1 Add 1 Eq 2")
|
1098
1108
|
end
|
1099
1109
|
|
1110
|
+
test "field grouping" do
|
1111
|
+
@parser = Parser.new
|
1112
|
+
expressions = @parser.parse('(Test) Eq 10')
|
1113
|
+
assert !@parser.errors?
|
1114
|
+
|
1115
|
+
assert_equal 'Group', expressions.first[:field_manipulations][:op]
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
test "grouping arithmetic" do
|
1119
|
+
@parser = Parser.new
|
1120
|
+
expressions = @parser.parse('(Test mul 10) sub 2 Eq 10')
|
1121
|
+
assert !@parser.errors?
|
1122
|
+
|
1123
|
+
assert_equal 'Sub', expressions.first[:field_manipulations][:op]
|
1124
|
+
assert_equal 'Group', expressions.first[:field_manipulations][:lhs][:op]
|
1125
|
+
end
|
1126
|
+
|
1127
|
+
test "grouping literal" do
|
1128
|
+
@parser = Parser.new
|
1129
|
+
expressions = @parser.parse('Test Eq (5 sub 5) mul 5 ')
|
1130
|
+
assert !@parser.errors?
|
1131
|
+
|
1132
|
+
assert_equal '0', expressions.first[:value]
|
1133
|
+
end
|
1134
|
+
|
1100
1135
|
private
|
1101
1136
|
|
1102
1137
|
def parser_errors(filter)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wade McEwen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: georuby
|