activerecord-cockroachdb-adapter 7.0.2 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a24349ecd71877aabdf47013dd73406e4bb16c0495fee7295e11656a6eea20b4
4
- data.tar.gz: 1bf5fe5b0d56f12249090edfd84bd56a81ac18f05670259a7473d780648045e5
3
+ metadata.gz: 6c3f85e82470685a2ece6851d557bcaf03f5a77ce309d76062c3960ca17d1606
4
+ data.tar.gz: b6ab7bfb9d29feebf217b70b11ccf2f73e6fb0853138cc27f4556f07b6c36dac
5
5
  SHA512:
6
- metadata.gz: 24bd03ffa04bdd43827923fbe411b8d05e74fad8f9bedd54511de71593d06a2b40e5289a15bc84d09ec9002b949a5b0e91a168cba3b451d003e54f36ecfa758a
7
- data.tar.gz: 90dd57aee1a18163fc18b9027f45dbed3045183de4bc2d098cc895e90d3723c4512f00dce1255263dd08b11b449adc5f84f6de4da4a07ac9802e82ed22d571b0
6
+ metadata.gz: 96fbb4c5a42c1ab3f2fe590f3c74012b883c818608c5b9d0525f30739f1d4d8733c95cfffd31a8a05350d6210d995f84d915727a494264d1cb1c217d10d200b1
7
+ data.tar.gz: 12ae86ab8f26eb074eabb60cd3f831eed44729d98f70bdc88d1c0d9c3d5cff5680ae7cf0a9643756395e6cfc1257cb7fc62ee5abab4c37c6f0fe45817fc619a0
data/.editorconfig ADDED
@@ -0,0 +1,7 @@
1
+ root = true
2
+
3
+ [*.rb]
4
+ indent_style = space
5
+ indent_size = 2
6
+ trim_trailing_whitespace = true
7
+ insert_final_newline = true
@@ -0,0 +1,98 @@
1
+ # Inspired from:
2
+ # - https://github.com/cockroachdb/sqlalchemy-cockroachdb/blob/master/.github/workflows/ci.yml
3
+ # - https://github.com/rgeo/activerecord-postgis-adapter/blob/master/.github/workflows/tests.yml
4
+ name: Test
5
+
6
+ on:
7
+ push:
8
+ branches: [master]
9
+ # Triggers the workflow on pull request events.
10
+ pull_request:
11
+ types: [opened, reopened, synchronize]
12
+
13
+ # Allows you to run this workflow manually from the Actions tab
14
+ workflow_dispatch:
15
+
16
+ # This allows a subsequently queued workflow run to interrupt previous runs.
17
+ concurrency:
18
+ group: "${{ github.workflow }} @ ${{ github.ref }}"
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ # Since the name of the matrix job depends on the version, we define another job with a more stable name.
23
+ test_results:
24
+ if: ${{ always() }}
25
+ runs-on: ubuntu-latest
26
+ name: Test Results
27
+ needs: [test]
28
+ steps:
29
+ - run: |
30
+ result="${{ needs.test.result }}"
31
+ if [[ $result == "success" || $result == "skipped" ]]; then
32
+ exit 0
33
+ else
34
+ exit 1
35
+ fi
36
+
37
+ test:
38
+ runs-on: ubuntu-latest
39
+ strategy:
40
+ matrix:
41
+ crdb: [v23.1.11]
42
+ ruby: [head]
43
+ name: Test (crdb=${{ matrix.crdb }} ruby=${{ matrix.ruby }})
44
+ steps:
45
+ - name: Set Up Actions
46
+ uses: actions/checkout@v4
47
+ - name: Install GEOS
48
+ run: sudo apt-get install libgeos-dev
49
+ - name: Set Up Ruby
50
+ uses: ruby/setup-ruby@v1
51
+ with:
52
+ ruby-version: ${{ matrix.ruby }}
53
+ bundler-cache: true
54
+ - name: Install and Start Cockroachdb
55
+ run: |
56
+ # Download CockroachDB
57
+ wget -qO- https://binaries.cockroachdb.com/cockroach-${{ matrix.crdb }}.linux-amd64.tgz | tar xvz
58
+
59
+ export PATH=./cockroach-${{ matrix.crdb }}.linux-amd64/:$PATH
60
+ readonly urlfile=cockroach-url
61
+
62
+ # Start a CockroachDB server and wait for it to become ready.
63
+ rm -f "$urlfile"
64
+ rm -rf cockroach-data
65
+ # Start CockroachDB.
66
+ cockroach start-single-node --max-sql-memory=25% --cache=25% --insecure --host=localhost --spatial-libs=./cockroach-${{ matrix.crdb }}.linux-amd64/lib --listening-url-file="$urlfile" >/dev/null 2>&1 &
67
+ # Ensure CockroachDB is stopped on script exit.
68
+ # Wait until CockroachDB has started.
69
+ for i in {0..3}; do
70
+ [[ -f "$urlfile" ]] && break
71
+ backoff=$((2 ** i))
72
+ echo "server not yet available; sleeping for $backoff seconds"
73
+ sleep $backoff
74
+ done
75
+ cockroach sql --insecure -e "
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
+ "
97
+ - name: Test
98
+ run: bundle exec rake test TESTOPTS='--profile=3'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## Ongoing
4
+
5
+ - Add support for [AOST](cockroachlabs.com/docs/stable/as-of-system-time) queries ([#284](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/284))
6
+ - Dump schema name in foreign keys ([#289](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/289))
7
+
8
+ ## 7.1.0 - 2024-01-30
9
+
10
+ - Add support for Rails 7.1 ([#300](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/300)).
11
+
12
+ ## 7.0.3 - 2023-08-23
13
+
14
+ - Fix Multiple Database connections ([#283](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/)).
15
+ - Add support for sql load in rake tasks ([#275](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/)).
16
+ - Add support for sql dump in rake tasks ([#273](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/)).
17
+ - Add support for table optimize hints ([#266](https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/)).
18
+
3
19
  ## 7.0.2 - 2023-05-23
4
20
 
5
21
  - Fix default numbers test to expect the correct result after
data/CONTRIBUTING.md CHANGED
@@ -15,12 +15,15 @@ override and monkey-patch functionality.
15
15
 
16
16
  ## Setup and running tests
17
17
 
18
- In CockroachDB, create two databases to be used by the ActiveRecord test suite:
18
+ ### CockroachDB
19
+
20
+ First, You should setup a cockroachdb local instance. You can use the
21
+ `bin/start-cockroachdb` to help you with that task. Otherwise, once setup,
22
+ create two databases to be used by the ActiveRecord test suite:
19
23
  activerecord_unittest and activerecord_unittest2.
20
24
 
21
25
  ```sql
22
26
  CREATE DATABASE activerecord_unittest;
23
-
24
27
  CREATE DATABASE activerecord_unittest2;
25
28
  ```
26
29
 
@@ -87,12 +90,6 @@ To run a specific test case, use minitest's `-n` option to run tests that match
87
90
  TEST_FILES="test/cases/adapter_test.rb" TESTOPTS=`-n=/test_indexes/` bundle exec rake test
88
91
  ```
89
92
 
90
- By default, tests will be run from the bundled version of Rails. To run against a local copy, set environemnt variable `RAILS_SOURCE`. Running against a local copy of Rails can be helpful when try to debug issues.
91
-
92
- ```bash
93
- RAILS_SOURCE="path/to/local_copy" bundle exec rake test
94
- ```
95
-
96
93
  `test/config.yml` assumes CockroachDB will be running at localhost:26257 with a root user. Make changes to `test/config.yml` as needed.
97
94
 
98
95
  ### Run Tests from a Backup
@@ -117,23 +114,6 @@ And the `activerecord_unittest` database will use the `RESTORE` command to load
117
114
 
118
115
  # Improvements
119
116
 
120
-
121
- ## Support past Rails versions
122
-
123
- Currently, only a beta version of Rails is tested. This means that the
124
- adapter has been modified in to accommodate unreleased changes. In order
125
- to run the tests for Rails 5.1 or 4.2, the test changes will need to be
126
- cherry-picked back. Conflicts are mostly only expected for tests that
127
- have not yet been added.
128
-
129
- Sadly, this does mean that we will have to have multiple versions of the
130
- driver for the multiple versions of Rails.
131
-
132
- A proposal for the CockroachDB adapter versioning would be to follow
133
- ActiveRecord minor versions. For example, if you use Rails 4.2.5, you
134
- would specify the CockroachDB version `~> 4.2.0`.
135
-
136
-
137
117
  ## Running CI automatically
138
118
 
139
119
  Currently the fork is set up to run using TeamCity only on the current
@@ -247,7 +227,7 @@ need to be cleaned up.
247
227
 
248
228
  # Notes for the non-Rubyer
249
229
 
250
- rvm is an environment manager that lets you manage and swap between
230
+ rbenv is an environment manager that lets you manage and swap between
251
231
  multiple versions of Ruby and their dependencies.
252
232
 
253
233
  bundle is dependency manager that uses a projects `Gemfile` (and often
data/Gemfile CHANGED
@@ -1,60 +1,60 @@
1
- require 'openssl'
2
- source 'https://rubygems.org'
3
- gemspec
1
+ # frozen_string_literal: true
4
2
 
5
- if ENV['RAILS_SOURCE']
6
- gemspec path: ENV['RAILS_SOURCE']
7
- else
8
- def get_version_from_gemspec
9
- gemspec = eval(File.read('activerecord-cockroachdb-adapter.gemspec'))
3
+ source "https://rubygems.org"
10
4
 
11
- gem_version = gemspec.dependencies.
12
- find { |dep| dep.name == 'activerecord' }.
13
- requirement.
14
- requirements.
15
- first.
16
- last
5
+ gemspec
17
6
 
18
- major, minor, tiny, pre = gem_version.segments
19
7
 
20
- if pre
21
- gem_version.to_s
22
- else
23
- find_latest_matching_version(major, minor)
8
+ module RailsTag
9
+ class << self
10
+ def call
11
+ req = gemspec_requirement
12
+ "v" + all_activerecord_versions.find { req.satisfied_by?(_1) }.version
13
+ rescue => e
14
+ warn "Unable to determine Rails version. Using last used. Error: #{e.message}"
15
+ lockfile = File.expand_path("Gemfile.lock", __dir__)
16
+ File.foreach(lockfile, chomp: true).find { _1[/tag: (.*)$/] }
17
+ Regexp.last_match(1)
24
18
  end
25
- end
26
19
 
27
- def find_latest_matching_version(gemspec_major, gemspec_minor)
28
- all_activerecord_versions.
29
- reject { |version| version["prerelease"] }.
30
- map { |version| version["number"].split(".").map(&:to_i) }.
31
- find { |major, minor|
32
- major == gemspec_major && (minor == gemspec_minor || gemspec_minor.nil?)
33
- }.join(".")
34
- end
20
+ def gemspec_requirement
21
+ File
22
+ .foreach(File.expand_path("activerecord-cockroachdb-adapter.gemspec", __dir__), chomp: true)
23
+ .find { _1[/add_dependency\s.activerecord.,\s.(.*)./] }
35
24
 
36
- def all_activerecord_versions
37
- require 'net/http'
38
- require 'yaml'
25
+ Gem::Requirement.new(Regexp.last_match(1))
26
+ end
39
27
 
40
- uri = URI.parse "https://rubygems.org/api/v1/versions/activerecord.yaml"
41
- http = Net::HTTP.new(uri.host, uri.port)
42
- http.use_ssl = true
43
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
28
+ def all_activerecord_versions
29
+ require 'net/http'
30
+ require 'yaml'
44
31
 
45
- YAML.load(
46
- http.request(Net::HTTP::Get.new(uri.request_uri)).body
47
- )
48
- end
32
+ uri = URI.parse "https://rubygems.org/api/v1/versions/activerecord.yaml"
33
+ http = Net::HTTP.new(uri.host, uri.port)
34
+ http.use_ssl = true
35
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
49
36
 
50
- # Get Rails from source because the gem doesn't include tests
51
- version = ENV['RAILS_VERSION'] || get_version_from_gemspec
52
- gem 'rails', git: "https://github.com/rails/rails.git", tag: "v#{version}"
37
+ YAML.load(
38
+ http.request(Net::HTTP::Get.new(uri.request_uri)).body
39
+ ).map { Gem::Version.new(_1["number"]) }
40
+ end
41
+ end
53
42
  end
54
43
 
55
- group :development do
56
- gem "byebug"
44
+
45
+ group :development, :test do
46
+ # We need to load the gem from git to have access to activerecord's test files.
47
+ # You can use `path: "some/local/rails"` if you want to test the gem against
48
+ # a specific rails codebase.
49
+ gem "rails", github: "rails/rails", tag: RailsTag.call
50
+
51
+ # Needed for the test suite
52
+ gem "msgpack", ">= 1.7.0"
53
+
54
+ gem "rake"
55
+ gem "debug"
57
56
  gem "minitest-excludes", "~> 2.0.1"
57
+ gem "minitest-github_action_reporter", github: "BuonOmo/minitest-github_action_reporter", require: "minitest/github_action_reporter_plugin"
58
58
 
59
59
  # Gems used by the ActiveRecord test suite
60
60
  gem "bcrypt", "~> 3.1.18"
data/README.md CHANGED
@@ -321,7 +321,7 @@ p modified_fac.parse_wkt(wkt)
321
321
  #=> #<RGeo::Geographic::SphericalPolygonImpl>
322
322
  ```
323
323
 
324
- Be careful when performing calculations on potentially invalid geometries, as the results might be nonsensical. For example, the area returned of an hourglass made of 2 equivalent triangles with a self-intersection in the middle is 0.
324
+ Be careful when performing calculations on potentially invalid geometries, as the results might be nonsensical. For example, the area returned of an hourglass made of 2 equivalent triangles with a self-intersection in the middle is 0.
325
325
 
326
326
  Note that when using the `spherical_factory`, there is a chance that valid geometries will be interpreted as invalid due to floating point issues with small geometries.
327
327
 
data/Rakefile CHANGED
@@ -4,14 +4,12 @@ require_relative 'test/support/paths_cockroachdb'
4
4
  require_relative 'test/support/rake_helpers'
5
5
  require_relative 'test/support/template_creator'
6
6
 
7
- task test: ["test:cockroachdb"]
8
7
  task default: [:test]
9
8
 
10
9
  namespace :db do
11
10
  task "create_test_template" do
12
11
  ENV['DEBUG_COCKROACHDB_ADAPTER'] = "1"
13
12
  ENV['COCKROACH_SKIP_LOAD_SCHEMA'] = "1"
14
- ENV["ARCONN"] = "cockroachdb"
15
13
 
16
14
  TemplateCreator.connect
17
15
  require_relative 'test/cases/helper'
@@ -26,17 +24,9 @@ namespace :db do
26
24
  end
27
25
  end
28
26
 
29
- namespace :test do
30
- Rake::TestTask.new("cockroachdb") do |t|
31
- t.libs = ARTest::CockroachDB.test_load_paths
32
- t.test_files = test_files
33
- t.warning = !!ENV["WARNING"]
34
- t.verbose = false
35
- end
36
-
37
- task "cockroachdb:env" do
38
- ENV["ARCONN"] = "cockroachdb"
39
- end
27
+ Rake::TestTask.new do |t|
28
+ t.libs = ARTest::CockroachDB.test_load_paths
29
+ t.test_files = RakeHelpers.test_files
30
+ t.warning = !!ENV["WARNING"]
31
+ t.verbose = false
40
32
  end
41
-
42
- task 'test:cockroachdb' => 'test:cockroachdb:env'
@@ -1,9 +1,6 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
-
6
- require './lib/version.rb'
3
+ require_relative 'lib/version'
7
4
  version = ActiveRecord::COCKROACH_DB_ADAPTER_VERSION
8
5
 
9
6
  Gem::Specification.new do |spec|
@@ -17,7 +14,7 @@ Gem::Specification.new do |spec|
17
14
  spec.description = "Allows the use of CockroachDB as a backend for ActiveRecord and Rails apps."
18
15
  spec.homepage = "https://github.com/cockroachdb/activerecord-cockroachdb-adapter"
19
16
 
20
- spec.add_dependency "activerecord", "~> 7.0.3"
17
+ spec.add_dependency "activerecord", "~> 7.1.0"
21
18
  spec.add_dependency "pg", "~> 1.2"
22
19
  spec.add_dependency "rgeo-activerecord", "~> 7.0.0"
23
20
 
data/bin/console CHANGED
@@ -1,14 +1,34 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "activerecord/cockroachdb"
3
+ $:.unshift(File.expand_path("../lib", __dir__))
5
4
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
5
+ # require "bundler/setup"
6
+ # Bundler.require :development
8
7
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
8
+ require "active_record"
9
+ # This allows playing with the rake task as well. Ex:
10
+ #
11
+ # ActiveRecord::Tasks::DatabaseTasks.
12
+ # structure_load(Post.connection_db_config, "awesome-file.sql")
13
+ require "active_record/connection_adapters/cockroachdb/database_tasks"
14
+
15
+ schema_kind = ENV.fetch("SCHEMA_KIND", "default")
16
+
17
+ system("cockroach sql --insecure --host=localhost:26257 --execute='drop database if exists ar_crdb_console'",
18
+ exception: true)
19
+ system("cockroach sql --insecure --host=localhost:26257 --execute='create database ar_crdb_console'",
20
+ exception: true)
21
+
22
+ ActiveRecord::Base.establish_connection(
23
+ #Alternative version: "cockroachdb://root@localhost:26257/ar_crdb_console"
24
+ adapter: "cockroachdb",
25
+ host: "localhost",
26
+ port: 26257,
27
+ user: "root",
28
+ database: "ar_crdb_console"
29
+ )
30
+
31
+ load "#{__dir__}/console_schemas/#{schema_kind}.rb"
12
32
 
13
33
  require "irb"
14
34
  IRB.start(__FILE__)
@@ -0,0 +1,9 @@
1
+ class Post < ActiveRecord::Base
2
+ end
3
+
4
+ ActiveRecord::Schema.define do
5
+ create_table("posts") do |t|
6
+ t.string :title
7
+ t.text :body
8
+ end
9
+ end
@@ -0,0 +1,23 @@
1
+ class Post < ActiveRecord::Base
2
+ self.table_name = "bar.posts"
3
+ end
4
+
5
+ class Comment < ActiveRecord::Base
6
+ self.table_name = "foo.comments"
7
+ end
8
+
9
+ ActiveRecord::Schema.define do
10
+ create_schema("foo")
11
+ create_schema("bar")
12
+ create_table("bar.posts") do |t|
13
+ t.string :title
14
+ t.text :body
15
+ end
16
+
17
+ create_table("foo.comments") do |t|
18
+ t.integer :post_id
19
+ t.text :body
20
+ end
21
+
22
+ add_foreign_key "foo.comments", "bar.posts", column: "post_id"
23
+ end
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env zsh
2
+
3
+ set -eu
4
+
5
+ die() { echo "$0: $*" 1>&2 ; false; }
6
+
7
+ root_dir="$(dirname $(dirname "$0:A"))"
8
+ pid_file="$root_dir/tmp/cockroach.pid"
9
+ log_file="$root_dir/tmp/cockroachdb.log"
10
+
11
+ mkdir -p "$root_dir/tmp"
12
+ [[ -f "$pid_file" ]] && kill -9 $(cat "$pid_file")
13
+ rm -f "$pid_file"
14
+
15
+ if ! (( ${+commands[cockroach]} )); then
16
+ die 'the `cockroach` toolchain is not installed.
17
+ See https://www.cockroachlabs.com/docs/stable/install-cockroachdb.html'
18
+ fi
19
+
20
+ cockroach start-single-node \
21
+ --insecure --store=type=mem,size=0.25 --advertise-addr=localhost --pid-file "$pid_file" \
22
+ &> "$log_file" &
23
+
24
+ until [[ -f "$pid_file" ]]; do
25
+ sleep 1
26
+ done
27
+
28
+
29
+ cat <<-SQL | cockroach sql --insecure --host=localhost:26257 > /dev/null
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
47
+
48
+ echo "CockroachDB started. PID: $(cat "$pid_file"). log: $log_file"
data/build/Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # This Dockerfile extends the Examples-ORM testing image in order to
2
2
  # install specific dependencies required for ActiveRecord tests.
3
3
 
4
- FROM cockroachdb/example-orms-builder:20200413-1918
4
+ FROM us-east1-docker.pkg.dev/crl-ci-images/cockroach/example-orms-builder:20200413-1918
5
5
 
6
6
  # Native dependencies for libxml-ruby and sqlite3.
7
7
  RUN apt-get --allow-releaseinfo-change update -y && apt-get install -y \
@@ -70,12 +70,7 @@ run_cockroach
70
70
 
71
71
  if ! (RUBYOPT="-W0" TESTOPTS="-v" bundle exec rake test); then
72
72
  echo "Tests failed"
73
- HAS_FAILED=1
74
- else
75
- echo "Tests passed"
76
- HAS_FAILED=0
73
+ exit 1
77
74
  fi
78
75
 
79
- if [ $HAS_FAILED -eq 1 ]; then
80
- exit 1
81
- fi
76
+ echo "Tests passed"
@@ -22,6 +22,14 @@ module Arel # :nodoc:
22
22
  module Visitors # :nodoc:
23
23
  class CockroachDB < PostgreSQL # :nodoc:
24
24
  include RGeo::ActiveRecord::SpatialToSql
25
+
26
+ def visit_Arel_Nodes_JoinSource(o, collector)
27
+ super
28
+ if o.aost
29
+ collector << " AS OF SYSTEM TIME '#{o.aost.iso8601}'"
30
+ end
31
+ collector
32
+ end
25
33
  end
26
34
  end
27
35
  end
@@ -1,11 +1,11 @@
1
1
  module ActiveRecord
2
2
  module ConnectionAdapters
3
3
  module CockroachDB
4
- module PostgreSQLColumnMonkeyPatch
4
+ class Column < PostgreSQL::Column
5
5
  # most functions taken from activerecord-postgis-adapter spatial_column
6
6
  # https://github.com/rgeo/activerecord-postgis-adapter/blob/master/lib/active_record/connection_adapters/postgis/spatial_column.rb
7
7
  def initialize(name, default, sql_type_metadata = nil, null = true,
8
- default_function = nil, collation: nil, comment: nil,
8
+ default_function = nil, collation: nil, comment: nil, identity: nil,
9
9
  serial: nil, spatial: nil, generated: nil, hidden: nil)
10
10
  @sql_type_metadata = sql_type_metadata
11
11
  @geographic = !!(sql_type_metadata.sql_type =~ /geography\(/i)
@@ -30,7 +30,7 @@ module ActiveRecord
30
30
  build_from_sql_type(sql_type_metadata.sql_type)
31
31
  end
32
32
  super(name, default, sql_type_metadata, null, default_function,
33
- collation: collation, comment: comment, serial: serial, generated: generated)
33
+ collation: collation, comment: comment, serial: serial, generated: generated, identity: identity)
34
34
  if spatial? && @srid
35
35
  @limit = { srid: @srid, type: to_type_name(geometric_type) }
36
36
  @limit[:has_z] = true if @has_z
@@ -53,10 +53,6 @@ module ActiveRecord
53
53
  spatial? ? @limit : super
54
54
  end
55
55
 
56
- def virtual?
57
- @generated.present?
58
- end
59
-
60
56
  def hidden?
61
57
  @hidden
62
58
  end
@@ -93,9 +89,5 @@ module ActiveRecord
93
89
  end
94
90
  end
95
91
  end
96
-
97
- class PostgreSQLColumn
98
- prepend CockroachDB::PostgreSQLColumnMonkeyPatch
99
- end
100
92
  end
101
93
  end
@@ -45,6 +45,14 @@ module ActiveRecord
45
45
  def st_polygon(name, options = {})
46
46
  column(name, :st_polygon, **options)
47
47
  end
48
+
49
+ private
50
+
51
+ def valid_column_definition_options
52
+ spatial = [:srid, :has_z, :has_m, :geographic, :spatial_type]
53
+ crdb = [:hidden]
54
+ super + spatial + crdb
55
+ end
48
56
  end
49
57
  end
50
58