arel_extensions 1.5.3 → 2.0.0.rc3

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 (141) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +2 -1
  3. data/.gitignore +6 -7
  4. data/.rubocop.yml +3 -67
  5. data/.travis/oracle/download.js +152 -0
  6. data/.travis/oracle/download.sh +30 -0
  7. data/.travis/oracle/download_ojdbc.js +116 -0
  8. data/.travis/oracle/install.sh +34 -0
  9. data/.travis/setup_accounts.sh +9 -0
  10. data/.travis/sqlite3/extension-functions.sh +6 -0
  11. data/.travis.yml +223 -0
  12. data/Gemfile +28 -2
  13. data/README.md +90 -239
  14. data/Rakefile +30 -48
  15. data/TODO +1 -0
  16. data/appveyor.yml +22 -60
  17. data/arel_extensions.gemspec +14 -13
  18. data/functions.html +3 -3
  19. data/gemfiles/rails3.gemfile +10 -10
  20. data/gemfiles/rails4.gemfile +29 -0
  21. data/gemfiles/rails5_0.gemfile +29 -0
  22. data/gemfiles/rails5_1_4.gemfile +14 -14
  23. data/gemfiles/rails5_2.gemfile +14 -16
  24. data/init/mssql.sql +4 -4
  25. data/init/mysql.sql +38 -38
  26. data/init/oracle.sql +0 -0
  27. data/init/postgresql.sql +25 -24
  28. data/init/sqlite.sql +0 -0
  29. data/lib/arel_extensions/attributes.rb +3 -7
  30. data/lib/arel_extensions/boolean_functions.rb +14 -53
  31. data/lib/arel_extensions/common_sql_functions.rb +17 -16
  32. data/lib/arel_extensions/comparators.rb +28 -29
  33. data/lib/arel_extensions/date_duration.rb +13 -17
  34. data/lib/arel_extensions/insert_manager.rb +15 -18
  35. data/lib/arel_extensions/math.rb +53 -55
  36. data/lib/arel_extensions/math_functions.rb +39 -46
  37. data/lib/arel_extensions/nodes/abs.rb +1 -0
  38. data/lib/arel_extensions/nodes/blank.rb +2 -1
  39. data/lib/arel_extensions/nodes/case.rb +19 -20
  40. data/lib/arel_extensions/nodes/cast.rb +8 -10
  41. data/lib/arel_extensions/nodes/ceil.rb +1 -1
  42. data/lib/arel_extensions/nodes/coalesce.rb +4 -3
  43. data/lib/arel_extensions/nodes/collate.rb +10 -9
  44. data/lib/arel_extensions/nodes/concat.rb +18 -9
  45. data/lib/arel_extensions/nodes/date_diff.rb +26 -42
  46. data/lib/arel_extensions/nodes/duration.rb +3 -0
  47. data/lib/arel_extensions/nodes/find_in_set.rb +1 -0
  48. data/lib/arel_extensions/nodes/floor.rb +1 -1
  49. data/lib/arel_extensions/nodes/format.rb +8 -35
  50. data/lib/arel_extensions/nodes/formatted_number.rb +23 -22
  51. data/lib/arel_extensions/nodes/function.rb +37 -48
  52. data/lib/arel_extensions/nodes/is_null.rb +0 -0
  53. data/lib/arel_extensions/nodes/json.rb +39 -52
  54. data/lib/arel_extensions/nodes/length.rb +0 -5
  55. data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
  56. data/lib/arel_extensions/nodes/locate.rb +2 -1
  57. data/lib/arel_extensions/nodes/log10.rb +2 -1
  58. data/lib/arel_extensions/nodes/matches.rb +7 -5
  59. data/lib/arel_extensions/nodes/md5.rb +1 -0
  60. data/lib/arel_extensions/nodes/power.rb +5 -5
  61. data/lib/arel_extensions/nodes/rand.rb +1 -0
  62. data/lib/arel_extensions/nodes/repeat.rb +5 -3
  63. data/lib/arel_extensions/nodes/replace.rb +8 -16
  64. data/lib/arel_extensions/nodes/round.rb +6 -5
  65. data/lib/arel_extensions/nodes/soundex.rb +15 -15
  66. data/lib/arel_extensions/nodes/std.rb +21 -18
  67. data/lib/arel_extensions/nodes/substring.rb +16 -8
  68. data/lib/arel_extensions/nodes/then.rb +1 -1
  69. data/lib/arel_extensions/nodes/trim.rb +6 -4
  70. data/lib/arel_extensions/nodes/union.rb +8 -5
  71. data/lib/arel_extensions/nodes/union_all.rb +7 -4
  72. data/lib/arel_extensions/nodes/wday.rb +4 -0
  73. data/lib/arel_extensions/nodes.rb +1 -1
  74. data/lib/arel_extensions/null_functions.rb +5 -19
  75. data/lib/arel_extensions/predications.rb +43 -44
  76. data/lib/arel_extensions/railtie.rb +5 -5
  77. data/lib/arel_extensions/set_functions.rb +7 -5
  78. data/lib/arel_extensions/string_functions.rb +36 -82
  79. data/lib/arel_extensions/tasks.rb +6 -6
  80. data/lib/arel_extensions/version.rb +1 -1
  81. data/lib/arel_extensions/visitors/ibm_db.rb +31 -24
  82. data/lib/arel_extensions/visitors/mssql.rb +192 -423
  83. data/lib/arel_extensions/visitors/mysql.rb +212 -354
  84. data/lib/arel_extensions/visitors/oracle.rb +178 -221
  85. data/lib/arel_extensions/visitors/oracle12.rb +31 -18
  86. data/lib/arel_extensions/visitors/postgresql.rb +173 -257
  87. data/lib/arel_extensions/visitors/sqlite.rb +126 -140
  88. data/lib/arel_extensions/visitors/to_sql.rb +237 -299
  89. data/lib/arel_extensions/visitors.rb +62 -83
  90. data/lib/arel_extensions.rb +31 -226
  91. data/test/database.yml +7 -15
  92. data/test/helper.rb +18 -0
  93. data/test/real_db_test.rb +117 -120
  94. data/test/support/fake_record.rb +3 -9
  95. data/test/test_comparators.rb +17 -14
  96. data/test/visitors/test_bulk_insert_oracle.rb +11 -11
  97. data/test/visitors/test_bulk_insert_sqlite.rb +13 -12
  98. data/test/visitors/test_bulk_insert_to_sql.rb +13 -11
  99. data/test/visitors/test_oracle.rb +55 -55
  100. data/test/visitors/test_to_sql.rb +226 -419
  101. data/test/with_ar/all_agnostic_test.rb +366 -721
  102. data/test/with_ar/insert_agnostic_test.rb +21 -27
  103. data/test/with_ar/test_bulk_sqlite.rb +16 -17
  104. data/test/with_ar/test_math_sqlite.rb +26 -26
  105. data/test/with_ar/test_string_mysql.rb +33 -31
  106. data/test/with_ar/test_string_sqlite.rb +34 -30
  107. metadata +37 -47
  108. data/.github/workflows/publish.yml +0 -30
  109. data/.github/workflows/release.yml +0 -30
  110. data/.github/workflows/ruby.yml +0 -403
  111. data/CONTRIBUTING.md +0 -102
  112. data/NEWS.md +0 -109
  113. data/bin/build +0 -15
  114. data/bin/compose +0 -6
  115. data/bin/publish +0 -8
  116. data/dev/arelx.dockerfile +0 -44
  117. data/dev/compose.yaml +0 -71
  118. data/dev/postgres.dockerfile +0 -5
  119. data/dev/rbenv +0 -189
  120. data/gemfiles/rails4_2.gemfile +0 -38
  121. data/gemfiles/rails5.gemfile +0 -29
  122. data/gemfiles/rails6.gemfile +0 -34
  123. data/gemfiles/rails6_1.gemfile +0 -42
  124. data/gemfiles/rails7.gemfile +0 -42
  125. data/gemfiles/rails7_1.gemfile +0 -41
  126. data/gemfiles/rails7_2.gemfile +0 -41
  127. data/gemspecs/arel_extensions-v1.gemspec +0 -27
  128. data/gemspecs/arel_extensions-v2.gemspec +0 -27
  129. data/generate_gems.sh +0 -15
  130. data/lib/arel_extensions/aliases.rb +0 -14
  131. data/lib/arel_extensions/helpers.rb +0 -62
  132. data/lib/arel_extensions/nodes/aggregate_function.rb +0 -13
  133. data/lib/arel_extensions/nodes/formatted_date.rb +0 -42
  134. data/lib/arel_extensions/nodes/rollup.rb +0 -36
  135. data/lib/arel_extensions/nodes/select.rb +0 -10
  136. data/lib/arel_extensions/nodes/sum.rb +0 -7
  137. data/lib/arel_extensions/visitors/convert_format.rb +0 -37
  138. data/lib/arel_extensions/warning.rb +0 -42
  139. data/test/arelx_test_helper.rb +0 -92
  140. data/version_v1.rb +0 -3
  141. data/version_v2.rb +0 -3
