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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGNlZDVlNWY0ZDgwNDY0YTY1ZWI0ZGY5MzQ1ZmY0NTIxMGY4ZTI2OQ==
4
+ ZTIxMGFmY2I2YTljYzEwNGNlMzMzOGFkMDg1NjM0YmY1MDZjZTliOA==
5
5
  data.tar.gz: !binary |-
6
- ZjhiZmI1Mjc4ZDM0YmE5M2Q4YzU5NTMwMmRhODY3MDY5YWE3ODQ5YQ==
6
+ YmVkZGFkODQ5OWE1Mzc4MDdmNGNjZjM0NzM2YWI5OWRlOTk0MmM3Nw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Yzk5NzlkOTMxY2VkZTUyN2JmMmFkYWU0NmM4MWY4ODUyNzQ0NzZkYzM5ZTU5
10
- YTg5NjJhNmFlMDVlNzkxNWM2MDgyYTQwZjI5ZTc1OGZjODI1MzIxMTE2ZGQ5
11
- ZjBmYmQ2ZjdiNzNlODIwOWUzMjI5ODEzMThiMTcyZTJkYWUwOTk=
9
+ ZjgxMWJlMDFlODY5NGJhZGE4NzU2ZjE5NmI2YzI1MWM2MDU3MzgwZTc1YzA3
10
+ MWQ1Njg4MTI0MjBjNWRlZTU0ZWU5NTc2MjUwYmU1ZTVjMDkxMDQ4ZjMxYjFh
11
+ OWFkMDU1OWVlODg4NTZhZDQ1NjY4ODU4MDI1NTgxNjlkZWQ0NTQ=
12
12
  data.tar.gz: !binary |-
13
- YmUyZjU5ZWI3NWNhOGVhYmU5MDQxZDNhZjhhZWEwNzJmMzNmZjkzNTUxODQ5
14
- YzIwODQwMjgzMThlODc4ZWJiYjdkMzM0NDU4ZjBiZjlhMGMwODQ3YzdkNDRh
15
- MTRiYzZkMmVmMTM0NGNhZWY1ZWJkZDcwYjEzZDIyMDU0ZjY4YmM=
13
+ YjZkMDdlYTZkZWZlZDgxMzkyZjQ5MWY5MDA4ZjRmNGQ2OGIxN2U5YWRlZTMw
14
+ NTMyYmFjM2E0M2FhOGY2NGI4NDFiZDUzZGEwZGNmMGIyMmY0NzA3OTQzMzI0
15
+ MTAzODg2ODU4NzA1NTY1MjFhMzdmZWMzN2EyYmZlMjA3MDk5NmY=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ v1.2.3, 2018-12-05
2
+ -------------------
3
+ * [IMPROVEMENT] Support Arithmetic Grouping and Negation
4
+
1
5
  v1.2.2, 2018-11-28
2
6
  -------------------
3
7
  * [IMPROVEMENT] Support Arithmetic: Add, Sub, Mul, Div, Mod
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 and to prevent unnecessary checks
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.2
1
+ 1.2.3
@@ -16,140 +16,148 @@ module Sparkql
16
16
  ##### State transition tables begin ###
17
17
 
