sparkql 1.2.1 → 1.2.2

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.
@@ -177,6 +177,80 @@ class ParserTest < Test::Unit::TestCase
177
177
  assert_equal ['City', '4131800000000'], expression[:field_manipulations][:args].map {|v| v[:value]}
178
178
  end
179
179
 
180
+ test 'add' do
181
+ @parser = Parser.new
182
+ filter = "Baths Add 2 Eq 1"
183
+ expressions = @parser.parse(filter)
184
+ assert !@parser.errors?, @parser.errors.inspect
185
+
186
+ field_manipulations = expressions.first[:field_manipulations]
187
+ assert_equal :arithmetic, field_manipulations[:type]
188
+ assert_equal 'Add', field_manipulations[:op]
189
+ end
190
+
191
+ test 'Sub' do
192
+ @parser = Parser.new
193
+ filter = "Baths Sub 2 Eq 1"
194
+ expressions = @parser.parse(filter)
195
+ assert !@parser.errors?, @parser.errors.inspect
196
+
197
+ field_manipulations = expressions.first[:field_manipulations]
198
+ assert_equal :arithmetic, field_manipulations[:type]
199
+ assert_equal 'Sub', field_manipulations[:op]
200
+ end
201
+
202
+ test 'Mul' do
203
+ @parser = Parser.new
204
+ filter = "Baths Mul 2 Eq 1"
205
+ expressions = @parser.parse(filter)
206
+ assert !@parser.errors?, @parser.errors.inspect
207
+
208
+ field_manipulations = expressions.first[:field_manipulations]
209
+ assert_equal :arithmetic, field_manipulations[:type]
210
+ assert_equal 'Mul', field_manipulations[:op]
211
+ end
212
+
213
+ test 'Div' do
214
+ @parser = Parser.new
215
+ filter = "Baths Div 2 Eq 1"
216
+ expressions = @parser.parse(filter)
217
+ assert !@parser.errors?, @parser.errors.inspect
218
+
219
+ field_manipulations = expressions.first[:field_manipulations]
220
+ assert_equal :arithmetic, field_manipulations[:type]
221
+ assert_equal 'Div', field_manipulations[:op]
222
+ end
223
+
224
+ test 'Mod' do
225
+ @parser = Parser.new
226
+ filter = "Baths Mod 2 Eq 1"
227
+ expressions = @parser.parse(filter)
228
+ assert !@parser.errors?, @parser.errors.inspect
229
+
230
+ field_manipulations = expressions.first[:field_manipulations]
231
+ assert_equal :arithmetic, field_manipulations[:type]
232
+ assert_equal 'Mod', field_manipulations[:op]
233
+ end
234
+
235
+ test 'arithmetic with field function' do
236
+ @parser = Parser.new
237
+ filter = "floor(Baths) Add 2 Eq 1"
238
+ expressions = @parser.parse(filter)
239
+ assert !@parser.errors?, @parser.errors.inspect
240
+
241
+ field_manipulations = expressions.first[:field_manipulations]
242
+ assert_equal :arithmetic, field_manipulations[:type]
243
+ assert_equal 'Add', field_manipulations[:op]
244
+ assert_equal :function, field_manipulations[:lhs][:type]
245
+ end
246
+
247
+ test 'Bad type function with arithmetic' do
248
+ @parser = Parser.new
249
+ filter = "trim(Baths) Add 2 Eq 1"
250
+ @parser.parse(filter)
251
+ assert @parser.errors?
252
+ end
253
+
180
254
  test "function data preserved in expression" do
181
255
  filter = "OriginalEntryTimestamp Ge days(-7)"
182
256
  @parser = Parser.new
@@ -806,6 +880,185 @@ class ParserTest < Test::Unit::TestCase
806
880
  parser_errors("ListPrice Eq cast('10', 'bogus')")
807
881
  end
808
882
 
883
+ test 'arithmetic literals with functions' do
884
+ @parser = Parser.new
885
+ filter = "Baths Eq 1 Add floor(2.3)"
886
+ expressions = @parser.parse(filter)
887
+ assert !@parser.errors?, @parser.errors.inspect
888
+
889
+ assert_equal '3', expressions.first[:value]
890
+ assert_equal :integer, expressions.first[:type]
891
+
892
+ @parser = Parser.new
893
+ filter = "Baths Eq 1 Add length('asdf')"
894
+ expressions = @parser.parse(filter)
895
+ assert !@parser.errors?, @parser.errors.inspect
896
+
897
+ assert_equal '5', expressions.first[:value]
898
+ assert_equal :integer, expressions.first[:type]
899
+ end
900
+
901
+ test 'arithmetic literals with invalid type' do
902
+ @parser = Parser.new
903
+ filter = "Baths Eq 1 Add '2.3'"
904
+ @parser.parse(filter)
905
+ assert @parser.errors?
906
+ end
907
+
908
+ test 'arithmetic literals with invalid function type' do
909
+ @parser = Parser.new
910
+ filter = "Baths Eq 1 Add trim('2.3')"
911
+ @parser.parse(filter)
912
+ assert @parser.errors?
913
+ end
914
+
915
+ test 'Add literals' do
916
+ @parser = Parser.new
917
+ filter = "Baths Eq 1 Add 2"
918
+ expressions = @parser.parse(filter)
919
+ assert !@parser.errors?, @parser.errors.inspect
920
+
921
+ assert_equal '3', expressions.first[:value]
922
+ assert_equal :integer, expressions.first[:type]
923
+
924
+ @parser = Parser.new
925
+ filter = "Baths Eq 1 Add 2 Add 3"
926
+ expressions = @parser.parse(filter)
927
+ assert !@parser.errors?, @parser.errors.inspect
928
+
929
+ assert_equal '6', expressions.first[:value]
930
+ assert_equal :integer, expressions.first[:type]
931
+ end
932
+
933
+ test 'subtract literals' do
934
+ @parser = Parser.new
935
+ filter = "Baths Eq 10 sub 2"
936
+ expressions = @parser.parse(filter)
937
+ assert !@parser.errors?, @parser.errors.inspect
938
+
939
+ assert_equal '8', expressions.first[:value]
940
+ assert_equal :integer, expressions.first[:type]
941
+
942
+ @parser = Parser.new
943
+ filter = "Baths Eq 10 sub 2 sub 3"
944
+ expressions = @parser.parse(filter)
945
+ assert !@parser.errors?, @parser.errors.inspect
946
+
947
+ assert_equal '5', expressions.first[:value]
948
+ assert_equal :integer, expressions.first[:type]
949
+
950
+ @parser = Parser.new
951
+ filter = "Baths Eq 10 sub 2.0 sub 3"
952
+ expressions = @parser.parse(filter)
953
+ assert !@parser.errors?, @parser.errors.inspect
954
+
955
+ assert_equal '5.0', expressions.first[:value]
956
+ assert_equal :decimal, expressions.first[:type]
957
+ end
958
+
959
+ test 'add and subtract' do
960
+ @parser = Parser.new
961
+ filter = "Baths Eq 10 add 2 sub 2"
962
+ expressions = @parser.parse(filter)
963
+ assert !@parser.errors?, @parser.errors.inspect
964
+
965
+ assert_equal '10', expressions.first[:value]
966
+ assert_equal :integer, expressions.first[:type]
967
+
968
+ @parser = Parser.new
969
+ filter = "Baths Eq 10 add 2 sub 2.0"
970
+ expressions = @parser.parse(filter)
971
+ assert !@parser.errors?, @parser.errors.inspect
972
+
973
+ assert_equal '10.0', expressions.first[:value]
974
+ assert_equal :decimal, expressions.first[:type]
975
+ end
976
+
977
+ test 'mul' do
978
+ @parser = Parser.new
979
+ filter = "Baths Eq 5 mul 5"
980
+ expressions = @parser.parse(filter)
981
+ assert !@parser.errors?, @parser.errors.inspect
982
+
983
+ assert_equal '25', expressions.first[:value]
984
+ assert_equal :integer, expressions.first[:type]
985
+
986
+ @parser = Parser.new
987
+ filter = "Baths Eq 5 mul 5 mul 2"
988
+ expressions = @parser.parse(filter)
989
+ assert !@parser.errors?, @parser.errors.inspect
990
+
991
+ assert_equal '50', expressions.first[:value]
992
+ assert_equal :integer, expressions.first[:type]
993
+
994
+ @parser = Parser.new
995
+ filter = "Baths Eq 5.0 mul 5 mul 2"
996
+ expressions = @parser.parse(filter)
997
+ assert !@parser.errors?, @parser.errors.inspect
998
+
999
+ assert_equal '50.0', expressions.first[:value]
1000
+ assert_equal :decimal, expressions.first[:type]
1001
+ end
1002
+
1003
+ test 'field operator precedence' do
1004
+ @parser = Parser.new
1005
+ filter = "Baths add 5 mul 5 Eq 50"
1006
+ expressions = @parser.parse(filter)
1007
+ assert !@parser.errors?, @parser.errors.inspect
1008
+
1009
+ assert_equal 'Add', expressions.first[:field_manipulations][:op]
1010
+ assert_equal 'Mul', expressions.first[:field_manipulations][:rhs][:op]
1011
+ end
1012
+
1013
+ test 'operator precedence' do
1014
+ @parser = Parser.new
1015
+ filter = "Baths Eq 50 add 5 mul 5"
1016
+ expressions = @parser.parse(filter)
1017
+ assert !@parser.errors?, @parser.errors.inspect
1018
+
1019
+ assert_equal '75', expressions.first[:value]
1020
+ assert_equal :integer, expressions.first[:type]
1021
+
1022
+ @parser = Parser.new
1023
+ filter = "Baths Eq 5 mul 5 add 50"
1024
+ expressions = @parser.parse(filter)
1025
+ assert !@parser.errors?, @parser.errors.inspect
1026
+
1027
+ assert_equal '75', expressions.first[:value]
1028
+ assert_equal :integer, expressions.first[:type]
1029
+
1030
+ @parser = Parser.new
1031
+ filter = "Baths Eq 50 add 5 div 5"
1032
+ expressions = @parser.parse(filter)
1033
+ assert !@parser.errors?, @parser.errors.inspect
1034
+
1035
+ assert_equal '51', expressions.first[:value]
1036
+ assert_equal :integer, expressions.first[:type]
1037
+ end
1038
+
1039
+ test 'modulo' do
1040
+ @parser = Parser.new
1041
+ filter = "Baths Eq 5 mod 5"
1042
+ expressions = @parser.parse(filter)
1043
+ assert !@parser.errors?, @parser.errors.inspect
1044
+
1045
+ assert_equal '0', expressions.first[:value]
1046
+ assert_equal :integer, expressions.first[:type]
1047
+
1048
+ @parser = Parser.new
1049
+ filter = "Baths Eq 5.0 mod 5"
1050
+ expressions = @parser.parse(filter)
1051
+ assert !@parser.errors?, @parser.errors.inspect
1052
+
1053
+ assert_equal '0.0', expressions.first[:value]
1054
+ assert_equal :decimal, expressions.first[:type]
1055
+ end
1056
+
1057
+ test 'division by zero' do
1058
+ parser_errors('Baths Eq 5 mod 0')
1059
+ parser_errors('Baths Eq 5 div 0')
1060
+ end
1061
+
809
1062
  test 'nested functions on field side' do
810
1063
  @parser = Parser.new
811
1064
  filter = "tolower(toupper(City)) Eq 'Fargo'"
@@ -839,6 +1092,11 @@ class ParserTest < Test::Unit::TestCase
839
1092
  assert_equal({:type=>:field, :value=>"City"}, function2[:args].first)
840
1093
  end
841
1094
 
1095
+ test 'parse error with no field' do
1096
+ parser_errors("1 Eq 1")
1097
+ parser_errors("1 Add 1 Eq 2")
1098
+ end
1099
+
842
1100
  private
843
1101
 
844
1102
  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.1
4
+ version: 1.2.2
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-10-09 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: georuby