MCPcopy
hub / github.com/django/django / as_sql

Method as_sql

django/db/models/sql/compiler.py:1800–1922  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1798 return placeholder_rows, param_rows
1799
1800 def as_sql(self):
1801 qn = self.quote_name
1802 opts = self.query.get_meta()
1803 insert_statement = self.connection.ops.insert_statement(
1804 on_conflict=self.query.on_conflict,
1805 )
1806 result = ["%s %s" % (insert_statement, qn(opts.db_table))]
1807
1808 if fields := list(self.query.fields):
1809 from django.db.models.expressions import DatabaseDefault
1810
1811 supports_default_keyword_in_bulk_insert = (
1812 self.connection.features.supports_default_keyword_in_bulk_insert
1813 )
1814 value_cols = []
1815 for field in list(fields):
1816 field_prepare = partial(self.prepare_value, field)
1817 field_pre_save = partial(self.pre_save_val, field)
1818
1819 field_values = []
1820 for obj in self.query.objs:
1821 value = field_pre_save(obj)
1822 if not isinstance(value, DatabaseDefault):
1823 value = field_prepare(value)
1824 field_values.append(value)
1825
1826 if not field.has_db_default():
1827 value_cols.append(field_values)
1828 continue
1829
1830 # If all values are DEFAULT don't include the field and its
1831 # values in the query as they are redundant and could prevent
1832 # optimizations. This cannot be done if we're dealing with the
1833 # last field as INSERT statements require at least one.
1834 if len(fields) > 1 and all(
1835 isinstance(value, DatabaseDefault) for value in field_values
1836 ):
1837 fields.remove(field)
1838 continue
1839
1840 if supports_default_keyword_in_bulk_insert:
1841 value_cols.append(field_values)
1842 continue
1843
1844 # If the field cannot be excluded from the INSERT for the
1845 # reasons listed above and the backend doesn't support the
1846 # DEFAULT keyword each values must be expanded into their
1847 # underlying expressions.
1848 prepared_db_default = field_prepare(field.db_default)
1849 field_values = [
1850 (
1851 prepared_db_default
1852 if isinstance(value, DatabaseDefault)
1853 else value
1854 )
1855 for value in field_values
1856 ]
1857 value_cols.append(field_values)

Callers 1

execute_sqlMethod · 0.95

Calls 11

assemble_as_sqlMethod · 0.95
has_db_defaultMethod · 0.80
get_metaMethod · 0.45
insert_statementMethod · 0.45
appendMethod · 0.45
removeMethod · 0.45
joinMethod · 0.45
pk_default_valueMethod · 0.45
bulk_insert_sqlMethod · 0.45
returning_columnsMethod · 0.45

Tested by

no test coverage detected