From fa5e0562dcdf438ca7c1285b6d69f6c31bf0c676 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Tue, 1 Aug 2006 21:46:51 +0000 Subject: [PATCH] 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 --- django/core/management.py | 10 +++------- 1 file 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)))