]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/dbconn.py
remember to commit
[dak.git] / daklib / dbconn.py
index 113c38aa5fef3bf2d7a31015fa7622440ad73be4..9e09bdb36e73162441896b1912aa8a08e8886cc3 100755 (executable)
@@ -211,6 +211,27 @@ def get_binaries_from_name(package, session=None):
 
 __all__.append('get_binaries_from_name')
 
+def get_binary_from_name_suite(package, suitename, session=None):
+    ### For dak examine-package
+    ### XXX: Doesn't use object API yet
+    if session is None:
+        session = DBConn().session()
+
+    sql = """SELECT DISTINCT(b.package), b.version, c.name, su.suite_name
+             FROM binaries b, files fi, location l, component c, bin_associations ba, suite su
+             WHERE b.package=:package
+               AND b.file = fi.id
+               AND fi.location = l.id
+               AND l.component = c.id
+               AND ba.bin=b.id
+               AND ba.suite = su.id
+               AND su.suite_name=:suitename
+          ORDER BY b.version DESC"""
+
+    return session.execute(sql, {'package': package, 'suitename': suitename})
+
+__all__.append('get_binary_from_name_suite')
+
 def get_binary_components(package, suitename, arch, session=None):
 # Check for packages that have moved from one component to another
     query = """SELECT c.name FROM binaries b, bin_associations ba, suite s, location l, component c, architecture a, files f
@@ -317,6 +338,59 @@ def get_or_set_contents_file_id(filename, session=None):
 
 __all__.append('get_or_set_contents_file_id')
 
+def get_contents(suite, overridetype, section=None, session=None):
+    """
+    Returns contents for a suite / overridetype combination, limiting
+    to a section if not None.
+
+    @type suite: Suite
+    @param suite: Suite object
+
+    @type overridetype: OverrideType
+    @param overridetype: OverrideType object
+
+    @type section: Section
+    @param section: Optional section object to limit results to
+
+    @type session: SQLAlchemy
+    @param session: Optional SQL session object (a temporary one will be
+    generated if not supplied)
+
+    @rtype: ResultsProxy
+    @return: ResultsProxy object set up to return tuples of (filename, section,
+    package, arch_id)
+    """
+
+    if session is None:
+        session = DBConn().session()
+
+    # find me all of the contents for a given suite
+    contents_q = """SELECT (p.path||'/'||n.file) AS fn,
+                            s.section,
+                            b.package,
+                            b.architecture
+                   FROM content_associations c join content_file_paths p ON (c.filepath=p.id)
+                   JOIN content_file_names n ON (c.filename=n.id)
+                   JOIN binaries b ON (b.id=c.binary_pkg)
+                   JOIN override o ON (o.package=b.package)
+                   JOIN section s ON (s.id=o.section)
+                   WHERE o.suite = :suiteid AND o.type = :overridetypeid
+                   AND b.type=:overridetypename"""
+
+    vals = {'suiteid': suite.suite_id,
+            'overridetypeid': overridetype.overridetype_id,
+            'overridetypename': overridetype.overridetype}
+
+    if section is not None:
+        contents_q += " AND s.id = :sectionid"
+        vals['sectionid'] = section.section_id
+
+    contents_q += " ORDER BY fn"
+
+    return session.execute(contents_q, vals)
+
+__all__.append('get_contents')
+
 ################################################################################
 
 class ContentFilepath(object):
@@ -597,7 +671,7 @@ def get_override_type(override_type, session=None):
     """
     if session is None:
         session = DBConn().session()
-    q = session.query(Priority).filter_by(priority=priority)
+    q = session.query(OverrideType).filter_by(overridetype=override_type)
     if q.count() == 0:
         return None
     return q.one()