arel_extensions 1.1.8 → 1.1.9
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 +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +1 -1
- data/gemfiles/rails3.gemfile +12 -12
- data/gemfiles/rails4.gemfile +17 -17
- data/gemfiles/rails5_0.gemfile +17 -17
- data/gemfiles/rails5_1_4.gemfile +17 -17
- data/gemfiles/rails5_2.gemfile +17 -17
- data/lib/arel_extensions/boolean_functions.rb +30 -11
- data/lib/arel_extensions/math.rb +111 -112
- data/lib/arel_extensions/math_functions.rb +50 -31
- data/lib/arel_extensions/nodes/function.rb +25 -26
- data/lib/arel_extensions/nodes/json.rb +81 -0
- data/lib/arel_extensions/predications.rb +95 -97
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/mssql.rb +121 -108
- data/lib/arel_extensions/visitors/mysql.rb +230 -148
- data/lib/arel_extensions/visitors/oracle.rb +242 -232
- data/lib/arel_extensions/visitors/oracle12.rb +39 -1
- data/lib/arel_extensions/visitors/postgresql.rb +216 -134
- data/lib/arel_extensions/visitors/sqlite.rb +200 -189
- data/lib/arel_extensions/visitors/to_sql.rb +239 -171
- data/lib/arel_extensions/visitors.rb +63 -33
- data/lib/arel_extensions.rb +1 -0
- data/test/visitors/test_oracle.rb +1 -1
- data/test/visitors/test_to_sql.rb +206 -195
- data/test/with_ar/all_agnostic_test.rb +278 -235
- metadata +3 -2
@@ -1,6 +1,6 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
|
-
|
3
|
+
Arel::Visitors::ToSql.class_eval do
|
4
4
|
|
5
5
|
# Math Functions
|
6
6
|
def visit_ArelExtensions_Nodes_Abs o, collector
|
@@ -52,14 +52,14 @@ module ArelExtensions
|
|
52
52
|
collector << ")"
|
53
53
|
collector
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def visit_ArelExtensions_Nodes_Log10 o, collector
|
57
57
|
collector << "LOG10("
|
58
58
|
collector = visit o.left, collector
|
59
59
|
collector << ")"
|
60
60
|
collector
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
def visit_ArelExtensions_Nodes_Power o, collector
|
64
64
|
collector << "POW("
|
65
65
|
o.expressions.each_with_index { |arg, i|
|
@@ -73,7 +73,7 @@ module ArelExtensions
|
|
73
73
|
# String functions
|
74
74
|
def visit_ArelExtensions_Nodes_Concat o, collector
|
75
75
|
collector << "CONCAT("
|
76
|
-
|
76
|
+
o.expressions.each_with_index { |arg, i|
|
77
77
|
collector << Arel::Visitors::ToSql::COMMA unless i == 0
|
78
78
|
collector = visit arg, collector
|
79
79
|
}
|
@@ -134,7 +134,7 @@ module ArelExtensions
|
|
134
134
|
collector << ")"
|
135
135
|
collector
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
def visit_ArelExtensions_Nodes_Repeat o, collector
|
139
139
|
collector << "REPEAT("
|
140
140
|
o.expressions.each_with_index { |arg, i|
|
@@ -205,7 +205,6 @@ module ArelExtensions
|
|
205
205
|
collector
|
206
206
|
end
|
207
207
|
|
208
|
-
|
209
208
|
def visit_ArelExtensions_Nodes_Rtrim o, collector
|
210
209
|
collector << "RTRIM("
|
211
210
|
o.expressions.each_with_index { |arg, i|
|
@@ -217,7 +216,7 @@ module ArelExtensions
|
|
217
216
|
end
|
218
217
|
|
219
218
|
def visit_ArelExtensions_Nodes_Blank o, collector
|
220
|
-
|
219
|
+
#visit o.left.coalesce('').trim.length.eq(0), collector
|
221
220
|
collector << 'LENGTH(TRIM(COALESCE('
|
222
221
|
collector = visit o.left, collector
|
223
222
|
collector << Arel::Visitors::ToSql::COMMA
|
@@ -228,7 +227,7 @@ module ArelExtensions
|
|
228
227
|
|
229
228
|
|
230
229
|
def visit_ArelExtensions_Nodes_NotBlank o, collector
|
231
|
-
|
230
|
+
#visit o.left.coalesce('').trim.length.gt(0), collector
|
232
231
|
collector << 'LENGTH(TRIM(COALESCE('
|
233
232
|
collector = visit o.left, collector
|
234
233
|
collector << Arel::Visitors::ToSql::COMMA
|
@@ -257,33 +256,33 @@ module ArelExtensions
|
|
257
256
|
collector
|
258
257
|
end
|
259
258
|
|
260
|
-
|
259
|
+
#comparators
|
261
260
|
|
262
|
-
|
261
|
+
def visit_ArelExtensions_Nodes_Cast o, collector
|
263
262
|
collector << "CAST("
|
264
263
|
collector = visit o.left, collector
|
265
264
|
collector << " AS "
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
265
|
+
case o.as_attr
|
266
|
+
when :string
|
267
|
+
as_attr = Arel::Nodes::SqlLiteral.new('char')
|
268
|
+
when :number
|
269
|
+
as_attr = Arel::Nodes::SqlLiteral.new('int')
|
270
|
+
when :decimal, :float
|
271
|
+
as_attr = Arel::Nodes::SqlLiteral.new('float')
|
272
|
+
when :datetime
|
273
|
+
as_attr = Arel::Nodes::SqlLiteral.new('datetime')
|
274
|
+
when :time
|
275
|
+
as_attr = Arel::Nodes::SqlLiteral.new('time')
|
276
|
+
when :binary
|
277
|
+
as_attr = Arel::Nodes::SqlLiteral.new('binary')
|
278
|
+
else
|
279
|
+
as_attr = Arel::Nodes::SqlLiteral.new(o.as_attr.to_s)
|
280
|
+
end
|
282
281
|
collector = visit as_attr, collector
|
283
282
|
collector << ")"
|
284
283
|
collector
|
285
|
-
|
286
|
-
|
284
|
+
end
|
285
|
+
|
287
286
|
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
288
287
|
collector << "COALESCE("
|
289
288
|
o.expressions.each_with_index { |arg, i|
|
@@ -294,19 +293,19 @@ module ArelExtensions
|
|
294
293
|
collector
|
295
294
|
end
|
296
295
|
|
297
|
-
|
296
|
+
def visit_ArelExtensions_Nodes_DateDiff o, collector
|
298
297
|
collector << if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
|
299
298
|
'TIMEDIFF('
|
300
299
|
else
|
301
300
|
'DATEDIFF('
|
302
301
|
end
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
302
|
+
collector = visit o.left, collector
|
303
|
+
collector << Arel::Visitors::ToSql::COMMA
|
304
|
+
collector = visit o.right, collector
|
305
|
+
collector << ")"
|
306
|
+
collector
|
307
|
+
end
|
308
|
+
|
310
309
|
def visit_ArelExtensions_Nodes_DateSub o, collector
|
311
310
|
collector << "DATE_SUB("
|
312
311
|
collector = visit o.left, collector
|
@@ -372,20 +371,20 @@ module ArelExtensions
|
|
372
371
|
collector << ")"
|
373
372
|
collector
|
374
373
|
end
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
374
|
+
|
375
|
+
def visit_ArelExtensions_Nodes_IsNotNull o, collector
|
376
|
+
collector << "NOT ISNULL("
|
377
|
+
collector = visit o.left, collector
|
378
|
+
collector << ")"
|
379
|
+
collector
|
380
|
+
end
|
382
381
|
|
383
382
|
def visit_ArelExtensions_Nodes_Then o, collector
|
384
383
|
collector << "CASE WHEN ("
|
385
384
|
collector = visit o.left, collector
|
386
385
|
collector << ") THEN "
|
387
386
|
collector = visit o.right, collector
|
388
|
-
if o.expressions[2]
|
387
|
+
if o.expressions[2]
|
389
388
|
collector << " ELSE "
|
390
389
|
collector = visit o.expressions[2], collector
|
391
390
|
end
|
@@ -403,140 +402,209 @@ module ArelExtensions
|
|
403
402
|
collector
|
404
403
|
end
|
405
404
|
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
405
|
+
if Arel::VERSION.to_i < 7
|
406
|
+
def visit_ArelExtensions_InsertManager_BulkValues o, collector
|
407
|
+
collector << 'VALUES '
|
408
|
+
row_nb = o.left.length
|
409
|
+
o.left.each_with_index do |row, idx|
|
410
|
+
collector << '('
|
411
|
+
v = Arel::Nodes::Values.new(row, o.cols)
|
412
|
+
len = v.expressions.length - 1
|
413
|
+
v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
|
414
|
+
case value
|
415
|
+
when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
|
416
|
+
collector = visit value, collector
|
417
|
+
else
|
418
|
+
collector << quote(value, attr && column_for(attr)).to_s
|
419
|
+
end
|
420
|
+
collector << Arel::Visitors::ToSql::COMMA unless i == len
|
421
|
+
}
|
422
|
+
collector << (idx == row_nb-1 ? ')' : '), ')
|
423
|
+
end
|
424
|
+
collector
|
425
|
+
end
|
426
|
+
else
|
427
|
+
def visit_ArelExtensions_InsertManager_BulkValues o, collector
|
428
|
+
collector << 'VALUES '
|
429
|
+
row_nb = o.left.length
|
430
|
+
o.left.each_with_index do |row, idx|
|
431
|
+
collector << '('
|
432
|
+
v = Arel::Nodes::Values.new(row, o.cols)
|
433
|
+
len = v.expressions.length - 1
|
434
|
+
v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
|
435
|
+
case value
|
436
|
+
when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
|
437
|
+
collector = visit value, collector
|
438
|
+
else
|
439
|
+
collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
|
440
|
+
end
|
441
|
+
collector << Arel::Visitors::ToSql::COMMA unless i == len
|
442
|
+
}
|
443
|
+
collector << (idx == row_nb-1 ? ')' : '), ')
|
444
|
+
end
|
445
|
+
collector
|
424
446
|
end
|
447
|
+
end
|
448
|
+
|
449
|
+
def visit_ArelExtensions_Nodes_Union o, collector
|
450
|
+
collector = visit o.left, collector
|
451
|
+
collector << " UNION "
|
452
|
+
collector = visit o.right, collector
|
425
453
|
collector
|
426
454
|
end
|
427
|
-
|
428
|
-
def
|
429
|
-
collector
|
430
|
-
|
431
|
-
o.
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
455
|
+
|
456
|
+
def visit_ArelExtensions_Nodes_UnionAll o, collector
|
457
|
+
collector = visit o.left, collector
|
458
|
+
collector << " UNION ALL "
|
459
|
+
collector = visit o.right, collector
|
460
|
+
collector
|
461
|
+
end
|
462
|
+
|
463
|
+
def visit_ArelExtensions_Nodes_As o, collector
|
464
|
+
if o.left.is_a?(ArelExtensions::Nodes::Union) || o.left.is_a?(ArelExtensions::Nodes::UnionAll)
|
465
|
+
collector << "("
|
466
|
+
collector = visit o.left, collector
|
467
|
+
collector << ") "
|
468
|
+
visit o.right, collector
|
469
|
+
else
|
470
|
+
collector = visit o.left, collector
|
471
|
+
collector << " AS "
|
472
|
+
visit o.right, collector
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
def visit_ArelExtensions_Nodes_Case o, collector
|
477
|
+
collector << "CASE "
|
478
|
+
if o.case
|
479
|
+
visit o.case, collector
|
480
|
+
collector << " "
|
481
|
+
end
|
482
|
+
o.conditions.each do |condition|
|
483
|
+
visit condition, collector
|
484
|
+
collector << " "
|
485
|
+
end
|
486
|
+
if o.default
|
487
|
+
visit o.default, collector
|
488
|
+
collector << " "
|
489
|
+
end
|
490
|
+
collector << "END"
|
491
|
+
end
|
492
|
+
|
493
|
+
def visit_ArelExtensions_Nodes_Case_When o, collector
|
494
|
+
collector << "WHEN "
|
495
|
+
visit Arel::Nodes.build_quoted(o.left), collector
|
496
|
+
collector << " THEN "
|
497
|
+
visit Arel::Nodes.build_quoted(o.right), collector
|
498
|
+
end
|
499
|
+
|
500
|
+
def visit_ArelExtensions_Nodes_Case_Else o, collector
|
501
|
+
collector << "ELSE "
|
502
|
+
visit Arel::Nodes.build_quoted(o.expr), collector
|
503
|
+
end
|
504
|
+
|
505
|
+
def visit_ArelExtensions_Nodes_FormattedNumber o, collector
|
506
|
+
visit o.left, collector
|
507
|
+
end
|
508
|
+
|
509
|
+
remove_method(:visit_Arel_Nodes_LessThan) rescue nil
|
510
|
+
def visit_Arel_Nodes_LessThan o, collector
|
511
|
+
collector = visit o.left, collector
|
512
|
+
collector << " < "
|
513
|
+
visit o.right, collector
|
514
|
+
end
|
515
|
+
|
516
|
+
def visit_ArelExtensions_Nodes_Std o, collector
|
517
|
+
collector << "STD("
|
518
|
+
visit o.left, collector
|
519
|
+
collector << ")"
|
520
|
+
collector
|
521
|
+
end
|
522
|
+
|
523
|
+
def visit_ArelExtensions_Nodes_Variance o, collector
|
524
|
+
collector << "VARIANCE("
|
525
|
+
visit o.left, collector
|
526
|
+
collector << ")"
|
527
|
+
collector
|
528
|
+
end
|
529
|
+
|
530
|
+
def visit_ArelExtensions_Nodes_LevenshteinDistance o, collector
|
531
|
+
collector << "LEVENSHTEIN_DISTANCE("
|
532
|
+
collector = visit o.left, collector
|
533
|
+
collector << Arel::Visitors::ToSql::COMMA
|
534
|
+
collector = visit o.right, collector
|
535
|
+
collector << ')'
|
536
|
+
collector
|
537
|
+
end
|
538
|
+
|
539
|
+
alias_method :old_visit_Arel_Nodes_And, :visit_Arel_Nodes_And
|
540
|
+
def visit_Arel_Nodes_And o, collector
|
541
|
+
if o.children.length == 2
|
542
|
+
old_visit_Arel_Nodes_And o, collector
|
543
|
+
else
|
544
|
+
o.children.each_with_index { |arg, i|
|
545
|
+
if i == 0
|
546
|
+
collector << '('
|
547
|
+
else
|
548
|
+
collector << ') AND ('
|
549
|
+
end
|
550
|
+
collector = visit arg, collector
|
443
551
|
}
|
444
|
-
collector <<
|
552
|
+
collector << ')'
|
553
|
+
collector
|
554
|
+
end
|
555
|
+
end
|
556
|
+
|
557
|
+
def visit_ArelExtensions_Nodes_Or o, collector
|
558
|
+
collector << '('
|
559
|
+
o.children.each_with_index { |arg, i|
|
560
|
+
if i == 0
|
561
|
+
collector << '('
|
562
|
+
else
|
563
|
+
collector << ') OR ('
|
564
|
+
end
|
565
|
+
collector = visit arg, collector
|
566
|
+
}
|
567
|
+
collector << '))'
|
568
|
+
collector
|
569
|
+
end
|
570
|
+
|
571
|
+
def visit_ArelExtensions_Nodes_Json o,collector
|
572
|
+
case o.hash
|
573
|
+
when Array
|
574
|
+
res = Arel::Nodes.build_quoted('[')
|
575
|
+
o.hash.each.with_index do |v,i|
|
576
|
+
if i != 0
|
577
|
+
res += ', '
|
578
|
+
end
|
579
|
+
if (v.is_a?(Arel::Attributes::Attribute) && o.type_of_attribute(v) == :string) || (v.return_type == :string)
|
580
|
+
res = res + '"' + v + '"'
|
581
|
+
else
|
582
|
+
res += v
|
583
|
+
end
|
584
|
+
end
|
585
|
+
res += ']'
|
586
|
+
collector = visit res, collector
|
587
|
+
when Hash
|
588
|
+
res = Arel::Nodes.build_quoted('{')
|
589
|
+
o.hash.each.with_index do |(k,v),i|
|
590
|
+
if i != 0
|
591
|
+
res += ', '
|
592
|
+
end
|
593
|
+
res += Arel::Nodes.build_quoted('"')+k + '": '
|
594
|
+
if (v.is_a?(Arel::Attributes::Attribute) && o.type_of_attribute(v) == :string) || (v.try(:return_type) == :string) # TODO : remove the try
|
595
|
+
res = res + '"' + v + '"'
|
596
|
+
else
|
597
|
+
res += v
|
598
|
+
end
|
599
|
+
end
|
600
|
+
res += '}'
|
601
|
+
collector = visit res, collector
|
602
|
+
else
|
603
|
+
collector = visit o.hash, collector
|
445
604
|
end
|
446
605
|
collector
|
447
606
|
end
|
448
|
-
end
|
449
607
|
|
450
|
-
|
451
|
-
collector = visit o.left, collector
|
452
|
-
collector << " UNION "
|
453
|
-
collector = visit o.right, collector
|
454
|
-
collector
|
455
|
-
end
|
456
|
-
|
457
|
-
def visit_ArelExtensions_Nodes_UnionAll o, collector
|
458
|
-
collector = visit o.left, collector
|
459
|
-
collector << " UNION ALL "
|
460
|
-
collector = visit o.right, collector
|
461
|
-
collector
|
462
|
-
end
|
463
|
-
|
464
|
-
def visit_ArelExtensions_Nodes_As o, collector
|
465
|
-
if o.left.is_a?(ArelExtensions::Nodes::Union) || o.left.is_a?(ArelExtensions::Nodes::UnionAll)
|
466
|
-
collector << "("
|
467
|
-
collector = visit o.left, collector
|
468
|
-
collector << ") "
|
469
|
-
visit o.right, collector
|
470
|
-
else
|
471
|
-
collector = visit o.left, collector
|
472
|
-
collector << " AS "
|
473
|
-
visit o.right, collector
|
474
|
-
end
|
475
|
-
end
|
476
|
-
|
477
|
-
def visit_ArelExtensions_Nodes_Case o, collector
|
478
|
-
collector << "CASE "
|
479
|
-
if o.case
|
480
|
-
visit o.case, collector
|
481
|
-
collector << " "
|
482
|
-
end
|
483
|
-
o.conditions.each do |condition|
|
484
|
-
visit condition, collector
|
485
|
-
collector << " "
|
486
|
-
end
|
487
|
-
if o.default
|
488
|
-
visit o.default, collector
|
489
|
-
collector << " "
|
490
|
-
end
|
491
|
-
collector << "END"
|
492
|
-
end
|
493
|
-
|
494
|
-
def visit_ArelExtensions_Nodes_Case_When o, collector
|
495
|
-
collector << "WHEN "
|
496
|
-
visit Arel::Nodes.build_quoted(o.left), collector
|
497
|
-
collector << " THEN "
|
498
|
-
visit Arel::Nodes.build_quoted(o.right), collector
|
499
|
-
end
|
500
|
-
|
501
|
-
def visit_ArelExtensions_Nodes_Case_Else o, collector
|
502
|
-
collector << "ELSE "
|
503
|
-
visit Arel::Nodes.build_quoted(o.expr), collector
|
504
|
-
end
|
505
|
-
|
506
|
-
def visit_ArelExtensions_Nodes_FormattedNumber o, collector
|
507
|
-
visit o.left, collector
|
508
|
-
end
|
509
|
-
|
510
|
-
remove_method(:visit_Arel_Nodes_LessThan) rescue nil
|
511
|
-
def visit_Arel_Nodes_LessThan o, collector
|
512
|
-
collector = visit o.left, collector
|
513
|
-
collector << " < "
|
514
|
-
visit o.right, collector
|
515
|
-
end
|
516
|
-
|
517
|
-
def visit_ArelExtensions_Nodes_Std o, collector
|
518
|
-
collector << "STD("
|
519
|
-
visit o.left, collector
|
520
|
-
collector << ")"
|
521
|
-
collector
|
522
|
-
end
|
523
|
-
|
524
|
-
def visit_ArelExtensions_Nodes_Variance o, collector
|
525
|
-
collector << "VARIANCE("
|
526
|
-
visit o.left, collector
|
527
|
-
collector << ")"
|
528
|
-
collector
|
529
|
-
end
|
530
|
-
|
531
|
-
def visit_ArelExtensions_Nodes_LevenshteinDistance o, collector
|
532
|
-
collector << "LEVENSHTEIN_DISTANCE("
|
533
|
-
collector = visit o.left, collector
|
534
|
-
collector << Arel::Visitors::ToSql::COMMA
|
535
|
-
collector = visit o.right, collector
|
536
|
-
collector << ')'
|
537
|
-
collector
|
538
|
-
end
|
539
|
-
|
540
|
-
end
|
608
|
+
end
|
541
609
|
end
|
542
610
|
end
|
@@ -7,45 +7,75 @@ require 'arel_extensions/visitors/sqlite'
|
|
7
7
|
require 'arel_extensions/visitors/mssql'
|
8
8
|
|
9
9
|
Arel::Visitors::MSSQL.class_eval do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
include ArelExtensions::Visitors::MSSQL
|
11
|
+
|
12
|
+
alias_method :old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As
|
13
|
+
def visit_Arel_Nodes_As o, collector
|
14
|
+
if o.left.is_a?(Arel::Nodes::Binary)
|
15
|
+
collector << '('
|
16
|
+
collector = visit o.left, collector
|
17
|
+
collector << ')'
|
18
|
+
else
|
19
|
+
collector = visit o.left, collector
|
20
|
+
end
|
21
|
+
collector << " AS ["
|
22
|
+
collector = visit o.right, collector
|
23
|
+
collector << "]"
|
24
|
+
collector
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :old_visit_Arel_Nodes_SelectStatement, :visit_Arel_Nodes_SelectStatement
|
28
|
+
def visit_Arel_Nodes_SelectStatement o, collector
|
29
|
+
if !collector.value.blank? && o.limit.blank? && o.offset.blank?
|
30
|
+
o = o.dup
|
31
|
+
o.orders = []
|
32
|
+
end
|
33
|
+
old_visit_Arel_Nodes_SelectStatement(o,collector)
|
34
|
+
end
|
20
35
|
end
|
21
36
|
|
22
|
-
begin
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
37
|
+
begin
|
38
|
+
require 'arel_sqlserver'
|
39
|
+
if Arel::VERSION.to_i == 6
|
40
|
+
if Arel::Visitors::VISITORS['sqlserver'] && Arel::Visitors::VISITORS['sqlserver'] != Arel::Visitors::MSSQL
|
41
|
+
Arel::Visitors::VISITORS['sqlserver'].class_eval do
|
27
42
|
include ArelExtensions::Visitors::MSSQL
|
28
43
|
|
29
44
|
alias_method :old_visit_Arel_Nodes_SelectStatement, :visit_Arel_Nodes_SelectStatement
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
45
|
+
def visit_Arel_Nodes_SelectStatement o, collector
|
46
|
+
if !collector.value.blank? && o.limit.blank? && o.offset.blank?
|
47
|
+
o = o.dup
|
48
|
+
o.orders = []
|
49
|
+
end
|
50
|
+
old_visit_Arel_Nodes_SelectStatement(o,collector)
|
51
|
+
end
|
52
|
+
|
53
|
+
alias_method :old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As
|
54
|
+
def visit_Arel_Nodes_As o, collector
|
55
|
+
if o.left.is_a?(Arel::Nodes::Binary)
|
56
|
+
collector << '('
|
57
|
+
collector = visit o.left, collector
|
58
|
+
collector << ')'
|
59
|
+
else
|
60
|
+
collector = visit o.left, collector
|
61
|
+
end
|
62
|
+
collector << " AS ["
|
63
|
+
collector = visit o.right, collector
|
64
|
+
collector << "]"
|
65
|
+
collector
|
66
|
+
end
|
37
67
|
|
38
68
|
alias_method :old_primary_Key_From_Table, :primary_Key_From_Table
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
rescue LoadError
|
69
|
+
def primary_Key_From_Table t
|
70
|
+
return unless t
|
71
|
+
column_name = @connection.schema_cache.primary_keys(t.name) ||
|
72
|
+
@connection.schema_cache.columns_hash(t.name).first.try(:second).try(:name)
|
73
|
+
column_name ? t[column_name] : nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
rescue LoadError
|
49
79
|
rescue => e
|
50
|
-
|
80
|
+
e
|
51
81
|
end
|
data/lib/arel_extensions.rb
CHANGED