activerecord-cockroachdb-adapter 6.1.7 → 6.1.10

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: 95b9157a969cd938c7500ed5a755120ec9f9bdce6e5e11316d32e2e434e8d7b2
4
- data.tar.gz: 96f79790d7f0fbbb95b32e3e07425fe8df2d10830165e31302f0d9fa8f27405a
3
+ metadata.gz: 72a654c4b06b42fbaae48bc9610420b2103f38b72d4170b7ae59983860d6e9d6
4
+ data.tar.gz: fb400dec89ffb39d202a081ff09a34330a498e3e9ce4363433d55de255a0288a
5
5
  SHA512:
6
- metadata.gz: ed654032304e706dcab7ab22514b5e1e93facfa946686a9455676fa220c5aff0859044645b778d0ef63f8482809a21440846d733f263ec007c548a4bba18c891
7
- data.tar.gz: 8a1d4ae16ac33747a80b2a1af1d04095358265d7949e43b66ba3e77aa02d310c9ebc32891d315ce9351197223e6f04e238cb1bd1eb57c8ffef2ecf94a120ed31
6
+ metadata.gz: f39c8a1fb5da46833e2ebb25a7224fd4c7d6bf1b71649d06550e60bd00e6dc084ef6675d9314995a002a507aa3e382efb7947fdc951221612fbc12b730b95fed
7
+ data.tar.gz: b133873824c59d673b9aed7a8cb45933aa7298bf9b5dc533240e9e43e99820ab1abe0be09874a9d0f5b6f7ce599441b7c1e462ecc83754f0de87dab9ca8ce50b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.1.10 - 2022-05-06
4
+
5
+ - Disable supports_expression_index regardless of CockroachDB version until
6
+ `ON CONFLICT expression` is supported.
7
+
8
+ See https://github.com/cockroachdb/cockroach/issues/67893.
9
+
10
+ ## 6.1.9 - 2022-04-26
11
+
12
+ - Fix bug where duplicate `rowid` columns would be created when loading
13
+ a schema dump of a table that was not created with an explicit primary key.
14
+ - Support the NOT VISIBLE syntax from CockroachDB, by using the `hidden`
15
+ column modifier in the Rails schema.
16
+
17
+ ## 6.1.8 - 2022-03-14
18
+
19
+ - Add a test helper from https://github.com/rails/rails/pull/40822
20
+ to be able to test against Rails upstream.
21
+
3
22
  ## 6.1.7 - 2022-03-01
4
23
 
5
24
  - Fix query to get the CockroachDB version so it does not require any privileges.
@@ -6,9 +6,10 @@ module ActiveRecord
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
8
  default_function = nil, collation: nil, comment: nil,
9
- serial: nil, spatial: nil)
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)
12
+ @hidden = hidden
12
13
 
13
14
  if spatial
14
15
  # This case comes from an entry in the geometry_columns table
@@ -29,7 +30,7 @@ module ActiveRecord
29
30
  build_from_sql_type(sql_type_metadata.sql_type)
30
31
  end
31
32
  super(name, default, sql_type_metadata, null, default_function,
32
- collation: collation, comment: comment, serial: serial)
33
+ collation: collation, comment: comment, serial: serial, generated: generated)
33
34
  if spatial? && @srid
34
35
  @limit = { srid: @srid, type: to_type_name(geometric_type) }
35
36
  @limit[:has_z] = true if @has_z
@@ -52,6 +53,14 @@ module ActiveRecord
52
53
  spatial? ? @limit : super
53
54
  end
54
55
 
56
+ def virtual?
57
+ @generated.present?
58
+ end
59
+
60
+ def hidden?
61
+ @hidden
62
+ end
63
+
55
64
  def spatial?
56
65
  %i[geometry geography].include?(@sql_type_metadata.type)
57
66
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module CockroachDB
6
+ class SchemaCreation < PostgreSQL::SchemaCreation # :nodoc:
7
+ private
8
+ def add_column_options!(sql, options)
9
+ if options[:hidden]
10
+ sql << " NOT VISIBLE"
11
+ end
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module CockroachDB
6
+ class SchemaDumper < ConnectionAdapters::PostgreSQL::SchemaDumper # :nodoc:
7
+ private
8
+ def prepare_column_options(column)
9
+ spec = super
10
+ if column.hidden?
11
+ spec[:hidden] = true
12
+ end
13
+ spec
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -77,7 +77,7 @@ module ActiveRecord
77
77
  # override
78
78
  # https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L624
79
79
  def new_column_from_field(table_name, field)
80
- column_name, type, default, notnull, oid, fmod, collation, comment = field
80
+ column_name, type, default, notnull, oid, fmod, collation, comment, generated, hidden = field
81
81
  type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i)
82
82
  default_value = extract_value_from_default(default)
83
83
  default_function = extract_default_function(default_value, default)
@@ -99,7 +99,9 @@ module ActiveRecord
99
99
  collation: collation,
100
100
  comment: comment.presence,
101
101
  serial: serial,
102
- spatial: spatial
102
+ spatial: spatial,
103
+ generated: generated,
104
+ hidden: hidden
103
105
  )
104
106
  end
105
107
 
@@ -186,6 +188,14 @@ module ActiveRecord
186
188
  @spatial_column_info ||= {}
187
189
  @spatial_column_info[table_name.to_sym] ||= SpatialColumnInfo.new(self, table_name.to_s)
188
190
  end
