module ActiverecordCoveringIndex::SchemaCreation

Public Class Methods

prepended(base) click to toggle source
# File lib/activerecord-covering-index/schema_creation.rb, line 5
def self.prepended(base)
  attr_opts = { to: :@conn }
  attr_opts[:private] = true if ActiveRecord::VERSION::MAJOR >= 6

  base.delegate :supports_covering_index?, **attr_opts
end

Private Instance Methods

quoted_index_includes(columns) click to toggle source
# File lib/activerecord-covering-index/schema_creation.rb, line 32
def quoted_index_includes(columns)
  String === columns ? columns : quoted_columns_for_index(Array(columns), {})
end
visit_CreateIndexDefinition(o) click to toggle source
# File lib/activerecord-covering-index/schema_creation.rb, line 14
def visit_CreateIndexDefinition(o)
  index = o.index

  sql = ["CREATE"]
  sql << "UNIQUE" if index.unique
  sql << "INDEX"
  sql << "IF NOT EXISTS" if o.if_not_exists
  sql << o.algorithm if o.algorithm
  sql << index.type if index.type
  sql << "#{quote_column_name(index.name)} ON #{quote_table_name(index.table)}"
  sql << "USING #{index.using}" if supports_index_using? && index.using
  sql << "(#{quoted_columns(index)})"
  sql << "INCLUDE (#{quoted_index_includes(index.include)})" if supports_covering_index? && index.include
  sql << "WHERE #{index.where}" if supports_partial_index? && index.where

  sql.join(" ")
end