arel_extensions 1.2.2 → 1.2.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|