mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.11.x] Fixed #27135 -- Made index introspection return Index.suffix.
Backport of b008f7cc56 from master
			
			
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user