Class: ActiveRecord::ConnectionAdapters::CockroachDBAdapter

Inherits:
PostgreSQLAdapter
  • Object
show all
Includes:
ActiveRecord::ConnectionAdapters::CockroachDB::DatabaseStatements, ActiveRecord::ConnectionAdapters::CockroachDB::Quoting, ActiveRecord::ConnectionAdapters::CockroachDB::ReferentialIntegrity, ActiveRecord::ConnectionAdapters::CockroachDB::SchemaStatements
Defined in:
lib/active_record/connection_adapters/cockroachdb_adapter.rb

Constant Summary collapse

ADAPTER_NAME =
"CockroachDB".freeze
DEFAULT_PRIMARY_KEY =
"rowid"
SPATIAL_COLUMN_OPTIONS =
{
  geography:           { geographic: true },
  geometry:            {},
  geometry_collection: {},
  line_string:         {},
  multi_line_string:   {},
  multi_point:         {},
  multi_polygon:       {},
  spatial:             {},
  st_point:            {},
  st_polygon:          {},
}
DEFAULT_SRID =
0

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::ConnectionAdapters::CockroachDB::DatabaseStatements

#insert_fixtures_set, #transaction_isolation_levels

Methods included from ActiveRecord::ConnectionAdapters::CockroachDB::ReferentialIntegrity

#disable_referential_integrity

Methods included from ActiveRecord::ConnectionAdapters::CockroachDB::SchemaStatements

#add_index, #create_table_definition, #default_sequence_name, #native_database_types, #new_column_from_field, #primary_key, #reset_pk_sequence!, #spatial_column_info, #type_to_sql

Constructor Details

#initialize(connection, logger, conn_params, config) ⇒ CockroachDBAdapter

Returns a new instance of CockroachDBAdapter.



219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 219

def initialize(connection, logger, conn_params, config)
  super(connection, logger, conn_params, config)

  crdb_version_string = query_value("SHOW crdb_version")
  if crdb_version_string.include? "v1."
    version_num = 1
  elsif crdb_version_string.include? "v2."
    version_num 2
  elsif crdb_version_string.include? "v19.1."
    version_num = 191
  elsif crdb_version_string.include? "v19.2."
    version_num = 192
  elsif crdb_version_string.include? "v20.1."
    version_num = 201
  else
    version_num = 202
  end
  @crdb_version = version_num
end

Class Method Details

.database_exists?(config) ⇒ Boolean

Returns:

  • (Boolean)


239
240
241
242
243
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 239

def self.database_exists?(config)
  !!ActiveRecord::Base.cockroachdb_connection(config)
rescue ActiveRecord::NoDatabaseError
  false
end

.spatial_column_options(key) ⇒ Object



109
110
111
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 109

def self.spatial_column_options(key)
  SPATIAL_COLUMN_OPTIONS[key]
end

Instance Method Details

#debugging?Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 130

def debugging?
  !!ENV["DEBUG_COCKROACHDB_ADAPTER"]
end

#default_sridObject



117
118
119
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 117

def default_srid
  DEFAULT_SRID
end

#max_identifier_lengthObject Also known as: index_name_length, table_alias_length

This is hardcoded to 63 (as previously was in ActiveRecord 5.0) to aid in migration from PostgreSQL to CockroachDB. In practice, this limitation is arbitrary since CockroachDB supports index name lengths and table alias lengths far greater than this value. For the time being though, we match the original behavior for PostgreSQL to simplify migrations.

Note that in the migration to ActiveRecord 5.1, this was changed in PostgreSQLAdapter to use ‘SHOW max_identifier_length` (which does not exist in CockroachDB). Therefore, we have to redefine this here.



213
214
215
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 213

def max_identifier_length
  63
end

#max_transaction_retriesObject



134
135
136
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 134

def max_transaction_retries
  @max_transaction_retries ||= @config.fetch(:max_transaction_retries, 3)
end

#postgis_lib_versionObject



113
114
115
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 113

def postgis_lib_version
  @postgis_lib_version ||= select_value("SELECT PostGIS_Lib_Version()")
end

#postgresql_versionObject

CockroachDB 20.1 can run queries that work against PostgreSQL 10+.



139
140
141
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 139

def postgresql_version
  100000
end

#srs_database_columnsObject



121
122
123
124
125
126
127
128
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 121

def srs_database_columns
  {
    auth_name_column: "auth_name",
    auth_srid_column: "auth_srid",
    proj4text_column: "proj4text",
    srtext_column:    "srtext",
  }
end

#supports_advisory_locks?Boolean

Returns:

  • (Boolean)


187
188
189
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 187

def supports_advisory_locks?
  false
end

#supports_bulk_alter?Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 143

def supports_bulk_alter?
  false
end

#supports_comments?Boolean

Returns:

  • (Boolean)


177
178
179
180
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 177

def supports_comments?
  # See cockroachdb/cockroach#19472.
  false
end

#supports_comments_in_create?Boolean

Returns:

  • (Boolean)


182
183
184
185
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 182

def supports_comments_in_create?
  # See cockroachdb/cockroach#19472.
  false
end

#supports_datetime_with_precision?Boolean

Returns:

  • (Boolean)


173
174
175
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 173

def supports_datetime_with_precision?
  false
end

#supports_ddl_transactions?Boolean

Returns:

  • (Boolean)


152
153
154
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 152

def supports_ddl_transactions?
  false
end

#supports_expression_index?Boolean

Returns:

  • (Boolean)


168
169
170
171
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 168

def supports_expression_index?
  # See cockroachdb/cockroach#9682
  false
end

#supports_extensions?Boolean

Returns:

  • (Boolean)


156
157
158
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 156

def supports_extensions?
  false
end

#supports_json?Boolean

Returns:

  • (Boolean)


147
148
149
150
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 147

def supports_json?
  # FIXME(joey): Add a version check.
  true
end

#supports_materialized_views?Boolean

Returns:

  • (Boolean)


160
161
162
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 160

def supports_materialized_views?
  false
end

#supports_partial_index?Boolean

Returns:

  • (Boolean)


164
165
166
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 164

def supports_partial_index?
  @crdb_version >= 202
end

#supports_partitioned_indexes?Boolean

Returns:

  • (Boolean)


200
201
202
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 200

def supports_partitioned_indexes?
  false
end

#supports_string_to_array_coercion?Boolean

Returns:

  • (Boolean)


196
197
198
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 196

def supports_string_to_array_coercion?
  @crdb_version >= 202
end

#supports_virtual_columns?Boolean

Returns:

  • (Boolean)


191
192
193
194
# File 'lib/active_record/connection_adapters/cockroachdb_adapter.rb', line 191

def supports_virtual_columns?
  # See cockroachdb/cockroach#20882.
  false
end