activerecord-cockroachdb-adapter 0.1.1 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b89dfdfde72415ced3bb7ff0e774add61898341c
4
- data.tar.gz: 8c7731b64632bea50c196351ff3405e7613958d3
3
+ metadata.gz: b6fb41a73e2d9ae7c9fb88f2094d14dc7b018a94
4
+ data.tar.gz: 5fb0b0933595b1a631b3318941b4f47b79a5b854
5
5
  SHA512:
6
- metadata.gz: 96fdde05edb0d94b36f66a4eb8452397c1f1fa68e5e80947707a6b9a728be38a739ae73a43c0fb0d11928df6c2f1d3173725bc73189e13de52f9844028bcce94
7
- data.tar.gz: 7788d7e75d13e3930449748d4e12e8e5e1fe679ce8dd76c5f5499faeb408aabb043687f0b6bd0eba0d54bedb4801301676645eb8a92effd7c4a98725f372ce9f
6
+ metadata.gz: 255858d824d22098be889a190b25454222868ee021da95ae639bd75d8e131c27ecd62a71d5f0b414ebcf414ad621daef709b1a79dc75f64683c943ceb9cb8829
7
+ data.tar.gz: 6b5aff467669c95beeced14051c17361f01e14f042f6d54c4edd2e094d4cc6c3a73bb3a80918e0b27752873300c0367f4ef4e76bd5020fc379b45d90599084f0
data/README.md CHANGED
@@ -1,19 +1,23 @@
1
1
  # ActiveRecord CockroachDB Adapter
2
2
 
