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