activerecord-cockroachdb-adapter 7.1.0 → 7.1.1
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 +20 -27
- data/.ruby-version +1 -1
- data/CHANGELOG.md +7 -2
- data/Gemfile +4 -0
- data/bin/console +1 -1
- data/bin/start-cockroachdb +5 -20
- data/lib/active_record/connection_adapters/cockroachdb/database_tasks.rb +2 -1
- data/lib/active_record/connection_adapters/cockroachdb/schema_statements.rb +8 -1
- data/lib/active_record/connection_adapters/cockroachdb_adapter.rb +36 -91
- data/lib/active_record/relation/query_methods_ext.rb +2 -3
- data/lib/version.rb +1 -1
- data/setup.sql +18 -0
- metadata +4 -4
- data/lib/active_record/connection_adapters/cockroachdb/oid/type_map_initializer.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 672289521537934d4b9ed2d707c3faf55b4761c8d2b4e9e12cd8622166963ae7
|
4
|
+
data.tar.gz: 345a84d7c5bca0d574aa65eb0fb0e30986a23fcc2830f422e5b1d80ffa971076
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ce6d2119bfc27192630c32ec488b3e7f533cc64963fc04035609122e5bdbc33e75b83766ca68e3eb73e2592b2fe0a1bae53a74389527762f790b16bda687da9
|
7
|
+
data.tar.gz: 42e10ab1106e4ffc4df89bbbf98f8ddbd05b6bccf97b062a9445ebf874a8bfef9e628dce8b39c3287424a7094f70790457293a2766a849bd39ac0e20c7a684fe
|
data/.github/workflows/ci.yml
CHANGED
@@ -37,15 +37,17 @@ jobs:
|
|
37
37
|
test:
|
38
38
|
runs-on: ubuntu-latest
|
39
39
|
strategy:
|
40
|
+
fail-fast: false
|
40
41
|
matrix:
|
41
|
-
|
42
|
+
# https://www.cockroachlabs.com/docs/releases/release-support-policy
|
43
|
+
crdb: [v22.2, v23.1, v23.2]
|
42
44
|
ruby: [head]
|
43
45
|
name: Test (crdb=${{ matrix.crdb }} ruby=${{ matrix.ruby }})
|
44
46
|
steps:
|
45
47
|
- name: Set Up Actions
|
46
48
|
uses: actions/checkout@v4
|
47
49
|
- name: Install GEOS
|
48
|
-
run: sudo apt-get install libgeos-dev
|
50
|
+
run: sudo apt-get install -yqq libgeos-dev
|
49
51
|
- name: Set Up Ruby
|
50
52
|
uses: ruby/setup-ruby@v1
|
51
53
|
with:
|
@@ -54,16 +56,28 @@ jobs:
|
|
54
56
|
- name: Install and Start Cockroachdb
|
55
57
|
run: |
|
56
58
|
# Download CockroachDB
|
57
|
-
|
59
|
+
readonly full_version=$(ruby -rnet/http -ruri -ryaml -e '
|
60
|
+
link = "https://raw.githubusercontent.com/cockroachdb/docs/main/src/current/_data/releases.yml"
|
61
|
+
puts YAML.safe_load(Net::HTTP.get(URI(link))).reverse.find {
|
62
|
+
_1["major_version"] == "${{ matrix.crdb }}" &&
|
63
|
+
_1["release_type"] == "Production" &&
|
64
|
+
!_1["cloud_only"] &&
|
65
|
+
!_1["withdrawn"] &&
|
66
|
+
!_1["release_name"].include?("-") # Pre-release
|
67
|
+
}["release_name"]
|
68
|
+
')
|
58
69
|
|
59
|
-
|
70
|
+
echo "Downloading $full_version..."
|
71
|
+
wget -qO- "https://binaries.cockroachdb.com/cockroach-$full_version.linux-amd64.tgz" | tar xvz
|
72
|
+
|
73
|
+
export PATH=./cockroach-$full_version.linux-amd64/:$PATH
|
60
74
|
readonly urlfile=cockroach-url
|
61
75
|
|
62
76
|
# Start a CockroachDB server and wait for it to become ready.
|
63
77
|
rm -f "$urlfile"
|
64
78
|
rm -rf cockroach-data
|
65
79
|
# Start CockroachDB.
|
66
|
-
cockroach start-single-node --max-sql-memory=25% --cache=25% --insecure --host=localhost --spatial-libs=./cockroach-$
|
80
|
+
cockroach start-single-node --max-sql-memory=25% --cache=25% --insecure --host=localhost --spatial-libs=./cockroach-$full_version.linux-amd64/lib --listening-url-file="$urlfile" >/dev/null 2>&1 &
|
67
81
|
# Ensure CockroachDB is stopped on script exit.
|
68
82
|
# Wait until CockroachDB has started.
|
69
83
|
for i in {0..3}; do
|
@@ -72,27 +86,6 @@ jobs:
|
|
72
86
|
echo "server not yet available; sleeping for $backoff seconds"
|
73
87
|
sleep $backoff
|
74
88
|
done
|
75
|
-
cockroach sql --insecure
|
76
|
-
CREATE DATABASE activerecord_unittest;
|
77
|
-
CREATE DATABASE activerecord_unittest2;
|
78
|
-
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
|
79
|
-
SET CLUSTER SETTING sql.stats.histogram_collection.enabled = false;
|
80
|
-
SET CLUSTER SETTING jobs.retention_time = '180s';
|
81
|
-
SET CLUSTER SETTING sql.defaults.experimental_alter_column_type.enabled = 'true';
|
82
|
-
|
83
|
-
ALTER RANGE default CONFIGURE ZONE USING num_replicas = 1, gc.ttlseconds = 30;
|
84
|
-
ALTER TABLE system.public.jobs CONFIGURE ZONE USING num_replicas = 1, gc.ttlseconds = 30;
|
85
|
-
ALTER RANGE meta CONFIGURE ZONE USING num_replicas = 1, gc.ttlseconds = 30;
|
86
|
-
ALTER RANGE system CONFIGURE ZONE USING num_replicas = 1, gc.ttlseconds = 30;
|
87
|
-
ALTER RANGE liveness CONFIGURE ZONE USING num_replicas = 1, gc.ttlseconds = 30;
|
88
|
-
|
89
|
-
SET CLUSTER SETTING kv.range_merge.queue_interval = '50ms';
|
90
|
-
SET CLUSTER SETTING kv.raft_log.disable_synchronization_unsafe = 'true';
|
91
|
-
SET CLUSTER SETTING jobs.registry.interval.cancel = '180s';
|
92
|
-
SET CLUSTER SETTING jobs.registry.interval.gc = '30s';
|
93
|
-
SET CLUSTER SETTING kv.range_split.by_load_merge_delay = '5s';
|
94
|
-
|
95
|
-
SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';
|
96
|
-
"
|
89
|
+
cat ${{ github.workspace }}/setup.sql | cockroach sql --insecure
|
97
90
|
- name: Test
|
98
91
|
run: bundle exec rake test TESTOPTS='--profile=3'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.3
|
data/CHANGELOG.md
CHANGED
@@ -2,12 +2,17 @@
|
|
2
2
|
|
3
3
|
## Ongoing
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
## 7.1.1 - 2024-05-01
|
6
|
+
|
7
|
+
- Enable precision support ([#318](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/318))
|
8
|
+
- Support arbitrary max identifier length ([#317](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/317)).
|
9
|
+
- Fix `#schema_names` not to return `crdb_internal` ([#316](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/316))
|
7
10
|
|
8
11
|
## 7.1.0 - 2024-01-30
|
9
12
|
|
10
13
|
- Add support for Rails 7.1 ([#300](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/300)).
|
14
|
+
- Add support for [AOST](cockroachlabs.com/docs/stable/as-of-system-time) queries ([#284](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/284))
|
15
|
+
- Dump schema name in foreign keys ([#289](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/289))
|
11
16
|
|
12
17
|
## 7.0.3 - 2023-08-23
|
13
18
|
|
data/Gemfile
CHANGED
@@ -55,6 +55,10 @@ group :development, :test do
|
|
55
55
|
gem "debug"
|
56
56
|
gem "minitest-excludes", "~> 2.0.1"
|
57
57
|
gem "minitest-github_action_reporter", github: "BuonOmo/minitest-github_action_reporter", require: "minitest/github_action_reporter_plugin"
|
58
|
+
gem "ostruct", "~> 0.6"
|
59
|
+
|
60
|
+
# Gems used for tests meta-programming.
|
61
|
+
gem "parser"
|
58
62
|
|
59
63
|
# Gems used by the ActiveRecord test suite
|
60
64
|
gem "bcrypt", "~> 3.1.18"
|
data/bin/console
CHANGED
@@ -12,7 +12,7 @@ require "active_record"
|
|
12
12
|
# structure_load(Post.connection_db_config, "awesome-file.sql")
|
13
13
|
require "active_record/connection_adapters/cockroachdb/database_tasks"
|
14
14
|
|
15
|
-
schema_kind = ENV.fetch("SCHEMA_KIND", "default")
|
15
|
+
schema_kind = ENV.fetch("SCHEMA_KIND", ENV.fetch("SCHEMA", "default"))
|
16
16
|
|
17
17
|
system("cockroach sql --insecure --host=localhost:26257 --execute='drop database if exists ar_crdb_console'",
|
18
18
|
exception: true)
|
data/bin/start-cockroachdb
CHANGED
@@ -9,7 +9,7 @@ pid_file="$root_dir/tmp/cockroach.pid"
|
|
9
9
|
log_file="$root_dir/tmp/cockroachdb.log"
|
10
10
|
|
11
11
|
mkdir -p "$root_dir/tmp"
|
12
|
-
[[ -f "$pid_file" ]] && kill -9 $(cat "$pid_file")
|
12
|
+
[[ -f "$pid_file" ]] && kill -9 $(cat "$pid_file") || true
|
13
13
|
rm -f "$pid_file"
|
14
14
|
|
15
15
|
if ! (( ${+commands[cockroach]} )); then
|
@@ -18,7 +18,9 @@ See https://www.cockroachlabs.com/docs/stable/install-cockroachdb.html'
|
|
18
18
|
fi
|
19
19
|
|
20
20
|
cockroach start-single-node \
|
21
|
-
--insecure --store=type=mem,size=0.25 --advertise-addr=localhost
|
21
|
+
--insecure --store=type=mem,size=0.25 --advertise-addr=localhost \
|
22
|
+
--spatial-libs="$(geos-config --includes)" \
|
23
|
+
--pid-file "$pid_file" \
|
22
24
|
&> "$log_file" &
|
23
25
|
|
24
26
|
until [[ -f "$pid_file" ]]; do
|
@@ -26,23 +28,6 @@ until [[ -f "$pid_file" ]]; do
|
|
26
28
|
done
|
27
29
|
|
28
30
|
|
29
|
-
cat
|
30
|
-
-- https://www.cockroachlabs.com/docs/stable/local-testing.html
|
31
|
-
SET CLUSTER SETTING kv.raft_log.disable_synchronization_unsafe = true;
|
32
|
-
SET CLUSTER SETTING kv.range_merge.queue_interval = '50ms';
|
33
|
-
SET CLUSTER SETTING jobs.registry.interval.gc = '30s';
|
34
|
-
SET CLUSTER SETTING jobs.registry.interval.cancel = '180s';
|
35
|
-
SET CLUSTER SETTING jobs.retention_time = '15s';
|
36
|
-
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
|
37
|
-
SET CLUSTER SETTING kv.range_split.by_load_merge_delay = '5s';
|
38
|
-
ALTER RANGE default CONFIGURE ZONE USING "gc.ttlseconds" = 600;
|
39
|
-
ALTER DATABASE system CONFIGURE ZONE USING "gc.ttlseconds" = 600;
|
40
|
-
|
41
|
-
CREATE DATABASE activerecord_unittest;
|
42
|
-
CREATE DATABASE activerecord_unittest2;
|
43
|
-
|
44
|
-
SET CLUSTER SETTING sql.defaults.experimental_alter_column_type.enabled = 'true';
|
45
|
-
SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';
|
46
|
-
SQL
|
31
|
+
cat "$root_dir/setup.sql" | cockroach sql --insecure --host=localhost:26257 > /dev/null
|
47
32
|
|
48
33
|
echo "CockroachDB started. PID: $(cat "$pid_file"). log: $log_file"
|
@@ -26,6 +26,7 @@ module ActiveRecord
|
|
26
26
|
old_search_path = conn.schema_search_path
|
27
27
|
conn.schema_search_path = search_path
|
28
28
|
File.open(filename, "w") do |file|
|
29
|
+
# NOTE: There is no issue with the crdb_internal schema, it is ignored by SHOW CREATE.
|
29
30
|
%w(SCHEMAS TYPES).each do |object_kind|
|
30
31
|
ActiveRecord::Base.connection.execute("SHOW CREATE ALL #{object_kind}").each_row { file.puts _1 }
|
31
32
|
end
|
@@ -44,7 +45,7 @@ module ActiveRecord
|
|
44
45
|
|
45
46
|
file.puts sql
|
46
47
|
end
|
47
|
-
file.puts "SET
|
48
|
+
file.puts "SET search_path TO #{conn.schema_search_path};\n\n"
|
48
49
|
end
|
49
50
|
ensure
|
50
51
|
conn.schema_search_path = old_search_path
|
@@ -4,6 +4,13 @@ module ActiveRecord
|
|
4
4
|
module SchemaStatements
|
5
5
|
include ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements
|
6
6
|
|
7
|
+
# OVERRIDE: We do not want to see the crdb_internal schema in the names.
|
8
|
+
#
|
9
|
+
# Returns an array of schema names.
|
10
|
+
def schema_names
|
11
|
+
super - ["crdb_internal"]
|
12
|
+
end
|
13
|
+
|
7
14
|
def add_index(table_name, column_name, **options)
|
8
15
|
super
|
9
16
|
rescue ActiveRecord::StatementInvalid => error
|
@@ -40,7 +47,7 @@ module ActiveRecord
|
|
40
47
|
# so we append it manually.
|
41
48
|
def foreign_keys(table_name)
|
42
49
|
scope = quoted_scope(table_name)
|
43
|
-
fk_info =
|
50
|
+
fk_info = internal_exec_query(<<~SQL, "SCHEMA")
|
44
51
|
SELECT CASE
|
45
52
|
WHEN n2.nspname = current_schema()
|
46
53
|
THEN ''
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "rgeo/active_record"
|
2
4
|
|
3
5
|
require_relative "../../arel/nodes/join_source_ext"
|
@@ -16,7 +18,6 @@ require "active_record/connection_adapters/cockroachdb/type"
|
|
16
18
|
require "active_record/connection_adapters/cockroachdb/column"
|
17
19
|
require "active_record/connection_adapters/cockroachdb/spatial_column_info"
|
18
20
|
require "active_record/connection_adapters/cockroachdb/setup"
|
19
|
-
require "active_record/connection_adapters/cockroachdb/oid/type_map_initializer"
|
20
21
|
require "active_record/connection_adapters/cockroachdb/oid/spatial"
|
21
22
|
require "active_record/connection_adapters/cockroachdb/oid/interval"
|
22
23
|
require "active_record/connection_adapters/cockroachdb/oid/date_time"
|
@@ -31,35 +32,15 @@ require_relative "../relation/query_methods_ext"
|
|
31
32
|
ActiveRecord::ConnectionAdapters::CockroachDB.initial_setup
|
32
33
|
|
33
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
|
34
37
|
module ConnectionHandling
|
38
|
+
def cockroachdb_adapter_class
|
39
|
+
ConnectionAdapters::CockroachDBAdapter
|
40
|
+
end
|
41
|
+
|
35
42
|
def cockroachdb_connection(config)
|
36
|
-
|
37
|
-
conn_params = config.symbolize_keys.compact
|
38
|
-
|
39
|
-
# Map ActiveRecords param names to PGs.
|
40
|
-
conn_params[:user] = conn_params.delete(:username) if conn_params[:username]
|
41
|
-
conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database]
|
42
|
-
|
43
|
-
# Forward only valid config params to PG::Connection.connect.
|
44
|
-
valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + [:requiressl]
|
45
|
-
conn_params.slice!(*valid_conn_param_keys)
|
46
|
-
|
47
|
-
ConnectionAdapters::CockroachDBAdapter.new(
|
48
|
-
ConnectionAdapters::CockroachDBAdapter.new_client(conn_params),
|
49
|
-
logger,
|
50
|
-
conn_params,
|
51
|
-
config
|
52
|
-
)
|
53
|
-
# This rescue flow appears in new_client, but it is needed here as well
|
54
|
-
# since Cockroach will sometimes not raise until a query is made.
|
55
|
-
rescue ActiveRecord::StatementInvalid => error
|
56
|
-
no_db_err_check1 = conn_params && conn_params[:dbname] && error.cause.message.include?(conn_params[:dbname])
|
57
|
-
no_db_err_check2 = conn_params && conn_params[:dbname] && error.cause.message.include?("pg_type")
|
58
|
-
if no_db_err_check1 || no_db_err_check2
|
59
|
-
raise ActiveRecord::NoDatabaseError
|
60
|
-
else
|
61
|
-
raise ActiveRecord::ConnectionNotEstablished, error.message
|
62
|
-
end
|
43
|
+
cockroachdb_adapter_class.new(config)
|
63
44
|
end
|
64
45
|
end
|
65
46
|
end
|
@@ -101,7 +82,7 @@ module ActiveRecord
|
|
101
82
|
ConnectionPool.prepend(CockroachDBConnectionPool)
|
102
83
|
|
103
84
|
class CockroachDBAdapter < PostgreSQLAdapter
|
104
|
-
ADAPTER_NAME = "CockroachDB"
|
85
|
+
ADAPTER_NAME = "CockroachDB"
|
105
86
|
DEFAULT_PRIMARY_KEY = "rowid"
|
106
87
|
|
107
88
|
SPATIAL_COLUMN_OPTIONS =
|
@@ -155,18 +136,21 @@ module ActiveRecord
|
|
155
136
|
@max_transaction_retries ||= @config.fetch(:max_transaction_retries, 3)
|
156
137
|
end
|
157
138
|
|
158
|
-
|
159
|
-
|
160
|
-
|
139
|
+
def get_database_version
|
140
|
+
major, minor, patch = query_value("SHOW crdb_version").match(/v(\d+).(\d+).(\d+)/)[1..].map(&:to_i)
|
141
|
+
major * 100 * 100 + minor * 100 + patch
|
161
142
|
end
|
143
|
+
undef :postgresql_version
|
144
|
+
alias :cockroachdb_version :database_version
|
162
145
|
|
163
|
-
def
|
164
|
-
|
146
|
+
def supports_datetime_with_precision?
|
147
|
+
# https://github.com/cockroachdb/cockroach/pull/111400
|
148
|
+
database_version >= 23_01_13
|
165
149
|
end
|
166
150
|
|
167
|
-
def
|
168
|
-
#
|
169
|
-
|
151
|
+
def supports_nulls_not_distinct?
|
152
|
+
# https://github.com/cockroachdb/cockroach/issues/115836
|
153
|
+
false
|
170
154
|
end
|
171
155
|
|
172
156
|
def supports_ddl_transactions?
|
@@ -181,10 +165,6 @@ module ActiveRecord
|
|
181
165
|
false
|
182
166
|
end
|
183
167
|
|
184
|
-
def supports_partial_index?
|
185
|
-
true
|
186
|
-
end
|
187
|
-
|
188
168
|
def supports_index_include?
|
189
169
|
false
|
190
170
|
end
|
@@ -200,14 +180,6 @@ module ActiveRecord
|
|
200
180
|
false
|
201
181
|
end
|
202
182
|
|
203
|
-
def supports_datetime_with_precision?
|
204
|
-
false
|
205
|
-
end
|
206
|
-
|
207
|
-
def supports_comments?
|
208
|
-
true
|
209
|
-
end
|
210
|
-
|
211
183
|
def supports_comments_in_create?
|
212
184
|
false
|
213
185
|
end
|
@@ -232,21 +204,6 @@ module ActiveRecord
|
|
232
204
|
false
|
233
205
|
end
|
234
206
|
|
235
|
-
# This is hardcoded to 63 (as previously was in ActiveRecord 5.0) to aid in
|
236
|
-
# migration from PostgreSQL to CockroachDB. In practice, this limitation
|
237
|
-
# is arbitrary since CockroachDB supports index name lengths and table alias
|
238
|
-
# lengths far greater than this value. For the time being though, we match
|
239
|
-
# the original behavior for PostgreSQL to simplify migrations.
|
240
|
-
#
|
241
|
-
# Note that in the migration to ActiveRecord 5.1, this was changed in
|
242
|
-
# PostgreSQLAdapter to use `SHOW max_identifier_length` (which does not
|
243
|
-
# exist in CockroachDB). Therefore, we have to redefine this here.
|
244
|
-
def max_identifier_length
|
245
|
-
63
|
246
|
-
end
|
247
|
-
alias index_name_length max_identifier_length
|
248
|
-
alias table_alias_length max_identifier_length
|
249
|
-
|
250
207
|
# NOTE: This commented bit of code allows to have access to crdb version,
|
251
208
|
# which can be useful for feature detection. However, we currently don't
|
252
209
|
# need, hence we avoid the extra queries.
|
@@ -278,6 +235,21 @@ module ActiveRecord
|
|
278
235
|
false
|
279
236
|
end
|
280
237
|
|
238
|
+
def initialize(...)
|
239
|
+
super
|
240
|
+
|
241
|
+
# This rescue flow appears in new_client, but it is needed here as well
|
242
|
+
# since Cockroach will sometimes not raise until a query is made.
|
243
|
+
rescue ActiveRecord::StatementInvalid => error
|
244
|
+
no_db_err_check1 = @connection_parameters && @connection_parameters[:dbname] && error.cause.message.include?(@connection_parameters[:dbname])
|
245
|
+
no_db_err_check2 = @connection_parameters && @connection_parameters[:dbname] && error.cause.message.include?("pg_type")
|
246
|
+
if no_db_err_check1 || no_db_err_check2
|
247
|
+
raise ActiveRecord::NoDatabaseError
|
248
|
+
else
|
249
|
+
raise ActiveRecord::ConnectionNotEstablished, error.message
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
281
253
|
# override
|
282
254
|
# The PostgreSQLAdapter uses syntax for an anonymous function
|
283
255
|
# (DO $$) that CockroachDB does not support.
|
@@ -351,7 +323,6 @@ module ActiveRecord
|
|
351
323
|
def extract_value_from_default(default)
|
352
324
|
super ||
|
353
325
|
extract_escaped_string_from_default(default) ||
|
354
|
-
extract_time_from_default(default) ||
|
355
326
|
extract_empty_array_from_default(default) ||
|
356
327
|
extract_decimal_from_default(default)
|
357
328
|
end
|
@@ -369,32 +340,6 @@ module ActiveRecord
|
|
369
340
|
"\"#{$1}\"".undump.gsub("\\'".freeze, "'".freeze)
|
370
341
|
end
|
371
342
|
|
372
|
-
# This method exists to extract the correct time and date defaults for a
|
373
|
-
# couple of reasons.
|
374
|
-
# 1) There's a bug in CockroachDB where the date type is missing from
|
375
|
-
# the column info query.
|
376
|
-
# https://github.com/cockroachdb/cockroach/issues/47285
|
377
|
-
# 2) PostgreSQL's timestamp without time zone type maps to CockroachDB's
|
378
|
-
# TIMESTAMP type. TIMESTAMP includes a UTC time zone while timestamp
|
379
|
-
# without time zone doesn't.
|
380
|
-
# https://www.cockroachlabs.com/docs/v19.2/timestamp.html#variants
|
381
|
-
def extract_time_from_default(default)
|
382
|
-
return unless default =~ /\A'(.*)'\z/
|
383
|
-
|
384
|
-
# If default has a UTC time zone, we'll drop the time zone information
|
385
|
-
# so it acts like PostgreSQL's timestamp without time zone. Then, try
|
386
|
-
# to parse the resulting string to verify if it's a time.
|
387
|
-
time = if default =~ /\A'(.*)(\+00:00)'\z/
|
388
|
-
$1
|
389
|
-
else
|
390
|
-
default
|
391
|
-
end
|
392
|
-
|
393
|
-
Time.parse(time).to_s
|
394
|
-
rescue
|
395
|
-
nil
|
396
|
-
end
|
397
|
-
|
398
343
|
# CockroachDB stores default values for arrays in the `ARRAY[...]` format.
|
399
344
|
# In general, it is hard to parse that, but it is easy to handle the common
|
400
345
|
# case of an empty array.
|
@@ -76,10 +76,9 @@ module ActiveRecord
|
|
76
76
|
self
|
77
77
|
end
|
78
78
|
|
79
|
-
# TODO: reset or no reset?
|
80
|
-
|
81
79
|
def show_create
|
82
|
-
|
80
|
+
quoted_table = connection.quote_table_name self.table_name
|
81
|
+
connection.select_one("show create table #{quoted_table}")["create_statement"]
|
83
82
|
end
|
84
83
|
|
85
84
|
private
|
data/lib/version.rb
CHANGED
data/setup.sql
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
-- https://www.cockroachlabs.com/docs/stable/local-testing.html
|
2
|
+
SET CLUSTER SETTING kv.range_merge.queue_interval = '50ms';
|
3
|
+
SET CLUSTER SETTING jobs.registry.interval.gc = '30s';
|
4
|
+
SET CLUSTER SETTING jobs.registry.interval.cancel = '180s';
|
5
|
+
SET CLUSTER SETTING jobs.retention_time = '15s';
|
6
|
+
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
|
7
|
+
SET CLUSTER SETTING kv.range_split.by_load_merge_delay = '5s';
|
8
|
+
ALTER RANGE default CONFIGURE ZONE USING "gc.ttlseconds" = 600;
|
9
|
+
ALTER DATABASE system CONFIGURE ZONE USING "gc.ttlseconds" = 600;
|
10
|
+
|
11
|
+
CREATE DATABASE activerecord_unittest;
|
12
|
+
CREATE DATABASE activerecord_unittest2;
|
13
|
+
|
14
|
+
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
|
15
|
+
SET CLUSTER SETTING sql.stats.histogram_collection.enabled = false;
|
16
|
+
|
17
|
+
SET CLUSTER SETTING sql.defaults.experimental_alter_column_type.enabled = 'true';
|
18
|
+
SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';
|
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.1.
|
4
|
+
version: 7.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cockroach Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -106,7 +106,6 @@ files:
|
|
106
106
|
- lib/active_record/connection_adapters/cockroachdb/oid/date_time.rb
|
107
107
|
- lib/active_record/connection_adapters/cockroachdb/oid/interval.rb
|
108
108
|
- lib/active_record/connection_adapters/cockroachdb/oid/spatial.rb
|
109
|
-
- lib/active_record/connection_adapters/cockroachdb/oid/type_map_initializer.rb
|
110
109
|
- lib/active_record/connection_adapters/cockroachdb/quoting.rb
|
111
110
|
- lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb
|
112
111
|
- lib/active_record/connection_adapters/cockroachdb/schema_creation.rb
|
@@ -123,6 +122,7 @@ files:
|
|
123
122
|
- lib/activerecord-cockroachdb-adapter.rb
|
124
123
|
- lib/arel/nodes/join_source_ext.rb
|
125
124
|
- lib/version.rb
|
125
|
+
- setup.sql
|
126
126
|
homepage: https://github.com/cockroachdb/activerecord-cockroachdb-adapter
|
127
127
|
licenses:
|
128
128
|
- Apache-2.0
|
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
|
-
rubygems_version: 3.4.
|
146
|
+
rubygems_version: 3.4.9
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: CockroachDB adapter for ActiveRecord.
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module ConnectionAdapters
|
3
|
-
module CockroachDB
|
4
|
-
module OID
|
5
|
-
module TypeMapInitializer
|
6
|
-
# override
|
7
|
-
# Replaces the query with a faster version that doesn't rely on the
|
8
|
-
# use of 'array_in(cstring,oid,integer)'::regprocedure.
|
9
|
-
def query_conditions_for_initial_load
|
10
|
-
known_type_names = @store.keys.map { |n| "'#{n}'" }
|
11
|
-
known_type_types = %w('r' 'e' 'd')
|
12
|
-
<<~SQL % [known_type_names.join(", "), known_type_types.join(", ")]
|
13
|
-
WHERE
|
14
|
-
t.typname IN (%s)
|
15
|
-
OR t.typtype IN (%s)
|
16
|
-
OR (t.typarray = 0 AND t.typcategory='A')
|
17
|
-
OR t.typelem != 0
|
18
|
-
SQL
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
PostgreSQL::OID::TypeMapInitializer.prepend(TypeMapInitializer)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|