summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2006-08-01 21:46:51 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2006-08-01 21:46:51 +0000
commitfa5e0562dcdf438ca7c1285b6d69f6c31bf0c676 (patch)
tree7148fcc8cff4f624f57a21052aa219187ea9ec0e
parenta7f8984e6e6be2ded5a03f758f28a85ce43187ac (diff)
Fixed #2257 -- make constraint names unique across all table/column
combinations (for the benefit of MySQL). git-svn-id: http://code.djangoproject.com/svn/django/trunk@3512 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/management.py10
1 files changed, 3 insertions, 7 deletions
diff --git a/django/core/management.py b/django/core/management.py
index 14182cbdff..af95d4b6e1 100644
--- a/django/core/management.py
+++ b/django/core/management.py
@@ -192,7 +192,6 @@ def _get_sql_for_pending_references(model, pending_references):
data_types = get_creation_module().DATA_TYPES
final_output = []
- reference_names = {}
if backend.supports_constraints:
opts = model._meta
if model in pending_references:
@@ -202,12 +201,9 @@ def _get_sql_for_pending_references(model, pending_references):
r_col = f.column
table = opts.db_table
col = opts.get_field(f.rel.field_name).column
- r_name = '%s_referencing_%s_%s' % (r_col, table, col)
- if r_name in reference_names:
- reference_names[r_name] += 1
- r_name += '_%s' % reference_names[r_name]
- else:
- reference_names[r_name] = 0
+ # For MySQL, r_name must be unique in the first 64 characters.
+ # So we are careful with character usage here.
+ r_name = '%s_refs_%s_%x' % (r_col, col, abs(hash((r_table, table))))
final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s);' % \
(backend.quote_name(r_table), r_name,
backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col)))