Commit 134ca4d4 authored by Alex Hill's avatar Alex Hill Committed by Josh Smeaton
Browse files

Fixed #24509 -- Added Expression support to SQLInsertCompiler

parent 6e51d5d0
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -263,11 +263,10 @@ class OracleOperations(BaseSpatialOperations, DatabaseOperations):
        from django.contrib.gis.db.backends.oracle.models import OracleSpatialRefSys
        return OracleSpatialRefSys

    def modify_insert_params(self, placeholders, params):
    def modify_insert_params(self, placeholder, params):
        """Drop out insert parameters for NULL placeholder. Needed for Oracle Spatial
        backend due to #10888
        backend due to #10888.
        """
        # This code doesn't work for bulk insert cases.
        assert len(placeholders) == 1
        return [[param for pholder, param
                 in six.moves.zip(placeholders[0], params[0]) if pholder != 'NULL'], ]
        if placeholder == 'NULL':
            return []
        return super(OracleOperations, self).modify_insert_params(placeholder, params)
+1 −1
Original line number Diff line number Diff line
@@ -576,7 +576,7 @@ class BaseDatabaseOperations(object):
    def combine_duration_expression(self, connector, sub_expressions):
        return self.combine_expression(connector, sub_expressions)

    def modify_insert_params(self, placeholders, params):
    def modify_insert_params(self, placeholder, params):
        """Allow modification of insert parameters. Needed for Oracle Spatial
        backend due to #10888.
        """
+4 −3
Original line number Diff line number Diff line
@@ -166,9 +166,10 @@ class DatabaseOperations(BaseDatabaseOperations):
    def max_name_length(self):
        return 64

    def bulk_insert_sql(self, fields, num_values):
        items_sql = "(%s)" % ", ".join(["%s"] * len(fields))
        return "VALUES " + ", ".join([items_sql] * num_values)
    def bulk_insert_sql(self, fields, placeholder_rows):
        placeholder_rows_sql = (", ".join(row) for row in placeholder_rows)
        values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql)
        return "VALUES " + values_sql

    def combine_expression(self, connector, sub_expressions):
        """
+5 −3
Original line number Diff line number Diff line
@@ -439,6 +439,8 @@ WHEN (new.%(col_name)s IS NULL)
        name_length = self.max_name_length() - 3
        return '%s_TR' % truncate_name(table, name_length).upper()

    def bulk_insert_sql(self, fields, num_values):
        items_sql = "SELECT %s FROM DUAL" % ", ".join(["%s"] * len(fields))
        return " UNION ALL ".join([items_sql] * num_values)
    def bulk_insert_sql(self, fields, placeholder_rows):
        return " UNION ALL ".join(
            "SELECT %s FROM DUAL" % ", ".join(row)
            for row in placeholder_rows
        )
+4 −3
Original line number Diff line number Diff line
@@ -221,9 +221,10 @@ class DatabaseOperations(BaseDatabaseOperations):
    def return_insert_id(self):
        return "RETURNING %s", ()

    def bulk_insert_sql(self, fields, num_values):
        items_sql = "(%s)" % ", ".join(["%s"] * len(fields))
        return "VALUES " + ", ".join([items_sql] * num_values)
    def bulk_insert_sql(self, fields, placeholder_rows):
        placeholder_rows_sql = (", ".join(row) for row in placeholder_rows)
        values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql)
        return "VALUES " + values_sql

    def adapt_datefield_value(self, value):
        return value
Loading