activerecord-cockroachdb-adapter 0.1.1 → 0.1.5

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
  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