arel_extensions 2.0.21 → 2.2.2
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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -2
- data/.github/workflows/publish.yml +29 -0
- data/.github/workflows/release.yml +30 -0
- data/.github/workflows/ruby.yml +377 -80
- data/.gitignore +7 -6
- data/.rubocop.yml +62 -1
- data/CONTRIBUTING.md +102 -0
- data/Gemfile +2 -23
- data/NEWS.md +89 -0
- data/README.md +228 -84
- data/Rakefile +11 -4
- data/TODO +0 -1
- data/appveyor.yml +60 -22
- data/arel_extensions.gemspec +11 -12
- data/bin/build +15 -0
- data/bin/compose +6 -0
- data/bin/publish +8 -0
- data/dev/arelx.dockerfile +44 -0
- data/dev/compose.yaml +71 -0
- data/dev/postgres.dockerfile +5 -0
- data/dev/rbenv +189 -0
- data/gemfiles/rails3.gemfile +10 -10
- data/gemfiles/rails4_2.gemfile +38 -0
- data/gemfiles/rails5.gemfile +29 -0
- data/gemfiles/rails5_1_4.gemfile +13 -13
- data/gemfiles/rails5_2.gemfile +16 -14
- data/gemfiles/rails6.gemfile +18 -15
- data/gemfiles/rails6_1.gemfile +18 -15
- data/gemfiles/rails7.gemfile +33 -0
- data/gemfiles/rails7_1.gemfile +33 -0
- data/gemfiles/rails7_2.gemfile +33 -0
- data/gemspecs/arel_extensions-v1.gemspec +12 -13
- data/gemspecs/arel_extensions-v2.gemspec +11 -12
- data/init/mssql.sql +0 -0
- data/init/mysql.sql +0 -0
- data/init/oracle.sql +0 -0
- data/init/postgresql.sql +0 -0
- data/init/sqlite.sql +0 -0
- data/lib/arel_extensions/aliases.rb +14 -0
- data/lib/arel_extensions/attributes.rb +10 -2
- data/lib/arel_extensions/boolean_functions.rb +2 -4
- data/lib/arel_extensions/common_sql_functions.rb +12 -12
- data/lib/arel_extensions/comparators.rb +14 -14
- data/lib/arel_extensions/date_duration.rb +14 -9
- data/lib/arel_extensions/helpers.rb +62 -0
- data/lib/arel_extensions/insert_manager.rb +19 -17
- data/lib/arel_extensions/math.rb +48 -45
- data/lib/arel_extensions/math_functions.rb +18 -18
- data/lib/arel_extensions/nodes/abs.rb +0 -0
- data/lib/arel_extensions/nodes/aggregate_function.rb +0 -0
- data/lib/arel_extensions/nodes/blank.rb +1 -1
- data/lib/arel_extensions/nodes/case.rb +10 -12
- data/lib/arel_extensions/nodes/cast.rb +6 -6
- data/lib/arel_extensions/nodes/ceil.rb +0 -0
- data/lib/arel_extensions/nodes/change_case.rb +0 -0
- data/lib/arel_extensions/nodes/coalesce.rb +1 -1
- data/lib/arel_extensions/nodes/collate.rb +9 -9
- data/lib/arel_extensions/nodes/concat.rb +2 -2
- data/lib/arel_extensions/nodes/date_diff.rb +33 -14
- data/lib/arel_extensions/nodes/duration.rb +0 -0
- data/lib/arel_extensions/nodes/find_in_set.rb +0 -0
- data/lib/arel_extensions/nodes/floor.rb +0 -0
- data/lib/arel_extensions/nodes/format.rb +3 -2
- data/lib/arel_extensions/nodes/formatted_date.rb +42 -0
- data/lib/arel_extensions/nodes/formatted_number.rb +2 -2
- data/lib/arel_extensions/nodes/function.rb +22 -26
- data/lib/arel_extensions/nodes/is_null.rb +0 -0
- data/lib/arel_extensions/nodes/json.rb +15 -9
- data/lib/arel_extensions/nodes/length.rb +6 -0
- data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
- data/lib/arel_extensions/nodes/locate.rb +1 -1
- data/lib/arel_extensions/nodes/log10.rb +0 -0
- data/lib/arel_extensions/nodes/matches.rb +1 -1
- data/lib/arel_extensions/nodes/md5.rb +0 -0
- data/lib/arel_extensions/nodes/power.rb +0 -0
- data/lib/arel_extensions/nodes/rand.rb +0 -0
- data/lib/arel_extensions/nodes/repeat.rb +2 -2
- data/lib/arel_extensions/nodes/replace.rb +2 -10
- data/lib/arel_extensions/nodes/rollup.rb +36 -0
- data/lib/arel_extensions/nodes/round.rb +0 -0
- data/lib/arel_extensions/nodes/select.rb +10 -0
- data/lib/arel_extensions/nodes/soundex.rb +2 -2
- data/lib/arel_extensions/nodes/std.rb +0 -0
- data/lib/arel_extensions/nodes/substring.rb +1 -1
- data/lib/arel_extensions/nodes/sum.rb +0 -0
- data/lib/arel_extensions/nodes/then.rb +1 -1
- data/lib/arel_extensions/nodes/trim.rb +2 -2
- data/lib/arel_extensions/nodes/union.rb +5 -5
- data/lib/arel_extensions/nodes/union_all.rb +4 -4
- data/lib/arel_extensions/nodes/wday.rb +0 -0
- data/lib/arel_extensions/nodes.rb +0 -0
- data/lib/arel_extensions/null_functions.rb +16 -0
- data/lib/arel_extensions/predications.rb +10 -10
- data/lib/arel_extensions/railtie.rb +1 -1
- data/lib/arel_extensions/set_functions.rb +3 -3
- data/lib/arel_extensions/string_functions.rb +19 -10
- data/lib/arel_extensions/tasks.rb +2 -2
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/convert_format.rb +0 -0
- data/lib/arel_extensions/visitors/ibm_db.rb +20 -20
- data/lib/arel_extensions/visitors/mssql.rb +394 -169
- data/lib/arel_extensions/visitors/mysql.rb +238 -151
- data/lib/arel_extensions/visitors/oracle.rb +170 -131
- data/lib/arel_extensions/visitors/oracle12.rb +16 -16
- data/lib/arel_extensions/visitors/postgresql.rb +170 -140
- data/lib/arel_extensions/visitors/sqlite.rb +88 -87
- data/lib/arel_extensions/visitors/to_sql.rb +185 -156
- data/lib/arel_extensions/visitors.rb +73 -60
- data/lib/arel_extensions.rb +173 -36
- data/test/arelx_test_helper.rb +49 -1
- data/test/database.yml +13 -7
- data/test/real_db_test.rb +101 -83
- data/test/support/fake_record.rb +8 -2
- data/test/test_comparators.rb +5 -5
- data/test/visitors/test_bulk_insert_oracle.rb +5 -5
- data/test/visitors/test_bulk_insert_sqlite.rb +5 -5
- data/test/visitors/test_bulk_insert_to_sql.rb +5 -5
- data/test/visitors/test_oracle.rb +14 -14
- data/test/visitors/test_to_sql.rb +121 -93
- data/test/with_ar/all_agnostic_test.rb +630 -320
- data/test/with_ar/insert_agnostic_test.rb +25 -18
- data/test/with_ar/test_bulk_sqlite.rb +11 -7
- data/test/with_ar/test_math_sqlite.rb +18 -14
- data/test/with_ar/test_string_mysql.rb +26 -22
- data/test/with_ar/test_string_sqlite.rb +26 -22
- data/version_v1.rb +1 -1
- data/version_v2.rb +1 -1
- metadata +24 -26
- data/.travis/oracle/download.js +0 -152
- data/.travis/oracle/download.sh +0 -30
- data/.travis/oracle/download_ojdbc.js +0 -116
- data/.travis/oracle/install.sh +0 -34
- data/.travis/setup_accounts.sh +0 -9
- data/.travis/sqlite3/extension-functions.sh +0 -6
- data/.travis.yml +0 -193
- data/gemfiles/rails4.gemfile +0 -29
- data/gemfiles/rails5_0.gemfile +0 -29
data/bin/build
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#! /usr/bin/env sh
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# VERSION ~> 1
|
|
5
|
+
echo "Packaging v1"
|
|
6
|
+
cp ./version_v1.rb lib/arel_extensions/version.rb
|
|
7
|
+
cp ./gemspecs/arel_extensions-v1.gemspec ./arel_extensions.gemspec
|
|
8
|
+
gem build ./arel_extensions.gemspec
|
|
9
|
+
|
|
10
|
+
# VERSION ~> 2
|
|
11
|
+
echo "Packaging v2"
|
|
12
|
+
cp ./version_v2.rb lib/arel_extensions/version.rb
|
|
13
|
+
cp ./gemspecs/arel_extensions-v2.gemspec ./arel_extensions.gemspec
|
|
14
|
+
gem build ./arel_extensions.gemspec
|
|
15
|
+
|
data/bin/compose
ADDED
data/bin/publish
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
FROM ubuntu:22.04
|
|
2
|
+
|
|
3
|
+
ENV RBENV_ROOT=/opt/rbenv
|
|
4
|
+
ENV PATH=${RBENV_ROOT}/shims:${RBENV_ROOT}/bin:${PATH}
|
|
5
|
+
ENV APP_HOME=/app
|
|
6
|
+
# I know there's a more reliable way, but this is simpler.
|
|
7
|
+
ENV IN_DOCKER=true
|
|
8
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
9
|
+
|
|
10
|
+
RUN mkdir -p $APP_HOME
|
|
11
|
+
|
|
12
|
+
RUN apt-get update -q && apt-get install -y \
|
|
13
|
+
curl bundler build-essential git gnupg locales \
|
|
14
|
+
libbz2-dev libffi-dev liblzma-dev lsb-release libsqlite3-dev libyaml-dev \
|
|
15
|
+
make openjdk-17-jdk-headless ruby-dev ruby-full tzdata zlib1g-dev \
|
|
16
|
+
&& ln -fs /usr/share/zoneinfo/UTC /etc/localtime \
|
|
17
|
+
&& dpkg-reconfigure --frontend noninteractive tzdata
|
|
18
|
+
|
|
19
|
+
RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg \
|
|
20
|
+
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list \
|
|
21
|
+
&& curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc \
|
|
22
|
+
&& curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list \
|
|
23
|
+
&& apt-get update -q
|
|
24
|
+
|
|
25
|
+
RUN ACCEPT_EULA=y DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
26
|
+
freetds-dev libmysqlclient-dev mysql-client msodbcsql18 mssql-tools18 unixodbc-dev libpq-dev \
|
|
27
|
+
&& echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc \
|
|
28
|
+
&& apt-get clean \
|
|
29
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
30
|
+
&& locale-gen en_US.UTF-8
|
|
31
|
+
|
|
32
|
+
RUN /bin/bash -c "source ~/.bashrc"
|
|
33
|
+
|
|
34
|
+
RUN mkdir -p ${RBENV_ROOT} \
|
|
35
|
+
&& git clone https://github.com/rbenv/rbenv.git ${RBENV_ROOT} \
|
|
36
|
+
&& git clone --depth 1 https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build \
|
|
37
|
+
&& rbenv init - \
|
|
38
|
+
&& rbenv global system
|
|
39
|
+
|
|
40
|
+
WORKDIR $APP_HOME
|
|
41
|
+
COPY ./dev/rbenv ./dev/rbenv
|
|
42
|
+
COPY ./.github/workflows/ruby.yml ./.github/workflows/ruby.yml
|
|
43
|
+
RUN /usr/bin/gem install colorize psych toml-rb
|
|
44
|
+
RUN ./dev/rbenv install && rm ./dev/rbenv ./.github/workflows/ruby.yml
|
data/dev/compose.yaml
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: arelx
|
|
2
|
+
services:
|
|
3
|
+
arelx:
|
|
4
|
+
container_name: arelx-build
|
|
5
|
+
build:
|
|
6
|
+
context: ..
|
|
7
|
+
dockerfile: dev/arelx.dockerfile
|
|
8
|
+
volumes:
|
|
9
|
+
- ../:/app
|
|
10
|
+
entrypoint: ["/usr/bin/ruby", "dev/rbenv", "test"]
|
|
11
|
+
network_mode: "host"
|
|
12
|
+
depends_on:
|
|
13
|
+
mariadb:
|
|
14
|
+
condition: service_healthy
|
|
15
|
+
postgres:
|
|
16
|
+
condition: service_healthy
|
|
17
|
+
mssql:
|
|
18
|
+
condition: service_healthy
|
|
19
|
+
mariadb:
|
|
20
|
+
image: mariadb:11.0
|
|
21
|
+
container_name: mariadb
|
|
22
|
+
environment:
|
|
23
|
+
MARIADB_DATABASE: arelx_test
|
|
24
|
+
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: true
|
|
25
|
+
ports:
|
|
26
|
+
- "3306:3306"
|
|
27
|
+
network_mode: "host"
|
|
28
|
+
healthcheck:
|
|
29
|
+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
30
|
+
interval: 10s
|
|
31
|
+
timeout: 5s
|
|
32
|
+
retries: 3
|
|
33
|
+
postgres:
|
|
34
|
+
build:
|
|
35
|
+
context: ..
|
|
36
|
+
dockerfile: dev/postgres.dockerfile
|
|
37
|
+
container_name: postgres
|
|
38
|
+
environment:
|
|
39
|
+
POSTGRES_USER: postgres
|
|
40
|
+
POSTGRES_PASSWORD: secret
|
|
41
|
+
POSTGRES_DB: arelx_test
|
|
42
|
+
ports:
|
|
43
|
+
- "5432:5432"
|
|
44
|
+
network_mode: "host"
|
|
45
|
+
healthcheck:
|
|
46
|
+
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
|
47
|
+
interval: 10s
|
|
48
|
+
timeout: 5s
|
|
49
|
+
retries: 3
|
|
50
|
+
mssql:
|
|
51
|
+
image: mcr.microsoft.com/mssql/server:2019-latest
|
|
52
|
+
container_name: mssql
|
|
53
|
+
environment:
|
|
54
|
+
MSSQL_SA_PASSWORD: Password12!
|
|
55
|
+
ACCEPT_EULA: Y
|
|
56
|
+
ports:
|
|
57
|
+
- "1433:1433"
|
|
58
|
+
network_mode: "host"
|
|
59
|
+
healthcheck:
|
|
60
|
+
test:
|
|
61
|
+
[
|
|
62
|
+
"CMD-SHELL",
|
|
63
|
+
"/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $${MSSQL_SA_PASSWORD} -Q 'SELECT 1'",
|
|
64
|
+
]
|
|
65
|
+
interval: 30s
|
|
66
|
+
retries: 5
|
|
67
|
+
timeout: 10s
|
|
68
|
+
|
|
69
|
+
networks:
|
|
70
|
+
default:
|
|
71
|
+
name: arelx-network
|
data/dev/rbenv
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'colorize'
|
|
5
|
+
require 'etc'
|
|
6
|
+
require 'open3'
|
|
7
|
+
require 'pathname'
|
|
8
|
+
require 'stringio'
|
|
9
|
+
require 'toml-rb'
|
|
10
|
+
require 'psych'
|
|
11
|
+
|
|
12
|
+
workflow = Pathname('.github/workflows/ruby.yml').read.gsub!(/rails: (\d(_\d)?)/, 'rails: "\1"')
|
|
13
|
+
jobs = Psych.load(workflow, symbolize_names: true)[:jobs]
|
|
14
|
+
data = {}
|
|
15
|
+
jobs.each do |name, details|
|
|
16
|
+
details[:strategy][:matrix][:versions].each do |entry|
|
|
17
|
+
db = name.to_s.gsub(/\Ajob_test_/, '').to_sym
|
|
18
|
+
ruby = entry[:ruby]
|
|
19
|
+
rails = entry[:rails]
|
|
20
|
+
arelx = entry[:arelx]
|
|
21
|
+
gemspec = :"arel_extensions-v#{arelx}"
|
|
22
|
+
gemfile = :"rails#{rails}"
|
|
23
|
+
|
|
24
|
+
data[db] ||= {}
|
|
25
|
+
data[db][gemspec] ||= {}
|
|
26
|
+
data[db][gemspec][gemfile] ||= []
|
|
27
|
+
data[db][gemspec][gemfile] << ruby
|
|
28
|
+
data[db][gemspec][gemfile].sort!
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
MATRIX = data.freeze
|
|
33
|
+
|
|
34
|
+
def sh(command, exit_on_fail: true, stealth: false)
|
|
35
|
+
cmd, args = command.split(' ', 2)
|
|
36
|
+
puts "#{'$'.green.bold} #{cmd.blue} #{args&.yellow}"
|
|
37
|
+
Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
|
|
38
|
+
stdin.close
|
|
39
|
+
out, err =
|
|
40
|
+
if stealth
|
|
41
|
+
[StringIO.new, StringIO.new]
|
|
42
|
+
else
|
|
43
|
+
[$stdout, $stderr]
|
|
44
|
+
end
|
|
45
|
+
th_out = Thread.new do
|
|
46
|
+
stdout.each_line { |line| out.puts line }
|
|
47
|
+
end
|
|
48
|
+
th_err = Thread.new do
|
|
49
|
+
stderr.each_line { |line| err.puts line }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
th_out.join
|
|
53
|
+
th_err.join
|
|
54
|
+
wait_thr.join
|
|
55
|
+
exit_status = wait_thr.value.exitstatus
|
|
56
|
+
if exit_status.nonzero?
|
|
57
|
+
warn "'#{command}' failed with exit status #{exit_status}. Aborting …".red
|
|
58
|
+
warn stderr if !stealth
|
|
59
|
+
exit exit_status if exit_on_fail
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
if stealth
|
|
63
|
+
[out.string, err.string, (exit_status if !exit_on_fail)].compact
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
module RBEnv
|
|
69
|
+
RBENV_ROOT =
|
|
70
|
+
if (root = ENV['RBENV_ROOT']) && root && !root.strip.empty?
|
|
71
|
+
Pathname(root)
|
|
72
|
+
else
|
|
73
|
+
Pathname(Dir.home).join('.rbenv')
|
|
74
|
+
end.freeze
|
|
75
|
+
RBENV_BUILD = RBENV_ROOT.join('plugins').join('ruby-build').freeze
|
|
76
|
+
SHELL = Pathname(Etc.getpwuid.shell).basename.to_s.downcase.to_sym
|
|
77
|
+
|
|
78
|
+
def self.available_versions
|
|
79
|
+
out, _ = sh "rbenv versions --bare", stealth: true
|
|
80
|
+
res = out.lines.map(&:strip)
|
|
81
|
+
warn res
|
|
82
|
+
res
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def self.ensure(ruby_version)
|
|
86
|
+
version = RBEnv.resolve_to_latest(ruby_version)
|
|
87
|
+
if self.installed?(version)
|
|
88
|
+
puts "#{version.yellow} already installed. Skipping …"
|
|
89
|
+
else
|
|
90
|
+
puts "Installing #{version.yellow}"
|
|
91
|
+
sh "rbenv install #{version}"
|
|
92
|
+
end
|
|
93
|
+
version
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def self.install
|
|
97
|
+
if RBENV_ROOT.exist?
|
|
98
|
+
puts "#{RBENV_ROOT} exists. Skipping …"
|
|
99
|
+
else
|
|
100
|
+
sh "git clone --depth 1 https://github.com/rbenv/rbenv.git #{RBENV_ROOT}"
|
|
101
|
+
puts "Setup your shell to recognize rbenv. Check github.com/rbenv/rbenv."
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
if RBENV_BUILD.exist?
|
|
105
|
+
puts "#{RBENV_BUILD} exists. Skipping …"
|
|
106
|
+
else
|
|
107
|
+
sh "git clone --depth 1 https://github.com/rbenv/ruby-build.git #{RBENV_BUILD}"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.installed?(version)
|
|
112
|
+
installed = available_versions
|
|
113
|
+
puts "installed? = #{installed}"
|
|
114
|
+
installed && !installed.empty? && installed.include?(version)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def self.resolve_to_latest(version)
|
|
118
|
+
out, _ = sh "rbenv install --list-all", stealth: true
|
|
119
|
+
out
|
|
120
|
+
.lines
|
|
121
|
+
.map(&:strip)
|
|
122
|
+
.select { |v| v.match(/^#{Regexp.escape(version)}\.\d+/) }
|
|
123
|
+
.max_by { |v| v.split('.').map(&:to_i) }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def self.set(version)
|
|
127
|
+
sh "rbenv local #{version}"
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
module CI
|
|
132
|
+
def self.help(*_args)
|
|
133
|
+
puts "Usage:"
|
|
134
|
+
puts " #{$0} [#{CI.singleton_class.instance_methods(false).sort.join(' | ')}]"
|
|
135
|
+
puts
|
|
136
|
+
puts "You can ask for many commands."
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def self.install(*_args)
|
|
140
|
+
RBEnv.install
|
|
141
|
+
MATRIX
|
|
142
|
+
.flat_map { |_, db|
|
|
143
|
+
db.flat_map { |_, arelx|
|
|
144
|
+
arelx.flat_map { |rails, rubies|
|
|
145
|
+
rails.start_with?("rails") ? rubies : []
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
.uniq
|
|
150
|
+
.sort
|
|
151
|
+
.each do |version|
|
|
152
|
+
RBEnv.ensure(version)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# @param args [Array<String>] a list of databases to test
|
|
157
|
+
def self.test(*args)
|
|
158
|
+
puts "Requested DBs: #{args.inspect}"
|
|
159
|
+
MATRIX.each do |db, arelx|
|
|
160
|
+
puts "db = #{db}; #{!args.empty? && args.include?(db)}"
|
|
161
|
+
if args.empty? || args.include?(db)
|
|
162
|
+
puts "Testing #{db}"
|
|
163
|
+
else
|
|
164
|
+
puts "Skipping #{db}"
|
|
165
|
+
next
|
|
166
|
+
end
|
|
167
|
+
arelx.each do |arelx_version, rails|
|
|
168
|
+
sh "cp ./gemspecs/#{arelx_version}.gemspec ./arel_extensions.gemspec"
|
|
169
|
+
rails.each do |rails_version, ruby|
|
|
170
|
+
sh "cp ./gemfiles/#{rails_version}.gemfile ./Gemfile"
|
|
171
|
+
ruby.each do |ruby_version|
|
|
172
|
+
full_version = RBEnv.ensure(ruby_version)
|
|
173
|
+
RBEnv.set(full_version)
|
|
174
|
+
sh "ruby --version"
|
|
175
|
+
sh "which ruby"
|
|
176
|
+
sh "rm -rf Gemfile.lock vendor"
|
|
177
|
+
sh "bundle config set --local path vendor"
|
|
178
|
+
sh "bundle install"
|
|
179
|
+
sh "bundle exec rake test:#{db}"
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# main
|
|
188
|
+
command = ARGV.size.nonzero? ? ARGV : %w[help]
|
|
189
|
+
CI.send(command[0], *command[1..])
|
data/gemfiles/rails3.gemfile
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'arel', '~> 3.0' # too old...
|
|
4
4
|
|
|
5
5
|
group :development, :test do
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
8
|
-
gem
|
|
9
|
-
gem
|
|
6
|
+
gem 'sqlite3', '<= 1.3.13', platform: %i[ruby mswin mingw]
|
|
7
|
+
gem 'mysql2', '0.4.10', platform: %i[ruby mswin mingw]
|
|
8
|
+
gem 'activerecord-mysql2-adapter', platform: %i[ruby mswin mingw]
|
|
9
|
+
gem 'pg', platform: %i[ruby mswin mingw]
|
|
10
10
|
# for JRuby
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
gem
|
|
14
|
-
gem
|
|
11
|
+
gem 'jdbc-sqlite3', platform: :jruby
|
|
12
|
+
gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
|
|
13
|
+
gem 'activerecord-jdbcmysql-adapter', platform: :jruby
|
|
14
|
+
gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby
|
|
15
15
|
gem 'activesupport', '~> 3.2'
|
|
16
16
|
gem 'activemodel', '~> 3.2'
|
|
17
17
|
gem 'activerecord', '~> 3.2'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
gemspec path:
|
|
20
|
+
gemspec path: Dir.pwd
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'arel', '~> 6.0'
|
|
4
|
+
|
|
5
|
+
group :development, :test do
|
|
6
|
+
# We need to explicitly include bigdecimal for ruby 2.7 .
|
|
7
|
+
# See https://github.com/ruby/bigdecimal for details.
|
|
8
|
+
rb_version = Gem::Version.new(RUBY_VERSION)
|
|
9
|
+
if Gem::Version.new('2.7') <= rb_version && rb_version < Gem::Version.new('2.8')
|
|
10
|
+
gem 'bigdecimal', '~> 1.3.5', platforms: %i[mri mingw x64_mingw mswin]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
gem 'activesupport', '~> 4.0'
|
|
14
|
+
gem 'activemodel', '~> 4.0'
|
|
15
|
+
gem 'activerecord', '~> 4.0'
|
|
16
|
+
|
|
17
|
+
gem 'sqlite3', '<= 1.3.13', platforms: %i[mri mswin mingw]
|
|
18
|
+
gem 'mysql2', '0.4.10', platforms: %i[mri mswin mingw]
|
|
19
|
+
gem 'pg', '< 1.0.0', platforms: %i[mri mingw]
|
|
20
|
+
|
|
21
|
+
gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
|
|
22
|
+
gem 'activerecord-sqlserver-adapter', '~> 4.2.0', platforms: %i[mri mingw x64_mingw mswin]
|
|
23
|
+
|
|
24
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
25
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0' if ENV.has_key? 'ORACLE_HOME'
|
|
26
|
+
|
|
27
|
+
# for JRuby
|
|
28
|
+
gem 'activerecord-jdbc-adapter', '~> 1.3', platforms: :jruby
|
|
29
|
+
gem 'jdbc-sqlite3', '~> 3.28', platforms: :jruby
|
|
30
|
+
gem 'jdbc-postgres', '~> 42.2', platforms: :jruby
|
|
31
|
+
gem 'jdbc-mysql', '~> 5.1', platforms: :jruby
|
|
32
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
33
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
34
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
35
|
+
gem 'activerecord-jdbcmssql-adapter', platforms: :jruby
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
gemspec path: Dir.pwd
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'arel', '~> 7.0'
|
|
4
|
+
|
|
5
|
+
group :development, :test do
|
|
6
|
+
gem 'activesupport', '~> 5.0'
|
|
7
|
+
gem 'activemodel', '~> 5.0'
|
|
8
|
+
gem 'activerecord', '5.0.6'
|
|
9
|
+
|
|
10
|
+
gem 'sqlite3', '<= 1.3.13', platforms: %i[mri mswin mingw]
|
|
11
|
+
gem 'mysql2', '0.4.10', platforms: %i[mri mswin mingw]
|
|
12
|
+
gem 'pg', '< 1.0.0', platforms: %i[mri mingw]
|
|
13
|
+
|
|
14
|
+
gem 'tiny_tds', platforms: %i[mri mingw] if RUBY_PLATFORM.match?(/windows/)
|
|
15
|
+
# gem "activerecord-sqlserver-adapter", platforms: [:mri, :mingw]
|
|
16
|
+
|
|
17
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
18
|
+
gem 'activerecord-oracle_enhanced-adapter', '~> 1.7' if ENV.has_key? 'ORACLE_HOME'
|
|
19
|
+
|
|
20
|
+
# for JRuby
|
|
21
|
+
gem 'activerecord-jdbc-adapter', github: 'jruby/activerecord-jdbc-adapter', tag: 'v50.0', platforms: :jruby
|
|
22
|
+
gem 'jdbc-sqlite3', platforms: :jruby
|
|
23
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
24
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
25
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
26
|
+
gem 'activerecord-jdbcmssql-adapter', platforms: :jruby
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
gemspec path: Dir.pwd
|
data/gemfiles/rails5_1_4.gemfile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'rails', '5.1.4'
|
|
4
4
|
gem 'arel', '~> 8'
|
|
@@ -8,23 +8,23 @@ group :development, :test do
|
|
|
8
8
|
gem 'activemodel', '5.1.4'
|
|
9
9
|
gem 'activerecord', '5.1.4'
|
|
10
10
|
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
gem
|
|
11
|
+
gem 'sqlite3', '<= 1.3.13', platforms: %i[mri mswin mingw]
|
|
12
|
+
gem 'mysql2', '0.4.10', platforms: %i[mri mswin mingw]
|
|
13
|
+
gem 'pg', '< 1.0.0', platforms: %i[mri mingw]
|
|
14
14
|
|
|
15
|
-
gem
|
|
16
|
-
# gem "activerecord-sqlserver-adapter", :
|
|
15
|
+
gem 'tiny_tds', platforms: %i[mri mingw] if RUBY_PLATFORM.match?(/windows/)
|
|
16
|
+
# gem "activerecord-sqlserver-adapter", platforms: [:mri, :mingw]
|
|
17
17
|
|
|
18
|
-
gem 'ruby-oci8', platforms: [
|
|
18
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
19
19
|
gem 'activerecord-oracle_enhanced-adapter', '~> 1.8' 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
|
|
23
|
-
gem
|
|
24
|
-
gem
|
|
25
|
-
gem
|
|
26
|
-
gem
|
|
27
|
-
gem
|
|
23
|
+
gem 'jdbc-sqlite3', platforms: :jruby
|
|
24
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
25
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
26
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
27
|
+
gem 'activerecord-jdbcmssql-adapter', platforms: :jruby
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
gemspec path:
|
|
30
|
+
gemspec path: Dir.pwd
|
data/gemfiles/rails5_2.gemfile
CHANGED
|
@@ -1,30 +1,32 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'rails', '~> 5.2.0'
|
|
4
4
|
gem 'arel', '~> 9'
|
|
5
5
|
|
|
6
6
|
group :development, :test do
|
|
7
|
+
gem 'bigdecimal', '1.3.5', platforms: %i[mri mingw x64_mingw mswin]
|
|
7
8
|
gem 'activesupport', '~> 5.2.0'
|
|
8
9
|
gem 'activemodel', '~> 5.2.0'
|
|
9
10
|
gem 'activerecord', '~> 5.2.0'
|
|
10
11
|
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
gem
|
|
12
|
+
gem 'sqlite3', '<= 1.3.13', platforms: [:mri]
|
|
13
|
+
gem 'mysql2', '0.4.10', platforms: [:mri]
|
|
14
|
+
gem 'pg', '< 1.0.0', platforms: [:mri]
|
|
14
15
|
|
|
15
|
-
gem
|
|
16
|
-
|
|
16
|
+
gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
|
|
17
|
+
gem 'activerecord-sqlserver-adapter', '~> 5.2', platforms: %i[mri mingw x64_mingw mswin]
|
|
18
|
+
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
|
|
17
19
|
|
|
18
|
-
gem 'ruby-oci8', platforms: [
|
|
20
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
19
21
|
gem 'activerecord-oracle_enhanced-adapter', '~> 5.2.0' if ENV.has_key? 'ORACLE_HOME'
|
|
20
22
|
|
|
21
23
|
# for JRuby
|
|
22
|
-
gem 'activerecord-jdbc-adapter', github: 'jruby/activerecord-jdbc-adapter', tag: 'v52.
|
|
23
|
-
gem
|
|
24
|
-
gem
|
|
25
|
-
gem
|
|
26
|
-
gem
|
|
27
|
-
gem
|
|
24
|
+
gem 'activerecord-jdbc-adapter', github: 'jruby/activerecord-jdbc-adapter', tag: 'v52.7', platforms: :jruby
|
|
25
|
+
gem 'jdbc-sqlite3', platforms: :jruby
|
|
26
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
27
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
28
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
29
|
+
gem 'activerecord-jdbcsqlserver-adapter', '~> 52.0', platforms: :jruby
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
gemspec path:
|
|
32
|
+
gemspec path: Dir.pwd
|
data/gemfiles/rails6.gemfile
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'rails', '~> 6.0.0'
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
group :development, :test do
|
|
6
|
+
gem 'ruby-lsp', platforms: %i[mri]
|
|
7
|
+
gem 'debug', platforms: %i[mri]
|
|
8
|
+
|
|
7
9
|
gem 'activesupport', '~> 6.0.0'
|
|
8
10
|
gem 'activemodel', '~> 6.0.0'
|
|
9
11
|
gem 'activerecord', '~> 6.0.0'
|
|
10
12
|
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
gem
|
|
13
|
+
gem 'sqlite3', '~> 1.4', platforms: [:mri]
|
|
14
|
+
gem 'mysql2', '0.5.2', platforms: [:mri]
|
|
15
|
+
gem 'pg', '< 1.0.0', platforms: [:mri]
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
|
|
18
|
+
gem 'activerecord-sqlserver-adapter', '~> 6.0', platforms: %i[mri mingw x64_mingw mswin]
|
|
19
|
+
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
|
|
17
20
|
|
|
18
|
-
gem 'ruby-oci8', platforms: [
|
|
21
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
19
22
|
gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.has_key? 'ORACLE_HOME'
|
|
20
23
|
|
|
21
24
|
# for JRuby
|
|
22
|
-
gem 'activerecord-jdbc-adapter',
|
|
23
|
-
gem
|
|
24
|
-
gem
|
|
25
|
-
gem
|
|
26
|
-
gem
|
|
27
|
-
gem
|
|
25
|
+
gem 'activerecord-jdbc-alt-adapter', '~> 60.0', platform: :jruby, require: true
|
|
26
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
27
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
28
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
29
|
+
gem 'jdbc-mssql', platforms: :jruby, require: true
|
|
30
|
+
gem 'jdbc-sqlite3', platforms: :jruby
|
|
28
31
|
end
|
|
29
32
|
|
|
30
|
-
gemspec path:
|
|
33
|
+
gemspec path: Dir.pwd
|
data/gemfiles/rails6_1.gemfile
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gem 'rails', '~> 6.1.0'
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
group :development, :test do
|
|
6
|
+
gem 'ruby-lsp', platforms: %i[mri]
|
|
7
|
+
gem 'debug', platforms: %i[mri]
|
|
8
|
+
|
|
7
9
|
gem 'activesupport', '~> 6.1.0'
|
|
8
10
|
gem 'activemodel', '~> 6.1.0'
|
|
9
11
|
gem 'activerecord', '~> 6.1.0'
|
|
10
12
|
|
|
11
|
-
gem
|
|
12
|
-
gem
|
|
13
|
-
gem
|
|
13
|
+
gem 'sqlite3', '~> 1.4', platforms: [:mri]
|
|
14
|
+
gem 'mysql2', '~>0.5', platforms: [:mri]
|
|
15
|
+
gem 'pg', '~> 1.1', platforms: [:mri]
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
gem 'tiny_tds', platforms: %i[mri mingw x64_mingw mswin]
|
|
18
|
+
gem 'activerecord-sqlserver-adapter', '~> 6.1.0', platforms: %i[mri mingw x64_mingw mswin]
|
|
19
|
+
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
|
|
17
20
|
|
|
18
|
-
gem 'ruby-oci8', platforms: [
|
|
21
|
+
gem 'ruby-oci8', platforms: %i[mri mswin mingw] if ENV.has_key? 'ORACLE_HOME'
|
|
19
22
|
gem 'activerecord-oracle_enhanced-adapter', '~> 6.0.0' if ENV.has_key? 'ORACLE_HOME'
|
|
20
23
|
|
|
21
24
|
# for JRuby
|
|
22
|
-
gem 'activerecord-jdbc-adapter',
|
|
23
|
-
gem
|
|
24
|
-
gem
|
|
25
|
-
gem
|
|
26
|
-
gem
|
|
27
|
-
gem
|
|
25
|
+
gem 'activerecord-jdbc-alt-adapter', '~> 61.0', platform: :jruby, require: true
|
|
26
|
+
gem 'activerecord-jdbcmysql-adapter', platforms: :jruby
|
|
27
|
+
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
|
|
28
|
+
gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
|
|
29
|
+
gem 'jdbc-mssql', platforms: :jruby, require: true
|
|
30
|
+
gem 'jdbc-sqlite3', platforms: :jruby
|
|
28
31
|
end
|
|
29
32
|
|
|
30
|
-
gemspec path:
|
|
33
|
+
gemspec path: Dir.pwd
|