]> git.ipfire.org Git - pakfire.git/commitdiff
db: Load dependencies
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Feb 2021 13:09:36 +0000 (13:09 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Feb 2021 13:09:36 +0000 (13:09 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/db.c

index 0475c9cd8daf5e3950c8bc646e1b8ef0abd16609..5446c1e4c91f4d64d7e814636dab35fd5fb5990d 100644 (file)
@@ -1479,12 +1479,41 @@ static int pakfire_db_load_package(struct pakfire_db* db, PakfireRepo repo, sqli
        // Files
        const char* files = (const char*)sqlite3_column_text(stmt, 17);
        if (files) {
-               DEBUG(db->pakfire, "FILES = %s\n", files);
                r = pakfire_package_set_filelist_from_string(pkg, files);
                if (r)
                        goto ERROR;
        }
 
+       // Dependencies
+
+       const struct dependency {
+               unsigned int field;
+               void (*func)(PakfirePackage pkg, PakfireRelationList list);
+       } dependencies[] = {
+               { 18, pakfire_package_set_provides },
+               { 19, pakfire_package_set_prerequires },
+               { 20, pakfire_package_set_requires },
+               { 21, pakfire_package_set_conflicts },
+               { 22, pakfire_package_set_obsoletes },
+               { 23, pakfire_package_set_recommends },
+               { 24, pakfire_package_set_suggests },
+               { 0, NULL },
+       };
+
+       for (const struct dependency* deps = dependencies; deps->field; deps++) {
+               const char* relations = (const char*)sqlite3_column_text(stmt, deps->field);
+               if (relations) {
+                       PakfireRelationList list;
+
+                       r = pakfire_relationlist_create_from_string(&list, db->pakfire, relations);
+                       if (r)
+                               goto ERROR;
+
+                       deps->func(pkg, list);
+                       pakfire_relationlist_unref(list);
+               }
+       }
+
        // Success
        r = 0;
 
@@ -1510,7 +1539,35 @@ int pakfire_db_load(struct pakfire_db* db, PakfireRepo repo) {
                        "hash1, license, summary, description, uuid, vendor, build_host, build_time, "
                        "("
                                "SELECT group_concat(name, '\n') FROM files WHERE files.pkg = packages.id"
-                       ") AS files "
+                       ") AS files, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'provides'"
+                       ") AS provides, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'prerequires'"
+                       ") AS prerequires, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'requires'"
+                       ") AS requires, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'conflicts'"
+                       ") AS conflicts, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'obsoletes'"
+                       ") AS obsoletes, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'recommends'"
+                       ") AS recommends, "
+                       "("
+                               "SELECT group_concat(dependency, '\n') FROM dependencies d "
+                                       "WHERE d.pkg = packages.id AND d.type = 'suggests'"
+                       ") AS suggests "
                "FROM "
                        "packages"
                ";";