[1.11.x] Fixed #27135 -- Made index introspection return Index.suffix.
Backport of b008f7cc56
from master
This commit is contained in:
parent
197a2cd487
commit
2f6cdc09c4
|
@ -6,6 +6,7 @@ from MySQLdb.constants import FIELD_TYPE
|
|||
from django.db.backends.base.introspection import (
|
||||
BaseDatabaseIntrospection, FieldInfo, TableInfo,
|
||||
)
|
||||
from django.db.models.indexes import Index
|
||||
from django.utils.datastructures import OrderedSet
|
||||
from django.utils.deprecation import RemovedInDjango21Warning
|
||||
from django.utils.encoding import force_text
|
||||
|
@ -217,7 +218,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||
'foreign_key': None,
|
||||
}
|
||||
constraints[index]['index'] = True
|
||||
constraints[index]['type'] = type_.lower()
|
||||
constraints[index]['type'] = Index.suffix if type_ == 'BTREE' else type_.lower()
|
||||
constraints[index]['columns'].add(column)
|
||||
# Convert the sorted sets to lists
|
||||
for constraint in constraints.values():
|
||||
|
|
|
@ -281,7 +281,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||
"foreign_key": None,
|
||||
"check": False,
|
||||
"index": True,
|
||||
"type": 'btree' if type_ == 'normal' else type_,
|
||||
"type": 'idx' if type_ == 'normal' else type_,
|
||||
}
|
||||
# Record the details
|
||||
constraints[constraint]['columns'].append(column)
|
||||
|
|
|
@ -5,6 +5,7 @@ import warnings
|
|||
from django.db.backends.base.introspection import (
|
||||
BaseDatabaseIntrospection, FieldInfo, TableInfo,
|
||||
)
|
||||
from django.db.models.indexes import Index
|
||||
from django.utils.deprecation import RemovedInDjango21Warning
|
||||
from django.utils.encoding import force_text
|
||||
|
||||
|
@ -236,7 +237,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||
"foreign_key": None,
|
||||
"check": False,
|
||||
"index": True,
|
||||
"type": type_,
|
||||
"type": Index.suffix if type_ == 'btree' else type_,
|
||||
"definition": definition,
|
||||
"options": options,
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import warnings
|
|||
from django.db.backends.base.introspection import (
|
||||
BaseDatabaseIntrospection, FieldInfo, TableInfo,
|
||||
)
|
||||
from django.db.models.indexes import Index
|
||||
from django.utils.deprecation import RemovedInDjango21Warning
|
||||
|
||||
field_size_re = re.compile(r'^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$')
|
||||
|
@ -262,7 +263,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||
# Add type and column orders for indexes
|
||||
if constraints[index]['index'] and not constraints[index]['unique']:
|
||||
# SQLite doesn't support any index type other than b-tree
|
||||
constraints[index]['type'] = 'btree'
|
||||
constraints[index]['type'] = Index.suffix
|
||||
cursor.execute(
|
||||
"SELECT sql FROM sqlite_master "
|
||||
"WHERE type='index' AND name=%s" % self.connection.ops.quote_name(index)
|
||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
|||
from unittest import skipUnless
|
||||
|
||||
from django.db import connection
|
||||
from django.db.models import Index
|
||||
from django.db.utils import DatabaseError
|
||||
from django.test import TransactionTestCase, mock, skipUnlessDBFeature
|
||||
from django.test.utils import ignore_warnings
|
||||
|
@ -193,7 +194,7 @@ class IntrospectionTests(TransactionTestCase):
|
|||
for key, val in constraints.items():
|
||||
if val['columns'] == ['headline', 'pub_date']:
|
||||
index = val
|
||||
self.assertEqual(index['type'], 'btree')
|
||||
self.assertEqual(index['type'], Index.suffix)
|
||||
|
||||
@skipUnlessDBFeature('supports_index_column_ordering')
|
||||
def test_get_constraints_indexes_orders(self):
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
from django.db import models
|
||||
from django.test import TestCase
|
||||
from django.test import SimpleTestCase
|
||||
|
||||
from .models import Book
|
||||
|
||||
|
||||
class IndexesTests(TestCase):
|
||||
class IndexesTests(SimpleTestCase):
|
||||
|
||||
def test_suffix(self):
|
||||
self.assertEqual(models.Index.suffix, 'idx')
|
||||
|
||||
def test_repr(self):
|
||||
index = models.Index(fields=['title'])
|
||||
|
|
|
@ -9,6 +9,9 @@ from .models import CharFieldModel, IntegerArrayModel
|
|||
@skipUnlessDBFeature('has_brin_index_support')
|
||||
class BrinIndexTests(PostgreSQLTestCase):
|
||||
|
||||
def test_suffix(self):
|
||||
self.assertEqual(BrinIndex.suffix, 'brin')
|
||||
|
||||
def test_repr(self):
|
||||
index = BrinIndex(fields=['title'], pages_per_range=4)
|
||||
another_index = BrinIndex(fields=['title'])
|
||||
|
@ -41,6 +44,9 @@ class BrinIndexTests(PostgreSQLTestCase):
|
|||
|
||||
class GinIndexTests(PostgreSQLTestCase):
|
||||
|
||||
def test_suffix(self):
|
||||
self.assertEqual(GinIndex.suffix, 'gin')
|
||||
|
||||
def test_repr(self):
|
||||
index = GinIndex(fields=['title'])
|
||||
self.assertEqual(repr(index), "<GinIndex: fields='title'>")
|
||||
|
@ -84,7 +90,7 @@ class SchemaTests(PostgreSQLTestCase):
|
|||
editor.add_index(IntegerArrayModel, index)
|
||||
constraints = self.get_constraints(IntegerArrayModel._meta.db_table)
|
||||
# Check gin index was added
|
||||
self.assertEqual(constraints[index_name]['type'], 'gin')
|
||||
self.assertEqual(constraints[index_name]['type'], GinIndex.suffix)
|
||||
# Drop the index
|
||||
with connection.schema_editor() as editor:
|
||||
editor.remove_index(IntegerArrayModel, index)
|
||||
|
@ -97,7 +103,7 @@ class SchemaTests(PostgreSQLTestCase):
|
|||
with connection.schema_editor() as editor:
|
||||
editor.add_index(CharFieldModel, index)
|
||||
constraints = self.get_constraints(CharFieldModel._meta.db_table)
|
||||
self.assertEqual(constraints[index_name]['type'], 'brin')
|
||||
self.assertEqual(constraints[index_name]['type'], BrinIndex.suffix)
|
||||
self.assertEqual(constraints[index_name]['options'], ['pages_per_range=4'])
|
||||
with connection.schema_editor() as editor:
|
||||
editor.remove_index(CharFieldModel, index)
|
||||
|
|
Loading…
Reference in New Issue