Commit cd99c12f authored by Justin Bronn's avatar Justin Bronn
Browse files

Fixed `F()` expression regressions in GeoDjango caused by recent datastructure...

Fixed `F()` expression regressions in GeoDjango caused by recent datastructure changes in `SQLEvaluator`.
parent 84f97416
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -116,6 +116,16 @@ class BaseSpatialOperations(object):
        """
        raise NotImplementedError

    def get_expression_column(self, evaluator):
        """
        Helper method to return the quoted column string from the evaluator
        for its expression.
        """
        for expr, col_tup in evaluator.cols:
            if expr is evaluator.expression:
                return '%s.%s' % tuple(map(self.quote_name, col_tup))
        raise Exception("Could not find the column for the expression.")

    # Spatial SQL Construction
    def spatial_aggregate_sql(self, agg):
        raise NotImplementedError('Aggregate support not implemented for this spatial backend.')
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ class MySQLOperations(DatabaseOperations, BaseSpatialOperations):
        modify the placeholder based on the contents of the given value.
        """
        if hasattr(value, 'expression'):
            placeholder = '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
            placeholder = placeholder % self.get_expression_column(value)
        else:
            placeholder = '%s(%%s)' % self.from_text
        return placeholder
+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ class OracleOperations(DatabaseOperations, BaseSpatialOperations):
                placeholder = '%s'
            # No geometry value used for F expression, substitue in
            # the column name instead.
            return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
            return placeholder % self.get_expression_column(value)
        else:
            if transform_value(value, f.srid):
                return '%s(SDO_GEOMETRY(%%s, %s), %s)' % (self.transform, value.srid, f.srid)
+1 −1
Original line number Diff line number Diff line
@@ -381,7 +381,7 @@ class PostGISOperations(DatabaseOperations, BaseSpatialOperations):
            # If this is an F expression, then we don't really want
            # a placeholder and instead substitute in the column
            # of the expression.
            placeholder = placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
            placeholder = placeholder % self.get_expression_column(value)

        return placeholder

+1 −1
Original line number Diff line number Diff line
@@ -208,7 +208,7 @@ class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
                placeholder = '%s'
            # No geometry value used for F expression, substitue in
            # the column name instead.
            return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
            return placeholder % self.get_expression_column(value)
        else:
            if transform_value(value, f.srid):
                # Adding Transform() to the SQL placeholder.