18
18
  racc_action_table = [
19
- 20, 33, 34, 35, 31, 32, 25, 24, 8, 62,
20
- 9, 84, 16, 85, 17, 18, 19, 20, 33, 34,
21
- 35, 23, 21, 22, 33, 34, 35, 9, 100, 16,
22
- 101, 17, 18, 19, 20, 78, 79, 80, 36, 21,
23
- 22, 39, 8, 63, 9, 81, 16, 82, 17, 18,
24
- 19, 20, 78, 79, 80, 83, 21, 22, 25, 24,
25
- 63, 9, nil, 16, nil, 17, 18, 19, 20, 26,
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
- 16, nil, 17, 18, 19, 20, nil, nil, nil, nil,
28
- 21, 22, nil, nil, nil, 37, nil, 16, nil, 17,
29
- 18, 19, 20, nil, nil, nil, nil, 21, 22, nil,
30
- nil, nil, 37, nil, 16, nil, 17, 18, 19, 20,
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, 16, nil, 17, 18, 19, 20, nil, nil, nil,
33
- nil, 21, 22, nil, nil, nil, 37, nil, 16, nil,
34
- 17, 18, 19, 20, nil, nil, nil, nil, 21, 22,
35
- nil, nil, nil, 37, nil, 16, nil, 17, 18, 19,
36
- 20, nil, nil, nil, nil, 21, 22, nil, nil, nil,
37
- 37, 69, 16, nil, 17, 18, 19, 49, 50, 51,
38
- 52, 53, 21, 22, 20, 16, nil, 56, 57, nil,
39
- 58, 59, 60, nil, 37, nil, 16, nil, 17, 18,
40
- 19, 49, 50, 51, 52, 53, 21, 22, 20, 16,
41
- nil, 56, 57, nil, 58, 59, 60, nil, 37, nil,
42
- 16, 20, 17, 18, 19, 49, 50, 51, 52, 53,
43
- nil, 37, nil, 16, 20, 17, 18, 19, 49, 50,
44
- 51, 52, 53, nil, 37, nil, 16, 20, 17, 18,
45
- 19, 49, 50, 51, 52, 53, nil, 37, nil, 16,
46
- 20, 17, 18, 19, 49, 50, 51, 52, 53, nil,
47
- 37, nil, 16, 20, 17, 18, 19, 49, 50, 51,
48
- 52, 53, nil, 37, nil, 16, 20, 17, 18, 19,
49
- 49, 50, 51, 52, 53, nil, 37, 93, 20, nil,
50
- 17, 18, 19, 49, 50, 51, 52, 53, 37, nil,
51
- 20, nil, 17, 18, 19, 49, 50, 51, 52, 53,
52
- 37, 20, nil, nil, 17, 18, 19, nil, 20, nil,
53
- nil, 37, nil, nil, nil, 17, 18, 19, 37, nil,
54
- 16, nil, 17, 18, 19, 78, 79, 80, 76, 77 ]
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, 10, 10, 10, 10, 10, 29, 29, 0, 29,
58
- 0, 70, 0, 70, 0, 0, 0, 8, 64, 64,
59
- 64, 1, 0, 0, 65, 65, 65, 8, 94, 8,
60
- 94, 8, 8, 8, 9, 86, 86, 86, 15, 8,
61
- 8, 23, 9, 30, 9, 44, 9, 46, 9, 9,
62
- 9, 24, 87, 87, 87, 55, 9, 9, 2, 2,
63
- 75, 24, nil, 24, nil, 24, 24, 24, 25, 6,
64
- 6, nil, nil, 24, 24, nil, nil, nil, 25, nil,
65
- 25, nil, 25, 25, 25, 31, nil, nil, nil, nil,
66
- 25, 25, nil, nil, nil, 31, nil, 31, nil, 31,
67
- 31, 31, 32, nil, nil, nil, nil, 31, 31, nil,
68
- nil, nil, 32, nil, 32, nil, 32, 32, 32, 33,
69
- nil, nil, nil, nil, 32, 32, nil, nil, nil, 33,
70
- nil, 33, nil, 33, 33, 33, 34, nil, nil, nil,
71
- nil, 33, 33, nil, nil, nil, 34, nil, 34, nil,
72
- 34, 34, 34, 35, nil, nil, nil, nil, 34, 34,
73
- nil, nil, nil, 35, nil, 35, nil, 35, 35, 35,
74
- 36, nil, nil, nil, nil, 35, 35, nil, nil, nil,
75
- 36, 36, 36, nil, 36, 36, 36, 36, 36, 36,
76
- 36, 36, 36, 36, 85, 27, nil, 27, 27, nil,
77
- 27, 27, 27, nil, 85, nil, 85, nil, 85, 85,
78
- 85, 85, 85, 85, 85, 85, 85, 85, 26, 83,
79
- nil, 83, 83, nil, 83, 83, 83, nil, 26, nil,
80
- 26, 76, 26, 26, 26, 26, 26, 26, 26, 26,
81
- nil, 76, nil, 76, 77, 76, 76, 76, 76, 76,
82
- 76, 76, 76, nil, 77, nil, 77, 78, 77, 77,
83
- 77, 77, 77, 77, 77, 77, nil, 78, nil, 78,
84
- 79, 78, 78, 78, 78, 78, 78, 78, 78, nil,
85
- 79, nil, 79, 80, 79, 79, 79, 79, 79, 79,
86
- 79, 79, nil, 80, nil, 80, 82, 80, 80, 80,
87
- 80, 80, 80, 80, 80, nil, 82, 82, 101, nil,
88
- 82, 82, 82, 82, 82, 82, 82, 82, 101, nil,
89
- 20, nil, 101, 101, 101, 101, 101, 101, 101, 101,
90
- 20, 37, nil, nil, 20, 20, 20, nil, 81, nil,
91
- nil, 37, nil, nil, nil, 37, 37, 37, 81, nil,
92
- 81, nil, 81, 81, 81, 42, 42, 42, 42, 42 ]
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, 21, 48, nil, nil, nil, 61, nil, 15, 32,
96
- -2, nil, nil, nil, nil, 26, nil, nil, nil, nil,
97
- 318, nil, nil, 41, 49, 66, 216, 181, nil, -4,
98
- 30, 83, 100, 117, 134, 151, 168, 329, nil, nil,
99
- nil, nil, 352, nil, 30, nil, 35, nil, nil, nil,
100
- nil, nil, nil, nil, nil, 40, nil, nil, nil, nil,
101
- nil, nil, nil, nil, 15, 21, nil, nil, nil, nil,
102
- -2, nil, nil, nil, nil, 47, 229, 242, 255, 268,
103
- 281, 336, 294, 205, nil, 192, 32, 49, nil, nil,
104
- nil, nil, nil, nil, 15, nil, nil, nil, nil, nil,
105
- nil, 306, 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, -68, -1, -3, -4, -5, -68, -8, -68, -68,
109
- -13, -19, -20, -21, -22, -68, -35, -50, -51, -52,
110
- -68, -66, -67, -68, -68, -68, -68, -68, -9, -68,
111
- -19, -68, -68, -68, -68, -68, -68, -68, -54, 103,
112
- -10, -11, -6, -23, -24, -25, -68, -45, -46, -55,
113
- -56, -57, -58, -59, -7, -68, -60, -61, -62, -63,
114
- -64, -65, -12, -53, -14, -15, -16, -17, -18, -31,
115
- -68, -36, -38, -39, -40, -68, -68, -68, -68, -68,
116
- -68, -68, -68, -68, -32, -68, -26, -27, -28, -29,
117
- -30, -47, -48, -33, -68, -41, -43, -44, -49, -37,
118
- -34, -68, -42 ]
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
- 30, 73, 61, 55, 72, 71, 95, 28, 1, 2,
122
- 42, 38, 64, 65, 66, 67, 68, 47, 29, 54,
123
- 70, 94, nil, 40, 41, 102, nil, 74, 75, 46,
124
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
125
- nil, nil, nil, nil, nil, nil, nil, 96, nil, nil,
126
- 73, nil, nil, 72, 99, nil, 92, nil, 61, 98,
127
- 86, 87, 88, 89, 90, nil, 96, 47, 47, 47,
128
- 47, 47, 91, 97, nil, nil, 74, nil, nil, 46,
129
- 46, 46, 46, 46, nil, nil, nil, nil, nil, nil,
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, 17, 14, 24, 12, 22, 23, 3, 1, 2,
134
- 7, 11, 10, 10, 10, 10, 10, 11, 2, 8,
135
- 19, 21, nil, 3, 3, 23, nil, 11, 11, 18,
136
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
137
- nil, nil, nil, nil, nil, nil, nil, 17, nil, nil,
138
- 17, nil, nil, 12, 22, nil, 14, nil, 14, 24,
139
- 7, 7, 7, 7, 7, nil, 17, 11, 11, 11,
140
- 11, 11, 11, 11, nil, nil, 11, nil, nil, 18,
141
- 18, 18, 18, 18, nil, nil, nil, nil, nil, nil,
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, 8, 9, -1, nil, nil, nil, -16, -8, nil,
146
- -19, -9, -32, nil, -25, nil, nil, -35, 3, -16,
147
- nil, -61, -31, -76, -24 ]
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, 11, 12, 13, 14, 43, 44, 45, 15, nil,
152
- 48, nil, nil, nil, nil ]
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, :_reduce_24,
189
+ 1, 33, :_reduce_26,
180
190
  1, 33, :_reduce_none,
