arel_extensions 1.7.0 → 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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +2 -1
- data/.gitignore +6 -8
- data/.rubocop.yml +4 -194
- data/.travis/oracle/download.js +152 -0
- data/.travis/oracle/download.sh +30 -0
- data/.travis/oracle/download_ojdbc.js +116 -0
- data/.travis/oracle/install.sh +34 -0
- data/.travis/setup_accounts.sh +9 -0
- data/.travis/sqlite3/extension-functions.sh +6 -0
- data/.travis.yml +223 -0
- data/Gemfile +28 -2
- data/README.md +89 -265
- data/Rakefile +30 -50
- data/TODO +1 -0
- data/appveyor.yml +22 -60
- data/arel_extensions.gemspec +17 -14
- data/functions.html +3 -3
- data/gemfiles/rails3.gemfile +20 -0
- data/gemfiles/rails4.gemfile +29 -0
- data/gemfiles/rails5_0.gemfile +29 -0
- data/gemfiles/rails5_1_4.gemfile +17 -19
- data/gemfiles/rails5_2.gemfile +17 -26
- data/init/mssql.sql +4 -4
- data/init/mysql.sql +38 -38
- data/init/oracle.sql +0 -0
- data/init/postgresql.sql +25 -24
- data/init/sqlite.sql +0 -0
- data/lib/arel_extensions/attributes.rb +3 -9
- data/lib/arel_extensions/boolean_functions.rb +16 -57
- data/lib/arel_extensions/common_sql_functions.rb +20 -21
- data/lib/arel_extensions/comparators.rb +28 -31
- data/lib/arel_extensions/date_duration.rb +13 -19
- data/lib/arel_extensions/insert_manager.rb +15 -22
- data/lib/arel_extensions/math.rb +70 -68
- data/lib/arel_extensions/math_functions.rb +52 -57
- data/lib/arel_extensions/nodes/abs.rb +1 -0
- data/lib/arel_extensions/nodes/blank.rb +5 -6
- data/lib/arel_extensions/nodes/case.rb +27 -31
- data/lib/arel_extensions/nodes/cast.rb +12 -12
- data/lib/arel_extensions/nodes/ceil.rb +1 -1
- data/lib/arel_extensions/nodes/coalesce.rb +5 -4
- data/lib/arel_extensions/nodes/collate.rb +10 -9
- data/lib/arel_extensions/nodes/concat.rb +22 -13
- data/lib/arel_extensions/nodes/date_diff.rb +70 -77
- data/lib/arel_extensions/nodes/duration.rb +5 -2
- data/lib/arel_extensions/nodes/find_in_set.rb +1 -0
- data/lib/arel_extensions/nodes/floor.rb +1 -1
- data/lib/arel_extensions/nodes/format.rb +8 -35
- data/lib/arel_extensions/nodes/formatted_number.rb +23 -22
- data/lib/arel_extensions/nodes/function.rb +39 -50
- data/lib/arel_extensions/nodes/is_null.rb +0 -2
- data/lib/arel_extensions/nodes/json.rb +47 -72
- data/lib/arel_extensions/nodes/length.rb +0 -5
- data/lib/arel_extensions/nodes/levenshtein_distance.rb +2 -2
- data/lib/arel_extensions/nodes/locate.rb +3 -2
- data/lib/arel_extensions/nodes/log10.rb +2 -1
- data/lib/arel_extensions/nodes/matches.rb +8 -6
- data/lib/arel_extensions/nodes/md5.rb +1 -0
- data/lib/arel_extensions/nodes/power.rb +5 -5
- data/lib/arel_extensions/nodes/rand.rb +3 -2
- data/lib/arel_extensions/nodes/repeat.rb +6 -4
- data/lib/arel_extensions/nodes/replace.rb +8 -16
- data/lib/arel_extensions/nodes/round.rb +7 -6
- data/lib/arel_extensions/nodes/soundex.rb +15 -15
- data/lib/arel_extensions/nodes/std.rb +21 -18
- data/lib/arel_extensions/nodes/substring.rb +16 -58
- data/lib/arel_extensions/nodes/then.rb +2 -2
- data/lib/arel_extensions/nodes/trim.rb +7 -5
- data/lib/arel_extensions/nodes/union.rb +9 -6
- data/lib/arel_extensions/nodes/union_all.rb +8 -5
- data/lib/arel_extensions/nodes/wday.rb +6 -2
- data/lib/arel_extensions/nodes.rb +1 -1
- data/lib/arel_extensions/null_functions.rb +6 -18
- data/lib/arel_extensions/predications.rb +49 -54
- data/lib/arel_extensions/railtie.rb +5 -5
- data/lib/arel_extensions/set_functions.rb +7 -5
- data/lib/arel_extensions/string_functions.rb +55 -110
- data/lib/arel_extensions/tasks.rb +6 -6
- data/lib/arel_extensions/version.rb +1 -3
- data/lib/arel_extensions/visitors/ibm_db.rb +36 -29
- data/lib/arel_extensions/visitors/mssql.rb +248 -493
- data/lib/arel_extensions/visitors/mysql.rb +244 -420
- data/lib/arel_extensions/visitors/oracle.rb +258 -311
- data/lib/arel_extensions/visitors/oracle12.rb +34 -20
- data/lib/arel_extensions/visitors/postgresql.rb +239 -350
- data/lib/arel_extensions/visitors/sqlite.rb +169 -191
- data/lib/arel_extensions/visitors/to_sql.rb +299 -371
- data/lib/arel_extensions/visitors.rb +62 -83
- data/lib/arel_extensions.rb +32 -243
- data/test/database.yml +10 -20
- data/test/helper.rb +18 -0
- data/test/real_db_test.rb +120 -123
- data/test/support/fake_record.rb +3 -11
- data/test/test_comparators.rb +17 -14
- data/test/visitors/test_bulk_insert_oracle.rb +12 -12
- data/test/visitors/test_bulk_insert_sqlite.rb +14 -13
- data/test/visitors/test_bulk_insert_to_sql.rb +13 -11
- data/test/visitors/test_oracle.rb +55 -55
- data/test/visitors/test_to_sql.rb +226 -419
- data/test/with_ar/all_agnostic_test.rb +375 -912
- data/test/with_ar/insert_agnostic_test.rb +22 -28
- data/test/with_ar/test_bulk_sqlite.rb +17 -18
- data/test/with_ar/test_math_sqlite.rb +27 -27
- data/test/with_ar/test_string_mysql.rb +34 -32
- data/test/with_ar/test_string_sqlite.rb +35 -31
- metadata +64 -50
- data/.github/workflows/publish.yml +0 -30
- data/.github/workflows/release.yml +0 -30
- data/.github/workflows/ruby.yml +0 -452
- data/CONTRIBUTING.md +0 -102
- data/Makefile +0 -48
- data/NEWS.md +0 -131
- data/bin/build +0 -15
- data/bin/publish +0 -8
- data/dev/arelx.dockerfile +0 -41
- data/dev/compose.yaml +0 -69
- data/dev/postgres.dockerfile +0 -5
- data/dev/rbenv +0 -189
- data/gemfiles/rails5.gemfile +0 -36
- data/gemfiles/rails6.gemfile +0 -40
- data/gemfiles/rails6_1.gemfile +0 -48
- data/gemfiles/rails7.gemfile +0 -48
- data/gemfiles/rails7_1.gemfile +0 -48
- data/gemfiles/rails7_2.gemfile +0 -47
- data/gemfiles/rails8.gemfile +0 -40
- data/gemfiles/rails8_1.gemfile +0 -41
- data/gemspecs/arel_extensions-v1.gemspec +0 -25
- data/gemspecs/arel_extensions-v2.gemspec +0 -25
- data/generate_gems.sh +0 -15
- data/lib/arel_extensions/aliases.rb +0 -14
- data/lib/arel_extensions/constants.rb +0 -13
- data/lib/arel_extensions/helpers.rb +0 -61
- data/lib/arel_extensions/nodes/aggregate_function.rb +0 -13
- data/lib/arel_extensions/nodes/byte_size.rb +0 -11
- data/lib/arel_extensions/nodes/char_length.rb +0 -11
- data/lib/arel_extensions/nodes/formatted_date.rb +0 -42
- data/lib/arel_extensions/nodes/rollup.rb +0 -36
- data/lib/arel_extensions/nodes/select.rb +0 -10
- data/lib/arel_extensions/nodes/sum.rb +0 -7
- data/lib/arel_extensions/visitors/convert_format.rb +0 -37
- data/lib/arel_extensions/warning.rb +0 -42
- data/test/arelx_test_helper.rb +0 -94
- data/test/config_loader.rb +0 -9
- data/version_v1.rb +0 -5
- data/version_v2.rb +0 -5
data/.github/workflows/ruby.yml
DELETED
|
@@ -1,452 +0,0 @@
|
|
|
1
|
-
name: Build and Test
|
|
2
|
-
|
|
3
|
-
# Ruby + Rails Compatibility Matrix from here:
|
|
4
|
-
# https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
|
|
5
|
-
#
|
|
6
|
-
# Images are fixed to ubuntu 22.04 because jruby-9.2 is unavailable in
|
|
7
|
-
# ubuntu-24.04 (ubuntu-latest when I tested). Also, for rails < 6, sqlite3
|
|
8
|
-
# will not build because libsqlite3-dev is missing.
|
|
9
|
-
|
|
10
|
-
on:
|
|
11
|
-
push:
|
|
12
|
-
branches:
|
|
13
|
-
- master
|
|
14
|
-
pull_request:
|
|
15
|
-
branches:
|
|
16
|
-
- master
|
|
17
|
-
|
|
18
|
-
jobs:
|
|
19
|
-
job_test_to_sql:
|
|
20
|
-
name: test to_sql
|
|
21
|
-
runs-on: ubuntu-22.04
|
|
22
|
-
strategy:
|
|
23
|
-
fail-fast: false
|
|
24
|
-
matrix:
|
|
25
|
-
versions:
|
|
26
|
-
[
|
|
27
|
-
{ ruby: "3.4", rails: 8_1, arelx: 2 },
|
|
28
|
-
{ ruby: "3.4", rails: 8, arelx: 2 },
|
|
29
|
-
{ ruby: "3.4", rails: 7_2, arelx: 2 },
|
|
30
|
-
{ ruby: "3.4", rails: 7_1, arelx: 2 },
|
|
31
|
-
{ ruby: "3.4", rails: 7, arelx: 2 },
|
|
32
|
-
{ ruby: "3.4", rails: 6_1, arelx: 2 },
|
|
33
|
-
{ ruby: "3.3", rails: 8_1, arelx: 2 },
|
|
34
|
-
{ ruby: "3.3", rails: 8, arelx: 2 },
|
|
35
|
-
{ ruby: "3.3", rails: 7_2, arelx: 2 },
|
|
36
|
-
{ ruby: "3.3", rails: 7_1, arelx: 2 },
|
|
37
|
-
{ ruby: "3.3", rails: 7, arelx: 2 },
|
|
38
|
-
{ ruby: "3.3", rails: 6_1, arelx: 2 },
|
|
39
|
-
{ ruby: "3.2", rails: 8_1, arelx: 2 },
|
|
40
|
-
{ ruby: "3.2", rails: 8, arelx: 2 },
|
|
41
|
-
{ ruby: "3.2", rails: 7_2, arelx: 2 },
|
|
42
|
-
{ ruby: "3.2", rails: 7_1, arelx: 2 },
|
|
43
|
-
{ ruby: "3.2", rails: 7, arelx: 2 },
|
|
44
|
-
{ ruby: "3.2", rails: 6, arelx: 2 },
|
|
45
|
-
{ ruby: "3.2", rails: 6_1, arelx: 2 },
|
|
46
|
-
{ ruby: "3.1", rails: 7_2, arelx: 2 },
|
|
47
|
-
{ ruby: "3.1", rails: 7_1, arelx: 2 },
|
|
48
|
-
{ ruby: "3.1", rails: 7, arelx: 2 },
|
|
49
|
-
{ ruby: "3.1", rails: 6_1, arelx: 2 },
|
|
50
|
-
{ ruby: "3.1", rails: 6, arelx: 2 },
|
|
51
|
-
{ ruby: "3.0", rails: 7_1, arelx: 2 },
|
|
52
|
-
{ ruby: "3.0", rails: 7, arelx: 2 },
|
|
53
|
-
{ ruby: "3.0", rails: 6_1, arelx: 2 },
|
|
54
|
-
{ ruby: "2.7", rails: 7_1, arelx: 2 },
|
|
55
|
-
{ ruby: "2.7", rails: 7, arelx: 2 },
|
|
56
|
-
{ ruby: "2.7", rails: 6_1, arelx: 2 },
|
|
57
|
-
{ ruby: "2.7", rails: 6, arelx: 2 },
|
|
58
|
-
{ ruby: "2.7", rails: 5_2, arelx: 1 },
|
|
59
|
-
{ ruby: jruby-9.2, rails: 6_1, arelx: 2 },
|
|
60
|
-
{ ruby: jruby-9.2, rails: 6, arelx: 2 },
|
|
61
|
-
{ ruby: jruby-9.2, rails: 5_2, arelx: 1 },
|
|
62
|
-
{ ruby: jruby-9.3, rails: 6_1, arelx: 2 },
|
|
63
|
-
{ ruby: jruby-9.3, rails: 6, arelx: 2 },
|
|
64
|
-
{ ruby: jruby-9.3, rails: 5_2, arelx: 1 },
|
|
65
|
-
]
|
|
66
|
-
steps:
|
|
67
|
-
- uses: actions/checkout@v2
|
|
68
|
-
- name: Set up Ruby
|
|
69
|
-
uses: ruby/setup-ruby@v1
|
|
70
|
-
with:
|
|
71
|
-
ruby-version: ${{ matrix.versions.ruby }}
|
|
72
|
-
- name: Install FreeTDS
|
|
73
|
-
run: |
|
|
74
|
-
sudo apt-get update -q
|
|
75
|
-
sudo apt-get install -y freetds-dev
|
|
76
|
-
- name: Setup Gemfile
|
|
77
|
-
run: |
|
|
78
|
-
cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
|
|
79
|
-
cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
|
|
80
|
-
cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
|
|
81
|
-
- name: bundle install
|
|
82
|
-
run: |
|
|
83
|
-
bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
|
|
84
|
-
bundle install
|
|
85
|
-
- name: Run test to_sql
|
|
86
|
-
run: bundle exec rake test:to_sql
|
|
87
|
-
|
|
88
|
-
job_test_sqlite:
|
|
89
|
-
name: test sqlite
|
|
90
|
-
runs-on: ubuntu-22.04
|
|
91
|
-
strategy:
|
|
92
|
-
fail-fast: false
|
|
93
|
-
matrix:
|
|
94
|
-
versions:
|
|
95
|
-
[
|
|
96
|
-
{ ruby: "3.4", rails: 8_1, arelx: 2 },
|
|
97
|
-
{ ruby: "3.4", rails: 8, arelx: 2 },
|
|
98
|
-
{ ruby: "3.4", rails: 7_2, arelx: 2 },
|
|
99
|
-
{ ruby: "3.4", rails: 7_1, arelx: 2 },
|
|
100
|
-
{ ruby: "3.4", rails: 7, arelx: 2 },
|
|
101
|
-
{ ruby: "3.4", rails: 6_1, arelx: 2 },
|
|
102
|
-
{ ruby: "3.3", rails: 8_1, arelx: 2 },
|
|
103
|
-
{ ruby: "3.3", rails: 8, arelx: 2 },
|
|
104
|
-
{ ruby: "3.3", rails: 7_2, arelx: 2 },
|
|
105
|
-
{ ruby: "3.3", rails: 7_1, arelx: 2 },
|
|
106
|
-
{ ruby: "3.3", rails: 7, arelx: 2 },
|
|
107
|
-
{ ruby: "3.3", rails: 6_1, arelx: 2 },
|
|
108
|
-
{ ruby: "3.2", rails: 8_1, arelx: 2 },
|
|
109
|
-
{ ruby: "3.2", rails: 8, arelx: 2 },
|
|
110
|
-
{ ruby: "3.2", rails: 7_2, arelx: 2 },
|
|
111
|
-
{ ruby: "3.2", rails: 7_1, arelx: 2 },
|
|
112
|
-
{ ruby: "3.2", rails: 7, arelx: 2 },
|
|
113
|
-
{ ruby: "3.2", rails: 6_1, arelx: 2 },
|
|
114
|
-
{ ruby: "3.2", rails: 6, arelx: 2 },
|
|
115
|
-
{ ruby: "3.1", rails: 7_2, arelx: 2 },
|
|
116
|
-
{ ruby: "3.1", rails: 7_1, arelx: 2 },
|
|
117
|
-
{ ruby: "3.1", rails: 7, arelx: 2 },
|
|
118
|
-
{ ruby: "3.1", rails: 6, arelx: 2 },
|
|
119
|
-
{ ruby: "3.1", rails: 6_1, arelx: 2 },
|
|
120
|
-
{ ruby: "3.0", rails: 7_1, arelx: 2 },
|
|
121
|
-
{ ruby: "3.0", rails: 7, arelx: 2 },
|
|
122
|
-
{ ruby: "3.0", rails: 6_1, arelx: 2 },
|
|
123
|
-
{ ruby: "2.7", rails: 7_1, arelx: 2 },
|
|
124
|
-
{ ruby: "2.7", rails: 7, arelx: 2 },
|
|
125
|
-
{ ruby: "2.7", rails: 6_1, arelx: 2 },
|
|
126
|
-
{ ruby: "2.7", rails: 6, arelx: 2 },
|
|
127
|
-
{ ruby: "2.7", rails: 5_2, arelx: 1 },
|
|
128
|
-
{ ruby: jruby-9.2, rails: 6_1, arelx: 2 },
|
|
129
|
-
{ ruby: jruby-9.2, rails: 6, arelx: 2 },
|
|
130
|
-
{ ruby: jruby-9.2, rails: 5_2, arelx: 1 },
|
|
131
|
-
{ ruby: jruby-9.3, rails: 6_1, arelx: 2 },
|
|
132
|
-
{ ruby: jruby-9.3, rails: 6, arelx: 2 },
|
|
133
|
-
{ ruby: jruby-9.3, rails: 5_2, arelx: 1 },
|
|
134
|
-
]
|
|
135
|
-
steps:
|
|
136
|
-
- uses: actions/checkout@v2
|
|
137
|
-
- name: Set up Ruby
|
|
138
|
-
uses: ruby/setup-ruby@v1
|
|
139
|
-
with:
|
|
140
|
-
ruby-version: ${{ matrix.versions.ruby }}
|
|
141
|
-
- name: Install FreeTDS
|
|
142
|
-
run: |
|
|
143
|
-
sudo apt-get update -q
|
|
144
|
-
sudo apt-get install -y freetds-dev
|
|
145
|
-
- name: Setup Gemfile
|
|
146
|
-
run: |
|
|
147
|
-
cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
|
|
148
|
-
cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
|
|
149
|
-
cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
|
|
150
|
-
- name: bundle install
|
|
151
|
-
run: |
|
|
152
|
-
bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
|
|
153
|
-
bundle install
|
|
154
|
-
- name: Run test sqlite
|
|
155
|
-
run: bundle exec rake test:sqlite
|
|
156
|
-
|
|
157
|
-
job_test_postgres:
|
|
158
|
-
name: test postgres
|
|
159
|
-
runs-on: ubuntu-22.04
|
|
160
|
-
strategy:
|
|
161
|
-
fail-fast: false
|
|
162
|
-
matrix:
|
|
163
|
-
versions: [
|
|
164
|
-
{ ruby: "3.4", rails: 8_1, arelx: 2 },
|
|
165
|
-
{ ruby: "3.4", rails: 8, arelx: 2 },
|
|
166
|
-
{ ruby: "3.4", rails: 7_2, arelx: 2 },
|
|
167
|
-
{ ruby: "3.4", rails: 7_1, arelx: 2 },
|
|
168
|
-
{ ruby: "3.4", rails: 7, arelx: 2 },
|
|
169
|
-
{ ruby: "3.4", rails: 6_1, arelx: 2 },
|
|
170
|
-
{ ruby: "3.3", rails: 8_1, arelx: 2 },
|
|
171
|
-
{ ruby: "3.3", rails: 8, arelx: 2 },
|
|
172
|
-
{ ruby: "3.3", rails: 7_2, arelx: 2 },
|
|
173
|
-
{ ruby: "3.3", rails: 7_1, arelx: 2 },
|
|
174
|
-
{ ruby: "3.3", rails: 7, arelx: 2 },
|
|
175
|
-
{ ruby: "3.3", rails: 6_1, arelx: 2 },
|
|
176
|
-
{ ruby: "3.2", rails: 8_1, arelx: 2 },
|
|
177
|
-
{ ruby: "3.2", rails: 8, arelx: 2 },
|
|
178
|
-
{ ruby: "3.2", rails: 7_2, arelx: 2 },
|
|
179
|
-
{ ruby: "3.2", rails: 7_1, arelx: 2 },
|
|
180
|
-
{ ruby: "3.2", rails: 7, arelx: 2 },
|
|
181
|
-
{ ruby: "3.2", rails: 6_1, arelx: 2 },
|
|
182
|
-
# { ruby: "3.2", rails: 6, arelx: 2 }, # cannot test > undefined symbol: rb_tainted_str_new2
|
|
183
|
-
{ ruby: "3.1", rails: 7_2, arelx: 2 },
|
|
184
|
-
{ ruby: "3.1", rails: 7_1, arelx: 2 },
|
|
185
|
-
{ ruby: "3.1", rails: 7, arelx: 2 },
|
|
186
|
-
{ ruby: "3.1", rails: 6_1, arelx: 2 },
|
|
187
|
-
{ ruby: "3.1", rails: 6, arelx: 2 },
|
|
188
|
-
{ ruby: "3.0", rails: 7_1, arelx: 2 },
|
|
189
|
-
{ ruby: "3.0", rails: 7, arelx: 2 },
|
|
190
|
-
{ ruby: "3.0", rails: 6_1, arelx: 2 },
|
|
191
|
-
{ ruby: "2.7", rails: 7_1, arelx: 2 },
|
|
192
|
-
{ ruby: "2.7", rails: 7, arelx: 2 },
|
|
193
|
-
{ ruby: "2.7", rails: 6_1, arelx: 2 },
|
|
194
|
-
{ ruby: "2.7", rails: 6, arelx: 2 },
|
|
195
|
-
{ ruby: "2.7", rails: 5_2, arelx: 1 },
|
|
196
|
-
{ ruby: jruby-9.2, rails: 6_1, arelx: 2 },
|
|
197
|
-
{ ruby: jruby-9.2, rails: 6, arelx: 2 },
|
|
198
|
-
{ ruby: jruby-9.2, rails: 5_2, arelx: 1 },
|
|
199
|
-
{ ruby: jruby-9.3, rails: 6_1, arelx: 2 },
|
|
200
|
-
{ ruby: jruby-9.3, rails: 6, arelx: 2 },
|
|
201
|
-
{ ruby: jruby-9.3, rails: 5_2, arelx: 1 },
|
|
202
|
-
]
|
|
203
|
-
steps:
|
|
204
|
-
- uses: actions/checkout@v2
|
|
205
|
-
# PostgreSQL requires locales to be installed on the system to be able
|
|
206
|
-
# to do time and currency conversions at runtime.
|
|
207
|
-
#
|
|
208
|
-
# That's why we're not launching it as a service; pre-built images
|
|
209
|
-
# lack loaclization.
|
|
210
|
-
#
|
|
211
|
-
# After we install locales, we'll install PostgreSQL binaries and start
|
|
212
|
-
# the service.
|
|
213
|
-
- name: setup locale
|
|
214
|
-
run: |
|
|
215
|
-
sudo locale-gen fr_FR.utf8
|
|
216
|
-
sudo update-locale
|
|
217
|
-
- name: setup postgres 11
|
|
218
|
-
run: |
|
|
219
|
-
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
|
|
220
|
-
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
|
|
221
|
-
sudo apt update
|
|
222
|
-
sudo apt -y install postgresql-11
|
|
223
|
-
sudo systemctl enable postgresql
|
|
224
|
-
sudo systemctl start postgresql
|
|
225
|
-
sudo su -c "psql -c \"alter user postgres with password 'secret'\"" postgres
|
|
226
|
-
sudo su -c "createdb arelx_test" postgres
|
|
227
|
-
- name: Set up Ruby
|
|
228
|
-
uses: ruby/setup-ruby@v1
|
|
229
|
-
with:
|
|
230
|
-
ruby-version: ${{ matrix.versions.ruby }}
|
|
231
|
-
- name: Install FreeTDS
|
|
232
|
-
run: |
|
|
233
|
-
sudo apt-get update -q
|
|
234
|
-
sudo apt-get install -y freetds-dev
|
|
235
|
-
- name: Setup Gemfile
|
|
236
|
-
run: |
|
|
237
|
-
cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
|
|
238
|
-
cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
|
|
239
|
-
cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
|
|
240
|
-
- name: bundle install
|
|
241
|
-
run: |
|
|
242
|
-
bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
|
|
243
|
-
bundle install
|
|
244
|
-
- name: Run test Postgres
|
|
245
|
-
env:
|
|
246
|
-
PGHOST: localhost
|
|
247
|
-
PGUSER: postgres
|
|
248
|
-
run: bundle exec rake test:postgresql
|
|
249
|
-
|
|
250
|
-
job_test_mysql:
|
|
251
|
-
name: test mysql
|
|
252
|
-
runs-on: ubuntu-22.04
|
|
253
|
-
strategy:
|
|
254
|
-
fail-fast: false
|
|
255
|
-
matrix:
|
|
256
|
-
versions: [
|
|
257
|
-
{ ruby: "3.4", rails: 8_1, arelx: 2 },
|
|
258
|
-
{ ruby: "3.4", rails: 8, arelx: 2 },
|
|
259
|
-
{ ruby: "3.4", rails: 7_2, arelx: 2 },
|
|
260
|
-
{ ruby: "3.4", rails: 7_1, arelx: 2 },
|
|
261
|
-
{ ruby: "3.4", rails: 7, arelx: 2 },
|
|
262
|
-
{ ruby: "3.4", rails: 6_1, arelx: 2 },
|
|
263
|
-
{ ruby: "3.3", rails: 8_1, arelx: 2 },
|
|
264
|
-
{ ruby: "3.3", rails: 8, arelx: 2 },
|
|
265
|
-
{ ruby: "3.3", rails: 7_2, arelx: 2 },
|
|
266
|
-
{ ruby: "3.3", rails: 7_1, arelx: 2 },
|
|
267
|
-
{ ruby: "3.3", rails: 7, arelx: 2 },
|
|
268
|
-
{ ruby: "3.3", rails: 6_1, arelx: 2 },
|
|
269
|
-
{ ruby: "3.2", rails: 8_1, arelx: 2 },
|
|
270
|
-
{ ruby: "3.2", rails: 8, arelx: 2 },
|
|
271
|
-
{ ruby: "3.2", rails: 7_2, arelx: 2 },
|
|
272
|
-
{ ruby: "3.2", rails: 7_1, arelx: 2 },
|
|
273
|
-
{ ruby: "3.2", rails: 7, arelx: 2 },
|
|
274
|
-
{ ruby: "3.2", rails: 6_1, arelx: 2 },
|
|
275
|
-
# { ruby: "3.2", rails: 6, arelx: 2 }, # cannot test > undefined symbol: rb_tainted_str_new2
|
|
276
|
-
{ ruby: "3.1", rails: 7_2, arelx: 2 },
|
|
277
|
-
{ ruby: "3.1", rails: 7_1, arelx: 2 },
|
|
278
|
-
{ ruby: "3.1", rails: 7, arelx: 2 },
|
|
279
|
-
{ ruby: "3.1", rails: 6_1, arelx: 2 },
|
|
280
|
-
{ ruby: "3.1", rails: 6, arelx: 2 },
|
|
281
|
-
{ ruby: "3.0", rails: 7_1, arelx: 2 },
|
|
282
|
-
{ ruby: "3.0", rails: 7, arelx: 2 },
|
|
283
|
-
{ ruby: "3.0", rails: 6_1, arelx: 2 },
|
|
284
|
-
{ ruby: "2.7", rails: 7_1, arelx: 2 },
|
|
285
|
-
{ ruby: "2.7", rails: 7, arelx: 2 },
|
|
286
|
-
{ ruby: "2.7", rails: 6_1, arelx: 2 },
|
|
287
|
-
{ ruby: "2.7", rails: 6, arelx: 2 },
|
|
288
|
-
{ ruby: "2.7", rails: 5_2, arelx: 1 },
|
|
289
|
-
{ ruby: jruby-9.2, rails: 6_1, arelx: 2 },
|
|
290
|
-
{ ruby: jruby-9.2, rails: 6, arelx: 2 },
|
|
291
|
-
{ ruby: jruby-9.2, rails: 5_2, arelx: 1 },
|
|
292
|
-
{ ruby: jruby-9.3, rails: 6_1, arelx: 2 },
|
|
293
|
-
{ ruby: jruby-9.3, rails: 6, arelx: 2 },
|
|
294
|
-
{ ruby: jruby-9.3, rails: 5_2, arelx: 1 },
|
|
295
|
-
]
|
|
296
|
-
# TODO: restore the service. it's far simpler, but since we're testing old
|
|
297
|
-
# mysql, and we want utf-8 by default, we're currently forced to avoid the
|
|
298
|
-
# service, and do it as a step. Maybe there's a better solution, who knows?
|
|
299
|
-
#
|
|
300
|
-
# services:
|
|
301
|
-
# mysql:
|
|
302
|
-
# image: mysql:5.7
|
|
303
|
-
# env:
|
|
304
|
-
# MYSQL_ALLOW_EMPTY_PASSWORD: true
|
|
305
|
-
# MYSQL_USERNAME: root
|
|
306
|
-
# MYSQL_DATABASE: arelx_test
|
|
307
|
-
# ports:
|
|
308
|
-
# - 3306:3306
|
|
309
|
-
# options: >-
|
|
310
|
-
# --health-cmd="mysqladmin ping"
|
|
311
|
-
# --health-interval=10s
|
|
312
|
-
# --health-timeout=5s
|
|
313
|
-
# --health-retries=3
|
|
314
|
-
#
|
|
315
|
-
steps:
|
|
316
|
-
- uses: actions/checkout@v2
|
|
317
|
-
|
|
318
|
-
- name: Start MySQL with UTF-8
|
|
319
|
-
run: |
|
|
320
|
-
docker run -d \
|
|
321
|
-
--name mysql \
|
|
322
|
-
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
|
|
323
|
-
-e MYSQL_DATABASE=arelx_test \
|
|
324
|
-
-p 3306:3306 \
|
|
325
|
-
--health-cmd="mysqladmin ping" \
|
|
326
|
-
--health-interval=10s \
|
|
327
|
-
--health-timeout=5s \
|
|
328
|
-
--health-retries=3 \
|
|
329
|
-
mysql:5.7 \
|
|
330
|
-
--character-set-server=utf8mb4
|
|
331
|
-
|
|
332
|
-
- name: Wait for MySQL
|
|
333
|
-
run: |
|
|
334
|
-
until docker exec mysql mysqladmin ping --silent; do
|
|
335
|
-
echo 'Waiting for MySQL...'
|
|
336
|
-
sleep 2
|
|
337
|
-
done
|
|
338
|
-
|
|
339
|
-
- name: Set up Ruby
|
|
340
|
-
uses: ruby/setup-ruby@v1
|
|
341
|
-
with:
|
|
342
|
-
ruby-version: ${{ matrix.versions.ruby }}
|
|
343
|
-
- name: Install FreeTDS
|
|
344
|
-
run: |
|
|
345
|
-
sudo apt-get update -q
|
|
346
|
-
sudo apt-get install -y freetds-dev
|
|
347
|
-
- name: Setup Gemfile
|
|
348
|
-
run: |
|
|
349
|
-
cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
|
|
350
|
-
cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
|
|
351
|
-
cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
|
|
352
|
-
- name: bundle install
|
|
353
|
-
run: |
|
|
354
|
-
bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
|
|
355
|
-
bundle install
|
|
356
|
-
- name: Run test MySql
|
|
357
|
-
env:
|
|
358
|
-
DB_CONNECTION: mysql
|
|
359
|
-
DB_HOST: 127.0.0.1
|
|
360
|
-
DB_PORT: 3306
|
|
361
|
-
DB_DATABASE: arelx_test
|
|
362
|
-
DB_USERNAME: root
|
|
363
|
-
run: bundle exec rake test:mysql
|
|
364
|
-
|
|
365
|
-
job_test_mssql:
|
|
366
|
-
name: test mssql on linux
|
|
367
|
-
runs-on: ubuntu-22.04
|
|
368
|
-
strategy:
|
|
369
|
-
fail-fast: false
|
|
370
|
-
matrix:
|
|
371
|
-
versions: [
|
|
372
|
-
{ ruby: "3.4", rails: 8_1, arelx: 2 },
|
|
373
|
-
{ ruby: "3.4", rails: 8, arelx: 2 },
|
|
374
|
-
{ ruby: "3.4", rails: 7_2, arelx: 2 },
|
|
375
|
-
{ ruby: "3.4", rails: 7_1, arelx: 2 },
|
|
376
|
-
{ ruby: "3.4", rails: 7, arelx: 2 },
|
|
377
|
-
{ ruby: "3.4", rails: 6_1, arelx: 2 },
|
|
378
|
-
{ ruby: "3.3", rails: 8_1, arelx: 2 },
|
|
379
|
-
{ ruby: "3.3", rails: 8, arelx: 2 },
|
|
380
|
-
{ ruby: "3.3", rails: 7_2, arelx: 2 },
|
|
381
|
-
{ ruby: "3.3", rails: 7_1, arelx: 2 },
|
|
382
|
-
{ ruby: "3.3", rails: 7, arelx: 2 },
|
|
383
|
-
{ ruby: "3.3", rails: 6_1, arelx: 2 },
|
|
384
|
-
{ ruby: "3.3", rails: 6, arelx: 2 },
|
|
385
|
-
{ ruby: "3.2", rails: 8_1, arelx: 2 },
|
|
386
|
-
{ ruby: "3.2", rails: 8, arelx: 2 },
|
|
387
|
-
{ ruby: "3.2", rails: 7_1, arelx: 2 },
|
|
388
|
-
{ ruby: "3.2", rails: 7, arelx: 2 },
|
|
389
|
-
{ ruby: "3.2", rails: 6_1, arelx: 2 },
|
|
390
|
-
{ ruby: "3.2", rails: 6, arelx: 2 },
|
|
391
|
-
{ ruby: "3.1", rails: 7_1, arelx: 2 },
|
|
392
|
-
{ ruby: "3.1", rails: 7, arelx: 2 },
|
|
393
|
-
{ ruby: "3.1", rails: 6_1, arelx: 2 },
|
|
394
|
-
{ ruby: "3.1", rails: 6, arelx: 2 },
|
|
395
|
-
{ ruby: "3.0", rails: 7, arelx: 2 },
|
|
396
|
-
{ ruby: "3.0", rails: 6_1, arelx: 2 },
|
|
397
|
-
{ ruby: "3.0", rails: 6, arelx: 2 },
|
|
398
|
-
{ ruby: "2.7", rails: 6_1, arelx: 2 },
|
|
399
|
-
{ ruby: "2.7", rails: 6, arelx: 2 },
|
|
400
|
-
{ ruby: "2.7", rails: 5_2, arelx: 1 },
|
|
401
|
-
# {ruby: jruby-9.2, rails: 6_1, arelx: 2},
|
|
402
|
-
# {ruby: jruby-9.2, rails: 6, arelx: 2},
|
|
403
|
-
{ ruby: jruby-9.2, rails: 5_2, arelx: 1 },
|
|
404
|
-
# See comments on 9.4 to understand why these are disabled for now.
|
|
405
|
-
# {ruby: jruby-9.3, rails: 6_1, arelx: 2},
|
|
406
|
-
# {ruby: jruby-9.3, rails: 6, arelx: 2},
|
|
407
|
-
# {ruby: jruby-9.3, rails: 5_2, arelx: 1},
|
|
408
|
-
{ ruby: jruby-9.4.10, rails: 7_1, arelx: 2 }, # The reason we pin to the patch level is https://github.com/ruby/psych/issues/700
|
|
409
|
-
{ ruby: jruby-9.4.10, rails: 7, arelx: 2 },
|
|
410
|
-
#
|
|
411
|
-
# 6 and 6.1 don't work because of a bug in the alt adapter
|
|
412
|
-
# https://github.com/JesseChavez/activerecord-jdbc-adapter/issues/16
|
|
413
|
-
# {ruby: jruby-9.4, rails: 6_1, arelx: 2},
|
|
414
|
-
# {ruby: jruby-9.4, rails: 6, arelx: 2},
|
|
415
|
-
#
|
|
416
|
-
# < 5.2 don't work because of a deeper issue.
|
|
417
|
-
# {ruby: jruby-9.4, rails: 5_2, arelx: 1},
|
|
418
|
-
]
|
|
419
|
-
mssql: [2017, 2019]
|
|
420
|
-
steps:
|
|
421
|
-
- uses: actions/checkout@v2
|
|
422
|
-
- name: Set up Ruby
|
|
423
|
-
uses: ruby/setup-ruby@v1
|
|
424
|
-
with:
|
|
425
|
-
ruby-version: ${{ matrix.versions.ruby }}
|
|
426
|
-
- name: Install FreeTDS
|
|
427
|
-
run: |
|
|
428
|
-
sudo apt-get update -q
|
|
429
|
-
sudo apt-get install -y freetds-dev
|
|
430
|
-
- name: Install MSSQL ${{ matrix.mssql }}
|
|
431
|
-
uses: potatoqualitee/mssqlsuite@v1.5.1
|
|
432
|
-
with:
|
|
433
|
-
version: ${{ matrix.mssql }}
|
|
434
|
-
install: sqlengine, sqlclient, sqlpackage, localdb
|
|
435
|
-
sa-password: Password12!
|
|
436
|
-
- name: Setup Gemfile
|
|
437
|
-
run: |
|
|
438
|
-
cp ./gemspecs/arel_extensions-v${{ matrix.versions.arelx }}.gemspec ./arel_extensions.gemspec
|
|
439
|
-
cp ./version_v${{ matrix.versions.arelx }}.rb lib/arel_extensions/version.rb
|
|
440
|
-
cp ./gemfiles/rails${{ matrix.versions.rails }}.gemfile ./Gemfile
|
|
441
|
-
- name: bundle install
|
|
442
|
-
run: |
|
|
443
|
-
bundle config set gemfile ./gemfiles/rails${{ matrix.versions.rails }}.gemfile
|
|
444
|
-
bundle install
|
|
445
|
-
- name: Run test mssql [mri]
|
|
446
|
-
if: ${{ !contains(matrix.versions.ruby, 'jruby') }}
|
|
447
|
-
run: bundle exec rake test:mssql
|
|
448
|
-
- name: Run test mssql [jruby]
|
|
449
|
-
if: ${{ contains(matrix.versions.ruby, 'jruby') }}
|
|
450
|
-
run: |
|
|
451
|
-
curl -LO https://github.com/microsoft/mssql-jdbc/releases/download/v8.4.1/mssql-jdbc-8.4.1.jre11.jar
|
|
452
|
-
CLASSPATH=".:mssql-jdbc-8.4.1.jre11.jar" bundle exec rake test:mssql
|
data/CONTRIBUTING.md
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Contributing
|
|
2
|
-
|
|
3
|
-
Your PRs are welcome.
|
|
4
|
-
|
|
5
|
-
## Local Development
|
|
6
|
-
|
|
7
|
-
Let's say you want to develop/test for `ruby 2.7.5` and `rails 5.2`.
|
|
8
|
-
|
|
9
|
-
You will need to fix your ruby version:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
rbenv install 2.7.5
|
|
13
|
-
rbenv local 2.7.5
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Fix your gemfiles:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
bundle config set --local gemfile ./gemfiles/rails6.gemfile
|
|
20
|
-
cp gemspecs/arel_extensions-v2.gemspec arel_extensions.gemspec
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Or by copying:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
cp gemfiles/gemfiles/rails6.gemfile Gemfiles
|
|
27
|
-
cp gemspecs/arel_extensions-v2.gemspec arel_extensions.gemspec
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Install dependencies:
|
|
31
|
-
```bash
|
|
32
|
-
bundle install
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
> [!IMPORTANT]
|
|
36
|
-
> Sometimes you might need to delete `vendor` dirs.
|
|
37
|
-
> If you use `bundle config set --local gemfile`, it will be in `gemfiles/vendor`.
|
|
38
|
-
> If you just `cp gemfiles/…`, it will be in `vendor`.
|
|
39
|
-
|
|
40
|
-
Develop, then test:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
bundle exec rake test:to_sql
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Refer to the [Version Compatibility](#version-compatibility) section to correctly
|
|
47
|
-
set your gemfile.
|
|
48
|
-
|
|
49
|
-
## Testing many DBs without installing them
|
|
50
|
-
|
|
51
|
-
We provide a `docker compose` to set up some databases for testing:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
docker compose -f dev/compose.yaml up --exit-code-from arelx
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Or simply call `bin/compose`.
|
|
58
|
-
|
|
59
|
-
The databases, versions of arelx, and versions of ruby are all read from the
|
|
60
|
-
matrixes defined in `.github/workflow/ruby.yml`. To test a specific
|
|
61
|
-
configuration, all you have to do is comment the versions you're not
|
|
62
|
-
insterested in.
|
|
63
|
-
|
|
64
|
-
> [!IMPORTANT]
|
|
65
|
-
> This methods conflicts with the [Local development](#local-development) method.
|
|
66
|
-
> If you find yourself jumping between both, make sure you delete `Gemfile.lock`
|
|
67
|
-
> and `vendor/`.
|
|
68
|
-
|
|
69
|
-
### VSCode
|
|
70
|
-
|
|
71
|
-
You can use the following `launch.json` to debug:
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"version": "0.2.0",
|
|
76
|
-
"configurations": [
|
|
77
|
-
{
|
|
78
|
-
"type": "rdbg",
|
|
79
|
-
"name": "Debug DB",
|
|
80
|
-
"request": "launch",
|
|
81
|
-
"cwd": "${workspaceRoot}",
|
|
82
|
-
"script": "test/with_ar/all_agnostic_test.rb",
|
|
83
|
-
"command": "bundle exec ruby -Ilib -Itest",
|
|
84
|
-
"env": {
|
|
85
|
-
"DB": "postgresql"
|
|
86
|
-
},
|
|
87
|
-
"useBundler": false,
|
|
88
|
-
"askParameters": false
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"type": "rdbg",
|
|
92
|
-
"name": "Debug to_sql",
|
|
93
|
-
"request": "launch",
|
|
94
|
-
"cwd": "${workspaceRoot}",
|
|
95
|
-
"script": "test/visitors/test_to_sql.rb",
|
|
96
|
-
"command": "bundle exec ruby -Ilib -Itest",
|
|
97
|
-
"useBundler": false,
|
|
98
|
-
"askParameters": false
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
```
|
data/Makefile
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
COMPOSE_FILE := dev/compose.yaml
|
|
2
|
-
DC := docker compose -f $(COMPOSE_FILE)
|
|
3
|
-
|
|
4
|
-
.PHONY: all clean down install lint publish rebuild shell test up
|
|
5
|
-
|
|
6
|
-
all: clean install
|
|
7
|
-
|
|
8
|
-
clean:
|
|
9
|
-
rm -rf .bundle Gemfile.lock vendor
|
|
10
|
-
|
|
11
|
-
down:
|
|
12
|
-
$(DC) down
|
|
13
|
-
|
|
14
|
-
install:
|
|
15
|
-
bundle install
|
|
16
|
-
|
|
17
|
-
lint:
|
|
18
|
-
bundle exec rubocop --config .rubocop.yml --require rubocop-performance
|
|
19
|
-
|
|
20
|
-
lint-fix:
|
|
21
|
-
bundle exec rubocop --config .rubocop.yml -a
|
|
22
|
-
|
|
23
|
-
local-%:
|
|
24
|
-
@version="$*"; \
|
|
25
|
-
file="gemfiles/rails$${version//./_}.gemfile"; \
|
|
26
|
-
if [ ! -f "$$file" ]; then \
|
|
27
|
-
echo "No such Gemfile: $$file"; \
|
|
28
|
-
exit 1; \
|
|
29
|
-
fi; \
|
|
30
|
-
echo "Using $$file"; \
|
|
31
|
-
bundle config set --local gemfile "$$file"
|
|
32
|
-
|
|
33
|
-
publish:
|
|
34
|
-
./bin/publish
|
|
35
|
-
|
|
36
|
-
rebuild:
|
|
37
|
-
$(DC) build --no-cache
|
|
38
|
-
|
|
39
|
-
# Jump into the container
|
|
40
|
-
shell: up
|
|
41
|
-
$(DC) exec arelx bash
|
|
42
|
-
|
|
43
|
-
test:
|
|
44
|
-
bundle exec rake test
|
|
45
|
-
|
|
46
|
-
# Boot everything and keep it running (daemon mode)
|
|
47
|
-
up:
|
|
48
|
-
$(DC) up -d
|