Module: Alf::Sequel::Connection::SchemaMethods

Included in:
Alf::Sequel::Connection
Defined in:
lib/alf/sequel/connection/schema_methods.rb

Instance Method Summary collapse

Instance Method Details

#cog(plan, expr) ⇒ Object



14
15
16
# File 'lib/alf/sequel/connection/schema_methods.rb', line 14

def cog(plan, expr)
  plan.join(compiler).on_leaf_operand(plan, expr)
end

#dataset(name) ⇒ Object



10
11
12
# File 'lib/alf/sequel/connection/schema_methods.rb', line 10

def dataset(name)
  sequel_db[name]
end

#heading(name) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/alf/sequel/connection/schema_methods.rb', line 18

def heading(name)
  h = {}
  sequel_db.schema(name).each do |pair|
    column_name, info = pair
    h[column_name] = dbtype_to_ruby_type(info)
  end
  Heading.new(h)
end

#keys(name) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/alf/sequel/connection/schema_methods.rb', line 27

def keys(name)
  # take the indexes
  indexes = sequel_db.indexes(name).
                      values.
                      select{|i| i[:unique] == true }.
                      map{|i| AttrList.coerce(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(AttrList.coerce(key)) unless key.empty?

  Keys.new(indexes)
end

#knows?(name) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/alf/sequel/connection/schema_methods.rb', line 6

def knows?(name)
  sequel_db.table_exists?(name)
end

#migrate!(opts) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/alf/sequel/connection/schema_methods.rb', line 44

def migrate!(opts)
  unless f = opts.migrations_folder
    raise Alf::ConfigError, "Migrations folder not set"
  end
  with_sequel_db do |db|
    ::Sequel.extension(:migration)
    ::Sequel::Migrator.apply(db, f)
  end
end