arel_extensions 1.5.3 → 2.0.0.rc3

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