@@ -1,42 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 6.1.0'
4
-
5
- group :development, :test do
6
- gem 'ruby-lsp', platforms: %i[mri]
7
- gem 'debug', platforms: %i[mri]
8
- gem 'concurrent-ruby', '1.3.4' # Need to pin b/c of a known issue https://github.com/rails/rails/issues/54260
9
-
10
- gem 'activesupport', '~> 6.1.0'
11
- gem 'activemodel', '~> 6.1.0'
12
- gem 'activerecord', '~> 6.1.0'
13
-
14
- gem 'sqlite3', '~> 1.4', platforms: [:mri]
15
- gem 'mysql2', '~>0.5', platforms: [:mri]
16
- gem 'pg', '~> 1.1', platforms: [:mri]
17
-
18
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
19
- gem 'activerecord-sqlserver-adapter', '~> 6.1.0', platforms: %i[mri mingw x64_mingw mswin]
20
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
21
-
22
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
23
- gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.has_key? 'ORACLE_HOME'
24
-
25
- # for JRuby
26
- gem 'activerecord-jdbc-alt-adapter', '~> 61.0', platform: :jruby, require: true
27
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
28
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
29
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
30
- gem 'jdbc-mssql', platforms: :jruby, require: true
31
- gem 'jdbc-sqlite3', platforms: :jruby
32
-
33
- # Ruby 3.4+ removes the following gems from the standard distribution.
34
- # Warnings are emitted from 3.3 .
35
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
36
- gem 'base64'
37
- gem 'bigdecimal'
38
- gem 'mutex_m'
39
- end
40
- end
41
-
42
- gemspec path: Dir.pwd
@@ -1,42 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 7.0.1'
4
-
5
- group :development, :test do
6
- gem 'ruby-lsp', platforms: %i[mri]
7
- gem 'debug', platforms: %i[mri]
8
- gem 'concurrent-ruby', '1.3.4' # Need to pin b/c of a known issue https://github.com/rails/rails/issues/54260
9
-
10
- gem 'activesupport', '~> 7.0.1'
11
- gem 'activemodel', '~> 7.0.1'
12
- gem 'activerecord', '~> 7.0.1'
13
-
14
- gem 'sqlite3', '~> 1.4', platforms: [:mri]
15
- gem 'mysql2', '~>0.5', platforms: [:mri]
16
- gem 'pg', '~> 1.1', platforms: [:mri]
17
-
18
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
19
- gem 'activerecord-sqlserver-adapter', '~> 7.0.7', platforms: %i[mri mingw x64_mingw mswin]
20
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
21
-
22
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
23
- gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.has_key? 'ORACLE_HOME'
24
-
25
- # for JRuby
26
- gem 'jdbc-mssql', platforms: :jruby, require: true
27
- gem 'jdbc-sqlite3', platform: :jruby
28
- gem 'activerecord-jdbc-alt-adapter', '~> 70.0', platform: :jruby, require: true
29
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
30
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
31
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
32
-
33
- # Ruby 3.4+ removes the following gems from the standard distribution.
34
- # Warnings are emitted from 3.3 .
35
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
36
- gem 'base64'
37
- gem 'bigdecimal'
38
- gem 'mutex_m'
39
- end
40
- end
41
-
42
- gemspec path: Dir.pwd
@@ -1,41 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 7.1'
4
-
5
- group :development, :test do
6
- gem 'ruby-lsp', platforms: %i[mri]
7
- gem 'debug', platforms: %i[mri]
8
-
9
- gem 'activesupport', '~> 7.1'
10
- gem 'activemodel', '~> 7.1'
11
- gem 'activerecord', '~> 7.1'
12
-
13
- gem 'sqlite3', '~> 1.6', platforms: [:mri]
14
- gem 'mysql2', '~>0.5', platforms: [:mri]
15
- gem 'pg', '~> 1.5', platforms: [:mri]
16
-
17
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
18
- gem 'activerecord-sqlserver-adapter', '~> 7.1.0.beta1', platforms: %i[mri mingw x64_mingw mswin]
19
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
20
-
21
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
22
- gem 'activerecord-oracle_enhanced-adapter', '~> 7.0.0' if ENV.has_key? 'ORACLE_HOME'
23
-
24
- # for JRuby
25
- gem 'jdbc-mssql', platforms: :jruby, require: true
26
- gem 'jdbc-sqlite3', platform: :jruby
27
- gem 'activerecord-jdbc-alt-adapter', '~> 71.0.0.alpha1', platform: :jruby, require: true
28
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
29
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
30
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
31
-
32
- # Ruby 3.4+ removes the following gems from the standard distribution.
33
- # Warnings are emitted from 3.3 .
34
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
35
- gem 'base64'
36
- gem 'bigdecimal'
37
- gem 'mutex_m'
38
- end
39
- end
40
-
41
- gemspec path: Dir.pwd
@@ -1,41 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 7.2'
4
-
5
- group :development, :test do
6
- gem 'ruby-lsp', platforms: %i[mri]
7
- gem 'debug', platforms: %i[mri]
8
-
9
- gem 'activesupport', '~> 7.2'
10
- gem 'activemodel', '~> 7.2'
11
- gem 'activerecord', '~> 7.2'
12
-
13
- gem 'sqlite3', '~> 1.6', platforms: [:mri]
14
- gem 'mysql2', '~>0.5', platforms: [:mri]
15
- gem 'pg', '~> 1.5', platforms: [:mri]
16
-
17
- gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
18
- gem 'activerecord-sqlserver-adapter', '~> 7.2', platforms: %i[mri mingw x64_mingw mswin]
19
- gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
20
-
21
- gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
22
- gem 'activerecord-oracle_enhanced-adapter', '~> 7.0.0' if ENV.has_key? 'ORACLE_HOME'
23
-
24
- # for JRuby
25
- gem 'jdbc-mssql', platforms: :jruby, require: true
26
- gem 'jdbc-sqlite3', platform: :jruby
27
- # gem 'activerecord-jdbc-alt-adapter', '~> 71.0.0.alpha1', platform: :jruby, require: true
28
- gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
29
- gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
30
- gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
31
-
32
- # Ruby 3.4+ removes the following gems from the standard distribution.
33
- # Warnings are emitted from 3.3 .
34
- if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.3.0')
35
- gem 'base64'
36
- gem 'bigdecimal'
37
- gem 'mutex_m'
38
- end
39
- end
40
-
41
- gemspec path: Dir.pwd
@@ -1,27 +0,0 @@
1
- $:.push File.expand_path('../lib', __FILE__)
2
- require 'arel_extensions/version'
3
-
4
- Gem::Specification.new do |s|
5
- s.name = 'arel_extensions'
6
- s.version = ArelExtensions::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ['Yann Azoury', 'Félix Bellanger', 'Julien Delporte']
9
- s.email = ['yann.azoury@faveod.com', 'felix.bellanger@faveod.com', 'julien.delporte@faveod.com']
10
- s.homepage = 'https://github.com/Faveod/arel-extensions'
11
- s.description = 'Adds new features to Arel'
12
- s.summary = 'Extending Arel'
13
- s.license = 'MIT'
14
-
15
- s.rdoc_options = ['--main', 'README.md']
16
- s.extra_rdoc_files = ['MIT-LICENSE.txt', 'README.md', 'functions.html']
17
-
18
- # Manifest
19
- s.files = `git ls-files`.split("\n")
20
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- s.require_paths = ['lib']
22
-
23
- s.add_dependency('arel', '>= 6.0')
24
-
25
- s.add_development_dependency('minitest', '~> 5.9')
26
- s.add_development_dependency('rake', '~> 12.3.3')
27
- end
@@ -1,27 +0,0 @@
1
- $:.push File.expand_path('../lib', __FILE__)
2
- require 'arel_extensions/version'
3
-
4
- Gem::Specification.new do |s|
5
- s.name = 'arel_extensions'
6
- s.version = ArelExtensions::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ['Yann Azoury', 'Félix Bellanger', 'Julien Delporte']
9
- s.email = ['yann.azoury@faveod.com', 'felix.bellanger@faveod.com', 'julien.delporte@faveod.com']
10
- s.homepage = 'https://github.com/Faveod/arel-extensions'
11
- s.description = 'Adds new features to Arel'
12
- s.summary = 'Extending Arel'
13
- s.license = 'MIT'
14
-
15
- s.rdoc_options = ['--main', 'README.md']
16
- s.extra_rdoc_files = ['MIT-LICENSE.txt', 'README.md', 'functions.html']
17
-
18
- # Manifest
19
- s.files = `git ls-files`.split("\n")
20
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- s.require_paths = ['lib']
22
-
23
- s.add_dependency('activerecord', '>= 6.0')
24
-
25
- s.add_development_dependency('minitest', '~> 5.9')
26
- s.add_development_dependency('rake', '~> 12.3.3')
27
- end
data/generate_gems.sh DELETED
@@ -1,15 +0,0 @@
1
-
2
- #gem uninstall arel_extensions
3
-
4
- # VERSION ~> 1
5
- cp ./version_v1.rb lib/arel_extensions/version.rb
6
- cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
7
- gem build ./arel_extensions.gemspec
8
-
9
- # VERSION ~> 2
10
- cp ./version_v2.rb lib/arel_extensions/version.rb
11
- mv ./arel_extensions.gemspec ./arel_extensions.gemspec.bck
12
- cp ./gemspecs/arel_extensions-v2.gemspec ./arel_extensions.gemspec
13
- gem build ./arel_extensions.gemspec
14
- cp ./version_v1.rb lib/arel_extensions/version.rb
15
- cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
@@ -1,14 +0,0 @@
1
- module ArelExtensions
2
- module Aliases
3
-
4
- # Install an alias, if present.
5
- def xas other
6
- if other.present?
7
- Arel::Nodes::As.new(self, Arel.sql(other))
8
- else
9
- self
10
- end
11
- end
12
-
13
- end
14
- end
@@ -1,62 +0,0 @@
1
- module ArelExtensions
2
-
3
- #
4
- # column_of
5
- #
6
- # Before the creation of these methods, getting the column name was done
7
- # uniquely through the code found in `column_of_via_arel_table`.
8
- #
9
- # This turned out to be unreliable, most notably when using adapters that do
10
- # not come with activerecord standard batteries. SQL Server is the most
11
- # notorious example.
12
- #
13
- # Currently, we're using a needlessly complicated way to address this issue.
14
- # Different versions of activerecord are behaving differently; the public APIs
15
- # do not seem to come with any guarantees, so we need to be sure that we're
16
- # coveing all these cases.
17
-
18
- def self.column_of_via_arel_table(table_name, column_name)
19
- Arel::Table.engine.connection.schema_cache.columns_hash(table_name)[column_name]
20
- rescue NoMethodError
21
- nil
22
- rescue => e
23
- warn("Warning: Unexpected exception caught while fetching column name for #{table_name}.#{column_name} in `column_of_via_arel_table`\n#{e.class}")
24
- warn(e.backtrace)
25
- nil
26
- end
27
-
28
- def self.column_of(table_name, column_name)
29
- pool = ActiveRecord::Base.connection.pool
30
- use_arel_table = !ActiveRecord::Base.connected? || \
31
- (pool.respond_to?(:schema_cache) && pool.schema_cache.nil?)
32
-
33
- if use_arel_table
34
- column_of_via_arel_table(table_name, column_name)
35
- else
36
- if pool.respond_to?(:pool_config)
37
- if pool.pool_config.respond_to?(:schema_reflection) # activerecord >= 7.1
38
- if ActiveRecord.version >= Gem::Version.create('7.2')
39
- pool.pool_config.schema_reflection.columns_hash(pool, table_name)[column_name]
40
- else
41
- pool.pool_config.schema_reflection.columns_hash(ActiveRecord::Base.connection, table_name)[column_name]
42
- end
43
- else # activerecord < 7.1
44
- pool.pool_config.schema_cache.columns_hash(table_name)[column_name]
45
- end
46
- elsif pool.respond_to?(:schema_cache) # activerecord < 6.1
47
- pool.schema_cache.columns_hash(table_name)[column_name]
48
- else # activerecord < 5.0
49
- column_of_via_arel_table(table_name, column_name)
50
- end
51
- end
52
- rescue ActiveRecord::ConnectionNotEstablished
53
- column_of_via_arel_table(table_name, column_name)
54
- rescue ActiveRecord::StatementInvalid
55
- nil
56
- rescue => e
57
- warn("Warning: Unexpected exception caught while fetching column name for #{table_name}.#{column_name} in `column_of`")
58
- warn(e)
59
- warn(e.backtrace)
60
- nil
61
- end
62
- end
@@ -1,13 +0,0 @@
1
- module ArelExtensions
2
- module Nodes
3
- class AggregateFunction < Function
4
- attr_accessor :order, :group
5
-
6
- def initialize node, **opts
7
- @order = Array.wrap(opts[:order]).map{|e| convert_to_node(e)}
8
- @group = Array.wrap(opts[:group]).map{|e| convert_to_node(e)}
9
- super [node]
10
- end
11
- end
12
- end
13
- end
@@ -1,42 +0,0 @@
1
- require 'strscan'
2
-
3
- module ArelExtensions
4
- module Nodes
5
- class FormattedDate < Function
6
- RETURN_TYPE = :string
7
-
8
- attr_accessor :col_type, :iso_format, :time_zone
9
-
10
- def initialize expr
11
- col = expr[0]
12
- @iso_format = convert_format(expr[1])
13
- @time_zone = expr[2]
14
- @col_type = type_of_attribute(col)
15
- super [col, convert_to_string_node(@iso_format)]
16
- end
17
-
18
- private
19
-
20
- # Address portability issues with some of the formats.
21
- def convert_format(fmt)
22
- s = StringScanner.new fmt
23
- res = StringIO.new
24
- while !s.eos?
25
- res <<
26
- case
27
- when s.scan(/%D/) then '%m/%d/%y'
28
- when s.scan(/%F/) then '%Y-%m-%d'
29
- when s.scan(/%R/) then '%H:%M'
30
- when s.scan(/%r/) then '%I:%M:%S %p'
31
- when s.scan(/%T/) then '%H:%M:%S'
32
- when s.scan(/%v/) then '%e-%b-%Y'
33
-
34
- when s.scan(/[^%]+/) then s.matched
35
- when s.scan(/./) then s.matched
36
- end
37
- end
38
- res.string
39
- end
40
- end
41
- end
42
- end
@@ -1,36 +0,0 @@
1
- # The following is a patch to activerecord when it doesn't
2
- # have RollUp defined, i.e. for rails < 5.2
3
-
4
- begin
5
- Arel::Nodes.const_get('RollUp')
6
- rescue NameError => _
7
- module Arel
8
- module Nodes
9
- class RollUp < Arel::Nodes::Unary
10
- end
11
- end
12
- end
13
-
14
- module Arel
15
- module Visitors
16
- class PostgreSQL
17
- # Utilized by GroupingSet, Cube & RollUp visitors to
18
- # handle grouping aggregation semantics
19
- def grouping_array_or_grouping_element(o, collector)
20
- if o.expr.is_a? Array
21
- collector << "( "
22
- visit o.expr, collector
23
- collector << " )"
24
- else
25
- visit o.expr, collector
26
- end
27
- end
28
-
29
- def visit_Arel_Nodes_RollUp(o, collector)
30
- collector << "ROLLUP"
31
- grouping_array_or_grouping_element o, collector
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,10 +0,0 @@
1
- module Arel
2
- module Nodes
3
- class SelectCore
4
- # havings did not exist in rails < 5.2
5
- if !method_defined?(:havings)
6
- alias :havings :having
7
- end
8
- end
9
- end
10
- end
@@ -1,7 +0,0 @@
1
- module ArelExtensions
2
- module Nodes
3
- class Sum < AggregateFunction
4
- RETURN_TYPE = :number
5
- end
6
- end
7
- end
@@ -1,37 +0,0 @@
1
- module ArelExtensions
2
- module Visitors
3
- # Convert date format in strftime syntax to whatever the RDBMs
4
- # wants, based on the table of conversion +mapping+.
5
- def self.strftime_to_format format, mapping
6
- @mapping_regexps ||= {}
7
- @mapping_regexps[mapping] ||=
8
- Regexp.new(
9
- mapping
10
- .keys
11
- .map{|k| Regexp.escape(k)}
12
- .join('|')
13
- )
14
-
15
- regexp = @mapping_regexps[mapping]
16
- s = StringScanner.new format
17
- res = StringIO.new
18
- while !s.eos?
19
- res <<
20
- case
21
- when s.scan(regexp)
22
- if v = mapping[s.matched]
23
- v
24
- else
25
- # Should never happen.
26
- s.matched
27
- end
28
- when s.scan(/[^%]+/)
29
- s.matched
30
- when s.scan(/./)
31
- s.matched
32
- end
33
- end
34
- res.string
35
- end
36
- end
37
- end
@@ -1,42 +0,0 @@
1
- module ArelExtensions
2
- class RubyDeprecator
3
- if RUBY_VERSION.split('.')[0].to_i < 3
4
- def warn msg
5
- Kernel.warn(msg)
6
- end
7
- else
8
- def warn msg
9
- Kernel.warn(msg, category: :deprecated)
10
- end
11
- end
12
- end
13
-
14
- # To configure deprecations in a Rails application, you can do something
15
- # like this:
16
- #
17
- # ```ruby
18
- # ArelExtensions.deprecator.behavior =
19
- # (Rails.application.config.active_support.deprecation || :stderr)
20
- # ```
21
- #
22
- # See ActiveSupport's deprecation documentation for more details.
23
- def self.deprecator
24
- @deprecator ||=
25
- if defined?(ActiveSupport::Deprecation)
26
- major, minor = Gem::Version.create(ArelExtensions::VERSION).segments
27
- ActiveSupport::Deprecation.new("#{major}.#{minor}", 'arel_extensions')
28
- else
29
- RubyDeprecator::new
30
- end
31
- end
32
-
33
- module Warning
34
- def deprecated msg, what: nil
35
- kaller = caller(2..2).first
36
- return if /lib\/(:?arel(?:_extensions)?|active_record)\// =~ kaller && ENV['AREL_EXTENSIONS_IN_TEST'] != '1'
37
-
38
- what = caller_locations(1, 1).first.label if what.nil?
39
- ArelExtensions.deprecator.warn "#{kaller}: `#{what}` is now deprecated. #{msg}"
40
- end
41
- end
42
- end
@@ -1,92 +0,0 @@
1
- require 'rubygems'
2
- require 'minitest/autorun'
3
- require 'fileutils'
4
- require 'arel'
5
- require 'active_record'
6
-
7
- require 'support/fake_record'
8
-
9
- ENV['AREL_EXTENSIONS_IN_TEST'] = '1' # Useful for deprecation warnings.
10
-
11
- def colored(color, msg)
12
- /^xterm|-256color$/.match?(ENV['TERM']) ? "\x1b[#{color}m#{msg}\x1b[89m\x1b[0m" : "#{msg}"
13
- end
14
-
15
- YELLOW = '33'
16
-
17
- # Load gems specific to databases.
18
- #
19
- # NOTE:
20
- # It's strongly advised to test each database on its own. Loading multiple
21
- # backend gems leads to undefined behavior according to tests; the backend
22
- # might not recognize the correct DB visitor and will fallback to `ToSQL`
23
- # and screw all tests.
24
- #
25
- # The issue also seems to be related to arel version: at some point, arel
26
- # dropped its wide support for DBs and kept Postgres, MySQL and SQLite.
27
- # Here, we're just trying to load the correct ones.
28
- #
29
- # NOTE:
30
- # As of jruby 9.4 (and maybe 9.3, but I couldn't test it given the state of
31
- # the alt-adapter), we need to load jdbc/mssql manually.
32
- db_and_gem =
33
- if RUBY_PLATFORM == 'java'
34
- {
35
- 'oracle' => ['activerecord-oracle_enhanced-adapter'],
36
- 'mssql' => ['jdbc/mssql', 'activerecord-jdbcsqlserver-adapter'],
37
- }
38
- else
39
- {
40
- 'oracle' => ['activerecord-oracle_enhanced-adapter'],
41
- 'mssql' => ['activerecord-sqlserver-adapter'],
42
- }
43
- end
44
-
45
- module Warning
46
- ARELX_IGNORED = [
47
- 'PG::Coder.new(hash)',
48
- 'rb_check_safe_obj', # ruby 3.0
49
- 'rb_tainted_str_new', # ruby 3.0
50
- 'Using the last argument', # ruby < 3.0
51
- ].freeze
52
-
53
- def self.warn(message)
54
- return if ARELX_IGNORED.any? { |msg| message.include?(msg) }
55
-
56
- super
57
- end
58
- end
59
-
60
-
61
- def load_lib(gems)
62
- if gems && (RUBY_PLATFORM == 'java' || Arel::VERSION.to_i > 9)
63
- gems.each do |gem|
64
- begin
65
- require gem
66
- rescue Exception => e
67
- warn "Warning: failed to load gem #{gem}. Are you sure it's installed?"
68
- warn e.message
69
- end
70
- end
71
- end
72
- end
73
-
74
- load_lib(db_and_gem[ENV['DB']])
75
-
76
- require 'arel_extensions'
77
-
78
- $arel_silence_type_casting_deprecation = true
79
-
80
- module Minitest::Assertions
81
- #
82
- # Fails unless +expected and +actual are the same string, modulo extraneous spaces.
83
- #
84
- def assert_like(expected, actual, msg = nil)
85
- msg ||= "Expected #{expected.inspect} and #{actual.inspect} to be alike"
86
- assert_equal expected.gsub(/\s+/, ' ').strip, actual.gsub(/\s+/, ' ').strip
87
- end
88
- end
89
-
90
- module Minitest::Expectations
91
- infect_an_assertion :assert_like, :must_be_like
92
- end
data/version_v1.rb DELETED
@@ -1,3 +0,0 @@
1
- module ArelExtensions
2
- VERSION = '1.5.3'.freeze
3
- end
data/version_v2.rb DELETED
@@ -1,3 +0,0 @@
1
- module ArelExtensions
2
- VERSION = '2.3.3'.freeze
3
- end