activerecord-cockroachdb-adapter 7.1.1 → 7.2.0
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/.github/workflows/ci.yml +3 -3
- data/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/CONTRIBUTING.md +35 -90
- data/Gemfile +4 -4
- data/LICENSE +1 -2
- data/README.md +7 -5
- data/activerecord-cockroachdb-adapter.gemspec +2 -2
- data/bin/console +1 -1
- data/lib/active_record/connection_adapters/cockroachdb/arel_tosql.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/attribute_methods.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/column.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/column_methods.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/database_statements.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/database_tasks.rb +18 -2
- data/lib/active_record/connection_adapters/cockroachdb/oid/date_time.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/oid/interval.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/oid/spatial.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/quoting.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/schema_creation.rb +14 -1
- data/lib/active_record/connection_adapters/cockroachdb/schema_dumper.rb +14 -1
- data/lib/active_record/connection_adapters/cockroachdb/schema_statements.rb +94 -0
- data/lib/active_record/connection_adapters/cockroachdb/setup.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/spatial_column_info.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb/table_definition.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb/type.rb +16 -0
- data/lib/active_record/connection_adapters/cockroachdb_adapter.rb +56 -55
- data/lib/active_record/migration/cockroachdb/compatibility.rb +16 -0
- data/lib/active_record/relation/query_methods_ext.rb +14 -0
- data/lib/activerecord-cockroachdb-adapter.rb +21 -0
- data/lib/arel/nodes/join_source_ext.rb +16 -0
- data/lib/version.rb +15 -1
- metadata +10 -11
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 496e736f6d7baf4f0acb18461a70d7686765262e3fd09f4a65ac49534582d871
|
4
|
+
data.tar.gz: 9bd072d1ac20b7f1099076fb5019c9cfbee305da4463de7f91ec493c8f6eebe3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '044899369534c133039634cc835ce3efd71500a527d9249b10ca34fb8cb343f4754e0c72c8bc0f560267348881fe5d8e7701921b270431dfde1a810f1c48efad'
|
7
|
+
data.tar.gz: 5c67f56709062e0982998ff59f49f9caa1b14bb630e81339d6183821add59bfaf731f2af5e416b724fc00d3f57e17d63138eabec63166288185d69284bd53891
|
data/.github/workflows/ci.yml
CHANGED
@@ -40,8 +40,8 @@ jobs:
|
|
40
40
|
fail-fast: false
|
41
41
|
matrix:
|
42
42
|
# https://www.cockroachlabs.com/docs/releases/release-support-policy
|
43
|
-
crdb: [
|
44
|
-
ruby: [
|
43
|
+
crdb: [v23.2, v24.1, v24.2]
|
44
|
+
ruby: ["3.3"]
|
45
45
|
name: Test (crdb=${{ matrix.crdb }} ruby=${{ matrix.ruby }})
|
46
46
|
steps:
|
47
47
|
- name: Set Up Actions
|
@@ -88,4 +88,4 @@ jobs:
|
|
88
88
|
done
|
89
89
|
cat ${{ github.workspace }}/setup.sql | cockroach sql --insecure
|
90
90
|
- name: Test
|
91
|
-
run: bundle exec rake test TESTOPTS='--profile=
|
91
|
+
run: bundle exec rake test TESTOPTS='--profile=5'
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## Ongoing
|
4
4
|
|
5
|
+
## 7.2.0 - 2024-09-24
|
6
|
+
|
7
|
+
- Add support for Rails 7.2 ([#337](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/337))
|
8
|
+
|
5
9
|
## 7.1.1 - 2024-05-01
|
6
10
|
|
7
11
|
- Enable precision support ([#318](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/318))
|
data/CONTRIBUTING.md
CHANGED
@@ -1,18 +1,5 @@
|
|
1
1
|
# Getting started
|
2
2
|
|
3
|
-
|
4
|
-
## ActiveRecord adapters and you
|
5
|
-
|
6
|
-
There are two repositories for the ActiveRecord adapter. The one you're in
|
7
|
-
currently, [activerecord-cockroachdb-adapter], is the CockroachDB specific
|
8
|
-
ActiveRecord code. Users install this alongside ActiveRecord then use
|
9
|
-
CockroachDBAdapter to initialize ActiveRecord for their projects.
|
10
|
-
|
11
|
-
This adapter extends the PostgreSQL ActiveRecord adapter in order to
|
12
|
-
override and monkey-patch functionality.
|
13
|
-
|
14
|
-
[activerecord-cockroachdb-adapter]: https://github.com/cockroachdb/activerecord-cockroachdb-adapter/
|
15
|
-
|
16
3
|
## Setup and running tests
|
17
4
|
|
18
5
|
### CockroachDB
|
@@ -23,6 +10,7 @@ create two databases to be used by the ActiveRecord test suite:
|
|
23
10
|
activerecord_unittest and activerecord_unittest2.
|
24
11
|
|
25
12
|
```sql
|
13
|
+
-- See /setup.sql file for the whole setup.
|
26
14
|
CREATE DATABASE activerecord_unittest;
|
27
15
|
CREATE DATABASE activerecord_unittest2;
|
28
16
|
```
|
@@ -36,30 +24,6 @@ Ruby version.
|
|
36
24
|
tests similarly to TeamCity. The database is destroyed between each
|
37
25
|
test file.)
|
38
26
|
|
39
|
-
Install rbenv with ruby-build on MacOS:
|
40
|
-
|
41
|
-
```bash
|
42
|
-
brew install rbenv ruby-build
|
43
|
-
echo 'eval "$(rbenv init - zsh)"' >> ~/.profile
|
44
|
-
```
|
45
|
-
|
46
|
-
Install rbenv with ruby-build on Ubuntu:
|
47
|
-
|
48
|
-
```bash
|
49
|
-
sudo apt-get install rbenv
|
50
|
-
echo 'eval "$(rbenv init - zsh)"' >> ~/.profile
|
51
|
-
|
52
|
-
git clone https://github.com/sstephenson/ruby-build.git ~/ruby-build
|
53
|
-
sh ~/ruby-build/install.sh
|
54
|
-
```
|
55
|
-
|
56
|
-
Use rbenv to install version of Ruby specified by `.ruby-version`.
|
57
|
-
|
58
|
-
```bash
|
59
|
-
rbenv install
|
60
|
-
rbenv rehash
|
61
|
-
```
|
62
|
-
|
63
27
|
Using [bundler](http://bundler.io/), install the dependencies of Rails.
|
64
28
|
|
65
29
|
```bash
|
@@ -87,9 +51,12 @@ TEST_FILES="test/cases/adapter_test.rb,test/cases/associations/left_outer_join_a
|
|
87
51
|
To run a specific test case, use minitest's `-n` option to run tests that match a given pattern. All minitest options are set via the `TESTOPTS` environemnt variable. For example, to run `test_indexes` from CockroachDB's `test/cases/adapter_test.rb` file
|
88
52
|
|
89
53
|
```bash
|
90
|
-
TEST_FILES="test/cases/adapter_test.rb" TESTOPTS
|
54
|
+
TEST_FILES="test/cases/adapter_test.rb" TESTOPTS=`--name=/test_indexes/` bundle exec rake test
|
91
55
|
```
|
92
56
|
|
57
|
+
You can also use the constant `COCKROACH_SKIP_LOAD_SCHEMA` to avoid reloading the schema every time (faster).
|
58
|
+
Only do it if you know the schema was left in a correct state.
|
59
|
+
|
93
60
|
`test/config.yml` assumes CockroachDB will be running at localhost:26257 with a root user. Make changes to `test/config.yml` as needed.
|
94
61
|
|
95
62
|
### Run Tests from a Backup
|
@@ -121,7 +88,6 @@ master branch, with an alpha build of CockroachDB. it would be even
|
|
121
88
|
better to be able to test multiple versions of the adapter, and do so
|
122
89
|
against different versions of CockroachDB.
|
123
90
|
|
124
|
-
|
125
91
|
## Adding feature support
|
126
92
|
|
127
93
|
As CockroachDB improves, so do the features that can be supported in
|
@@ -131,15 +97,36 @@ gates should be toggled. Something that would help this process would be
|
|
131
97
|
linking those issues back to this adapter so that part of the feature
|
132
98
|
completing includes updating the adapter.
|
133
99
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
100
|
+
## Upgrading Rails
|
101
|
+
|
102
|
+
Whenever you upgrade rails version, loads of things will change.
|
103
|
+
This section intent to help you with a checklist.
|
104
|
+
|
105
|
+
- Check for TODO or NOTE tags that are referencing the old or new version of
|
106
|
+
rails.
|
107
|
+
```bash
|
108
|
+
rg 'TODO|NOTE' --after-context=2
|
109
|
+
```
|
110
|
+
- Check postgresql_specific_schema.rb changelog in rails, and apply the changes
|
111
|
+
you want. Ex:
|
112
|
+
```bash
|
113
|
+
git diff v7.1.4..v7.2.1 -- $(fd postgresql_specific_schema)
|
114
|
+
```
|
115
|
+
- Verify the written text at the beginning of the test suite, there are likely
|
116
|
+
some changes in excluded tests.
|
117
|
+
- Check for some important methods, some will change for sure:
|
118
|
+
- [x] `def new_column_from_field(`
|
119
|
+
- [x] `def column_definitions(`
|
120
|
+
- [x] `def pk_and_sequence_for(`
|
121
|
+
- [ ] ...
|
122
|
+
- Check for setups containing `drop_table` in the test suite.
|
123
|
+
Especially if you have tons of failure, this is likely the cause.
|
124
|
+
- In the same way, run `test/cases/fixtures_test.rb` first, and check
|
125
|
+
if this corrupted the test database for other tests.
|
126
|
+
- For both of the above, the diff of `schema.rb` can be useful:
|
127
|
+
```bash
|
128
|
+
git diff v7.1.2..v7.2.1 -- activerecord/test/schema/schema.rb
|
129
|
+
```
|
143
130
|
|
144
131
|
## Publishing to Rubygems
|
145
132
|
|
@@ -151,7 +138,6 @@ gem build ...
|
|
151
138
|
gem publish <output file>
|
152
139
|
```
|
153
140
|
|
154
|
-
|
155
141
|
# Notes
|
156
142
|
|
157
143
|
When executing the test suite, each test file will reload fixtures. This
|
@@ -182,49 +168,8 @@ cleaned up, or skipped until passing.
|
|
182
168
|
The purpose of these was to make the tests grep-able while going through
|
183
169
|
all the failures.
|
184
170
|
|
185
|
-
|
186
171
|
[cockroachdb/cockroach#20753]: https://github.com/cockroachdb/cockroach/issues/20753#issuecomment-352810425
|
187
172
|
|
188
|
-
|
189
|
-
## Tracked test failures
|
190
|
-
|
191
|
-
Some of the skipped failures are:
|
192
|
-
|
193
|
-
- `default:` key is not working for columns in table schema
|
194
|
-
definitions. This causes tests to fail due to unexpected data.
|
195
|
-
|
196
|
-
- `array:` key is not working for columns in table schema definitions.
|
197
|
-
|
198
|
-
- `"Salary is not appearing in list"` is being raised in a number of
|
199
|
-
places. Likely during fixture setup.
|
200
|
-
|
201
|
-
- `sum` function seems to result in a different type in ActiveRecord.
|
202
|
-
Instead of returning a Ruby `int`, it returns a Ruby `string`. It
|
203
|
-
appears that MySQL2 also does this. A suspected cause might be how
|
204
|
-
`Decimal` is handled if `sum` consumes integers and return a
|
205
|
-
decimal.
|
206
|
-
|
207
|
-
- Potentially fork the PostgreSQL::SchemaDumper to handle anything
|
208
|
-
specific to CockroachDB, like primary keys or bigints.
|
209
|
-
|
210
|
-
- You can call `@connection.create_table(..., id: :bigint)`, but this
|
211
|
-
will not changes things for CockroachDB (I think...), so it would be
|
212
|
-
not allowed. Even better, our adapter could interpret this and
|
213
|
-
generate the appropriate explicit pkey column. Not sure what string
|
214
|
-
pkeys look like...
|
215
|
-
|
216
|
-
- `string` types are introspected to `text` types.
|
217
|
-
|
218
|
-
- A user can do an update, delete, and insert on views.
|
219
|
-
|
220
|
-
- Postgres specific bit strings are not properly supported.
|
221
|
-
|
222
|
-
Grepping for `FIXME(joey)`, `TODO(joey)`, and `NOTE(joey)` will yeild
|
223
|
-
most of the touchpoints including test failures and temporary monkey
|
224
|
-
patches. Some monkey patches were made directly to Rails, which will
|
225
|
-
need to be cleaned up.
|
226
|
-
|
227
|
-
|
228
173
|
# Notes for the non-Rubyer
|
229
174
|
|
230
175
|
rbenv is an environment manager that lets you manage and swap between
|
data/Gemfile
CHANGED
@@ -50,6 +50,7 @@ group :development, :test do
|
|
50
50
|
|
51
51
|
# Needed for the test suite
|
52
52
|
gem "msgpack", ">= 1.7.0"
|
53
|
+
gem "mutex_m", "~> 0.2.0"
|
53
54
|
|
54
55
|
gem "rake"
|
55
56
|
gem "debug"
|
@@ -61,9 +62,8 @@ group :development, :test do
|
|
61
62
|
gem "parser"
|
62
63
|
|
63
64
|
# Gems used by the ActiveRecord test suite
|
64
|
-
gem "bcrypt", "~> 3.1
|
65
|
-
gem "
|
66
|
-
gem "sqlite3", "~> 1.4.4"
|
65
|
+
gem "bcrypt", "~> 3.1"
|
66
|
+
gem "sqlite3", "~> 1.4"
|
67
67
|
|
68
|
-
gem "minitest", "~> 5.15
|
68
|
+
gem "minitest", "~> 5.15"
|
69
69
|
end
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Apache License
|
1
|
+
Apache License
|
2
2
|
Version 2.0, January 2004
|
3
3
|
http://www.apache.org/licenses/
|
4
4
|
|
@@ -199,4 +199,3 @@ Apache License
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200
200
|
See the License for the specific language governing permissions and
|
201
201
|
limitations under the License.
|
202
|
-
|
data/README.md
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
# ActiveRecord CockroachDB Adapter
|
2
2
|
|
3
|
-
CockroachDB adapter for ActiveRecord
|
3
|
+
CockroachDB adapter for ActiveRecord. This is a lightweight extension
|
4
|
+
of the PostgreSQL adapter that establishes compatibility with [CockroachDB](https://github.com/cockroachdb/cockroach).
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
7
8
|
Add this line to your project's Gemfile:
|
8
9
|
|
9
10
|
```ruby
|
10
|
-
gem 'activerecord-cockroachdb-adapter', '~> 7.
|
11
|
+
gem 'activerecord-cockroachdb-adapter', '~> 7.2.0'
|
11
12
|
```
|
12
13
|
|
13
|
-
If you're using Rails
|
14
|
+
If you're using Rails 7.0, use the `7.0.x` versions of this gem.
|
14
15
|
|
15
|
-
If you're using Rails
|
16
|
+
If you're using Rails 7.1, use the `7.1.x` versions of this gem.
|
16
17
|
|
17
|
-
If you're using Rails 7.
|
18
|
+
If you're using Rails 7.2, use the `7.2.x` versions of this gem.
|
19
|
+
The minimal CockroachDB version required is 23.1.12 for this version.
|
18
20
|
|
19
21
|
In `database.yml`, use the following adapter setting:
|
20
22
|
|
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = "Allows the use of CockroachDB as a backend for ActiveRecord and Rails apps."
|
15
15
|
spec.homepage = "https://github.com/cockroachdb/activerecord-cockroachdb-adapter"
|
16
16
|
|
17
|
-
spec.add_dependency "activerecord", "~> 7.
|
18
|
-
spec.add_dependency "pg", "~> 1.
|
17
|
+
spec.add_dependency "activerecord", "~> 7.2.0"
|
18
|
+
spec.add_dependency "pg", "~> 1.5"
|
19
19
|
spec.add_dependency "rgeo-activerecord", "~> 7.0.0"
|
20
20
|
|
21
21
|
spec.add_development_dependency "benchmark-ips", "~> 2.9.1"
|
data/bin/console
CHANGED
@@ -5,7 +5,7 @@ $:.unshift(File.expand_path("../lib", __dir__))
|
|
5
5
|
# require "bundler/setup"
|
6
6
|
# Bundler.require :development
|
7
7
|
|
8
|
-
require "
|
8
|
+
require "activerecord-cockroachdb-adapter"
|
9
9
|
# This allows playing with the rake task as well. Ex:
|
10
10
|
#
|
11
11
|
# ActiveRecord::Tasks::DatabaseTasks.
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module RGeo
|
4
18
|
module ActiveRecord
|
5
19
|
##
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module CockroachDB
|
3
19
|
module AttributeMethodsMonkeyPatch
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module ConnectionAdapters
|
3
19
|
module CockroachDB
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module ConnectionAdapters
|
3
19
|
module CockroachDB
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
require "active_record/base"
|
2
18
|
|
3
19
|
module ActiveRecord
|
@@ -21,14 +37,14 @@ module ActiveRecord
|
|
21
37
|
ActiveRecord.dump_schemas
|
22
38
|
end
|
23
39
|
|
24
|
-
conn = ActiveRecord::Base.
|
40
|
+
conn = ActiveRecord::Base.lease_connection
|
25
41
|
begin
|
26
42
|
old_search_path = conn.schema_search_path
|
27
43
|
conn.schema_search_path = search_path
|
28
44
|
File.open(filename, "w") do |file|
|
29
45
|
# NOTE: There is no issue with the crdb_internal schema, it is ignored by SHOW CREATE.
|
30
46
|
%w(SCHEMAS TYPES).each do |object_kind|
|
31
|
-
|
47
|
+
conn.execute("SHOW CREATE ALL #{object_kind}").each_row { file.puts _1 }
|
32
48
|
end
|
33
49
|
|
34
50
|
ignore_tables = ActiveRecord::SchemaDumper.ignore_tables.to_set
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
# frozen-string-literal: true
|
2
18
|
|
3
19
|
require "active_support/duration"
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module ConnectionAdapters
|
3
19
|
module CockroachDB
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
# The PostgresSQL Adapter's ReferentialIntegrity module can disable and
|
4
18
|
# re-enable foreign key constraints by disabling all table triggers. Since
|
5
19
|
# triggers are not available in CockroachDB, we have to remove foreign keys and
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -15,4 +29,3 @@ module ActiveRecord
|
|
15
29
|
end
|
16
30
|
end
|
17
31
|
end
|
18
|
-
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -16,4 +30,3 @@ module ActiveRecord
|
|
16
30
|
end
|
17
31
|
end
|
18
32
|
end
|
19
|
-
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module ConnectionAdapters
|
3
19
|
module CockroachDB
|
@@ -39,6 +55,84 @@ module ActiveRecord
|
|
39
55
|
end
|
40
56
|
end
|
41
57
|
|
58
|
+
# OVERRIDE: CockroachDB does not support deferrable constraints.
|
59
|
+
# See: https://go.crdb.dev/issue-v/31632/v23.1
|
60
|
+
def foreign_key_options(from_table, to_table, options)
|
61
|
+
options = super
|
62
|
+
options.delete(:deferrable) unless supports_deferrable_constraints?
|
63
|
+
options
|
64
|
+
end
|
65
|
+
|
66
|
+
# OVERRIDE: Added `unique_rowid` to the last line of the second query.
|
67
|
+
# This is a CockroachDB-specific function used for primary keys.
|
68
|
+
# Also make sure we don't consider `NOT VISIBLE` columns.
|
69
|
+
#
|
70
|
+
# Returns a table's primary key and belonging sequence.
|
71
|
+
def pk_and_sequence_for(table) # :nodoc:
|
72
|
+
# First try looking for a sequence with a dependency on the
|
73
|
+
# given table's primary key.
|
74
|
+
result = query(<<~SQL, "SCHEMA")[0]
|
75
|
+
SELECT attr.attname, nsp.nspname, seq.relname
|
76
|
+
FROM pg_class seq,
|
77
|
+
pg_attribute attr,
|
78
|
+
pg_depend dep,
|
79
|
+
pg_constraint cons,
|
80
|
+
pg_namespace nsp,
|
81
|
+
-- TODO: use the pg_catalog.pg_attribute(attishidden) column when
|
82
|
+
-- it is added instead of joining on crdb_internal.
|
83
|
+
-- See https://github.com/cockroachdb/cockroach/pull/126397
|
84
|
+
crdb_internal.table_columns tc
|
85
|
+
WHERE seq.oid = dep.objid
|
86
|
+
AND seq.relkind = 'S'
|
87
|
+
AND attr.attrelid = dep.refobjid
|
88
|
+
AND attr.attnum = dep.refobjsubid
|
89
|
+
AND attr.attrelid = cons.conrelid
|
90
|
+
AND attr.attnum = cons.conkey[1]
|
91
|
+
AND seq.relnamespace = nsp.oid
|
92
|
+
AND attr.attrelid = tc.descriptor_id
|
93
|
+
AND attr.attname = tc.column_name
|
94
|
+
AND tc.hidden = false
|
95
|
+
AND cons.contype = 'p'
|
96
|
+
AND dep.classid = 'pg_class'::regclass
|
97
|
+
AND dep.refobjid = #{quote(quote_table_name(table))}::regclass
|
98
|
+
SQL
|
99
|
+
|
100
|
+
if result.nil? || result.empty?
|
101
|
+
result = query(<<~SQL, "SCHEMA")[0]
|
102
|
+
SELECT attr.attname, nsp.nspname,
|
103
|
+
CASE
|
104
|
+
WHEN pg_get_expr(def.adbin, def.adrelid) !~* 'nextval' THEN NULL
|
105
|
+
WHEN split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2) ~ '.' THEN
|
106
|
+
substr(split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2),
|
107
|
+
strpos(split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2), '.')+1)
|
108
|
+
ELSE split_part(pg_get_expr(def.adbin, def.adrelid), '''', 2)
|
109
|
+
END
|
110
|
+
FROM pg_class t
|
111
|
+
JOIN pg_attribute attr ON (t.oid = attrelid)
|
112
|
+
JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
|
113
|
+
JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
|
114
|
+
JOIN pg_namespace nsp ON (t.relnamespace = nsp.oid)
|
115
|
+
-- TODO: use the pg_catalog.pg_attribute(attishidden) column when
|
116
|
+
-- it is added instead of joining on crdb_internal.
|
117
|
+
-- See https://github.com/cockroachdb/cockroach/pull/126397
|
118
|
+
JOIN crdb_internal.table_columns tc ON (attr.attrelid = tc.descriptor_id AND attr.attname = tc.column_name)
|
119
|
+
WHERE t.oid = #{quote(quote_table_name(table))}::regclass
|
120
|
+
AND tc.hidden = false
|
121
|
+
AND cons.contype = 'p'
|
122
|
+
AND pg_get_expr(def.adbin, def.adrelid) ~* 'nextval|uuid_generate|gen_random_uuid|unique_rowid'
|
123
|
+
SQL
|
124
|
+
end
|
125
|
+
|
126
|
+
pk = result.shift
|
127
|
+
if result.last
|
128
|
+
[pk, PostgreSQL::Name.new(*result)]
|
129
|
+
else
|
130
|
+
[pk, nil]
|
131
|
+
end
|
132
|
+
rescue
|
133
|
+
nil
|
134
|
+
end
|
135
|
+
|
42
136
|
# override
|
43
137
|
# Modified version of the postgresql foreign_keys method.
|
44
138
|
# Replaces t2.oid::regclass::text with t2.relname since this is
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord # :nodoc:
|
4
18
|
module ConnectionAdapters # :nodoc:
|
5
19
|
module CockroachDB # :nodoc:
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module ConnectionAdapters
|
3
19
|
module CockroachDB
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord # :nodoc:
|
4
18
|
module ConnectionAdapters # :nodoc:
|
5
19
|
module CockroachDB # :nodoc:
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
module ConnectionAdapters
|
5
19
|
module CockroachDB
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module ActiveRecord
|
2
18
|
module Type
|
3
19
|
module CRDBExt
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
require "rgeo/active_record"
|
4
18
|
|
5
19
|
require_relative "../../arel/nodes/join_source_ext"
|
@@ -31,20 +45,6 @@ require_relative "../relation/query_methods_ext"
|
|
31
45
|
# Defined in ./setup.rb
|
32
46
|
ActiveRecord::ConnectionAdapters::CockroachDB.initial_setup
|
33
47
|
|
34
|
-
module ActiveRecord
|
35
|
-
# TODO: once in rails 7.2, remove this and replace with a `#register` call.
|
36
|
-
# See: https://github.com/rails/rails/commit/22a26d7f74ea8f0d5f7c4169531ae38441cfd5e5#diff-2468c670eb10c24bd2823e42708489a336d6f21c6efc7e3c4a574166fa77bb22
|
37
|
-
module ConnectionHandling
|
38
|
-
def cockroachdb_adapter_class
|
39
|
-
ConnectionAdapters::CockroachDBAdapter
|
40
|
-
end
|
41
|
-
|
42
|
-
def cockroachdb_connection(config)
|
43
|
-
cockroachdb_adapter_class.new(config)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
48
|
module ActiveRecord
|
49
49
|
module ConnectionAdapters
|
50
50
|
module CockroachDBConnectionPool
|
@@ -137,15 +137,23 @@ module ActiveRecord
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def get_database_version
|
140
|
-
|
141
|
-
|
140
|
+
with_raw_connection do |conn|
|
141
|
+
conn.async_exec("SHOW crdb_version") do |result|
|
142
|
+
major, minor, patch = result
|
143
|
+
.getvalue(0, 0)
|
144
|
+
.match(/v(\d+).(\d+).(\d+)/)
|
145
|
+
.captures
|
146
|
+
.map(&:to_i)
|
147
|
+
major * 100 * 100 + minor * 100 + patch
|
148
|
+
end
|
149
|
+
end
|
142
150
|
end
|
143
151
|
undef :postgresql_version
|
144
152
|
alias :cockroachdb_version :database_version
|
145
153
|
|
146
154
|
def supports_datetime_with_precision?
|
147
155
|
# https://github.com/cockroachdb/cockroach/pull/111400
|
148
|
-
|
156
|
+
true
|
149
157
|
end
|
150
158
|
|
151
159
|
def supports_nulls_not_distinct?
|
@@ -162,7 +170,7 @@ module ActiveRecord
|
|
162
170
|
end
|
163
171
|
|
164
172
|
def supports_materialized_views?
|
165
|
-
|
173
|
+
true
|
166
174
|
end
|
167
175
|
|
168
176
|
def supports_index_include?
|
@@ -201,50 +209,44 @@ module ActiveRecord
|
|
201
209
|
end
|
202
210
|
|
203
211
|
def supports_deferrable_constraints?
|
212
|
+
# https://go.crdb.dev/issue-v/31632/v23.1
|
204
213
|
false
|
205
214
|
end
|
206
215
|
|
207
|
-
#
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
# super(connection, logger, conn_params, config)
|
213
|
-
|
214
|
-
# # crdb_version is the version of the binary running on the node. We
|
215
|
-
# # really want to use `SHOW CLUSTER SETTING version` to get the cluster
|
216
|
-
# # version, but that is only available to admins. Instead, we can use
|
217
|
-
# # crdb_internal.is_at_least_version, but that's only available in 22.1.
|
218
|
-
# crdb_version_string = query_value("SHOW crdb_version")
|
219
|
-
# if crdb_version_string.include? "v22.1"
|
220
|
-
# version_num = query_value(<<~SQL, "VERSION")
|
221
|
-
# SELECT
|
222
|
-
# CASE
|
223
|
-
# WHEN crdb_internal.is_at_least_version('22.2') THEN 2220
|
224
|
-
# WHEN crdb_internal.is_at_least_version('22.1') THEN 2210
|
225
|
-
# ELSE 2120
|
226
|
-
# END;
|
227
|
-
# SQL
|
228
|
-
# end
|
229
|
-
# @crdb_version = version_num.to_i
|
230
|
-
# end
|
231
|
-
|
232
|
-
def self.database_exists?(config)
|
233
|
-
!!ActiveRecord::Base.cockroachdb_connection(config)
|
234
|
-
rescue ActiveRecord::NoDatabaseError
|
235
|
-
false
|
216
|
+
def check_version # :nodoc:
|
217
|
+
# https://www.cockroachlabs.com/docs/releases/release-support-policy
|
218
|
+
if database_version < 23_01_12 # < 23.1.12
|
219
|
+
raise "Your version of CockroachDB (#{database_version}) is too old. Active Record supports CockroachDB >= 23.1.12."
|
220
|
+
end
|
236
221
|
end
|
237
222
|
|
238
|
-
def
|
223
|
+
def configure_connection(...)
|
239
224
|
super
|
240
225
|
|
241
226
|
# This rescue flow appears in new_client, but it is needed here as well
|
242
227
|
# since Cockroach will sometimes not raise until a query is made.
|
228
|
+
#
|
229
|
+
# See https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/337#issuecomment-2328419453
|
230
|
+
#
|
231
|
+
# The error conditions used to differ from the ones in new_client, but
|
232
|
+
# the reasons why are no longer relevant. We keep this in sync with new_client
|
233
|
+
# even though some conditions might never be checked.
|
234
|
+
#
|
235
|
+
# See https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/229
|
236
|
+
#
|
237
|
+
# We have to rescue `ActiveRecord::StatementInvalid` instead of `::PG::Error`
|
238
|
+
# here as the error has already been casted (in `#with_raw_connection` as
|
239
|
+
# of Rails 7.2.1).
|
243
240
|
rescue ActiveRecord::StatementInvalid => error
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
241
|
+
conn_params = @connection_parameters
|
242
|
+
if conn_params && conn_params[:dbname] == "postgres"
|
243
|
+
raise ActiveRecord::ConnectionNotEstablished, error.message
|
244
|
+
elsif conn_params && conn_params[:dbname] && error.cause.message.include?(conn_params[:dbname])
|
245
|
+
raise ActiveRecord::NoDatabaseError.db_error(conn_params[:dbname])
|
246
|
+
elsif conn_params && conn_params[:user] && error.cause.message.include?(conn_params[:user])
|
247
|
+
raise ActiveRecord::DatabaseConnectionError.username_error(conn_params[:user])
|
248
|
+
elsif conn_params && conn_params[:host] && error.cause.message.include?(conn_params[:host])
|
249
|
+
raise ActiveRecord::DatabaseConnectionError.hostname_error(conn_params[:host])
|
248
250
|
else
|
249
251
|
raise ActiveRecord::ConnectionNotEstablished, error.message
|
250
252
|
end
|
@@ -292,7 +294,6 @@ module ActiveRecord
|
|
292
294
|
precision = extract_precision(sql_type)
|
293
295
|
scale = extract_scale(sql_type)
|
294
296
|
|
295
|
-
|
296
297
|
# The type for the numeric depends on the width of the field,
|
297
298
|
# so we'll do something special here.
|
298
299
|
#
|
@@ -511,7 +512,7 @@ module ActiveRecord
|
|
511
512
|
# so this modified query uses AS OF SYSTEM TIME '-10s' to read historical data.
|
512
513
|
def add_pg_decoders
|
513
514
|
if @config[:use_follower_reads_for_type_introspection]
|
514
|
-
@
|
515
|
+
@mapped_default_timezone = nil
|
515
516
|
@timestamp_decoder = nil
|
516
517
|
|
517
518
|
coders_by_name = {
|
@@ -526,6 +527,7 @@ module ActiveRecord
|
|
526
527
|
"timestamp" => PG::TextDecoder::TimestampUtc,
|
527
528
|
"timestamptz" => PG::TextDecoder::TimestampWithTimeZone,
|
528
529
|
}
|
530
|
+
coders_by_name["date"] = PG::TextDecoder::Date if decode_dates
|
529
531
|
|
530
532
|
known_coder_types = coders_by_name.keys.map { |n| quote(n) }
|
531
533
|
query = <<~SQL % known_coder_types.join(", ")
|
@@ -533,7 +535,6 @@ module ActiveRecord
|
|
533
535
|
FROM pg_type as t AS OF SYSTEM TIME '-10s'
|
534
536
|
WHERE t.typname IN (%s)
|
535
537
|
SQL
|
536
|
-
|
537
538
|
coders = execute_and_clear(query, "SCHEMA", [], allow_retry: true, materialize_transactions: false) do |result|
|
538
539
|
result.filter_map { |row| construct_coder(row, coders_by_name[row["typname"]]) }
|
539
540
|
end
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
require "active_record/migration"
|
2
18
|
require "active_record/migration/compatibility"
|
3
19
|
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
18
|
class Relation
|
5
19
|
module QueryMethodsExt
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
if defined?(Rails::Railtie)
|
2
18
|
module ActiveRecord
|
3
19
|
module ConnectionAdapters
|
@@ -9,3 +25,8 @@ if defined?(Rails::Railtie)
|
|
9
25
|
end
|
10
26
|
end
|
11
27
|
end
|
28
|
+
|
29
|
+
require "active_record"
|
30
|
+
require "active_record/connection_adapters"
|
31
|
+
|
32
|
+
ActiveRecord::ConnectionAdapters.register "cockroachdb", "ActiveRecord::ConnectionAdapters::CockroachDBAdapter", "active_record/connection_adapters/cockroachdb_adapter"
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
1
17
|
module Arel
|
2
18
|
module Nodes
|
3
19
|
module JoinSourceExt
|
data/lib/version.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Copyright 2024 The Cockroach Authors.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
3
17
|
module ActiveRecord
|
4
|
-
COCKROACH_DB_ADAPTER_VERSION = "7.
|
18
|
+
COCKROACH_DB_ADAPTER_VERSION = "7.2.0"
|
5
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-cockroachdb-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cockroach Labs
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.
|
19
|
+
version: 7.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.
|
26
|
+
version: 7.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rgeo-activerecord
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,7 +79,6 @@ files:
|
|
79
79
|
- ".github/workflows/docker.yml"
|
80
80
|
- ".gitignore"
|
81
81
|
- ".gitmodules"
|
82
|
-
- ".ruby-version"
|
83
82
|
- CHANGELOG.md
|
84
83
|
- CONTRIBUTING.md
|
85
84
|
- Gemfile
|
@@ -128,7 +127,7 @@ licenses:
|
|
128
127
|
- Apache-2.0
|
129
128
|
metadata:
|
130
129
|
allowed_push_host: https://rubygems.org
|
131
|
-
post_install_message:
|
130
|
+
post_install_message:
|
132
131
|
rdoc_options: []
|
133
132
|
require_paths:
|
134
133
|
- lib
|
@@ -143,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
142
|
- !ruby/object:Gem::Version
|
144
143
|
version: '0'
|
145
144
|
requirements: []
|
146
|
-
rubygems_version: 3.
|
147
|
-
signing_key:
|
145
|
+
rubygems_version: 3.0.3.1
|
146
|
+
signing_key:
|
148
147
|
specification_version: 4
|
149
148
|
summary: CockroachDB adapter for ActiveRecord.
|
150
149
|
test_files: []
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.2.3
|