Author: russellm
Date: 2010-04-28 07:08:30 -0500 (Wed, 28 Apr 2010)
New Revision: 13040

Modified:
   django/trunk/django/db/backends/creation.py
   django/trunk/django/db/backends/mysql/base.py
Log:
Fixed #12977 -- Ensure that indexes don't exceed character limits on MySQL. 
Thanks to carljm for the original report, and hgee...@osso.nl for the patch.

Modified: django/trunk/django/db/backends/creation.py
===================================================================
--- django/trunk/django/db/backends/creation.py 2010-04-28 11:27:38 UTC (rev 
13039)
+++ django/trunk/django/db/backends/creation.py 2010-04-28 12:08:30 UTC (rev 
13040)
@@ -260,6 +260,8 @@
 
     def sql_indexes_for_field(self, model, f, style):
         "Return the CREATE INDEX SQL statements for a single model field"
+        from django.db.backends.util import truncate_name
+
         if f.db_index and not f.unique:
             qn = self.connection.ops.quote_name
             tablespace = f.db_tablespace or model._meta.db_tablespace
@@ -271,8 +273,9 @@
                     tablespace_sql = ''
             else:
                 tablespace_sql = ''
+            i_name = '%s_%s' % (model._meta.db_table, self._digest(f.column))
             output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
-                style.SQL_TABLE(qn('%s_%s' % (model._meta.db_table, 
f.column))) + ' ' +
+                style.SQL_TABLE(qn(truncate_name(i_name, 
self.connection.ops.max_name_length()))) + ' ' +
                 style.SQL_KEYWORD('ON') + ' ' +
                 style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
                 "(%s)" % style.SQL_FIELD(qn(f.column)) +

Modified: django/trunk/django/db/backends/mysql/base.py
===================================================================
--- django/trunk/django/db/backends/mysql/base.py       2010-04-28 11:27:38 UTC 
(rev 13039)
+++ django/trunk/django/db/backends/mysql/base.py       2010-04-28 12:08:30 UTC 
(rev 13040)
@@ -227,6 +227,9 @@
         second = '%s-12-31 23:59:59.99'
         return [first % value, second % value]
 
+    def max_name_length(self):
+        return 64
+
 class DatabaseWrapper(BaseDatabaseWrapper):
 
     operators = {

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to