Refs #27935 -- Fixed BrinIndex.max_name_length if a project's default database isn't PostgreSQL.

Thanks Florian Apolloner for the report.
This commit is contained in:
Mariusz Felisiak 2017-03-20 16:21:01 +01:00 committed by Tim Graham
parent 6cb0a3ac28
commit 2867b7eb4b
1 changed files with 5 additions and 10 deletions

View File

@ -1,12 +1,15 @@
from django.db import connection
from django.db.models import Index
from django.utils.functional import cached_property
__all__ = ['BrinIndex', 'GinIndex']
class BrinIndex(Index):
suffix = 'brin'
# Allow an index name longer than 30 characters since the suffix is 4
# characters (usual limit is 3). Since this index can only be used on
# PostgreSQL, the 30 character limit for cross-database compatibility isn't
# applicable.
max_name_length = 31
def __init__(self, fields=[], name=None, pages_per_range=None):
if pages_per_range is not None and pages_per_range <= 0:
@ -36,14 +39,6 @@ class BrinIndex(Index):
schema_editor.quote_value(self.pages_per_range)) + parameters['extra']
return parameters
@cached_property
def max_name_length(self):
# Allow an index name longer than 30 characters since the suffix
# is 4 characters (usual limit is 3). Since this index can only be
# used on PostgreSQL, the 30 character limit for cross-database
# compatibility isn't applicable.
return connection.ops.max_name_length()
class GinIndex(Index):
suffix = 'gin'