Kaydet (Commit) b008f7cc authored tarafından Tim Graham's avatar Tim Graham

Fixed #27135 -- Made index introspection return Index.suffix.

üst a7214f0e
......@@ -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():
......
......@@ -274,7 +274,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)
......
......@@ -3,6 +3,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
......@@ -234,7 +235,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)
......
from unittest import mock, skipUnless
from django.db import connection
from django.db.models import Index
from django.db.utils import DatabaseError
from django.test import TransactionTestCase, skipUnlessDBFeature
from django.test.utils import ignore_warnings
......@@ -191,7 +192,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):
......
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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment