Ole Streicher pushed to branch experimental at Debian Blends Team / blends
Commits: 41c7deb4 by Ole Streicher at 2018-04-12T14:55:43+02:00 blends.py: Normalize "provides" column in UDD query - - - - - 1 changed file: - blends.py Changes: ===================================== blends.py ===================================== --- a/blends.py +++ b/blends.py @@ -771,27 +771,63 @@ def uddcache(packages, release, components=['main'], **db_args): Version = collections.namedtuple('Version', ('package', 'architecture', 'version')) - stmt = '''SELECT packages.package, - packages.provides, - packages.architecture, - packages.version - FROM packages, releases - WHERE packages.release=releases.release - AND (releases.release=%s OR releases.role=%s) - AND (packages.package IN %s OR packages.provides in %s) - AND packages.component IN %s;''' + # To make the SELECT statements easier, we create a virtual view + # of the "packages" table that is restricted to the release and + # the component(s) + pkg_view_stmt = ''' + CREATE TEMPORARY VIEW pkg + AS SELECT packages.package, + packages.version, + packages.architecture, + packages.provides + FROM packages, releases + WHERE packages.release=releases.release + AND (releases.release=%s OR releases.role=%s) + AND packages.component IN %s; + ''' + + # Since the "provides" are in a comma separated list, we create a + # normalized view + provides_view_stmt = ''' + CREATE TEMPORARY VIEW provides + AS SELECT DISTINCT + package, + version, + architecture, + regexp_split_to_table(provides, E',\\s*') AS provides + FROM pkg; + ''' + + # Query all packages that have one of the specified names either as + # package name, or as one of the provides + query_stmt = ''' + SELECT package, + version, + architecture, + provides + FROM pkg + WHERE package IN %s + UNION + SELECT package, + version, + architecture, + provides + FROM provides + WHERE provides IN %s; + ''' with psycopg2.connect(**db_args) as conn: cursor = conn.cursor() - cursor.execute(stmt, (release, release, pkgtuple, pkgtuple, - componenttuple)) + cursor.execute(pkg_view_stmt, (release, release, componenttuple)) + cursor.execute(provides_view_stmt) + cursor.execute(query_stmt, (pkgtuple, pkgtuple)) cache = dict() - for package, provides, arch, version in cursor: + for package, version, arch, provides in cursor: p = cache.setdefault(package, Package(package, [])) p.versions.append(Version(p, arch, version)) if provides: - pp = cache.setdefault(provides, Package(package, [])) - pp.versions.append(Version(p, arch, version)) - + for prv in provides.split(','): + pp = cache.setdefault(prv, Package(package, [])) + pp.versions.append(Version(p, arch, version)) return cache View it on GitLab: https://salsa.debian.org/blends-team/blends/commit/41c7deb4144113b28fbdbca92d8b87ea11177ef2 --- View it on GitLab: https://salsa.debian.org/blends-team/blends/commit/41c7deb4144113b28fbdbca92d8b87ea11177ef2 You're receiving this email because of your account on salsa.debian.org.
_______________________________________________ Blends-commit mailing list Blends-commit@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/blends-commit