191
+
192
+ def create_schema_dumper(options)
193
+ CockroachDB::SchemaDumper.create(self, options)
194
+ end
195
+
196
+ def schema_creation
197
+ CockroachDB::SchemaCreation.new(self)
198
+ end
189
199
  end
190
200
  end
191
201
  end
@@ -1,7 +1,10 @@
1
1
  require "rgeo/active_record"
2
2
 
3
3
  require "active_record/connection_adapters/postgresql_adapter"
4
+ require "active_record/connection_adapters/cockroachdb/attribute_methods"
4
5
  require "active_record/connection_adapters/cockroachdb/column_methods"
6
+ require "active_record/connection_adapters/cockroachdb/schema_creation"
7
+ require "active_record/connection_adapters/cockroachdb/schema_dumper"
5
8
  require "active_record/connection_adapters/cockroachdb/schema_statements"
6
9
  require "active_record/connection_adapters/cockroachdb/referential_integrity"
7
10
  require "active_record/connection_adapters/cockroachdb/transaction_manager"
@@ -9,7 +12,6 @@ require "active_record/connection_adapters/cockroachdb/database_statements"
9
12
  require "active_record/connection_adapters/cockroachdb/table_definition"
10
13
  require "active_record/connection_adapters/cockroachdb/quoting"
11
14
  require "active_record/connection_adapters/cockroachdb/type"
12
- require "active_record/connection_adapters/cockroachdb/attribute_methods"
13
15
  require "active_record/connection_adapters/cockroachdb/column"
14
16
  require "active_record/connection_adapters/cockroachdb/spatial_column_info"
15
17
  require "active_record/connection_adapters/cockroachdb/setup"
@@ -179,7 +181,10 @@ module ActiveRecord
179
181
  end
180
182
 
181
183
  def supports_expression_index?
182
- @crdb_version >= 2122
184
+ # Expression indexes are partially supported by CockroachDB v21.2,
185
+ # but activerecord requires "ON CONFLICT expression" support.
186
+ # See https://github.com/cockroachdb/cockroach/issues/67893
187
+ false
183
188
  end
184
189
 
185
190
  def supports_datetime_with_precision?
@@ -199,7 +204,7 @@ module ActiveRecord
199
204
  end
200
205
 
201
206
  def supports_virtual_columns?
202
- false
207
+ @crdb_version >= 2110
203
208
  end
204
209
 
205
210
  def supports_string_to_array_coercion?
@@ -474,7 +479,8 @@ module ActiveRecord
474
479
  SELECT a.attname, format_type(a.atttypid, a.atttypmod),
475
480
  pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
476
481
  c.collname, NULL AS comment,
477
- #{supports_virtual_columns? ? 'attgenerated' : quote('')} as attgenerated
482
+ #{supports_virtual_columns? ? 'attgenerated' : quote('')} as attgenerated,
483
+ NULL as is_hidden
478
484
  FROM pg_attribute a
479
485
  LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
480
486
  LEFT JOIN pg_type t ON a.atttypid = t.oid
@@ -500,8 +506,18 @@ module ActiveRecord
500
506
  dtype = field[1]
501
507
  field[1] = crdb_fields[field[0]][2].downcase if re.match(dtype)
502
508
  field[7] = crdb_fields[field[0]][1]&.gsub!(/^\'|\'?$/, '')
509
+ field[9] = true if crdb_fields[field[0]][3]
503
510
  field
504
511
  end
512
+ fields.delete_if do |field|
513
+ # Don't include rowid column if it is hidden and the primary key
514
+ # is not defined (meaning CRDB implicitly created it).
515
+ if field[0] == CockroachDBAdapter::DEFAULT_PRIMARY_KEY
516
+ field[9] && !primary_key(table_name)
517
+ else
518
+ false # Keep this entry.
519
+ end
520
+ end
505
521
  end
506
522
 
507
523
  # Fetch the column comment because it's faster this way
@@ -512,7 +528,7 @@ module ActiveRecord
512
528
  def crdb_column_definitions(table_name)
513
529
  fields = \
514
530
  query(<<~SQL, "SCHEMA")
515
- SELECT c.column_name, c.column_comment, c.crdb_sql_type
531
+ SELECT c.column_name, c.column_comment, c.crdb_sql_type, c.is_hidden::BOOLEAN
516
532
  FROM information_schema.columns c
517
533
  WHERE c.table_name = #{quote(table_name)}
518
534
  SQL
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecord
4
- COCKROACH_DB_ADAPTER_VERSION = "6.1.7"
4
+ COCKROACH_DB_ADAPTER_VERSION = "6.1.10"
5
5
  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: 6.1.7
4
+ version: 6.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cockroach Labs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-01 00:00:00.000000000 Z
11
+ date: 2022-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -87,6 +87,8 @@ files:
87
87
  - lib/active_record/connection_adapters/cockroachdb/oid/type_map_initializer.rb
88
88
  - lib/active_record/connection_adapters/cockroachdb/quoting.rb
89
89
  - lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb
90
+ - lib/active_record/connection_adapters/cockroachdb/schema_creation.rb
91
+ - lib/active_record/connection_adapters/cockroachdb/schema_dumper.rb
90
92
  - lib/active_record/connection_adapters/cockroachdb/schema_statements.rb
91
93
  - lib/active_record/connection_adapters/cockroachdb/setup.rb
92
94
  - lib/active_record/connection_adapters/cockroachdb/spatial_column_info.rb