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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +20 -6
  3. data/Gemfile +5 -3
  4. data/README.md +38 -1
  5. data/appveyor.yml +0 -4
  6. data/gemfiles/rails5_0.gemfile +1 -1
  7. data/gemfiles/{rails5_2_beta.gemfile → rails5_2.gemfile} +5 -5
  8. data/lib/arel_extensions/attributes.rb +2 -2
  9. data/lib/arel_extensions/date_duration.rb +1 -1
  10. data/lib/arel_extensions/math.rb +20 -16
  11. data/lib/arel_extensions/nodes/abs.rb +1 -1
  12. data/lib/arel_extensions/nodes/blank.rb +2 -2
  13. data/lib/arel_extensions/nodes/cast.rb +18 -13
  14. data/lib/arel_extensions/nodes/ceil.rb +1 -1
  15. data/lib/arel_extensions/nodes/change_case.rb +2 -2
  16. data/lib/arel_extensions/nodes/coalesce.rb +1 -2
  17. data/lib/arel_extensions/nodes/collate.rb +18 -0
  18. data/lib/arel_extensions/nodes/concat.rb +8 -8
  19. data/lib/arel_extensions/nodes/date_diff.rb +3 -3
  20. data/lib/arel_extensions/nodes/duration.rb +4 -4
  21. data/lib/arel_extensions/nodes/find_in_set.rb +1 -1
  22. data/lib/arel_extensions/nodes/floor.rb +1 -2
  23. data/lib/arel_extensions/nodes/format.rb +2 -2
  24. data/lib/arel_extensions/nodes/formatted_number.rb +1 -1
  25. data/lib/arel_extensions/nodes/function.rb +10 -6
  26. data/lib/arel_extensions/nodes/is_null.rb +2 -1
  27. data/lib/arel_extensions/nodes/length.rb +1 -1
  28. data/lib/arel_extensions/nodes/locate.rb +1 -1
  29. data/lib/arel_extensions/nodes/log10.rb +1 -1
  30. data/lib/arel_extensions/nodes/matches.rb +10 -0
  31. data/lib/arel_extensions/nodes/power.rb +1 -1
  32. data/lib/arel_extensions/nodes/rand.rb +1 -1
  33. data/lib/arel_extensions/nodes/repeat.rb +1 -1
  34. data/lib/arel_extensions/nodes/replace.rb +1 -1
  35. data/lib/arel_extensions/nodes/round.rb +1 -1
  36. data/lib/arel_extensions/nodes/soundex.rb +1 -1
  37. data/lib/arel_extensions/nodes/substring.rb +1 -1
  38. data/lib/arel_extensions/nodes/trim.rb +3 -1
  39. data/lib/arel_extensions/nodes/wday.rb +3 -3
  40. data/lib/arel_extensions/string_functions.rb +31 -1
  41. data/lib/arel_extensions/version.rb +1 -1
  42. data/lib/arel_extensions/visitors/mssql.rb +88 -4
  43. data/lib/arel_extensions/visitors/mysql.rb +68 -4
  44. data/lib/arel_extensions/visitors/oracle.rb +67 -6
  45. data/lib/arel_extensions/visitors/postgresql.rb +49 -0
  46. data/lib/arel_extensions/visitors/sqlite.rb +53 -2
  47. data/lib/arel_extensions/visitors/to_sql.rb +2 -0
  48. data/lib/arel_extensions.rb +2 -1
  49. data/test/visitors/test_to_sql.rb +21 -1
  50. data/test/with_ar/all_agnostic_test.rb +65 -19
  51. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 364a53a49187891d3add1e4a814e82260c1d4b7a
4
- data.tar.gz: 2d900d081c019b2ae21820e1d58846ef86ed05d6
3
+ metadata.gz: 99e66779787e74a1e41f072a4515bc0aabcd4146
4
+ data.tar.gz: 5918126e0d59efe520b893949f2f18d9a4c659b1
5
5
  SHA512:
6
- metadata.gz: f203bce68e820023fc7ab8213a9b252318a81cc5cc9ee4eb736a1910b16ab4c5ce5575c33d4ca8742fc15c3bd21e54cc88b64eaa4133040ce10aee664e2c6300
7
- data.tar.gz: 266c7f340ebf29c64adf2064a6d7db4578a4918174bc932811b3b7c242f9c27217e5d094ae407fe34eba8c4509cf687ea6b9d21df85b03b9889c4bce315c6799
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/rails5_2_beta.gemfile
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/rails5_2_beta.gemfile
116
+ gemfile: gemfiles/rails5_2.gemfile
117
117
  - rvm: 2.1
118
- gemfile: gemfiles/rails5_2_beta.gemfile
118
+ gemfile: gemfiles/rails5_2.gemfile
119
119
  - rvm: jruby-9.0.5.0
120
- gemfile: gemfiles/rails5_2_beta.gemfile
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/rails5_2_beta.gemfile
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/rails5_2_beta.gemfile
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", '< 1.0.0', :platforms => [:mri, :mingw, :x64_mingw, :mswin]
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="13"><div>String functions</div></th>
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
@@ -41,8 +41,4 @@ environment:
41
41
  - RUBY_VERSION: 22
