Commit aa10f57d authored by Tim Graham's avatar Tim Graham
Browse files

[1.7.x] Fixed #22819 -- Renamed output_type -> output_field in query expression API.

Thanks jorgecarleitao for the suggestion.

Backport of 95cc0e15 from master
parent 57a770b8
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -16,13 +16,13 @@ class GISLookup(Lookup):
            if not geo_fld:
                raise ValueError('No geographic field found in expression.')
            self.rhs.srid = geo_fld.srid
        db_type = self.lhs.output_type.db_type(connection=connection)
        params = self.lhs.output_type.get_db_prep_lookup(
        db_type = self.lhs.output_field.db_type(connection=connection)
        params = self.lhs.output_field.get_db_prep_lookup(
            self.lookup_name, self.rhs, connection=connection)
        lhs_sql, lhs_params = self.process_lhs(qn, connection)
        # lhs_params not currently supported.
        assert not lhs_params
        data = (lhs_sql, db_type)
        spatial_sql, spatial_params = connection.ops.spatial_lookup_sql(
            data, self.lookup_name, self.rhs, self.lhs.output_type, qn)
            data, self.lookup_name, self.rhs, self.lhs.output_field, qn)
        return spatial_sql, spatial_params + params
+12 −12
Original line number Diff line number Diff line
@@ -26,16 +26,16 @@ class RegisterLookupMixin(object):

    def get_lookup(self, lookup_name):
        found = self._get_lookup(lookup_name)
        if found is None and hasattr(self, 'output_type'):
            return self.output_type.get_lookup(lookup_name)
        if found is None and hasattr(self, 'output_field'):
            return self.output_field.get_lookup(lookup_name)
        if found is not None and not issubclass(found, Lookup):
            return None
        return found

    def get_transform(self, lookup_name):
        found = self._get_lookup(lookup_name)
        if found is None and hasattr(self, 'output_type'):
            return self.output_type.get_transform(lookup_name)
        if found is None and hasattr(self, 'output_field'):
            return self.output_field.get_transform(lookup_name)
        if found is not None and not issubclass(found, Transform):
            return None
        return found
@@ -64,8 +64,8 @@ class Transform(RegisterLookupMixin):
        raise NotImplementedError

    @cached_property
    def output_type(self):
        return self.lhs.output_type
    def output_field(self):
        return self.lhs.output_field

    def relabeled_clone(self, relabels):
        return self.__class__(self.lhs.relabeled_clone(relabels))
@@ -82,11 +82,11 @@ class Lookup(RegisterLookupMixin):
        self.rhs = self.get_prep_lookup()

    def get_prep_lookup(self):
        return self.lhs.output_type.get_prep_lookup(self.lookup_name, self.rhs)
        return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)

    def get_db_prep_lookup(self, value, connection):
        return (
            '%s', self.lhs.output_type.get_db_prep_lookup(
            '%s', self.lhs.output_field.get_db_prep_lookup(
                self.lookup_name, value, connection, prepared=True))

    def process_lhs(self, qn, connection, lhs=None):
@@ -138,8 +138,8 @@ class BuiltinLookup(Lookup):
    def process_lhs(self, qn, connection, lhs=None):
        lhs_sql, params = super(BuiltinLookup, self).process_lhs(
            qn, connection, lhs)
        field_internal_type = self.lhs.output_type.get_internal_type()
        db_type = self.lhs.output_type.db_type(connection=connection)
        field_internal_type = self.lhs.output_field.get_internal_type()
        db_type = self.lhs.output_field.db_type(connection=connection)
        lhs_sql = connection.ops.field_cast_sql(
            db_type, field_internal_type) % lhs_sql
        lhs_sql = connection.ops.lookup_cast(self.lookup_name) % lhs_sql
@@ -203,7 +203,7 @@ class In(BuiltinLookup):
    lookup_name = 'in'

    def get_db_prep_lookup(self, value, connection):
        params = self.lhs.output_type.get_db_prep_lookup(
        params = self.lhs.output_field.get_db_prep_lookup(
            self.lookup_name, value, connection, prepared=True)
        if not params:
            # TODO: check why this leads to circular import
@@ -299,7 +299,7 @@ class DateLookup(BuiltinLookup):
    def process_lhs(self, qn, connection, lhs=None):
        from django.db.models import DateTimeField
        lhs, params = super(DateLookup, self).process_lhs(qn, connection, lhs)
        if isinstance(self.lhs.output_type, DateTimeField):
        if isinstance(self.lhs.output_field, DateTimeField):
            tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None
            sql, tz_params = connection.ops.datetime_extract_sql(self.extract_type, lhs, tzname)
            return connection.ops.lookup_cast(self.lookup_name) % sql, tz_params
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ class Aggregate(RegisterLookupMixin):
        return []

    @property
    def output_type(self):
    def output_field(self):
        return self.field


+3 −3
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ class Col(object):
        return "%s.%s" % (qn(self.alias), qn(self.target.column)), []

    @property
    def output_type(self):
    def output_field(self):
        return self.source

    def relabeled_clone(self, relabels):
@@ -22,10 +22,10 @@ class Col(object):
        return [(self.alias, self.target.column)]

    def get_lookup(self, name):
        return self.output_type.get_lookup(name)
        return self.output_field.get_lookup(name)

    def get_transform(self, name):
        return self.output_type.get_transform(name)
        return self.output_field.get_transform(name)

    def prepare(self):
        return self
+2 −2
Original line number Diff line number Diff line
@@ -1102,7 +1102,7 @@ class Query(object):
                raise FieldError(
                    "Unsupported lookup '%s' for %s or join on the field not "
                    "permitted." %
                    (lookup, lhs.output_type.__class__.__name__))
                    (lookup, lhs.output_field.__class__.__name__))
            lookups = lookups[1:]

    def build_filter(self, filter_expr, branch_negated=False, current_negated=False,
@@ -1190,7 +1190,7 @@ class Query(object):
                    raise FieldError(
                        "Join on field '%s' not permitted. Did you "
                        "misspell '%s' for the lookup type?" %
                        (col.output_type.name, lookups[0]))
                        (col.output_field.name, lookups[0]))
                if len(lookups) > 1:
                    raise FieldError("Nested lookup '%s' not supported." %
                                     LOOKUP_SEP.join(lookups))
Loading