This patch fixes current foreigner plugins in order to : 1) be able to add constraint on a named table 2) be able to drop fk with postgres
Signed-off-by: Loiseleur Michel <[email protected]> --- .../abstract/schema_definitions.rb | 2 +- .../connection_adapters/postgresql_adapter.rb | 15 ++++++++++++- .../lib/foreigner/connection_adapters/sql_2003.rb | 21 +++++++++---------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/abstract/schema_definitions.rb b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/abstract/schema_definitions.rb index e417c5b..3598d05 100644 --- a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/abstract/schema_definitions.rb +++ b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/abstract/schema_definitions.rb @@ -18,7 +18,7 @@ module Foreigner module TableDefinition class ForeignKey < Struct.new(:base, :to_table, :options) def to_sql - base.foreign_key_definition(to_table, options) + base.foreign_key_definition(@table_name, to_table, options) end alias to_s :to_sql end diff --git a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/postgresql_adapter.rb b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/postgresql_adapter.rb index be662b3..fec81cd 100644 --- a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/postgresql_adapter.rb +++ b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/postgresql_adapter.rb @@ -23,7 +23,7 @@ module Foreigner } fk_info.map do |row| - options = {:column => row['column'], :name => row['name'], :primary_key = row['primary_key']} + options = {:column => row['column'], :name => row['name'], :primary_key => row['primary_key']} if row['dependency'] == 'CASCADE' options[:dependent] = :delete @@ -33,6 +33,17 @@ module Foreigner ForeignKeyDefinition.new(table_name, row['to_table'], options) end end + + def remove_foreign_key(table, options) + if Hash === options + foreign_key_name = foreign_key_name(table, options[:column], options) + else + foreign_key_name = foreign_key_name(table, "#{options.to_s.singularize}_id") + end + + execute "ALTER TABLE #{quote_table_name(table)} DROP CONSTRAINT #{quote_column_name(foreign_key_name)}" + end + end end end @@ -43,4 +54,4 @@ module ActiveRecord include Foreigner::ConnectionAdapters::PostgreSQLAdapter end end -end \ No newline at end of file +end diff --git a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/sql_2003.rb b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/sql_2003.rb index 1a1019b..957111b 100644 --- a/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/sql_2003.rb +++ b/src/vendor/plugins/foreigner/lib/foreigner/connection_adapters/sql_2003.rb @@ -4,25 +4,24 @@ module Foreigner def supports_foreign_keys? true end - + def add_foreign_key(from_table, to_table, options = {}) column = options[:column] || "#{to_table.to_s.singularize}_id" - foreign_key_name = foreign_key_name(from_table, column, options) - sql = - "ALTER TABLE #{quote_table_name(from_table)} " + - "ADD CONSTRAINT #{quote_column_name(foreign_key_name)} " + - foreign_key_definition(to_table, options) - + sql = "ALTER TABLE #{quote_table_name(from_table)} ADD " << + foreign_key_definition(from_table, to_table, options) + execute(sql) end - - def foreign_key_definition(to_table, options = {}) + + def foreign_key_definition(from_table, to_table, options = {}) column = options[:column] || "#{to_table.to_s.singularize}_id" + foreign_key_name = foreign_key_name(from_table, column, options) primary_key = options[:primary_key] || "id" dependency = dependency_sql(options[:dependent]) - sql = "FOREIGN KEY (#{quote_column_name(column)}) REFERENCES #{quote_table_name(to_table)}(#{primary_key})" + sql = "CONSTRAINT #{quote_column_name(foreign_key_name)} " + sql << "FOREIGN KEY (#{quote_column_name(column)}) REFERENCES #{quote_table_name(to_table)}(#{primary_key})" sql << " #{dependency}" unless dependency.blank? sql end @@ -36,7 +35,7 @@ module Foreigner execute "ALTER TABLE #{quote_table_name(table)} DROP FOREIGN KEY #{quote_column_name(foreign_key_name)}" end - + private def foreign_key_name(table, column, options = {}) if options[:name] -- 1.6.2.5 _______________________________________________ Ovirt-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/ovirt-devel
