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