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):
|
def sql_indexes_for_field(self, model, f, style):
|
||||||
"Return the CREATE INDEX SQL statements for a single model field"
|
"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:
|
if f.db_index and not f.unique:
|
||||||
qn = self.connection.ops.quote_name
|
qn = self.connection.ops.quote_name
|
||||||
tablespace = f.db_tablespace or model._meta.db_tablespace
|
tablespace = f.db_tablespace or model._meta.db_tablespace
|
||||||
|
@ -271,8 +273,9 @@ class BaseDatabaseCreation(object):
|
||||||
tablespace_sql = ''
|
tablespace_sql = ''
|
||||||
else:
|
else:
|
||||||
tablespace_sql = ''
|
tablespace_sql = ''
|
||||||
|
i_name = '%s_%s' % (model._meta.db_table, self._digest(f.column))
|
||||||
output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
|
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_KEYWORD('ON') + ' ' +
|
||||||
style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
|
style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
|
||||||
"(%s)" % style.SQL_FIELD(qn(f.column)) +
|
"(%s)" % style.SQL_FIELD(qn(f.column)) +
|
||||||
|
|
|
@ -227,6 +227,9 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||||
second = '%s-12-31 23:59:59.99'
|
second = '%s-12-31 23:59:59.99'
|
||||||
return [first % value, second % value]
|
return [first % value, second % value]
|
||||||
|
|
||||||
|
def max_name_length(self):
|
||||||
|
return 64
|
||||||
|
|
||||||
class DatabaseWrapper(BaseDatabaseWrapper):
|
class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
|
|
||||||
operators = {
|
operators = {
|
||||||
|
|
Loading…
Reference in New Issue