3
- CockroachDB adapter for ActiveRecord 5. This is a lightweight extension of the PostgreSQL adapter that establishes compatibility with [CockroachDB](https://github.com/cockroachdb/cockroach).
3
+ CockroachDB adapter for ActiveRecord 4 and 5. This is a lightweight extension of the PostgreSQL adapter that establishes compatibility with [CockroachDB](https://github.com/cockroachdb/cockroach).
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your project's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'activerecord-cockroachdb-adapter', '~> 0.1.0'
10
+ gem 'activerecord-cockroachdb-adapter', '~> 0.2.2'
11
11
  ```
12
12
 
13
+ If you're using Rails 4.x, use the `0.1.x` versions of this gem.
14
+
13
15
  In `database.yml`, use the following adapter setting:
14
16
 
15
17
  ```
16
18
  development:
17
19
  adapter: cockroachdb
18
20
  port: 26257
21
+ host: <hostname>
22
+ user: <username>
19
23
  ```
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "activerecord-cockroachdb-adapter"
7
- spec.version = "0.1.1"
7
+ spec.version = "0.1.5"
8
8
  spec.licenses = ["Apache-2.0"]
9
9
  spec.authors = ["Cockroach Labs"]
10
10
  spec.email = ["cockroach-db@googlegroups.com"]
@@ -13,7 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.description = "Allows the use of CockroachDB as a backend for ActiveRecord and Rails apps."
14
14
  spec.homepage = "https://github.com/cockroachdb/activerecord-cockroachdb-adapter"
15
15
 
16
- spec.add_dependency "activerecord", "~> 5.0", ">= 5.0.1"
16
+ spec.add_dependency "activerecord", "~> 4.2"
17
+ spec.add_dependency "pg", "0.20"
17
18
 
18
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -12,12 +12,13 @@ module ActiveRecord
12
12
  conn_params[:user] = conn_params.delete(:username) if conn_params[:username]
13
13
  conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database]
14
14
 
15
- # Forward only valid config params to PGconn.connect.
16
- valid_conn_param_keys = PGconn.conndefaults_hash.keys + [:requiressl]
15
+ # Forward only valid config params to PG::Connection.connect.
16
+ valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + [:requiressl]
17
17
  conn_params.slice!(*valid_conn_param_keys)
18
18
 
19
- # The postgres drivers don't allow the creation of an unconnected PGconn object,
20
- # so just pass a nil connection object for the time being.
19
+ # The postgres drivers don't allow the creation of an unconnected
20
+ # PG::Connection object, so just pass a nil connection object for the
21
+ # time being.
21
22
  ConnectionAdapters::CockroachDBAdapter.new(nil, logger, conn_params, config)
22
23
  end
23
24
  end
@@ -25,6 +26,37 @@ end
25
26
 
26
27
  class ActiveRecord::ConnectionAdapters::CockroachDBAdapter < ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
27
28
  ADAPTER_NAME = "CockroachDB".freeze
29
+
30
+ # Note that in the migration from ActiveRecord 5.0 to 5.1, the
31
+ # `extract_schema_qualified_name` method was aliased in the PostgreSQLAdapter.
32
+ # To ensure backward compatibility with both <5.1 and 5.1, we rename it here
33
+ # to use the same original `Utils` module.
34
+ Utils = ActiveRecord::ConnectionAdapters::PostgreSQL::Utils
35
+
36
+ def supports_json?
37
+ false
38
+ end
39
+
40
+ def supports_ddl_transactions?
41
+ false
42
+ end
43
+
44
+ def supports_extensions?
45
+ false
46
+ end
47
+
48
+ def supports_ranges?
49
+ false
50
+ end
51
+
52
+ def supports_materialized_views?
53
+ false
54
+ end
55
+
56
+ def supports_pg_crypto_uuid?
57
+ false
58
+ end
59
+
28
60
  def indexes(table_name, name = nil) # :nodoc:
29
61
  # The PostgreSQL adapter uses a correlated subquery in the following query,
30
62
  # which CockroachDB does not yet support. That portion of the query fetches
@@ -37,7 +69,7 @@ class ActiveRecord::ConnectionAdapters::CockroachDBAdapter < ActiveRecord::Conne
37
69
  MSG
38
70
  end
39
71
 
40
- table = extract_schema_qualified_name(table_name.to_s)
72
+ table = Utils.extract_schema_qualified_name(table_name.to_s)
41
73
 
42
74
  result = query(<<-SQL, "SCHEMA")
43
75
  SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
@@ -85,8 +117,7 @@ class ActiveRecord::ConnectionAdapters::CockroachDBAdapter < ActiveRecord::Conne
85
117
 
86
118
 
87
119
  def primary_keys(table_name)
88
- # No longer necessary once Rails releases 5.1.0.
89
- name = extract_schema_qualified_name(table_name.to_s)
120
+ name = Utils.extract_schema_qualified_name(table_name.to_s)
90
121
  select_values(<<-SQL.strip_heredoc, "SCHEMA")
91
122
  SELECT column_name
92
123
  FROM information_schema.key_column_usage kcu
@@ -101,23 +132,17 @@ class ActiveRecord::ConnectionAdapters::CockroachDBAdapter < ActiveRecord::Conne
101
132
  SQL
102
133
  end
103
134
 
104
- def column_definitions(table_name)
105
- # No longer necessary once Rails releases 5.1.0.
106
- query(<<-end_sql, "SCHEMA")
107
- SELECT a.attname, format_type(a.atttypid, a.atttypmod),
108
- pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
109
- c.collname, col_description(a.attrelid, a.attnum) AS comment
110
- FROM pg_attribute a
111
- LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
112
- LEFT JOIN pg_type t ON a.atttypid = t.oid
113
- LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
114
- WHERE a.attrelid = #{quote(quote_table_name(table_name))}::regclass
115
- AND a.attnum > 0 AND NOT a.attisdropped
116
- ORDER BY a.attnum
117
- end_sql
118
- end
119
-
120
- private def extract_schema_qualified_name(*args)
121
- ActiveRecord::ConnectionAdapters::PostgreSQL::Utils.extract_schema_qualified_name(*args)
135
+ # This is hardcoded to 63 (as previously was in ActiveRecord 5.0) to aid in
136
+ # migration from PostgreSQL to Cockroachdb. In practice, this limitation
137
+ # is arbitrary since CockroachDB supports index name lengths and table alias
138
+ # lengths far greater than this value. For the time being though, we match
139
+ # the original behavior for PostgreSQL to simplify migrations.
140
+ #
141
+ # Note that in the migration to ActiveRecord 5.1, this was changed in
142
+ # PostgreSQLAdapter to use `SHOW max_identifier_length` (which does not
143
+ # exist in CockroachDB). Therefore, we have to redefine this here.
144
+ def table_alias_length
145
+ 63
122
146
  end
147
+ alias index_name_length table_alias_length
123
148
  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: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cockroach Labs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-09 00:00:00.000000000 Z
11
+ date: 2017-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,20 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 5.0.1
19
+ version: '4.2'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '5.0'
30
- - - ">="
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: '0.20'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
31
39
  - !ruby/object:Gem::Version
32
- version: 5.0.1
40
+ version: '0.20'
33
41
  - !ruby/object:Gem::Dependency
34
42
  name: bundler
35
43
  requirement: !ruby/object:Gem::Requirement