arel_extensions 1.1.8 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57e8a31276fb8b6bba831c0934378f6e45150e86
|
4
|
+
data.tar.gz: 36aa4b3a0792e618cc2fce1ea7afd0736b2229f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ea1d6ad9ee4b4417edee7773cc86982e8dc844e5e6d907fbf859c806b152a7b0dd96832fa452d760157e26a5774282544761aa045633ad19592dc6fea377585
|
7
|
+
data.tar.gz: 1ee956c003f1d2edcae2d57c38b3e66205091c66323e9dda0c0c46138b9b0fe11679a7ad5c92aecda65e6cd9f0f03f4a1d59fb30f68a8c0cedbf6d8e39c39062
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :development, :test do
|
6
|
-
gem "sqlite3", :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
6
|
+
gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
7
7
|
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
8
8
|
gem "pg", '< 1', :platforms => [:mri, :mingw, :x64_mingw, :mswin]
|
9
9
|
|
data/gemfiles/rails3.gemfile
CHANGED
@@ -3,18 +3,18 @@ source "https://rubygems.org"
|
|
3
3
|
gem 'arel', '~> 3.0' # too old...
|
4
4
|
|
5
5
|
group :development, :test do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
gem "sqlite3", '<= 1.3.13', :platform => [:ruby, :mswin, :mingw]
|
7
|
+
gem "mysql2", '0.4.10', :platform => [:ruby, :mswin, :mingw]
|
8
|
+
gem "activerecord-mysql2-adapter", :platform => [:ruby, :mswin, :mingw]
|
9
|
+
gem "pg", :platform => [:ruby, :mswin, :mingw]
|
10
|
+
# for JRuby
|
11
|
+
gem "jdbc-sqlite3", :platform => :jruby
|
12
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
13
|
+
gem "activerecord-jdbcmysql-adapter", :platform => :jruby
|
14
|
+
gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
|
15
|
+
gem 'activesupport', '~> 3.2'
|
16
|
+
gem 'activemodel', '~> 3.2'
|
17
|
+
gem 'activerecord', '~> 3.2'
|
18
18
|
end
|
19
19
|
|
20
20
|
gemspec :path => "../"
|
data/gemfiles/rails4.gemfile
CHANGED
@@ -3,27 +3,27 @@ source "https://rubygems.org"
|
|
3
3
|
gem 'arel', '~> 6.0'
|
4
4
|
|
5
5
|
group :development, :test do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
gem 'activesupport', '~> 4.0'
|
7
|
+
gem 'activemodel', '~> 4.0'
|
8
|
+
gem 'activerecord', '~> 4.0'
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
|
11
|
+
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
12
|
+
gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
gem "tiny_tds", :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
|
15
|
+
gem "activerecord-sqlserver-adapter", '~> 4.2.0', :platforms => [:mri, :mingw, :mswin] if RUBY_PLATFORM =~ /windows/
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
|
18
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0' if ENV.has_key? 'ORACLE_HOME'
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
# for JRuby
|
21
|
+
gem 'activerecord-jdbc-adapter', :platforms => :jruby
|
22
|
+
gem "jdbc-sqlite3", :platforms => :jruby
|
23
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
24
|
+
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
25
|
+
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
26
|
+
gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
|
27
27
|
end
|
28
28
|
|
29
29
|
gemspec :path => "../"
|
data/gemfiles/rails5_0.gemfile
CHANGED
@@ -3,27 +3,27 @@ source "https://rubygems.org"
|
|
3
3
|
gem 'arel', '~> 7.0'
|
4
4
|
|
5
5
|
group :development, :test do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
gem 'activesupport', '~> 5.0'
|
7
|
+
gem 'activemodel', '~> 5.0'
|
8
|
+
gem 'activerecord', '5.0.6'
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
|
11
|
+
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
12
|
+
gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
|
13
13
|
|
14
|
-
|
15
|
-
#
|
14
|
+
gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
|
15
|
+
#gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
|
18
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.has_key? 'ORACLE_HOME'
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
# for JRuby
|
21
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v50.0', :platforms => :jruby
|
22
|
+
gem "jdbc-sqlite3", :platforms => :jruby
|
23
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
24
|
+
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
25
|
+
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
26
|
+
gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
|
27
27
|
end
|
28
28
|
|
29
29
|
gemspec :path => "../"
|
data/gemfiles/rails5_1_4.gemfile
CHANGED
@@ -4,27 +4,27 @@ gem 'rails', '5.1.4'
|
|
4
4
|
gem 'arel', '~> 8'
|
5
5
|
|
6
6
|
group :development, :test do
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
gem 'activesupport', '5.1.4'
|
8
|
+
gem 'activemodel', '5.1.4'
|
9
|
+
gem 'activerecord', '5.1.4'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
|
12
|
+
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
13
|
+
gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
|
14
14
|
|
15
|
-
|
16
|
-
#
|
15
|
+
gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
|
16
|
+
#gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
|
19
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.8' if ENV.has_key? 'ORACLE_HOME'
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
# for JRuby
|
22
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v51.0', :platforms => :jruby
|
23
|
+
gem "jdbc-sqlite3", :platforms => :jruby
|
24
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
25
|
+
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
26
|
+
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
27
|
+
gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
|
28
28
|
end
|
29
29
|
|
30
30
|
gemspec :path => "../"
|
data/gemfiles/rails5_2.gemfile
CHANGED
@@ -4,27 +4,27 @@ gem 'rails', '~> 5.2.0'
|
|
4
4
|
gem 'arel', '~> 9'
|
5
5
|
|
6
6
|
group :development, :test do
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
gem 'activesupport', '~> 5.2.0'
|
8
|
+
gem 'activemodel', '~> 5.2.0'
|
9
|
+
gem 'activerecord', '~> 5.2.0'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
gem "sqlite3", '<= 1.3.13', :platforms => [:mri, :mswin, :mingw]
|
12
|
+
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
13
|
+
gem "pg",'< 1.0.0', :platforms => [:mri, :mingw]
|
14
14
|
|
15
|
-
|
16
|
-
#
|
15
|
+
gem "tiny_tds", :platforms => [:mri, :mingw] if RUBY_PLATFORM =~ /windows/
|
16
|
+
#gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
|
19
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0' if ENV.has_key? 'ORACLE_HOME'
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
# for JRuby
|
22
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v52.0', :platforms => :jruby
|
23
|
+
gem "jdbc-sqlite3", :platforms => :jruby
|
24
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
25
|
+
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
26
|
+
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
27
|
+
gem "activerecord-jdbcmssql-adapter", :platforms => :jruby
|
28
28
|
end
|
29
29
|
|
30
30
|
gemspec :path => "../"
|
@@ -1,20 +1,33 @@
|
|
1
1
|
require 'arel_extensions/nodes/then'
|
2
2
|
|
3
3
|
module ArelExtensions
|
4
|
-
|
4
|
+
module BooleanFunctions
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def ⋀(other)
|
7
|
+
self.and(other)
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def and *others
|
11
|
+
Arel::Nodes::And.new([self]+ others.flatten)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
def ⋁(other)
|
15
|
+
self.or(other)
|
16
|
+
end
|
17
|
+
|
18
|
+
def or *others
|
19
|
+
args = others.flatten
|
20
|
+
if args.length == 1
|
21
|
+
Arel::Nodes::Or.new(self, args.first)
|
22
|
+
else
|
23
|
+
ArelExtensions::Nodes::Or.new([self]+ args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def then(t, f = nil)
|
28
|
+
ArelExtensions::Nodes::Then.new [self, t, f]
|
29
|
+
end
|
30
|
+
end
|
18
31
|
end
|
19
32
|
|
20
33
|
Arel::Nodes::And.class_eval do
|
@@ -24,3 +37,9 @@ end
|
|
24
37
|
Arel::Nodes::Or.class_eval do
|
25
38
|
include ArelExtensions::BooleanFunctions
|
26
39
|
end
|
40
|
+
|
41
|
+
ArelExtensions::Nodes.const_set('Or',Class.new(Arel::Nodes::And)).class_eval do
|
42
|
+
include ArelExtensions::BooleanFunctions
|
43
|
+
end
|
44
|
+
|
45
|
+
|
data/lib/arel_extensions/math.rb
CHANGED
@@ -15,123 +15,122 @@ module ArelExtensions
|
|
15
15
|
#String and others (convert in string) allows you to concatenate 2 or more strings together.
|
16
16
|
#Date and integer adds or subtracts a specified time interval from a date.
|
17
17
|
def +(other)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
18
|
+
case self
|
19
|
+
when Arel::Nodes::Quoted
|
20
|
+
return self.concat(other)
|
21
|
+
when Arel::Nodes::Grouping
|
22
|
+
if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
|
23
|
+
return self.concat(other)
|
24
|
+
else
|
25
|
+
return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
26
|
+
end
|
27
|
+
when ArelExtensions::Nodes::Function,ArelExtensions::Nodes::Case
|
28
|
+
return case self.return_type
|
29
|
+
when :string, :text
|
30
|
+
self.concat(other)
|
31
|
+
when :integer, :decimal, :float, :number, :int
|
32
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
33
|
+
when :date, :datetime
|
34
|
+
ArelExtensions::Nodes::DateAdd.new [self, other]
|
35
|
+
else
|
36
|
+
self.concat(other)
|
37
|
+
end
|
38
|
+
when Arel::Nodes::Function
|
39
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
40
|
+
else
|
41
|
+
begin
|
42
|
+
col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
|
43
|
+
rescue Exception
|
44
|
+
col = nil
|
45
|
+
end
|
46
|
+
if (!col) #if the column doesn't exist in the database
|
47
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new(self, other))
|
48
|
+
else
|
49
|
+
arg = col.type
|
50
|
+
if arg == :integer || (!arg)
|
51
|
+
other = other.to_i if other.is_a?(String)
|
52
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
53
|
+
elsif arg == :decimal || arg == :float
|
54
|
+
other = Arel.sql(other) if other.is_a?(String) # Arel should accept Float & BigDecimal!
|
55
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
56
|
+
elsif arg == :datetime || arg == :date
|
57
|
+
ArelExtensions::Nodes::DateAdd.new [self, other]
|
58
|
+
elsif arg == :string || arg == :text
|
59
|
+
self.concat(other)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
63
|
end
|
64
64
|
|
65
65
|
#function returns the time between two dates
|
66
66
|
#function returns the substraction between two ints
|
67
67
|
def -(other)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
68
|
+
case self
|
69
|
+
when Arel::Nodes::Grouping
|
70
|
+
if self.expr.left.is_a?(Date) || self.expr.left.is_a?(DateTime)
|
71
|
+
Arel::Nodes::Grouping.new(ArelExtensions::Nodes::DateSub.new [self, other])
|
72
|
+
else
|
73
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
74
|
+
end
|
75
|
+
when ArelExtensions::Nodes::Function, ArelExtensions::Nodes::Case
|
76
|
+
case self.return_type
|
77
|
+
when :string, :text # ???
|
78
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other)) # ??
|
79
|
+
when :integer, :decimal, :float, :number
|
80
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
81
|
+
when :date, :datetime
|
82
|
+
ArelExtensions::Nodes::DateSub.new [self, other]
|
83
|
+
else
|
84
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
85
|
+
end
|
86
|
+
when Arel::Nodes::Function
|
87
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
88
|
+
else
|
89
|
+
begin
|
90
|
+
col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
|
91
|
+
rescue Exception
|
92
|
+
col = nil
|
93
|
+
end
|
94
|
+
if (!col) #if the column doesn't exist in the database
|
95
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
96
|
+
else
|
97
|
+
arg = col.type
|
98
|
+
if (arg == :date || arg == :datetime)
|
99
|
+
case other
|
100
|
+
when Arel::Attributes::Attribute
|
101
|
+
begin
|
102
|
+
col2 = Arel::Table.engine.connection.schema_cache.columns_hash(other.relation.table_name)[other.name.to_s]
|
103
|
+
rescue Exception
|
104
|
+
col = nil
|
105
|
+
end
|
106
|
+
if (!col2) #if the column doesn't exist in the database
|
107
|
+
ArelExtensions::Nodes::DateSub.new [self, other]
|
108
|
+
else
|
109
|
+
arg2 = col2.type
|
110
|
+
if arg2 == :date || arg2 == :datetime
|
111
|
+
ArelExtensions::Nodes::DateDiff.new [self, other]
|
112
|
+
else
|
113
|
+
ArelExtensions::Nodes::DateSub.new [self, other]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
when Arel::Nodes::Node, DateTime, Time, String, Date
|
117
|
+
ArelExtensions::Nodes::DateDiff.new [self, other]
|
118
|
+
when Integer
|
119
|
+
ArelExtensions::Nodes::DateSub.new [self, other]
|
120
|
+
end
|
121
|
+
else
|
122
|
+
case other
|
123
|
+
when Integer, Float, BigDecimal
|
124
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other.to_s)))
|
125
|
+
when String
|
126
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, Arel.sql(other)))
|
127
|
+
else
|
128
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other))
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
134
133
|
end
|
135
|
-
|
134
|
+
|
136
135
|
end
|
137
136
|
end
|