Signed-off-by: Michel Loiseleur <[email protected]>
---
.../abstract/schema_definitions.rb | 26 ++++++++++----------
.../lib/foreigner/connection_adapters/sql_2003.rb | 21 +++++++--------
2 files changed, 23 insertions(+), 24 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..f31fc2b 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
@@ -8,17 +8,17 @@ module Foreigner
base::TableDefinition.class_eval do
include Foreigner::ConnectionAdapters::TableDefinition
end
-
+
base::Table.class_eval do
include Foreigner::ConnectionAdapters::Table
end
end
end
-
+
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
@@ -30,18 +30,18 @@ module Foreigner
alias_method_chain :to_sql, :foreign_keys
end
end
-
+
module InstanceMethods
# Adds a :foreign_key option to TableDefinition.references.
# If :foreign_key is true, a foreign key constraint is added to the
table.
# You can also specify a hash, which is passed as foreign key options.
- #
+ #
# ===== Examples
# ====== Add goat_id column and a foreign key to the goats table.
# t.references(:goat, :foreign_key => true)
# ====== Add goat_id column and a cascading foreign key to the goats
table.
# t.references(:goat, :foreign_key => {:dependent => :delete})
- #
+ #
# Note: No foreign key is created if :polymorphic => true is used.
# Note: If no name is specified, the database driver creates one for
you!
def references_with_foreign_keys(*args)
@@ -55,7 +55,7 @@ module Foreigner
references_without_foreign_keys(*(args << options))
end
-
+
# Defines a foreign key for the table. +to_table+ can be a single
Symbol, or
# an Array of Symbols. See SchemaStatements#add_foreign_key
#
@@ -74,13 +74,13 @@ module Foreigner
foreign_keys << ForeignKey.new(@base, to_table, options)
end
end
-
+
def to_sql_with_foreign_keys
sql = to_sql_without_foreign_keys
sql << ', ' << (foreign_keys * ', ') if foreign_keys.present?
sql
end
-
+
private
def foreign_keys
@foreign_keys ||= []
@@ -112,7 +112,7 @@ module Foreigner
def foreign_key(to_table, options = {})
@base.add_foreign_key(@table_name, to_table, options)
end
-
+
# Remove the given foreign key from the table.
#
# ===== Examples
@@ -125,17 +125,17 @@ module Foreigner
def remove_foreign_key(options = {})
@base.remove_foreign_key(@table_name, options)
end
-
+
# Adds a :foreign_key option to TableDefinition.references.
# If :foreign_key is true, a foreign key constraint is added to the
table.
# You can also specify a hash, which is passed as foreign key options.
- #
+ #
# ===== Examples
# ====== Add goat_id column and a foreign key to the goats table.
# t.references(:goat, :foreign_key => true)
# ====== Add goat_id column and a cascading foreign key to the goats
table.
# t.references(:goat, :foreign_key => {:dependent => :delete})
- #
+ #
# Note: No foreign key is created if :polymorphic => true is used.
def references_with_foreign_keys(*args)
options = args.extract_options!
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