Skip to content
This repository has been archived by the owner on Nov 27, 2022. It is now read-only.

Django1.7 compatibility - query.promote_joins() changes #8

Closed
end0 opened this issue Aug 29, 2014 · 1 comment
Closed

Django1.7 compatibility - query.promote_joins() changes #8

end0 opened this issue Aug 29, 2014 · 1 comment

Comments

@end0
Copy link

end0 commented Aug 29, 2014

It seems that this packages is pretty well adjusted for Django1.7, except for an issue with the query.promote_joins() method.

I'm not 100% sure, but it appears that in Django1.6, promote_joins allows for an unconditional kwarg to be passed:

def promote_joins(self, aliases, unconditional=False):
    """
    Promotes recursively the join type of given aliases and its children to
    an outer join. If 'unconditional' is False, the join is only promoted if
    it is nullable or the parent join is an outer join.

    Note about join promotion: When promoting any alias, we make sure all
    joins which start from that alias are promoted, too. When adding a join
    in join(), we make sure any join added to already existing LOUTER join
    is generated as LOUTER. This ensures we don't ever have broken join
    chains which contain first a LOUTER join, then an INNER JOIN, that is
    this kind of join should never be generated: a LOUTER b INNER c. The
    reason for avoiding this type of join chain is that the INNER after
    the LOUTER will effectively remove any effect the LOUTER had.
    """

but in Django1.7, this kwarg is removed:

def promote_joins(self, aliases):
    """
    Promotes recursively the join type of given aliases and its children to
    an outer join. If 'unconditional' is False, the join is only promoted if
    it is nullable or the parent join is an outer join.

    The children promotion is done to avoid join chains that contain a LOUTER
    b INNER c. So, if we have currently a INNER b INNER c and a->b is promoted,
    then we must also promote b->c automatically, or otherwise the promotion
    of a->b doesn't actually change anything in the query results.
    """

aggregate_if.py seems to choke on this at line 122

# Django 1.5+
    if hasattr(query, 'promote_joins'):
        query.promote_joins(join_list, True)

Removing the True arg seems to make it work, but I'm not sure if it passes all the relevant tests...

@henriquebastos
Copy link
Owner

The branch django-1.7 is well evolved. There's 1 failing test blocking the new release.

I didn't had the time to investigate it any further. Any help is very welcome.

If you're on a hurry you can:

pip install git+https://github.com/henriquebastos/django-aggregate-if.git@django-1.7

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants