arel_extensions 1.2.2 → 1.2.13
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 +5 -5
- data/.rubocop.yml +7 -4
- data/.travis.yml +59 -91
- data/Gemfile +2 -2
- data/README.md +17 -12
- data/Rakefile +38 -27
- data/appveyor.yml +1 -1
- data/arel_extensions.gemspec +1 -1
- data/functions.html +3 -3
- data/gemfiles/rails4.gemfile +1 -1
- data/gemfiles/rails6.gemfile +30 -0
- data/gemspec_v2/arel_extensions-v2.gemspec +28 -0
- data/generate_gems.sh +14 -0
- data/init/mssql.sql +4 -4
- data/init/mysql.sql +38 -38
- data/init/postgresql.sql +21 -21
- data/lib/arel_extensions.rb +63 -19
- data/lib/arel_extensions/attributes.rb +0 -1
- data/lib/arel_extensions/boolean_functions.rb +38 -13
- data/lib/arel_extensions/common_sql_functions.rb +5 -4
- data/lib/arel_extensions/comparators.rb +4 -2
- data/lib/arel_extensions/insert_manager.rb +26 -24
- data/lib/arel_extensions/math.rb +3 -3
- data/lib/arel_extensions/math_functions.rb +10 -5
- data/lib/arel_extensions/nodes.rb +1 -1
- data/lib/arel_extensions/nodes/abs.rb +0 -0
- data/lib/arel_extensions/nodes/aggregate_function.rb +14 -0
- data/lib/arel_extensions/nodes/blank.rb +14 -11
- data/lib/arel_extensions/nodes/case.rb +8 -4
- data/lib/arel_extensions/nodes/ceil.rb +0 -0
- data/lib/arel_extensions/nodes/change_case.rb +2 -2
- data/lib/arel_extensions/nodes/coalesce.rb +2 -2
- data/lib/arel_extensions/nodes/collate.rb +12 -12
- data/lib/arel_extensions/nodes/concat.rb +6 -13
- data/lib/arel_extensions/nodes/date_diff.rb +3 -5
- data/lib/arel_extensions/nodes/duration.rb +0 -2
- data/lib/arel_extensions/nodes/find_in_set.rb +0 -0
- data/lib/arel_extensions/nodes/floor.rb +0 -0
- data/lib/arel_extensions/nodes/format.rb +8 -8
- data/lib/arel_extensions/nodes/formatted_number.rb +23 -23
- data/lib/arel_extensions/nodes/function.rb +10 -0
- data/lib/arel_extensions/nodes/is_null.rb +10 -8
- data/lib/arel_extensions/nodes/json.rb +28 -30
- data/lib/arel_extensions/nodes/length.rb +0 -0
- data/lib/arel_extensions/nodes/levenshtein_distance.rb +5 -5
- data/lib/arel_extensions/nodes/locate.rb +7 -7
- data/lib/arel_extensions/nodes/matches.rb +4 -4
- data/lib/arel_extensions/nodes/power.rb +6 -5
- data/lib/arel_extensions/nodes/rand.rb +0 -0
- data/lib/arel_extensions/nodes/repeat.rb +2 -2
- data/lib/arel_extensions/nodes/replace.rb +24 -6
- data/lib/arel_extensions/nodes/round.rb +5 -5
- data/lib/arel_extensions/nodes/soundex.rb +16 -15
- data/lib/arel_extensions/nodes/std.rb +19 -21
- data/lib/arel_extensions/nodes/substring.rb +8 -15
- data/lib/arel_extensions/nodes/sum.rb +7 -0
- data/lib/arel_extensions/nodes/trim.rb +3 -3
- data/lib/arel_extensions/nodes/union.rb +2 -3
- data/lib/arel_extensions/nodes/union_all.rb +1 -2
- data/lib/arel_extensions/nodes/wday.rb +0 -0
- data/lib/arel_extensions/null_functions.rb +2 -2
- data/lib/arel_extensions/predications.rb +35 -33
- data/lib/arel_extensions/set_functions.rb +16 -16
- data/lib/arel_extensions/string_functions.rb +34 -12
- data/lib/arel_extensions/tasks.rb +5 -5
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors.rb +1 -1
- data/lib/arel_extensions/visitors/ibm_db.rb +1 -1
- data/lib/arel_extensions/visitors/mssql.rb +18 -17
- data/lib/arel_extensions/visitors/mysql.rb +92 -46
- data/lib/arel_extensions/visitors/oracle.rb +40 -28
- data/lib/arel_extensions/visitors/oracle12.rb +1 -1
- data/lib/arel_extensions/visitors/postgresql.rb +80 -34
- data/lib/arel_extensions/visitors/sqlite.rb +54 -46
- data/lib/arel_extensions/visitors/to_sql.rb +75 -62
- data/test/arelx_test_helper.rb +28 -0
- data/test/real_db_test.rb +1 -1
- data/test/support/fake_record.rb +4 -0
- data/test/test_comparators.rb +9 -8
- data/test/visitors/test_bulk_insert_oracle.rb +8 -7
- data/test/visitors/test_bulk_insert_sqlite.rb +9 -8
- data/test/visitors/test_bulk_insert_to_sql.rb +8 -10
- data/test/visitors/test_oracle.rb +41 -40
- data/test/visitors/test_to_sql.rb +367 -193
- data/test/with_ar/all_agnostic_test.rb +85 -39
- data/test/with_ar/insert_agnostic_test.rb +3 -2
- data/test/with_ar/test_bulk_sqlite.rb +6 -5
- data/test/with_ar/test_math_sqlite.rb +4 -4
- data/test/with_ar/test_string_mysql.rb +4 -6
- data/test/with_ar/test_string_sqlite.rb +3 -7
- data/version_v1.rb +3 -0
- data/version_v2.rb +3 -0
- metadata +13 -7
- data/test/helper.rb +0 -18
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
require 'date'
|
3
3
|
|
4
4
|
module ArelExtensions
|
@@ -32,6 +32,7 @@ module ArelExtensions
|
|
32
32
|
t.column :created_at, :date
|
33
33
|
t.column :updated_at, :datetime
|
34
34
|
t.column :duration, :time
|
35
|
+
t.column :other, :string
|
35
36
|
t.column :score, :decimal, :precision => 20, :scale => 10
|
36
37
|
end
|
37
38
|
@cnx.drop_table(:product_tests) rescue nil
|
@@ -63,11 +64,12 @@ module ArelExtensions
|
|
63
64
|
@myung = User.where(:id => u.id)
|
64
65
|
u = User.create :age => 25, :name => "Laure", :created_at => d, :score => 20.16, :duration => Time.utc(2001, 1, 1, 12, 42, 21),:updated_at => Time.utc(2014, 3, 3, 12, 42, 0)
|
65
66
|
@laure = User.where(:id => u.id)
|
66
|
-
u = User.create :age => nil, :name => "Test", :created_at => d, :score => 1.62
|
67
|
+
u = User.create :age => nil, :name => "Test", :created_at => d, :score => 1.62, :other => 'toto'
|
67
68
|
@test = User.where(:id => u.id)
|
68
69
|
u = User.create :age => -42, :name => "Negatif", :comments => '1,22,3,42,2', :created_at => d, :updated_at => d.to_time, :score => 0.17
|
69
70
|
@neg = User.where(:id => u.id)
|
70
|
-
|
71
|
+
u = User.create :age => 15, :name => "Justin", :created_at => d, :score => 11.0
|
72
|
+
@justin = User.where(:id => u.id)
|
71
73
|
|
72
74
|
@age = User.arel_table[:age]
|
73
75
|
@name = User.arel_table[:name]
|
@@ -77,6 +79,7 @@ module ArelExtensions
|
|
77
79
|
@comments = User.arel_table[:comments]
|
78
80
|
@duration = User.arel_table[:duration]
|
79
81
|
@price = Product.arel_table[:price]
|
82
|
+
@other = User.arel_table[:other]
|
80
83
|
@not_in_table = User.arel_table[:not_in_table]
|
81
84
|
|
82
85
|
@ut = User.arel_table
|
@@ -119,6 +122,7 @@ module ArelExtensions
|
|
119
122
|
assert_equal(-20, t(@camille, @score.ceil)) # -20.16
|
120
123
|
assert_equal(-20, t(@camille, (@score - 0.5).ceil)) # -20.16
|
121
124
|
assert_equal 63, t(@arthur, @age.ceil + 42)
|
125
|
+
assert_equal 11, t(@justin, @score.ceil) # 11.0
|
122
126
|
end
|
123
127
|
|
124
128
|
def test_floor
|
@@ -127,12 +131,14 @@ module ArelExtensions
|
|
127
131
|
assert_equal 1, t(@test, @score.floor) # 1.62
|
128
132
|
assert_equal(-9, t(@test, (@score - 10).floor)) # 1.62
|
129
133
|
assert_equal 42, t(@arthur, @score.floor - 23)
|
134
|
+
assert_equal 11, t(@justin, @score.floor) # 11.0
|
135
|
+
assert_equal(-21, t(@camille, @score.floor)) # # -20.16
|
130
136
|
end
|
131
137
|
|
132
138
|
def test_rand
|
133
139
|
assert 42 != User.select(Arel.rand.as('res')).first.res
|
134
140
|
assert 0 <= User.select(Arel.rand.abs.as('res')).first.res
|
135
|
-
assert_equal
|
141
|
+
assert_equal 9, User.order(Arel.rand).limit(50).count
|
136
142
|
end
|
137
143
|
|
138
144
|
def test_round
|
@@ -145,15 +151,15 @@ module ArelExtensions
|
|
145
151
|
def test_sum
|
146
152
|
if @env_db == 'mssql'
|
147
153
|
skip "SQL Server forces order?" # TODO
|
148
|
-
assert_equal
|
149
|
-
assert_equal
|
150
|
-
assert_equal
|
151
|
-
assert_equal
|
154
|
+
assert_equal 83, User.select((@age.sum + 1).as("res"), User.arel_table[:id].sum).take(50).reorder(@age).first.res
|
155
|
+
assert_equal 164, User.reorder(nil).select((@age.sum + @age.sum).as("res"), User.arel_table[:id].sum).take(50).first.res
|
156
|
+
assert_equal 246, User.reorder(nil).select(((@age * 3).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
|
157
|
+
assert_equal 4234, User.reorder(nil).select(((@age * @age).sum).as("res"), User.arel_table[:id].sum).take(50).first.res
|
152
158
|
else
|
153
|
-
assert_equal
|
154
|
-
assert_equal
|
155
|
-
assert_equal
|
156
|
-
assert_equal
|
159
|
+
assert_equal 83, User.select((@age.sum + 1).as("res")).take(50).first.res
|
160
|
+
assert_equal 164, User.select((@age.sum + @age.sum).as("res")).take(50).first.res
|
161
|
+
assert_equal 246, User.select((@age * 3).sum.as("res")).take(50).first.res
|
162
|
+
assert_equal 4234, User.select(((@age * @age).sum).as("res")).take(50).first.res
|
157
163
|
end
|
158
164
|
end
|
159
165
|
|
@@ -173,6 +179,7 @@ module ArelExtensions
|
|
173
179
|
assert_equal "Sophie,Lucas,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',@name.desc))
|
174
180
|
assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',[@score.asc,@name.asc]))
|
175
181
|
assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',@score.asc,@name.asc))
|
182
|
+
assert_equal "Lucas,Sophie,Arthur", t(User.where(:name => ['Lucas', 'Sophie','Arthur']), @name.group_concat(',',order: [@score.asc,@name.asc]))
|
176
183
|
end
|
177
184
|
|
178
185
|
def test_length
|
@@ -265,21 +272,28 @@ module ArelExtensions
|
|
265
272
|
skip "Sqlite version can't load extension for regexp" if $sqlite && $load_extension_disabled
|
266
273
|
skip "SQL Server does not know about REGEXP without extensions" if @env_db == 'mssql'
|
267
274
|
assert_equal 1, User.where(@name =~ '^M').count
|
268
|
-
assert_equal
|
275
|
+
assert_equal 7, User.where(@name !~ '^L').count
|
269
276
|
assert_equal 1, User.where(@name =~ /^M/).count
|
270
|
-
assert_equal
|
277
|
+
assert_equal 7, User.where(@name !~ /^L/).count
|
271
278
|
end
|
272
279
|
|
273
280
|
def test_imatches
|
274
281
|
#puts User.where(@name.imatches('m%')).to_sql
|
275
282
|
assert_equal 1, User.where(@name.imatches('m%')).count
|
276
283
|
assert_equal 4, User.where(@name.imatches_any(['L%', '%e'])).count
|
277
|
-
assert_equal
|
284
|
+
assert_equal 7, User.where(@name.idoes_not_match('L%')).count
|
278
285
|
end
|
279
286
|
|
280
287
|
def test_replace
|
281
288
|
assert_equal "LucaX", t(@lucas, @name.replace("s", "X"))
|
282
289
|
assert_equal "replace", t(@lucas, @name.replace(@name, "replace"))
|
290
|
+
|
291
|
+
skip "Sqlite does not seem to support regexp_replace" if $sqlite
|
292
|
+
skip "SQL Server does not know about REGEXP without extensions" if @env_db == 'mssql'
|
293
|
+
skip "Travis mysql version does not support REGEXP_REPLACE" if @env_db == 'mysql'
|
294
|
+
assert_equal "LXcXs", t(@lucas, @name.replace(/[ua]/, "X"))
|
295
|
+
assert_equal "LXcXs", t(@lucas, @name.regexp_replace(/[ua]/, "X"))
|
296
|
+
assert_equal "LXcXs", t(@lucas, @name.regexp_replace('[ua]', "X"))
|
283
297
|
end
|
284
298
|
|
285
299
|
def test_replace_once
|
@@ -292,8 +306,8 @@ module ArelExtensions
|
|
292
306
|
skip "Sqlite version can't load extension for soundex" if $sqlite && $load_extension_disabled
|
293
307
|
skip "PostgreSql version can't load extension for soundex" if @env_db == 'postgresql'
|
294
308
|
assert_equal "C540", t(@camille, @name.soundex)
|
295
|
-
assert_equal
|
296
|
-
assert_equal
|
309
|
+
assert_equal 9, User.where(@name.soundex.eq(@name.soundex)).count
|
310
|
+
assert_equal 9 , User.where(@name.soundex == @name.soundex).count
|
297
311
|
end
|
298
312
|
|
299
313
|
def test_change_case
|
@@ -347,12 +361,16 @@ module ArelExtensions
|
|
347
361
|
def test_coalesce
|
348
362
|
assert_equal 'Camille concat', t(@camille, @name.coalesce(nil, "default") + ' concat')
|
349
363
|
|
364
|
+
assert_equal 'toto', t(@test, @other.coalesce(""))
|
365
|
+
|
350
366
|
assert_equal ' ', t(@myung, @comments.coalesce("Myung").coalesce('ignored'))
|
351
367
|
assert_equal 'Laure', t(@laure, @comments.coalesce("Laure"))
|
352
368
|
if @env_db == 'oracle'
|
353
369
|
assert_nil t(@laure, @comments.coalesce(""))
|
370
|
+
assert_nil t(@camille, @other.coalesce(""))
|
354
371
|
else
|
355
372
|
assert_equal('', t(@laure, @comments.coalesce("")))
|
373
|
+
assert_equal '', t(@camille, @other.coalesce(""))
|
356
374
|
end
|
357
375
|
assert_equal 100, t(@test, @age.coalesce(100))
|
358
376
|
assert_equal "Camille", t(@camille, @name.coalesce(nil, "default"))
|
@@ -368,13 +386,13 @@ module ArelExtensions
|
|
368
386
|
assert_equal 2, User.where(@age <= 10).count
|
369
387
|
assert_equal 3, User.where(@age > 20).count
|
370
388
|
assert_equal 4, User.where(@age >= 20).count
|
371
|
-
assert_equal
|
389
|
+
assert_equal 2, User.where(@age > 5).where(@age < 20).count
|
372
390
|
end
|
373
391
|
|
374
392
|
def test_date_comparator
|
375
393
|
d = Date.new(2016, 5, 23)
|
376
394
|
assert_equal 0, User.where(@created_at < d).count
|
377
|
-
assert_equal
|
395
|
+
assert_equal 9, User.where(@created_at >= d).count
|
378
396
|
end
|
379
397
|
|
380
398
|
def test_date_duration
|
@@ -383,10 +401,10 @@ module ArelExtensions
|
|
383
401
|
assert_equal 0, User.where(@created_at.year.eq("2012")).count
|
384
402
|
#Month
|
385
403
|
assert_equal 5, t(@camille, @created_at.month).to_i
|
386
|
-
assert_equal
|
404
|
+
assert_equal 9, User.where(@created_at.month.eq("05")).count
|
387
405
|
#Week
|
388
406
|
assert_equal(@env_db == 'mssql' ? 22 : 21, t(@arthur, @created_at.week).to_i)
|
389
|
-
assert_equal
|
407
|
+
assert_equal 9, User.where(@created_at.month.eq("05")).count
|
390
408
|
#Day
|
391
409
|
assert_equal 23, t(@laure, @created_at.day).to_i
|
392
410
|
assert_equal 0, User.where(@created_at.day.eq("05")).count
|
@@ -418,6 +436,7 @@ module ArelExtensions
|
|
418
436
|
end
|
419
437
|
end
|
420
438
|
|
439
|
+
|
421
440
|
skip "not yet implemented" if $sqlite
|
422
441
|
|
423
442
|
date1 = Date.new(2016, 5, 23)
|
@@ -461,29 +480,37 @@ module ArelExtensions
|
|
461
480
|
# TODO; cast types
|
462
481
|
def test_cast_types
|
463
482
|
assert_equal "5", t(@lucas, @age.cast(:string))
|
483
|
+
skip "jdbc adapters does not work properly here (v52 works fine)" if RUBY_PLATFORM =~ /java/i
|
464
484
|
if @env_db == 'mysql' || @env_db == 'postgresql' || @env_db == 'oracle' || @env_db == 'mssql'
|
465
|
-
assert_equal 1, t(@laure,
|
466
|
-
assert_equal 1, t(@laure,
|
485
|
+
assert_equal 1, t(@laure,Arel.when(@duration.cast(:time).cast(:string).eq("12:42:21")).then(1).else(0)) unless @env_db == 'oracle' || @env_db == 'mssql'
|
486
|
+
assert_equal 1, t(@laure,Arel.when(@duration.cast(:time).eq("12:42:21")).then(1).else(0)) unless @env_db == 'oracle'
|
467
487
|
assert_equal "20.16", t(@laure,@score.cast(:string)).gsub(/[0]*\z/,'')
|
468
488
|
assert_equal "20.161", t(@laure,@score.cast(:string)+1).gsub(/[0]*1\z/,'1')
|
469
489
|
assert_equal 21.16, t(@laure,@score.cast(:string).cast(:decimal)+1)
|
470
490
|
assert_equal 21, t(@laure,@score.cast(:string).cast(:int)+1)
|
471
491
|
|
472
492
|
assert_equal String, t(@lucas,@updated_at.cast(:string)).class
|
473
|
-
|
493
|
+
|
494
|
+
assert_equal Date, t(@lucas,@updated_at.cast(:date)).class unless @env_db == 'oracle' # DateTime
|
474
495
|
assert_equal Time, t(@lucas,@updated_at.cast(:string).cast(:datetime)).class
|
475
496
|
assert_equal Time, t(@lucas,@updated_at.cast(:time)).class
|
476
497
|
|
477
498
|
assert_equal "2014-03-03 12:42:00", t(@lucas,@updated_at.cast(:string)) unless @env_db == 'mssql' #locale dependent
|
499
|
+
assert_equal Date.parse("2014-03-03"), t(@lucas,Arel::Nodes.build_quoted('2014-03-03').cast(:date))
|
500
|
+
assert_equal Date.parse("5014-03-03"), t(@lucas,(@age.cast(:string) + '014-03-03').cast(:date))
|
478
501
|
assert_equal Time.parse("2014-03-03 12:42:00 UTC"), t(@lucas,@updated_at.cast(:string).cast(:datetime))
|
479
502
|
assert_equal Date.parse("2014-03-03"), t(@lucas,@updated_at.cast(:date))
|
480
|
-
assert_equal "12:42:00", t(@lucas,@updated_at.cast(:time).cast(:string)).split('.').first unless @env_db == 'oracle'
|
503
|
+
assert_equal "12:42:00", t(@lucas,@updated_at.cast(:time).cast(:string)).split('.').first unless @env_db == 'oracle' #DateTime
|
481
504
|
end
|
482
505
|
end
|
483
506
|
|
484
507
|
def test_is_null
|
485
508
|
#puts User.where(@age.is_null).select(@name).to_sql
|
486
|
-
|
509
|
+
#puts @age.is_null
|
510
|
+
#puts @age.is_null.inspect
|
511
|
+
#puts @age.is_null.to_sql
|
512
|
+
#puts @age=='34'
|
513
|
+
assert_equal "Test", User.select(@name).where(@age.is_null.to_sql).first.name
|
487
514
|
end
|
488
515
|
|
489
516
|
def test_math_plus
|
@@ -513,7 +540,7 @@ module ArelExtensions
|
|
513
540
|
def test_math_minus
|
514
541
|
d = Date.new(2016, 5, 20)
|
515
542
|
#Datediff
|
516
|
-
assert_equal
|
543
|
+
assert_equal 9, User.where((@created_at - @created_at).eq(0)).count
|
517
544
|
assert_equal 3, @laure.select((@created_at - d).as("res")).first.res.abs.to_i
|
518
545
|
#Substraction
|
519
546
|
assert_equal 0, User.where((@age - 10).eq(50)).count
|
@@ -554,6 +581,7 @@ module ArelExtensions
|
|
554
581
|
# Case clause
|
555
582
|
def test_case
|
556
583
|
assert_equal 4, User.find_by_sql(@ut.project(@score.when(20.16).then(1).else(0).as('score_bin')).to_sql).sum(&:score_bin)
|
584
|
+
assert_equal 4, User.where(@score.when(20.16).then(1).else(0).eq(1)).count
|
557
585
|
assert_equal 2, t(@arthur, @score.when(65.62,1).else(0)+1)
|
558
586
|
assert_equal 0, t(@arthur, @score.when(65.62,1).else(0)-1)
|
559
587
|
assert_equal "11", t(@arthur, @score.when(65.62).then("1").else("0")+"1")
|
@@ -631,8 +659,8 @@ module ArelExtensions
|
|
631
659
|
end
|
632
660
|
|
633
661
|
def test_subquery_with_order
|
634
|
-
assert_equal
|
635
|
-
assert_equal
|
662
|
+
assert_equal 9, User.where(:name => User.select(:name).order(:name)).count
|
663
|
+
assert_equal 9, User.where(@ut[:name].in(@ut.project(@ut[:name]).order(@ut[:name]))).count
|
636
664
|
if !['mysql'].include?(@env_db) # MySql can't have limit in IN subquery
|
637
665
|
assert_equal 2, User.where(:name => User.select(:name).order(:name).limit(2)).count
|
638
666
|
#assert_equal 6, User.where(:name => User.select(:name).order(:name).offset(2)).count
|
@@ -700,6 +728,13 @@ module ArelExtensions
|
|
700
728
|
#assert_equal true , @test.where(@age.not_in([nil,1,2])).blank?
|
701
729
|
end
|
702
730
|
|
731
|
+
def test_in_on_grouping
|
732
|
+
skip "We should modify the visitor of IN to make it work" if $sqlite || @env_db == 'mssql'
|
733
|
+
assert_equal 2 , User.where(Arel.tuple(@name,@age).in(Arel.tuple('Myung',23),Arel.tuple('Arthur',21))).count
|
734
|
+
assert_equal 1 , User.where(Arel.tuple(@name,@age).in(Arel.tuple('Myung',23))).count
|
735
|
+
assert_equal 0 , User.where(Arel.tuple(@name,@age).in([])).count
|
736
|
+
end
|
737
|
+
|
703
738
|
def test_alias_shortened
|
704
739
|
if ['postgresql','oracle'].include?(@env_db)
|
705
740
|
new_alias = Arel.shorten('azerty' * 15)
|
@@ -714,16 +749,21 @@ module ArelExtensions
|
|
714
749
|
def test_stat_functions
|
715
750
|
skip "SQLite doesn't work for most on this functions" if $sqlite
|
716
751
|
#puts t(User.where(nil), @score.average)
|
717
|
-
#puts t(User.where(nil), @score.variance(true))
|
718
|
-
#puts t(User.where(nil), @score.variance(false))
|
719
|
-
#puts t(User.where(nil), @score.std(true))
|
720
|
-
#puts t(User.where(nil), @score.std(false))
|
721
|
-
|
722
|
-
assert ( 15.
|
723
|
-
assert (
|
724
|
-
assert (
|
725
|
-
assert (
|
726
|
-
assert (
|
752
|
+
#puts t(User.where(nil), @score.variance(unbiased: true))
|
753
|
+
#puts t(User.where(nil), @score.variance(unbiased: false))
|
754
|
+
#puts t(User.where(nil), @score.std(unbiased: true))
|
755
|
+
#puts t(User.where(nil), @score.std(unbiased: false))
|
756
|
+
|
757
|
+
assert ( 15.43222 - t(User.where(nil), @score.average)).abs < 0.01
|
758
|
+
assert (539.79804 - t(User.where(nil), @score.variance)).abs < 0.01
|
759
|
+
assert (479.82048 - t(User.where(nil), @score.variance(unbiased: false))).abs < 0.01
|
760
|
+
assert ( 23.23355 - t(User.where(nil), @score.std)).abs < 0.01
|
761
|
+
assert ( 21.90480 - t(User.where(nil), @score.std(unbiased: false))).abs < 0.01
|
762
|
+
skip "Not Yet Implemented" #if !['postgresql'].include?(@env_db)
|
763
|
+
assert_equal 2, User.select(@score.std(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map{|e| e['res']}.uniq.length
|
764
|
+
assert_equal 2, User.select(@score.variance(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map{|e|e['res']}.uniq.length
|
765
|
+
assert_equal 2, User.select(@score.sum(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map{|e|e['res']}.uniq.length
|
766
|
+
assert_equal 2, User.select(@comments.group_concat(group: Arel.when(@name > "M").then(0).else(1)).as('res')).map{|e|e['res']}.uniq.length
|
727
767
|
end
|
728
768
|
|
729
769
|
def test_levenshtein_distance
|
@@ -778,6 +818,12 @@ module ArelExtensions
|
|
778
818
|
assert_equal 'Arthur', @arthur.select(@name.as('Na Me')).first.attributes["Na Me"]
|
779
819
|
assert_equal 'ArthurArthur', @arthur.select((@name+@name).as('Na-Me')).first.attributes["Na-Me"]
|
780
820
|
end
|
821
|
+
|
822
|
+
def test_exists_in_subquery
|
823
|
+
assert User.where(User.where(nil).arel.exists).first
|
824
|
+
end
|
825
|
+
|
826
|
+
|
781
827
|
end
|
782
828
|
end
|
783
829
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
require 'date'
|
3
3
|
|
4
4
|
module ArelExtensions
|
@@ -23,7 +23,7 @@ module ArelExtensions
|
|
23
23
|
@cnx.execute(sql) rescue $stderr << "can't create functions\n"
|
24
24
|
end
|
25
25
|
end
|
26
|
-
@cnx.drop_table(:user_tests) rescue nil
|
26
|
+
@cnx.drop_table(:user_tests) rescue nil
|
27
27
|
@cnx.create_table :user_tests do |t|
|
28
28
|
t.column :age, :integer
|
29
29
|
t.column :name, :string
|
@@ -77,6 +77,7 @@ END;])
|
|
77
77
|
insert_manager.bulk_insert(@cols2, @data2)
|
78
78
|
@cnx.execute(insert_manager.to_sql)
|
79
79
|
assert_equal 4, User.count, "insertions failed"
|
80
|
+
|
80
81
|
end
|
81
82
|
|
82
83
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
|
3
3
|
module ArelExtensions
|
4
4
|
module WthAr
|
@@ -12,7 +12,7 @@ module ArelExtensions
|
|
12
12
|
@cnx = ActiveRecord::Base.connection
|
13
13
|
Arel::Table.engine = ActiveRecord::Base
|
14
14
|
@cnx.drop_table(:users) rescue nil
|
15
|
-
@cnx.drop_table(:products) rescue nil
|
15
|
+
@cnx.drop_table(:products) rescue nil
|
16
16
|
@cnx.create_table :users do |t|
|
17
17
|
t.column :age, :integer
|
18
18
|
t.column :name, :string
|
@@ -38,11 +38,12 @@ module ArelExtensions
|
|
38
38
|
it "should import large set of data" do
|
39
39
|
insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(ActiveRecord::Base).into(@table)
|
40
40
|
insert_manager.bulk_insert(@cols, @data)
|
41
|
-
|
42
|
-
|
41
|
+
_(insert_manager.to_sql)
|
42
|
+
.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at")
|
43
|
+
SELECT 23 AS 'id', 'nom1' AS 'name', 'sdfdsfdsfsdf' AS 'comments', '2016-01-01' AS 'created_at' UNION ALL SELECT 25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01']
|
43
44
|
end
|
44
45
|
|
45
46
|
end
|
46
47
|
|
47
48
|
end
|
48
|
-
end
|
49
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
|
3
3
|
module ArelExtensions
|
4
4
|
module WthAr
|
@@ -11,8 +11,8 @@ module ArelExtensions
|
|
11
11
|
ActiveRecord::Base.default_timezone = :utc
|
12
12
|
Arel::Table.engine = ActiveRecord::Base
|
13
13
|
@cnx = ActiveRecord::Base.connection
|
14
|
-
@cnx.drop_table(:users) rescue nil
|
15
|
-
@cnx.drop_table(:products) rescue nil
|
14
|
+
@cnx.drop_table(:users) rescue nil
|
15
|
+
@cnx.drop_table(:products) rescue nil
|
16
16
|
@cnx.create_table :users do |t|
|
17
17
|
t.column :age, :integer
|
18
18
|
t.column :name, :string
|
@@ -61,4 +61,4 @@ module ArelExtensions
|
|
61
61
|
end
|
62
62
|
|
63
63
|
end
|
64
|
-
end
|
64
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
require 'date'
|
3
3
|
|
4
4
|
module ArelExtensions
|
@@ -10,7 +10,7 @@ module ArelExtensions
|
|
10
10
|
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
11
11
|
ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
|
12
12
|
ActiveRecord::Base.default_timezone = :utc
|
13
|
-
begin
|
13
|
+
begin
|
14
14
|
@cnx = ActiveRecord::Base.connection
|
15
15
|
rescue => e
|
16
16
|
puts "\n#{e.inspect}"
|
@@ -19,7 +19,7 @@ module ArelExtensions
|
|
19
19
|
end
|
20
20
|
Arel::Table.engine = ActiveRecord::Base
|
21
21
|
@cnx.drop_table(:users) rescue nil
|
22
|
-
@cnx.drop_table(:products) rescue nil
|
22
|
+
@cnx.drop_table(:products) rescue nil
|
23
23
|
@cnx.create_table :users do |t|
|
24
24
|
t.column :age, :integer
|
25
25
|
t.column :name, :string
|
@@ -67,11 +67,9 @@ module ArelExtensions
|
|
67
67
|
# Replace
|
68
68
|
assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
|
69
69
|
assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
|
70
|
-
|
71
|
-
#
|
72
70
|
end
|
73
71
|
|
74
72
|
end
|
75
73
|
|
76
74
|
end
|
77
|
-
end
|
75
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'arelx_test_helper'
|
2
2
|
require 'date'
|
3
3
|
|
4
4
|
module ArelExtensions
|
@@ -12,7 +12,7 @@ module ArelExtensions
|
|
12
12
|
ActiveRecord::Base.default_timezone = :utc
|
13
13
|
@cnx = ActiveRecord::Base.connection
|
14
14
|
Arel::Table.engine = ActiveRecord::Base
|
15
|
-
@cnx.drop_table(:users) rescue nil
|
15
|
+
@cnx.drop_table(:users) rescue nil
|
16
16
|
@cnx.create_table :users do |t|
|
17
17
|
t.column :age, :integer
|
18
18
|
t.column :name, :string
|
@@ -57,16 +57,12 @@ module ArelExtensions
|
|
57
57
|
assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
|
58
58
|
assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
|
59
59
|
|
60
|
-
|
61
|
-
|
62
60
|
# Replace
|
63
61
|
assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
|
64
62
|
assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
|
65
|
-
|
66
|
-
#
|
67
63
|
end
|
68
64
|
|
69
65
|
end
|
70
66
|
|
71
67
|
end
|
72
|
-
end
|
68
|
+
end
|