Class: ActiveRecord::ConnectionAdapters::Rails80DepartureAdapter

Inherits:
AbstractMysqlAdapter
  • Object
show all
Extended by:
Forwardable
Includes:
Mysql2::DatabaseStatements, ForAlterStatements
Defined in:
lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb

Defined Under Namespace

Classes: Column, SchemaCreation

Constant Summary collapse

TYPE_MAP =
Type::TypeMap.new.tap { |m| initialize_type_map(m) }
ADAPTER_NAME =
'Percona'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ForAlterStatements

#add_column_for_alter, #add_index_for_alter, #add_timestamps_for_alter, #bulk_change_table, #change_column_for_alter, included, #remove_column_for_alter, #remove_columns_for_alter, #remove_index_for_alter, #remove_timestamps_for_alter, #rename_column_for_alter

Constructor Details

#initialize(config) ⇒ Rails80DepartureAdapter

Returns a new instance of Rails80DepartureAdapter.



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 59

def initialize(config)
  super

  @config[:flags] ||= 0

  if @config[:flags].is_a? Array
    @config[:flags].push 'FOUND_ROWS'
  else
    @config[:flags] |= ::Mysql2::Client::FOUND_ROWS
  end

  @prepared_statements = false
end

Class Method Details

.new_client(config) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 41

def self.new_client(config)
  connection_details = Departure::ConnectionDetails.new(config)
  verbose = ActiveRecord::Migration.verbose
  sanitizers = [
    Departure::LogSanitizers::PasswordSanitizer.new(connection_details)
  ]
  percona_logger = Departure::LoggerFactory.build(sanitizers: sanitizers, verbose: verbose)
  cli_generator = Departure::CliGenerator.new(connection_details)

  mysql_adapter = ActiveRecord::ConnectionAdapters::Mysql2Adapter.new(config.merge(adapter: 'mysql2'))

  Departure::Runner.new(
    percona_logger,
    cli_generator,
    mysql_adapter
  )
end

Instance Method Details

#add_index(table_name, column_name, options = {}) ⇒ Object

Adds a new index to the table

Parameters:

  • table_name (String, Symbol)
  • column_name (String, Symbol)
  • options (Hash) (defaults to: {})

    optional



124
125
126
127
128
129
130
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 124

def add_index(table_name, column_name, options = {})
  index_definition, = add_index_options(table_name, column_name, **options)
  execute <<-SQL.squish
    ALTER TABLE #{quote_table_name(index_definition.table)}
      ADD #{schema_creation.accept(index_definition)}
  SQL
end

#change_table(table_name, _options = {}) {|update_table_definition(table_name, recorder)| ... } ⇒ Object

Yields:

  • (update_table_definition(table_name, recorder))


148
149
150
151
152
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 148

def change_table(table_name, _options = {})
  recorder = ActiveRecord::Migration::CommandRecorder.new(self)
  yield update_table_definition(table_name, recorder)
  bulk_change_table(table_name, recorder.commands)
end

#exec_delete(sql, name, binds) ⇒ Object Also known as: exec_update



79
80
81
82
83
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 79

def exec_delete(sql, name, binds)
  execute(to_sql(sql, binds), name)

  @raw_connection.affected_rows
end

#exec_insert(sql, name, binds, pky = nil, sequence_name = nil, returning: nil) ⇒ Object

rubocop:disable Lint/UnusedMethodArgument, Metrics/ParameterLists



86
87
88
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 86

def exec_insert(sql, name, binds, pky = nil, sequence_name = nil, returning: nil) # rubocop:disable Lint/UnusedMethodArgument, Metrics/ParameterLists
  execute(to_sql(sql, binds), name)
end

#full_versionObject



154
155
156
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 154

def full_version
  get_full_version
end

#get_full_versionObject

rubocop:disable Naming/AccessorMethodName



158
159
160
161
162
163
164
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 158

def get_full_version # rubocop:disable Naming/AccessorMethodName
  return @get_full_version if defined? @get_full_version

  with_raw_connection do |conn|
    @get_full_version = conn.database_adapter.get_database_version.full_version_string
  end
end

#internal_exec_query(sql, name = 'SQL', _binds = [], **_kwargs) ⇒ Object Also known as: exec_query

:nodoc:



90
91
92
93
94
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 90

def internal_exec_query(sql, name = 'SQL', _binds = [], **_kwargs) # :nodoc:
  result = execute(sql, name)
  fields = result.fields if defined?(result.fields)
  ActiveRecord::Result.new(fields || [], result.to_a)
end

#last_inserted_id(result) ⇒ Object



166
167
168
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 166

def last_inserted_id(result)
  @raw_connection.database_adapter.send(:last_inserted_id, result)
end

#new_columnObject



115
116
117
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 115

def new_column(...)
  Column.new(...)
end

#remove_index(table_name, column_name = nil, **options) ⇒ Object

Remove the given index from the table.

Parameters:

  • table_name (String, Symbol)
  • options (Hash)

    optional



136
137
138
139
140
141
142
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 136

def remove_index(table_name, column_name = nil, **options)
  return if options[:if_exists] && !index_exists?(table_name, column_name, **options)

  index_name = index_name_for_remove(table_name, column_name, options)

  execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
end

#schema_creationObject



144
145
146
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 144

def schema_creation
  SchemaCreation.new(self)
end

#select(sql, name = nil, binds = [], **kwargs) ⇒ Object

Executes a SELECT query and returns an array of record hashes with the column names as keys and column values as values.



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

def select(sql, name = nil, binds = [], **kwargs)
  exec_query(sql, name, binds, **kwargs)
end

#select_rows(arel, name = nil, binds = []) ⇒ Object

Executes a SELECT query and returns an array of rows. Each row is an array of field values.



100
101
102
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 100

def select_rows(arel, name = nil, binds = [])
  select_all(arel, name, binds).rows
end

#supports_migrations?Boolean

Returns true, as this adapter supports migrations

Returns:

  • (Boolean)


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

def supports_migrations?
  true
end

#write_query?(sql) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


73
74
75
76
77
# File 'lib/active_record/connection_adapters/rails_8_0_departure_adapter.rb', line 73

def write_query?(sql) # :nodoc:
  !ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
    :desc, :describe, :set, :show, :use
  ).match?(sql)
end