sparkql 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|