arel_extensions 1.0.5 → 1.0.6
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 +20 -6
- data/Gemfile +5 -3
- data/README.md +38 -1
- data/appveyor.yml +0 -4
- data/gemfiles/rails5_0.gemfile +1 -1
- data/gemfiles/{rails5_2_beta.gemfile → rails5_2.gemfile} +5 -5
- data/lib/arel_extensions/attributes.rb +2 -2
- data/lib/arel_extensions/date_duration.rb +1 -1
- data/lib/arel_extensions/math.rb +20 -16
- data/lib/arel_extensions/nodes/abs.rb +1 -1
- data/lib/arel_extensions/nodes/blank.rb +2 -2
- data/lib/arel_extensions/nodes/cast.rb +18 -13
- data/lib/arel_extensions/nodes/ceil.rb +1 -1
- data/lib/arel_extensions/nodes/change_case.rb +2 -2
- data/lib/arel_extensions/nodes/coalesce.rb +1 -2
- data/lib/arel_extensions/nodes/collate.rb +18 -0
- data/lib/arel_extensions/nodes/concat.rb +8 -8
- data/lib/arel_extensions/nodes/date_diff.rb +3 -3
- data/lib/arel_extensions/nodes/duration.rb +4 -4
- data/lib/arel_extensions/nodes/find_in_set.rb +1 -1
- data/lib/arel_extensions/nodes/floor.rb +1 -2
- data/lib/arel_extensions/nodes/format.rb +2 -2
- data/lib/arel_extensions/nodes/formatted_number.rb +1 -1
- data/lib/arel_extensions/nodes/function.rb +10 -6
- data/lib/arel_extensions/nodes/is_null.rb +2 -1
- data/lib/arel_extensions/nodes/length.rb +1 -1
- data/lib/arel_extensions/nodes/locate.rb +1 -1
- data/lib/arel_extensions/nodes/log10.rb +1 -1
- data/lib/arel_extensions/nodes/matches.rb +10 -0
- data/lib/arel_extensions/nodes/power.rb +1 -1
- data/lib/arel_extensions/nodes/rand.rb +1 -1
- data/lib/arel_extensions/nodes/repeat.rb +1 -1
- data/lib/arel_extensions/nodes/replace.rb +1 -1
- data/lib/arel_extensions/nodes/round.rb +1 -1
- data/lib/arel_extensions/nodes/soundex.rb +1 -1
- data/lib/arel_extensions/nodes/substring.rb +1 -1
- data/lib/arel_extensions/nodes/trim.rb +3 -1
- data/lib/arel_extensions/nodes/wday.rb +3 -3
- data/lib/arel_extensions/string_functions.rb +31 -1
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/mssql.rb +88 -4
- data/lib/arel_extensions/visitors/mysql.rb +68 -4
- data/lib/arel_extensions/visitors/oracle.rb +67 -6
- data/lib/arel_extensions/visitors/postgresql.rb +49 -0
- data/lib/arel_extensions/visitors/sqlite.rb +53 -2
- data/lib/arel_extensions/visitors/to_sql.rb +2 -0
- data/lib/arel_extensions.rb +2 -1
- data/test/visitors/test_to_sql.rb +21 -1
- data/test/with_ar/all_agnostic_test.rb +65 -19
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99e66779787e74a1e41f072a4515bc0aabcd4146
|
4
|
+
data.tar.gz: 5918126e0d59efe520b893949f2f18d9a4c659b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26f6700d800e3a1426977d924233fc3f7db52482018792e3cd3f1c9338f543132d4fa656fb24b1af47e0c3532b31deab6d26b6b1ec54cc9e0e4e9c9e09febb12
|
7
|
+
data.tar.gz: 15f28347171e501dd95ca8a3ac2a1897d21805f81b5125b0a9765509c01daba4c263babfc53a03226e57d8c8acebfe4f41fb5f9c65b010a2aa7dcd54d7e82bdb
|
data/.travis.yml
CHANGED
@@ -21,7 +21,7 @@ gemfile:
|
|
21
21
|
- gemfiles/rails4.gemfile
|
22
22
|
- gemfiles/rails5_0.gemfile
|
23
23
|
- gemfiles/rails5_1_4.gemfile
|
24
|
-
- gemfiles/
|
24
|
+
- gemfiles/rails5_2.gemfile
|
25
25
|
services:
|
26
26
|
- mysql
|
27
27
|
- postgresql
|
@@ -113,13 +113,21 @@ matrix:
|
|
113
113
|
- rvm: jruby-9.0.5.0
|
114
114
|
gemfile: gemfiles/rails5_1_4.gemfile
|
115
115
|
- rvm: 2.0.0
|
116
|
-
gemfile: gemfiles/
|
116
|
+
gemfile: gemfiles/rails5_2.gemfile
|
117
117
|
- rvm: 2.1
|
118
|
-
gemfile: gemfiles/
|
118
|
+
gemfile: gemfiles/rails5_2.gemfile
|
119
119
|
- rvm: jruby-9.0.5.0
|
120
|
-
gemfile: gemfiles/
|
120
|
+
gemfile: gemfiles/rails5_2.gemfile
|
121
|
+
jdk: openjdk7
|
122
|
+
- rvm: jruby-head
|
123
|
+
gemfile: gemfiles/rails5_2.gemfile
|
124
|
+
jdk: openjdk7
|
125
|
+
- rvm: jruby-9.0.5.0
|
126
|
+
gemfile: gemfiles/rails5_2.gemfile
|
127
|
+
jdk: oraclejdk8
|
121
128
|
- rvm: jruby-head
|
122
|
-
gemfile: gemfiles/
|
129
|
+
gemfile: gemfiles/rails5_2.gemfile
|
130
|
+
jdk: oraclejdk8
|
123
131
|
allow_failures:
|
124
132
|
- rvm: rbx-2
|
125
133
|
gemfile: gemfiles/rails4.gemfile
|
@@ -128,7 +136,7 @@ matrix:
|
|
128
136
|
- rvm: rbx-2
|
129
137
|
gemfile: gemfiles/rails5_1_4.gemfile
|
130
138
|
- rvm: rbx-2
|
131
|
-
gemfile: gemfiles/
|
139
|
+
gemfile: gemfiles/rails5_2.gemfile
|
132
140
|
- rvm: jruby-head
|
133
141
|
gemfile: gemfiles/rails4.gemfile
|
134
142
|
jdk: oraclejdk9
|
@@ -140,6 +148,12 @@ matrix:
|
|
140
148
|
- rvm: jruby-head
|
141
149
|
gemfile: gemfiles/rails5_1_4.gemfile
|
142
150
|
jdk: oraclejdk9
|
151
|
+
- rvm: jruby-9.0.5.0
|
152
|
+
gemfile: gemfiles/rails5_2.gemfile
|
153
|
+
jdk: oraclejdk9
|
154
|
+
- rvm: jruby-head
|
155
|
+
gemfile: gemfiles/rails5_2.gemfile
|
156
|
+
jdk: oraclejdk9
|
143
157
|
bundler_args: "--jobs 3 --retry 2"
|
144
158
|
notifications:
|
145
159
|
email:
|
data/Gemfile
CHANGED
@@ -4,17 +4,19 @@ gemspec
|
|
4
4
|
|
5
5
|
group :development, :test do
|
6
6
|
gem "sqlite3", :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
7
|
-
gem "mysql2", :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
8
|
-
gem "pg",
|
7
|
+
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
8
|
+
gem "pg", :platforms => [:mri, :mingw, :x64_mingw, :mswin]
|
9
9
|
|
10
10
|
gem "jdbc-sqlite3", :platforms => :jruby
|
11
11
|
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
12
12
|
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
13
13
|
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
14
14
|
|
15
|
-
|
16
15
|
gem "tiny_tds", '~> 1.3.0' ,:require => false, :platforms => [:mingw, :x64_mingw, :mswin]
|
17
16
|
gem "activerecord-sqlserver-adapter", '~> 4.2.0', :platforms => [:mingw, :x64_mingw, :mswin]
|
17
|
+
|
18
|
+
gem 'ruby-oci8', :platforms => [:mri, :mswin, :x64_mingw, :mingw]
|
19
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0'
|
18
20
|
|
19
21
|
gem 'activesupport', '~> 4.0'
|
20
22
|
gem 'activemodel', '~> 4.0'
|
data/README.md
CHANGED
@@ -247,7 +247,7 @@ User.connection.execute(insert_manager.to_sql)
|
|
247
247
|
<td class="ok">✔</td>
|
248
248
|
</tr>
|
249
249
|
<tr>
|
250
|
-
<th class="tg-ffjm" rowspan="
|
250
|
+
<th class="tg-ffjm" rowspan="17"><div>String functions</div></th>
|
251
251
|
<td class="tg-yw4l">CONCAT<br>column + "string"</td>
|
252
252
|
<td class="ok">✔</td>
|
253
253
|
<td class="ok">✔</td>
|
@@ -364,6 +364,43 @@ User.connection.execute(insert_manager.to_sql)
|
|
364
364
|
<td class="tg-j6lv">LTRIM(RTRIM())</td>
|
365
365
|
<td class="tg-j6lv">TRIM()</td>
|
366
366
|
</tr>
|
367
|
+
<tr>
|
368
|
+
<td class="tg-yw4l">Matching Accent/Case Insensitive<br>column.ai_imatches('blah')</td>
|
369
|
+
<td class="ok">✔</td>
|
370
|
+
<td class="tg-j6lv">unaccent required</td>
|
371
|
+
<td class="tg-j6lv">not supported</td>
|
372
|
+
<td class="ok">✔</td>
|
373
|
+
<td class="tg-j6lv">✔</td>
|
374
|
+
<td class="tg-j6lv">?</td>
|
375
|
+
</tr>
|
376
|
+
<tr>
|
377
|
+
<td class="tg-yw4l">Matching Accent Insensitive<br>column.ai_matches('blah')</td>
|
378
|
+
<td class="ok">not supported</td>
|
379
|
+
<td class="tg-j6lv">not supported</td>
|
380
|
+
<td class="tg-j6lv">not supported</td>
|
381
|
+
<td class="ok">not supported</td>
|
382
|
+
<td class="tg-j6lv">✔</td>
|
383
|
+
<td class="tg-j6lv">?</td>
|
384
|
+
</tr>
|
385
|
+
<tr>
|
386
|
+
<td class="tg-yw4l">Matching Case Insensitive<br>column.imatches('blah')</td>
|
387
|
+
<td class="ok">not supported</td>
|
388
|
+
<td class="tg-j6lv">✔</td>
|
389
|
+
<td class="tg-j6lv">✔</td>
|
390
|
+
<td class="ok">✔</td>
|
391
|
+
<td class="tg-j6lv">✔</td>
|
392
|
+
<td class="tg-j6lv">?</td>
|
393
|
+
</tr>
|
394
|
+
<tr>
|
395
|
+
<td class="tg-yw4l">Matching Accent/Case Sensitive<br>column.smatches('blah')</td>
|
396
|
+
<td class="ok">✔</td>
|
397
|
+
<td class="tg-j6lv">✔</td>
|
398
|
+
<td class="tg-j6lv">not supported</td>
|
399
|
+
<td class="ok">✔</td>
|
400
|
+
<td class="tg-j6lv">✔</td>
|
401
|
+
<td class="tg-j6lv">?</td>
|
402
|
+
</tr>
|
403
|
+
|
367
404
|
<tr>
|
368
405
|
<th class="tg-4rp9" rowspan="6"><div>Date functions</div></th>
|
369
406
|
<td class="tg-yw4l">DATEADD<br>column + 2.year<br></td>
|
data/appveyor.yml
CHANGED
data/gemfiles/rails5_0.gemfile
CHANGED
@@ -5,7 +5,7 @@ gem 'arel', '~> 7.0'
|
|
5
5
|
group :development, :test do
|
6
6
|
gem 'activesupport', '~> 5.0'
|
7
7
|
gem 'activemodel', '~> 5.0'
|
8
|
-
gem 'activerecord', '
|
8
|
+
gem 'activerecord', '5.0.6'
|
9
9
|
|
10
10
|
gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
|
11
11
|
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
@@ -1,12 +1,12 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem 'rails', '~> 5.2.0
|
3
|
+
gem 'rails', '~> 5.2.0'
|
4
4
|
gem 'arel', '~> 9'
|
5
5
|
|
6
6
|
group :development, :test do
|
7
|
-
gem 'activesupport', '~> 5.2.0
|
8
|
-
gem 'activemodel', '~> 5.2.0
|
9
|
-
gem 'activerecord', '~> 5.2.0
|
7
|
+
gem 'activesupport', '~> 5.2.0'
|
8
|
+
gem 'activemodel', '~> 5.2.0'
|
9
|
+
gem 'activerecord', '~> 5.2.0'
|
10
10
|
|
11
11
|
gem "sqlite3", :platforms => [:mri, :mswin, :mingw]
|
12
12
|
gem "mysql2", '0.4.10', :platforms => [:mri, :mswin, :mingw]
|
@@ -16,7 +16,7 @@ group :development, :test do
|
|
16
16
|
# gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
|
17
17
|
|
18
18
|
gem 'ruby-oci8', :platforms => [:mri, :mswin, :mingw] if ENV.has_key? 'ORACLE_HOME'
|
19
|
-
gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0
|
19
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0' if ENV.has_key? 'ORACLE_HOME'
|
20
20
|
|
21
21
|
# for JRuby
|
22
22
|
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter', :tag => 'v51.0', :platforms => :jruby
|
@@ -1,6 +1,6 @@
|
|
1
|
+
require 'arel_extensions/math'
|
1
2
|
require 'arel_extensions/comparators'
|
2
3
|
require 'arel_extensions/date_duration'
|
3
|
-
require 'arel_extensions/math'
|
4
4
|
require 'arel_extensions/math_functions'
|
5
5
|
require 'arel_extensions/null_functions'
|
6
6
|
require 'arel_extensions/string_functions'
|
@@ -8,9 +8,9 @@ require 'arel_extensions/predications'
|
|
8
8
|
|
9
9
|
module ArelExtensions
|
10
10
|
module Attributes
|
11
|
+
include ArelExtensions::Math
|
11
12
|
include ArelExtensions::Comparators
|
12
13
|
include ArelExtensions::DateDuration
|
13
|
-
include ArelExtensions::Math
|
14
14
|
include ArelExtensions::MathFunctions
|
15
15
|
include ArelExtensions::NullFunctions
|
16
16
|
include ArelExtensions::StringFunctions
|
data/lib/arel_extensions/math.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'arel_extensions/nodes'
|
2
|
+
require 'arel_extensions/nodes/function'
|
2
3
|
require 'arel_extensions/nodes/concat'
|
3
4
|
require 'arel_extensions/nodes/cast'
|
4
5
|
|
@@ -14,26 +15,29 @@ module ArelExtensions
|
|
14
15
|
#String and others (convert in string) allows you to concatenate 2 or more strings together.
|
15
16
|
#Date and integer adds or subtracts a specified time interval from a date.
|
16
17
|
def +(other)
|
17
|
-
return ArelExtensions::Nodes::Concat.new [self, other] if self.is_a?(Arel::Nodes::Quoted)
|
18
|
-
|
18
|
+
return ArelExtensions::Nodes::Concat.new [self, other] if self.is_a?(Arel::Nodes::Quoted)
|
19
19
|
if self.is_a?(Arel::Nodes::Grouping)
|
20
|
-
if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
|
20
|
+
if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
|
21
21
|
return ArelExtensions::Nodes::Concat.new [self, other]
|
22
|
-
else
|
22
|
+
else
|
23
23
|
return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
24
24
|
end
|
25
|
+
end
|
26
|
+
if self.is_a?(ArelExtensions::Nodes::Function)
|
27
|
+
return case self.return_type
|
28
|
+
when :string, :text
|
29
|
+
ArelExtensions::Nodes::Concat.new [self, other]
|
30
|
+
when :integer, :decimal, :float, :number, :int
|
31
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
32
|
+
when :date, :datetime
|
33
|
+
ArelExtensions::Nodes::DateAdd.new [self, other]
|
34
|
+
else
|
35
|
+
ArelExtensions::Nodes::Concat.new [self, other]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
if self.is_a?(Arel::Nodes::Function)
|
39
|
+
return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
25
40
|
end
|
26
|
-
|
27
|
-
return case self.class.return_type
|
28
|
-
when :string, :text
|
29
|
-
ArelExtensions::Nodes::Concat.new [self, other]
|
30
|
-
when :integer, :decimal, :float, :number
|
31
|
-
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
32
|
-
when :date, :datetime
|
33
|
-
ArelExtensions::Nodes::DateAdd.new [self, other]
|
34
|
-
else
|
35
|
-
ArelExtensions::Nodes::Concat.new [self, other]
|
36
|
-
end if self.is_a?(ArelExtensions::Nodes::Function)
|
37
41
|
col = Arel::Table.engine.connection.schema_cache.columns_hash(self.relation.table_name)[self.name.to_s]
|
38
42
|
if (!col) #if the column doesn't exist in the database
|
39
43
|
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new(self, other))
|
@@ -56,7 +60,7 @@ module ArelExtensions
|
|
56
60
|
#function returns the time between two dates
|
57
61
|
#function returns the substraction between two ints
|
58
62
|
def -(other)
|
59
|
-
return case self.
|
63
|
+
return case self.return_type
|
60
64
|
when :string, :text # ???
|
61
65
|
Arel::Nodes::Grouping.new(Arel::Nodes::Subtraction.new(self, other)) # ??
|
62
66
|
when :integer, :decimal, :float, :number
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Blank < Function
|
4
|
-
|
4
|
+
RETURN_TYPE = :boolean
|
5
5
|
|
6
6
|
def initialize expr
|
7
7
|
# super [expr.first.coalesce('').trim.trim("\t").trim("\n")]
|
@@ -10,7 +10,7 @@ module ArelExtensions
|
|
10
10
|
end
|
11
11
|
|
12
12
|
class NotBlank < Function
|
13
|
-
|
13
|
+
RETURN_TYPE = :boolean
|
14
14
|
|
15
15
|
def initialize expr
|
16
16
|
super expr
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Cast < Function
|
4
|
-
|
4
|
+
@return_type = :string
|
5
5
|
|
6
6
|
attr_accessor :as_attr
|
7
7
|
|
@@ -9,25 +9,25 @@ module ArelExtensions
|
|
9
9
|
@as_attr = expr[1]
|
10
10
|
case expr[1]
|
11
11
|
when 'bigint', 'int', 'smallint', 'tinyint', 'bit'
|
12
|
-
|
12
|
+
@return_type= :int
|
13
13
|
when 'decimal', 'numeric', 'money', 'smallmoney', 'float', 'real'
|
14
|
-
|
15
|
-
when 'char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext'
|
16
|
-
|
14
|
+
@return_type= :decimal
|
15
|
+
when 'char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext'
|
16
|
+
@return_type= :string
|
17
17
|
when :int
|
18
|
-
|
18
|
+
@return_type= :number
|
19
19
|
when :float, :decimal
|
20
|
-
|
20
|
+
@return_type= :decimal
|
21
21
|
when :datetime, 'datetime','smalldatetime'
|
22
|
-
|
22
|
+
@return_type= :datetime
|
23
23
|
when :time,'time'
|
24
|
-
|
24
|
+
@return_type= :time
|
25
25
|
when :date,'date'
|
26
|
-
|
26
|
+
@return_type= :date
|
27
27
|
when :binary, 'binary', 'varbinary', 'image'
|
28
|
-
|
28
|
+
@return_type= :binary
|
29
29
|
else
|
30
|
-
|
30
|
+
@return_type= :string
|
31
31
|
@as_attr = :string
|
32
32
|
end
|
33
33
|
tab = [convert_to_node(expr.first)]
|
@@ -35,7 +35,7 @@ module ArelExtensions
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def +(other)
|
38
|
-
case
|
38
|
+
case @return_type
|
39
39
|
when :string
|
40
40
|
return ArelExtensions::Nodes::Concat.new [self, other]
|
41
41
|
when :ruby_time
|
@@ -44,6 +44,11 @@ module ArelExtensions
|
|
44
44
|
Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
def return_type
|
49
|
+
@return_type
|
50
|
+
end
|
51
|
+
|
47
52
|
end
|
48
53
|
end
|
49
54
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ArelExtensions
|
2
|
+
module Nodes
|
3
|
+
class Collate < Function
|
4
|
+
RETURN_TYPE = :string
|
5
|
+
|
6
|
+
attr_accessor :ai, :ci, :option
|
7
|
+
|
8
|
+
def initialize left, option=nil, ai=false, ci=false
|
9
|
+
@ai = ai
|
10
|
+
@ci = ci
|
11
|
+
@option = option
|
12
|
+
tab = [convert_to_node(left)]
|
13
|
+
return super(tab)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Concat < Function
|
4
|
-
|
4
|
+
RETURN_TYPE = :string
|
5
5
|
|
6
6
|
def initialize expr
|
7
7
|
tab = expr.map { |arg|
|
@@ -10,9 +10,9 @@ module ArelExtensions
|
|
10
10
|
return super(tab)
|
11
11
|
end
|
12
12
|
|
13
|
-
def +(other)
|
14
|
-
|
15
|
-
end
|
13
|
+
#def +(other)
|
14
|
+
# return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
|
15
|
+
#end
|
16
16
|
|
17
17
|
def concat(other)
|
18
18
|
return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
|
@@ -21,7 +21,7 @@ module ArelExtensions
|
|
21
21
|
end
|
22
22
|
|
23
23
|
class GroupConcat < Function
|
24
|
-
|
24
|
+
RETURN_TYPE = :string
|
25
25
|
|
26
26
|
def initialize expr
|
27
27
|
tab = expr.map { |arg|
|
@@ -30,9 +30,9 @@ module ArelExtensions
|
|
30
30
|
return super(tab)
|
31
31
|
end
|
32
32
|
|
33
|
-
def +(other)
|
34
|
-
|
35
|
-
end
|
33
|
+
#def +(other)
|
34
|
+
# return ArelExtensions::Nodes::Concat.new([self, other])
|
35
|
+
#end
|
36
36
|
|
37
37
|
end
|
38
38
|
|
@@ -6,7 +6,7 @@ module ArelExtensions
|
|
6
6
|
attr_accessor :left_node_type
|
7
7
|
attr_accessor :right_node_type
|
8
8
|
|
9
|
-
|
9
|
+
RETURN_TYPE = :integer # by default...
|
10
10
|
|
11
11
|
def initialize(expr)
|
12
12
|
res = []
|
@@ -34,7 +34,7 @@ module ArelExtensions
|
|
34
34
|
end
|
35
35
|
|
36
36
|
class DateAdd < Function
|
37
|
-
|
37
|
+
RETURN_TYPE = :date
|
38
38
|
attr_accessor :date_type
|
39
39
|
|
40
40
|
def initialize expr
|
@@ -140,7 +140,7 @@ module ArelExtensions
|
|
140
140
|
end
|
141
141
|
|
142
142
|
class DateSub < Function #difference entre colonne date et date string/date
|
143
|
-
|
143
|
+
RETURN_TYPE = :integer
|
144
144
|
|
145
145
|
def initialize(expr)
|
146
146
|
super [expr.first, convert_number(expr[1])]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Duration < Function
|
4
|
-
|
4
|
+
RETURN_TYPE = :number
|
5
5
|
|
6
6
|
def initialize left, right, aliaz = nil
|
7
7
|
tab = Array.new
|
@@ -21,9 +21,9 @@ module ArelExtensions
|
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
|
-
def as other
|
25
|
-
|
26
|
-
end
|
24
|
+
#def as other
|
25
|
+
# Arel::Nodes::As.new self, Arel::Nodes::SqlLiteral.new(other.to_s)
|
26
|
+
#end
|
27
27
|
|
28
28
|
end
|
29
29
|
end
|
@@ -2,16 +2,20 @@ require 'arel_extensions/predications'
|
|
2
2
|
|
3
3
|
module ArelExtensions
|
4
4
|
module Nodes
|
5
|
-
class Function < Arel::Nodes::Function
|
5
|
+
class Function < Arel::Nodes::Function
|
6
6
|
include Arel::Math
|
7
7
|
include Arel::Expressions
|
8
8
|
include ArelExtensions::Predications
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@@return_type = :string # by default...
|
9
|
+
|
10
|
+
RETURN_TYPE = :string # by default...
|
13
11
|
|
14
12
|
# overrides as to make new Node like AliasPredication
|
13
|
+
|
14
|
+
def return_type
|
15
|
+
self.class.const_get(:RETURN_TYPE)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
15
19
|
def as other
|
16
20
|
ArelExtensions::Nodes::As.new(self, Arel.sql(other))
|
17
21
|
end
|
@@ -37,7 +41,7 @@ module ArelExtensions
|
|
37
41
|
att
|
38
42
|
end
|
39
43
|
when ArelExtensions::Nodes::Function
|
40
|
-
att.
|
44
|
+
att.return_type
|
41
45
|
# else
|
42
46
|
# nil
|
43
47
|
end
|
@@ -3,6 +3,7 @@ module ArelExtensions
|
|
3
3
|
class IMatches < Arel::Nodes::Matches
|
4
4
|
|
5
5
|
attr_accessor :case_sensitive if Arel::VERSION.to_i < 7
|
6
|
+
|
6
7
|
def initialize(left, right, escape = nil)
|
7
8
|
r = Arel::Nodes.build_quoted(right)
|
8
9
|
if Arel::VERSION.to_i < 7 # managed by default in version 7+ (rails 5), so useful for rails 3 & 4
|
@@ -16,6 +17,15 @@ module ArelExtensions
|
|
16
17
|
|
17
18
|
class IDoesNotMatch < IMatches
|
18
19
|
end
|
20
|
+
|
21
|
+
class AiMatches < IMatches
|
22
|
+
end
|
23
|
+
|
24
|
+
class AiIMatches < IMatches
|
25
|
+
end
|
26
|
+
|
27
|
+
class SMatches < IMatches
|
28
|
+
end
|
19
29
|
|
20
30
|
end
|
21
31
|
end
|