[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [dak/master] Use distinct() to avoid listing duplicated claimed overrides



On 04/26/2013 12:56, Luca Falavigna wrote:
> --- a/dak/process_new.py
> +++ b/dak/process_new.py
> @@ -126,11 +126,16 @@ def claimed_overrides(upload, missing, session):
>      for m in missing:
>          if m['type'] != 'dsc':
>              binaries.remove(m['package'])
> -    return session.query(DBBinary).filter(DBBinary.package.in_(binaries)). \
> -                         join(DBBinary.source). \
> -                         filter(not_(DBSource.source.in_(source))). \
> -                         join(DBBinary.suites). \
> -                         filter(Suite.suite_name.in_(suites))
> +    if binaries:
> +        return session.query(DBBinary.package, DBSource.source).distinct(). \
> +                             filter(DBBinary.package.in_(binaries)). \
> +                             join(DBBinary.source). \
> +                             filter(not_(DBSource.source.in_(source))). \
> +                             join(DBBinary.suites). \
> +                             filter(Suite.suite_name.in_(suites)). \
> +                             order_by(DBSource.source, DBBinary.package)
> +    else:
> +        return None

Why not just return an empty list instead of None?

> @@ -154,10 +159,10 @@ def print_new (upload, missing, indexed, session, file=sys.stdout):
>              line = line + ' [!]'
>          print >>file, line
>      claimed = claimed_overrides(upload, missing, session)
> -    if claimed.count():
> +    if claimed and claimed.count():

I think this does two SQL queries: one to check count() > 0 and another
one to iterate over the packages. Just use

  claimed = claimed_overrides(...).all()

to get a list then check len(claimed) > 0. Or include the .all() in the
claimed_overrides function.

Ansgar


Reply to: