Module: Foreigner::ConnectionAdapters::SQLite3Adapter
- Includes:
- Sql2003
- Defined in:
- lib/foreigner/connection_adapters/sqlite3_adapter.rb
Instance Method Summary collapse
Methods included from Sql2003
#add_foreign_key, #foreign_key_definition, #supports_foreign_keys?
Instance Method Details
#foreign_keys(table_name) ⇒ Object
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 |
# File 'lib/foreigner/connection_adapters/sqlite3_adapter.rb', line 8 def foreign_keys(table_name) foreign_keys = [] create_table_info = select_value %{ SELECT sql FROM sqlite_master WHERE sql LIKE '%FOREIGN KEY%' AND name = '#{table_name}' } unless create_table_info.nil? fk_columns = create_table_info.scan(/FOREIGN KEY\s*\(\"([^\"]+)\"\)/) fk_tables = create_table_info.scan(/REFERENCES\s*\"([^\"]+)\"/) fk_references = create_table_info.scan(/REFERENCES[^\,]+/) if fk_columns.size == fk_tables.size && fk_references.size == fk_columns.size fk_columns.each_with_index do |fk_column, index| if fk_references[index] =~ /ON DELETE CASCADE/ fk_references[index] = :delete elsif fk_references[index] =~ /ON DELETE SET NULL/ fk_references[index] = :nullify else fk_references[index] = nil end foreign_keys << ForeignKeyDefinition.new(table_name, fk_tables[index][0], :column => fk_column[0], :dependent => fk_references[index]) end end end foreign_keys end |