class Bmg::Sequel::TypeInference

Attributes

sequel_db[R]

Public Class Methods

new(sequel_db) click to toggle source
# File lib/bmg/sequel/type_inference.rb, line 5
def initialize(sequel_db)
  @sequel_db = sequel_db
end

Public Instance Methods

attrlist(name) click to toggle source
# File lib/bmg/sequel/type_inference.rb, line 24
def attrlist(name)
  sequel_db.schema(name).map{|(k,v)| k }
end
call(name) click to toggle source
# File lib/bmg/sequel/type_inference.rb, line 10
def call(name)
  if type = sequel_db.bmg_schema_cache[name]
    type
  else
    type = Type.new
      .with_attrlist(attrlist(name))
      .with_keys(keys(name))
    ::Sequel.synchronize do
      sequel_db.bmg_schema_cache[name] = type
    end if sequel_db.cache_schema
    type
  end
end
keys(name) click to toggle source
# File lib/bmg/sequel/type_inference.rb, line 28
def keys(name)
  # take the indexes
  indexes = sequel_db
    .indexes(name)
    .values
    .select{|i| i[:unique] == true }
    .map{|i| i[:columns] }
    .sort{|a1, a2| a1.size <=> a2.size }

  # take single keys as well
  key = sequel_db
    .schema(name)
    .select{|(colname, colinfo)| colinfo[:primary_key] }
    .map(&:first)

  indexes.unshift(key) unless key.empty?

  indexes
end