Get multilib package differences query working on sqlite3

Thank you database engines for all implementing such simple operations
as substring() and length() in different ways.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2012-07-08 20:44:07 -05:00
parent 0f3c894e7a
commit 3c906888e2

View File

@ -8,7 +8,8 @@
from django.contrib.auth.models import User
from main.models import Package, PackageFile, Arch, Repo
from main.utils import cache_function, groupby_preserve_order, PackageStandin
from main.utils import (cache_function, database_vendor,
groupby_preserve_order, PackageStandin)
from .models import (PackageGroup, PackageRelation,
License, Depend, Conflict, Provision, Replacement,
SignoffSpecification, Signoff, DEFAULT_SIGNOFF_SPEC)
@ -150,12 +151,18 @@ def get_differences_info(arch_a, arch_b):
def multilib_differences():
# Query for checking multilib out of date-ness
sql = """
SELECT ml.id, reg.id
FROM packages ml
JOIN packages reg
ON (
reg.pkgname = (
if database_vendor(Package) == 'sqlite':
pkgname_sql = """
CASE WHEN ml.pkgname LIKE %s
THEN SUBSTR(ml.pkgname, 7)
WHEN ml.pkgname LIKE %s
THEN SUBSTR(ml.pkgname, 1, LENGTH(ml.pkgname) - 9)
ELSE
ml.pkgname
END
"""
else:
pkgname_sql = """
CASE WHEN ml.pkgname LIKE %s
THEN SUBSTRING(ml.pkgname, 7)
WHEN ml.pkgname LIKE %s
@ -163,7 +170,13 @@ def multilib_differences():
ELSE
ml.pkgname
END
)
"""
sql = """
SELECT ml.id, reg.id
FROM packages ml
JOIN packages reg
ON (
reg.pkgname = (""" + pkgname_sql + """)
AND reg.pkgver != ml.pkgver
)
JOIN repos r ON reg.repo_id = r.id
@ -172,7 +185,7 @@ def multilib_differences():
AND r.staging = %s
AND reg.arch_id = %s
ORDER BY ml.last_update
"""
"""
multilib = Repo.objects.get(name__iexact='multilib')
i686 = Arch.objects.get(name='i686')
params = ['lib32-%', '%-multilib', multilib.id, False, False, i686.id]