Browse Source

Refs #26167 -- Made DatabaseSchemaEditor._create_index_sql()'s fields argument optional and kwarg-only.

Hannes Ljungberg 4 years ago
parent
commit
d23cb83c99

+ 3 - 3
django/contrib/gis/db/backends/postgis/schema.py

@@ -18,9 +18,9 @@ class PostGISSchemaEditor(DatabaseSchemaEditor):
             return True
         return super()._field_should_be_indexed(model, field)
 
-    def _create_index_sql(self, model, fields, **kwargs):
-        if len(fields) != 1 or not hasattr(fields[0], 'geodetic'):
-            return super()._create_index_sql(model, fields, **kwargs)
+    def _create_index_sql(self, model, *, fields=None, **kwargs):
+        if fields is None or len(fields) != 1 or not hasattr(fields[0], 'geodetic'):
+            return super()._create_index_sql(model, fields=fields, **kwargs)
 
         field = fields[0]
         field_column = self.quote_name(field.column)

+ 5 - 5
django/db/backends/base/schema.py

@@ -407,7 +407,7 @@ class BaseDatabaseSchemaEditor:
         # Created indexes
         for field_names in news.difference(olds):
             fields = [model._meta.get_field(field) for field in field_names]
-            self.execute(self._create_index_sql(model, fields, suffix="_idx"))
+            self.execute(self._create_index_sql(model, fields=fields, suffix='_idx'))
 
     def _delete_composed_index(self, model, fields, constraint_kwargs, sql):
         meta_constraint_names = {constraint.name for constraint in model._meta.constraints}
@@ -778,7 +778,7 @@ class BaseDatabaseSchemaEditor:
         # False              | True             | True               | False
         # True               | True             | True               | False
         if (not old_field.db_index or old_field.unique) and new_field.db_index and not new_field.unique:
-            self.execute(self._create_index_sql(model, [new_field]))
+            self.execute(self._create_index_sql(model, fields=[new_field]))
         # Type alteration on primary key? Then we need to alter the column
         # referring to us.
         rels_to_update = []
@@ -990,7 +990,7 @@ class BaseDatabaseSchemaEditor:
             columns=Columns(model._meta.db_table, columns, self.quote_name),
         )
 
-    def _create_index_sql(self, model, fields, *, name=None, suffix='', using='',
+    def _create_index_sql(self, model, *, fields=None, name=None, suffix='', using='',
                           db_tablespace=None, col_suffixes=(), sql=None, opclasses=(),
                           condition=None, include=None):
         """
@@ -1043,7 +1043,7 @@ class BaseDatabaseSchemaEditor:
 
         for field_names in model._meta.index_together:
             fields = [model._meta.get_field(field) for field in field_names]
-            output.append(self._create_index_sql(model, fields, suffix="_idx"))
+            output.append(self._create_index_sql(model, fields=fields, suffix='_idx'))
 
         for index in model._meta.indexes:
             output.append(index.create_sql(model, self))
@@ -1055,7 +1055,7 @@ class BaseDatabaseSchemaEditor:
         """
         output = []
         if self._field_should_be_indexed(model, field):
-            output.append(self._create_index_sql(model, [field]))
+            output.append(self._create_index_sql(model, fields=[field]))
         return output
 
     def _field_should_be_altered(self, old_field, new_field):

+ 3 - 1
django/db/backends/mysql/schema.py

@@ -126,7 +126,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
         if first_field.get_internal_type() == 'ForeignKey':
             constraint_names = self._constraint_names(model, [first_field.column], index=True)
             if not constraint_names:
-                self.execute(self._create_index_sql(model, [first_field], suffix=""))
+                self.execute(
+                    self._create_index_sql(model, fields=[first_field], suffix='')
+                )
         return super()._delete_composed_index(model, fields, *args)
 
     def _set_field_new_type_null_status(self, field, new_type):

+ 16 - 6
django/db/backends/postgresql/schema.py

@@ -83,9 +83,19 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
             if '[' in db_type:
                 return None
             if db_type.startswith('varchar'):
-                return self._create_index_sql(model, [field], suffix='_like', opclasses=['varchar_pattern_ops'])
+                return self._create_index_sql(
+                    model,
+                    fields=[field],
+                    suffix='_like',
+                    opclasses=['varchar_pattern_ops'],
+                )
             elif db_type.startswith('text'):
-                return self._create_index_sql(model, [field], suffix='_like', opclasses=['text_pattern_ops'])
+                return self._create_index_sql(
+                    model,
+                    fields=[field],
+                    suffix='_like',
+                    opclasses=['text_pattern_ops'],
+                )
         return None
 
     def _alter_column_type_sql(self, model, old_field, new_field, new_type):
@@ -215,13 +225,13 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
         return super()._delete_index_sql(model, name, sql)
 
     def _create_index_sql(
-        self, model, fields, *, name=None, suffix='', using='',
+        self, model, *, fields=None, name=None, suffix='', using='',
         db_tablespace=None, col_suffixes=(), sql=None, opclasses=(),
         condition=None, concurrently=False, include=None,
     ):
         sql = self.sql_create_index if not concurrently else self.sql_create_index_concurrently
         return super()._create_index_sql(
-            model, fields, name=name, suffix=suffix, using=using, db_tablespace=db_tablespace,
-            col_suffixes=col_suffixes, sql=sql, opclasses=opclasses, condition=condition,
-            include=include,
+            model, fields=fields, name=name, suffix=suffix, using=using,
+            db_tablespace=db_tablespace, col_suffixes=col_suffixes, sql=sql,
+            opclasses=opclasses, condition=condition, include=include,
         )

+ 4 - 3
django/db/models/indexes.py

@@ -66,9 +66,10 @@ class Index:
         col_suffixes = [order[1] for order in self.fields_orders]
         condition = self._get_condition_sql(model, schema_editor)
         return schema_editor._create_index_sql(
-            model, fields, name=self.name, using=using, db_tablespace=self.db_tablespace,
-            col_suffixes=col_suffixes, opclasses=self.opclasses, condition=condition,
-            include=include, **kwargs,
+            model, fields=fields, name=self.name, using=using,
+            db_tablespace=self.db_tablespace, col_suffixes=col_suffixes,
+            opclasses=self.opclasses, condition=condition, include=include,
+            **kwargs,
         )
 
     def remove_sql(self, model, schema_editor, **kwargs):