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.
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