Fixed #12977 -- Ensure that indexes don't exceed character limits on MySQL. Thanks to carljm for the original report, and hgeerts@osso.nl for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13040 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4e0aa65d16
commit
9d8492c169
|
@ -260,6 +260,8 @@ class BaseDatabaseCreation(object):
|
|||
|
||||
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 @@ class BaseDatabaseCreation(object):
|
|||
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)) +
|
||||
|
|
|
@ -227,6 +227,9 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||
second = '%s-12-31 23:59:59.99'
|
||||
return [first % value, second % value]
|
||||
|
||||
def max_name_length(self):
|
||||
return 64
|
||||
|
||||
class DatabaseWrapper(BaseDatabaseWrapper):
|
||||
|
||||
operators = {
|
||||
|
|
Loading…
Reference in New Issue