From: Michael Tremer Date: Thu, 11 Feb 2021 13:09:36 +0000 (+0000) Subject: db: Load dependencies X-Git-Tag: 0.9.28~1285^2~768 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=24be412af6cd21ef5d9e5e25eda4d8f2fc7940af;p=pakfire.git db: Load dependencies Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/db.c b/src/libpakfire/db.c index 0475c9cd8..5446c1e4c 100644 --- a/src/libpakfire/db.c +++ b/src/libpakfire/db.c @@ -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" ";";