module ActiveRecord::ConnectionAdapters::CockroachDB::DatabaseStatements
Constants
- DEFAULT_INSERT_VALUE
Public Instance Methods
insert_fixtures_set(fixture_set, tables_to_delete = [])
click to toggle source
Overridden to avoid using transactions for schema creation.
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 20 def insert_fixtures_set(fixture_set, tables_to_delete = []) fixture_inserts = build_fixture_statements(fixture_set) table_deletes = tables_to_delete.map { |table| "DELETE FROM #{quote_table_name(table)}" } statements = table_deletes + fixture_inserts with_multi_statements do disable_referential_integrity do execute_batch(statements, "Fixtures Load") end end end
transaction_isolation_levels()
click to toggle source
Since CockroachDB
will run all transactions with serializable isolation, READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ are all aliases for SERIALIZABLE. This lets the adapter support all isolation levels, but READ UNCOMMITTED has been removed from this list because the ActiveRecord
transaction isolation test fails for READ UNCOMMITTED. See www.cockroachlabs.com/docs/v19.2/transactions.html#isolation-levels
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 11 def transaction_isolation_levels { read_committed: "READ COMMITTED", repeatable_read: "REPEATABLE READ", serializable: "SERIALIZABLE" } end
Private Instance Methods
build_fixture_sql(fixtures, table_name)
click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 46 def build_fixture_sql(fixtures, table_name) columns = schema_cache.columns_hash(table_name) values_list = fixtures.map do |fixture| fixture = fixture.stringify_keys unknown_columns = fixture.keys - columns.keys if unknown_columns.any? raise Fixture::FixtureError, %(table "#{table_name}" has no columns named #{unknown_columns.map(&:inspect).join(', ')}.) end columns.map do |name, column| if fixture.key?(name) type = lookup_cast_type_from_column(column) with_yaml_fallback(type.serialize(fixture[name])) else default_insert_value(column) end end end table = Arel::Table.new(table_name) manager = Arel::InsertManager.new manager.into(table) if values_list.size == 1 values = values_list.shift new_values = [] columns.each_key.with_index { |column, i| unless values[i].equal?(DEFAULT_INSERT_VALUE) new_values << values[i] manager.columns << table[column] end } values_list << new_values else columns.each_key { |column| manager.columns << table[column] } end manager.values = manager.create_values_list(values_list) manager.to_sql end
build_fixture_statements(fixture_set)
click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 89 def build_fixture_statements(fixture_set) fixture_set.map do |table_name, fixtures| next if fixtures.empty? build_fixture_sql(fixtures, table_name) end.compact end
default_insert_value(column)
click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 42 def default_insert_value(column) DEFAULT_INSERT_VALUE end
execute_batch(statements, name = nil)
click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 33 def execute_batch(statements, name = nil) statements.each do |statement| execute(statement, name) end end
with_multi_statements() { || ... }
click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/database_statements.rb, line 96 def with_multi_statements yield end