181
- 3, 41, :_reduce_26,
182
- 3, 41, :_reduce_27,
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, 40, :_reduce_31,
187
- 4, 40, :_reduce_32,
188
- 3, 46, :_reduce_33,
189
- 4, 46, :_reduce_34,
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, :_reduce_37,
193
- 1, 48, :_reduce_38,
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, :_reduce_42,
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, :_reduce_47,
203
- 3, 42, :_reduce_48,
204
- 3, 34, :_reduce_49,
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 = 68
234
+ racc_reduce_n = 70
225
235
 
226
- racc_shift_n = 103
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
- # reduce 19 omitted
417
+ def _reduce_19(val, _values, result)
418
+ result = tokenize_arithmetic_group(val[1])
419
+ result
420
+ end
408
421
 
409
- # reduce 20 omitted
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
- def _reduce_24(val, _values, result)
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 = add_fold(val[0], val[2])
438
+ result = tokenize_list(val[0])
426
439
  result
427
440
  end
428
441
 
429
- def _reduce_27(val, _values, result)
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 = mul_fold(val[0], val[2])
445
+ result = group_fold(val[1])
436
446
  result
437
447
  end
438
448
 
439
449
  def _reduce_29(val, _values, result)
440
- result = div_fold(val[0], val[2])
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 = mod_fold(val[0], val[2])
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 = tokenize_function(val[0], [])
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 = tokenize_function(val[0], val[2])
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 = tokenize_function(val[0], [])
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 = tokenize_function(val[0], val[2])
475
+ result = mod_fold(val[0], val[2])
466
476
  result