42
42
  - RUBY_VERSION: 23
43
43
  - RUBY_VERSION: 23-x64
44
- - RUBY_VERSION: 24
45
- - RUBY_VERSION: 24-x64
46
- - RUBY_VERSION: 25
47
- - RUBY_VERSION: 25-x64
48
44
 
@@ -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', '~> 5.0'
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.beta2'
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.beta2'
8
- gem 'activemodel', '~> 5.2.0.beta2'
9
- gem 'activerecord', '~> 5.2.0.beta2'
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.beta1' if ENV.has_key? 'ORACLE_HOME'
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
@@ -1,4 +1,4 @@
1
- require 'arel_extensions/nodes/function'
1
+ require 'arel_extensions/nodes/format'
2
2
  require 'arel_extensions/nodes/duration'
3
3
  require 'arel_extensions/nodes/wday'
4
4
 
@@ -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.class.return_type
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 Abs < Function
4
- @@return_type = :number
4
+ RETURN_TYPE = :number
5
5
 
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Blank < Function
4
- @@return_type = :boolean
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
- @@return_type = :boolean
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
- @@return_type= :string
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
- @@return_type= :int
12
+ @return_type= :int
13
13
  when 'decimal', 'numeric', 'money', 'smallmoney', 'float', 'real'
14
- @@return_type= :decimal
15
- when 'char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext'
16
- @@return_type= :string
14
+ @return_type= :decimal
15
+ when 'char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext'
16
+ @return_type= :string
17
17
  when :int
18
- @@return_type= :number
18
+ @return_type= :number
19
19
  when :float, :decimal
20
- @@return_type= :decimal
20
+ @return_type= :decimal
21
21
  when :datetime, 'datetime','smalldatetime'
22
- @@return_type= :datetime
22
+ @return_type= :datetime
23
23
  when :time,'time'
24
- @@return_type= :time
24
+ @return_type= :time
25
25
  when :date,'date'
26
- @@return_type= :date
26
+ @return_type= :date
27
27
  when :binary, 'binary', 'varbinary', 'image'
28
- @@return_type= :binary
28
+ @return_type= :binary
29
29
  else
30
- @@return_type= :string
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 @@return_type
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
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Ceil < Function
4
- @@return_type = :number
4
+ RETURN_TYPE = :number
5
5
  end
6
6
  end
7
7
  end
@@ -1,11 +1,11 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Downcase < Function
4
- @@return_type = :string
4
+ RETURN_TYPE = :string
5
5
  end
6
6
 
7
7
  class Upcase < Function
8
- @@return_type = :string
8
+ RETURN_TYPE = :string
9
9
  end
10
10
  end
11
11
  end
@@ -1,8 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Coalesce < Function
4
- include ArelExtensions::Math
5
- include ArelExtensions::Comparators
4
+ RETURN_TYPE = :string
6
5
 
7
6
  attr_accessor :left_node_type
8
7
 
@@ -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
- @@return_type = :string
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
- return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
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
- @@return_type = :string
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
- return ArelExtensions::Nodes::Concat.new([self, other])
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
- @@return_type = :integer # by default...
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
- @@return_type = :date
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
- @@return_type = :integer
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
- @@return_type = :number
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
- Arel::Nodes::As.new self, Arel::Nodes::SqlLiteral.new(other.to_s)
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
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class FindInSet < Function
4
- @@return_type = :integer
4
+ RETURN_TYPE = :integer
5
5
 
6
6
  end
7
7
  end
@@ -1,8 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Floor < Function
4
- @@return_type = :number
5
-
4
+ RETURN_TYPE = :number
6
5
  end
7
6
  end
8
7
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
- class Format < Function
4
- @@return_type = :string
3
+ class Format < Function
4
+ RETURN_TYPE = :string
5
5
 
6
6
  attr_accessor :col_type, :iso_format
7
7
  def initialize expr
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class FormattedNumber < Function
4
- @@return_type = :string
4
+ RETURN_TYPE = :string
5
5
 
6
6
  attr_accessor :locale, :prefix, :suffix, :flags, :scientific_notation, :width,:precision, :type
7
7
 
@@ -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
- cattr_accessor :return_type
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.class.return_type
44
+ att.return_type
41
45
  # else
42
46
  # nil
43
47
  end
@@ -1,7 +1,8 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class IsNull < Function
4
- @@return_type = :boolean
4
+ RETURN_TYPE = :boolean
5
+
5
6
  end
6
7
  end
7
8
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Length < Function
4
- @@return_type = :integer
4
+ RETURN_TYPE = :integer
5
5
 
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Locate < Function
4
- @@return_type = :integer
4
+ RETURN_TYPE = :integer
5
5
 
6
6
  def initialize expr
7
7
  tab = expr.map do |arg|
@@ -1,7 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Nodes
3
3
  class Log10 < Function
4
- @@return_type = :number
4
+ RETURN_TYPE = :number
5
5
 
6
6
  end
7
7
  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