class ActiveRecordSpannerAdapter::Index

Attributes

columns[RW]
interleave_in[RW]
name[RW]
null_filtered[RW]
state[RW]
storing[RW]
table[RW]
type[RW]
unique[RW]

Public Class Methods

new(\ table, name, columns, type: nil, unique: false, null_filtered: false, interleave_in: nil, storing: nil, state: nil) click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 14
def initialize \
    table,
    name,
    columns,
    type: nil,
    unique: false,
    null_filtered: false,
    interleave_in: nil,
    storing: nil,
    state: nil
  @table = table.to_s
  @name = name.to_s
  @columns = Array(columns)
  @type = type
  @unique = unique
  @null_filtered = null_filtered
  @interleave_in = interleave_in unless interleave_in.to_s.empty?
  @storing = storing || []
  @state = state
end

Public Instance Methods

column_names() click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 45
def column_names
  columns_by_position.map(&:name)
end
columns_by_position() click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 39
def columns_by_position
  @columns.select(&:ordinal_position).sort do |c1, c2|
    c1.ordinal_position <=> c2.ordinal_position
  end
end
options() click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 55
def options
  {
    name: name,
    order: orders,
    unique: unique,
    interleave_in: interleave_in,
    null_filtered: null_filtered,
    storing: storing
  }.delete_if { |_, v| v.nil? }
end
orders() click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 49
def orders
  columns_by_position.each_with_object({}) do |c, r|
    r[c.name] = c.desc? ? :desc : :asc
  end
end
primary?() click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 35
def primary?
  @type == "PRIMARY_KEY"
end
rename_column_options(old_column, new_column) click to toggle source
# File lib/activerecord_spanner_adapter/index.rb, line 66
def rename_column_options old_column, new_column
  opts = options

  opts[:order].transform_keys do |key|
    key.to_s == new_column.to_s
  end

  columns = column_names.map do |c|
    c.to_s == old_column.to_s ? new_column : c
  end

  { options: opts, columns: columns }
end