Method: Sequel::SqlAnywhere::DatabaseMethods#foreign_key_list

Defined in:
lib/sequel/adapters/shared/sqlanywhere.rb

#foreign_key_list(table, opts = OPTS) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/sequel/adapters/shared/sqlanywhere.rb', line 74

def foreign_key_list(table, opts=OPTS)
  m = output_identifier_meth
  im = input_identifier_meth
  fk_indexes = {}
  .
   from{sys[:sysforeignkey].as(:fk)}.
   select{[
     fk[:role].as(:name),
     fks[:columns].as(:column_map),
     si[:indextype].as(:type),
     si[:colnames].as(:columns),
     fks[:primary_tname].as(:table_name)]}.
   join(Sequel[:sys][:sysforeignkeys].as(:fks), :role => :role).
   join(Sequel[:sys][:sysindexes].as(:si), {:iname => Sequel[:fk][:role]}, {:implicit_qualifier => :fk}).
   where{{fks[:foreign_tname]=>im.call(table)}}.
   each do |r|
    unless r[:type].downcase == 'primary key'
      fk_indexes[r[:name]] =
        {:name=>m.call(r[:name]),
         :columns=>r[:columns].split(',').map{|v| m.call(v.split(' ').first)},
         :table=>m.call(r[:table_name]),
         :key=>r[:column_map].split(',').map{|v| m.call(v.split(' IS ').last)}}
    end
  end
  fk_indexes.values
end