Module: Foreigner::ConnectionAdapters::PostgreSQLAdapter
- Includes:
- Semantics::Sql2003
- Defined in:
- lib/foreigner/connection_adapters/postgresql_adapter.rb
Instance Method Summary collapse
Methods included from Semantics::Sql2003
#add_foreign_key, #foreign_key_definition, #remove_foreign_key, #supports_foreign_keys?
Instance Method Details
#foreign_keys(table_name) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/foreigner/connection_adapters/postgresql_adapter.rb', line 7 def foreign_keys(table_name) fk_info = select_all %{ SELECT tc.constraint_name as name ,ccu.table_name as to_table ,ccu.column_name as primary_key ,kcu.column_name as column ,rc.delete_rule as dependency FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu USING (constraint_catalog, constraint_schema, constraint_name) JOIN information_schema.referential_constraints rc USING (constraint_catalog, constraint_schema, constraint_name) JOIN information_schema.constraint_column_usage ccu USING (constraint_catalog, constraint_schema, constraint_name) WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.constraint_catalog = '#{@config[:database]}' AND tc.table_name = '#{table_name}' } fk_info.map do |row| = {:column => row['column'], :name => row['name'], :primary_key => row['primary_key']} [:dependent] = case row['dependency'] when 'CASCADE' then :delete when 'SET NULL' then :nullify end ForeignKeyDefinition.new(table_name.to_s, row['to_table'], ) end end |