Class: ActiveRecord::ConnectionAdapters::SpannerAdapter

Inherits:
AbstractAdapter
  • Object
show all
Includes:
ActiveRecord::ConnectionAdapters::Spanner::DatabaseStatements, ActiveRecord::ConnectionAdapters::Spanner::Quoting, ActiveRecord::ConnectionAdapters::Spanner::SchemaStatements
Defined in:
lib/active_record/connection_adapters/spanner_adapter.rb

Constant Summary collapse

ADAPTER_NAME =
"spanner".freeze
NATIVE_DATABASE_TYPES =
{
  primary_key:  "INT64",
  parent_key:   "INT64",
  string:       { name: "STRING", limit: "MAX" },
  text:         { name: "STRING", limit: "MAX" },
  integer:      { name: "INT64" },
  bigint:       { name: "INT64" },
  float:        { name: "FLOAT64" },
  decimal:      { name: "NUMERIC" },
  numeric:      { name: "NUMERIC" },
  datetime:     { name: "TIMESTAMP" },
  time:         { name: "TIMESTAMP" },
  date:         { name: "DATE" },
  binary:       { name: "BYTES", limit: "MAX" },
  boolean:      { name: "BOOL" },
  json:         { name: "JSON" }
}.freeze

Constants included from ActiveRecord::ConnectionAdapters::Spanner::SchemaStatements

ActiveRecord::ConnectionAdapters::Spanner::SchemaStatements::VERSION_6_0_3, ActiveRecord::ConnectionAdapters::Spanner::SchemaStatements::VERSION_6_1_0

Constants included from ActiveRecord::ConnectionAdapters::Spanner::DatabaseStatements

ActiveRecord::ConnectionAdapters::Spanner::DatabaseStatements::COMMENT_REGEX

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::ConnectionAdapters::Spanner::SchemaStatements

#_add_foreign_key, #_remove_columns, #add_column, #add_foreign_key, #add_index, #add_reference, #change_column, #change_column_default, #change_column_null, #column_definitions, #create_join_table, #create_schema_dumper, #create_table, #current_database, #data_sources, #drop_table, #fetch_type_metadata, #foreign_keys, #index_name_exists?, #indexes, #new_column_from_field, #primary_and_parent_keys, #primary_keys, #quoted_scope, #remove_column, #remove_columns, #remove_foreign_key, #remove_index, #rename_column, #rename_index, #rename_table, #table_exists?, #type_to_sql

Methods included from ActiveRecord::ConnectionAdapters::Spanner::DatabaseStatements

#begin_db_transaction, #begin_isolated_db_transaction, #commit_db_transaction, #exec_mutation, #exec_query, #exec_update, #execute, #execute_ddl, #query, #rollback_db_transaction, #transaction, #transaction_isolation_levels, #truncate, #update, #write_query?

Methods included from ActiveRecord::ConnectionAdapters::Spanner::Quoting

#quote_column_name, #quote_string, #quote_table_name, #quoted_binary

Constructor Details

#initialize(connection, logger, connection_options, config) ⇒ SpannerAdapter

Returns a new instance of SpannerAdapter.



76
77
78
79
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 76

def initialize connection, logger, connection_options, config
  super connection, logger, config
  @connection_options = connection_options
end

Class Method Details

.database_exists?(config) ⇒ Boolean

Database

Returns:

  • (Boolean)


91
92
93
94
95
96
97
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 91

def self.database_exists? config
  connection = ActiveRecordSpannerAdapter::Connection.new config
  connection.connect!
  true
rescue ActiveRecord::NoDatabaseError
  false
end

Instance Method Details

#active?Boolean

Connection management

Returns:

  • (Boolean)


101
102
103
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 101

def active?
  @connection.active?
end

#arel_visitorObject



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

def arel_visitor
  Arel::Visitors::Spanner.new self
end

#current_spanner_transactionObject



119
120
121
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 119

def current_spanner_transaction
  @connection.current_transaction
end

#disconnect!Object



105
106
107
108
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 105

def disconnect!
  super
  @connection.disconnect!
end

#max_identifier_lengthObject



81
82
83
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 81

def max_identifier_length
  128
end

#native_database_typesObject



85
86
87
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 85

def native_database_types
  NATIVE_DATABASE_TYPES
end

#next_sequence_value(_sequence_name) ⇒ Object

Generate next sequence number for primary key



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

def next_sequence_value _sequence_name
  SecureRandom.uuid.gsub("-", "").hex & 0x7FFFFFFFFFFFFFFF
end

#prefetch_primary_key?(_table_name = nil) ⇒ Boolean

Returns:

  • (Boolean)


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

def prefetch_primary_key? _table_name = nil
  true
end

#reset!Object Also known as: reconnect!



110
111
112
113
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 110

def reset!
  super
  @connection.reset!
end

#supports_bulk_alter?Boolean

Supported features

Returns:

  • (Boolean)


125
126
127
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 125

def supports_bulk_alter?
  true
end

#supports_common_table_expressions?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 129

def supports_common_table_expressions?
  true
end

#supports_explain?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 133

def supports_explain?
  false
end

#supports_foreign_keys?Boolean

Returns:

  • (Boolean)


137
138
139
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 137

def supports_foreign_keys?
  true
end

#supports_index_sort_order?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 141

def supports_index_sort_order?
  true
end

#supports_insert_on_conflict?Boolean Also known as: supports_insert_on_duplicate_skip?, supports_insert_on_duplicate_update?, supports_insert_conflict_target?

Returns:

  • (Boolean)


145
146
147
# File 'lib/active_record/connection_adapters/spanner_adapter.rb', line 145

def supports_insert_on_conflict?
  true
end

#supports_insert_returning?Boolean

Returns:

  • (Boolean)


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

def supports_insert_returning?
  true
end

#supports_multi_insert?Boolean

Returns:

  • (Boolean)


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

def supports_multi_insert?
  true
end

#supports_optimizer_hints?Boolean

Returns:

  • (Boolean)


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

def supports_optimizer_hints?
  true
end

#supports_primary_key?Boolean

Returns:

  • (Boolean)


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

def supports_primary_key?
  true
end