Return the SQL statement to create the index for one or several fields or expressions. `sql` can be specified if the syntax differs from the standard (GIS indexes, ...).
(
self,
model,
*,
fields=None,
name=None,
suffix="",
using="",
db_tablespace=None,
col_suffixes=(),
sql=None,
opclasses=(),
condition=None,
include=None,
expressions=None,
)
| 1567 | ) |
| 1568 | |
| 1569 | def _create_index_sql( |
| 1570 | self, |
| 1571 | model, |
| 1572 | *, |
| 1573 | fields=None, |
| 1574 | name=None, |
| 1575 | suffix="", |
| 1576 | using="", |
| 1577 | db_tablespace=None, |
| 1578 | col_suffixes=(), |
| 1579 | sql=None, |
| 1580 | opclasses=(), |
| 1581 | condition=None, |
| 1582 | include=None, |
| 1583 | expressions=None, |
| 1584 | ): |
| 1585 | """ |
| 1586 | Return the SQL statement to create the index for one or several fields |
| 1587 | or expressions. `sql` can be specified if the syntax differs from the |
| 1588 | standard (GIS indexes, ...). |
| 1589 | """ |
| 1590 | fields = fields or [] |
| 1591 | expressions = expressions or [] |
| 1592 | compiler = Query(model, alias_cols=False).get_compiler( |
| 1593 | connection=self.connection, |
| 1594 | ) |
| 1595 | tablespace_sql = self._get_index_tablespace_sql( |
| 1596 | model, fields, db_tablespace=db_tablespace |
| 1597 | ) |
| 1598 | columns = [field.column for field in fields] |
| 1599 | sql_create_index = sql or self.sql_create_index |
| 1600 | table = model._meta.db_table |
| 1601 | |
| 1602 | def create_index_name(*args, **kwargs): |
| 1603 | nonlocal name |
| 1604 | if name is None: |
| 1605 | name = self._create_index_name(*args, **kwargs) |
| 1606 | return self.quote_name(name) |
| 1607 | |
| 1608 | return Statement( |
| 1609 | sql_create_index, |
| 1610 | table=Table(table, self.quote_name), |
| 1611 | name=IndexName(table, columns, suffix, create_index_name), |
| 1612 | using=using, |
| 1613 | columns=( |
| 1614 | self._index_columns(table, columns, col_suffixes, opclasses) |
| 1615 | if columns |
| 1616 | else Expressions(table, expressions, compiler, self.quote_value) |
| 1617 | ), |
| 1618 | extra=tablespace_sql, |
| 1619 | condition=self._index_condition_sql(condition), |
| 1620 | include=self._index_include_sql(model, include), |
| 1621 | ) |
| 1622 | |
| 1623 | def _delete_index_sql(self, model, name, sql=None): |
| 1624 | statement = Statement( |
no test coverage detected