467
477
  end
468
478
 
469
- # reduce 35 omitted
479
+ def _reduce_35(val, _values, result)
480
+ result = tokenize_function(val[0], [])
481
+ result
482
+ end
470
483
 
471
- # reduce 36 omitted
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 = tokenize_function_args(val[0], val[2])
490
+ result = tokenize_function(val[0], [])
475
491
  result
476
492
  end
477
493
 
478
494
  def _reduce_38(val, _values, result)
479
- result = tokenize_field_arg(val[0])
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
- # reduce 41 omitted
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 = tokenize_function_args(val[0], val[2])
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
- # reduce 46 omitted
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
- def _reduce_48(val, _values, result)
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 _reduce_49(val, _values, result)
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[1]
543
+ result = tokenize_multiple(val[0], val[2])
525
544
  result
526
545
  end
527
546
 
528
- def _reduce_54(val, _values, result)
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
@@ -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
- lhs = nested_representation[:lhs]
28
- rhs = nested_representation[:rhs]
29
-
30
- if lhs[:type] == :field
31
- lhs[:value]
32
- elsif rhs[:type] == :field
33
- rhs[:value]
34
- elsif lhs.key?(:field)
35
- lhs[:field]
36
- elsif rhs.key?(:field)
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
 
@@ -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.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-28 00:00:00.000000000 Z
11
+ date: 2018-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: georuby