class Scenic::Adapters::Mysql::Indexes

Fetches indexes on objects from the Mysql connection.

@api private

Attributes

connection[R]

Public Class Methods

new(connection:) click to toggle source
# File lib/scenic/adapters/mysql/indexes.rb, line 8
def initialize(connection:)
  @connection = connection
end

Public Instance Methods

on(name) click to toggle source

Indexes on the provided object.

@param name [String] The name of the object we want indexes from. @return [Array<Scenic::Index>]

# File lib/scenic/adapters/mysql/indexes.rb, line 16
def on(name)
  indexes_on(name).map.(&method(:index_from_database))
end

Private Instance Methods

index_definition_for(result) click to toggle source
# File lib/scenic/adapters/mysql/indexes.rb, line 40
        def index_definition_for(result)
          <<-SQL
            CREATE INDEX '#{result["Key_name"]}'
            ON '#{result["Table"]}' ('#{result["Column_name"]}')
            USING '#{result["Index_type"]}'
          SQL
        end
index_from_database(result) click to toggle source
# File lib/scenic/adapters/mysql/indexes.rb, line 32
def index_from_database(result)
  Scenic::Index.new(
    object_name: result['Table'],
    index_name: result['Key_name'],
    definition: index_definition_for(result)
  )
end
indexes_on(name) click to toggle source
# File lib/scenic/adapters/mysql/indexes.rb, line 25
        def indexes_on(name)
          connection.exec_query(<<-SQL)
            SHOW INDEX FROM '#{name}'
            WHERE Key_name <> 'PRIMARY'
          SQL
        end