From: Michael Tremer Date: Sun, 7 Feb 2021 17:11:12 +0000 (+0000) Subject: db: Add function which returns how many packages are installed X-Git-Tag: 0.9.28~1285^2~788 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=817757f4052c3bd00ad8ad28bb6edeac42fcabb4;p=pakfire.git db: Add function which returns how many packages are installed Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/db.c b/src/libpakfire/db.c index f49c18c55..6fb23dc47 100644 --- a/src/libpakfire/db.c +++ b/src/libpakfire/db.c @@ -626,6 +626,32 @@ PAKFIRE_EXPORT int pakfire_db_check(struct pakfire_db* db) { return 0; } +// Returns the number of packages installed +PAKFIRE_EXPORT ssize_t pakfire_db_packages(struct pakfire_db* db) { + sqlite3_stmt* stmt = NULL; + ssize_t packages = -1; + + int r = sqlite3_prepare_v2(db->handle, "SELECT COUNT(*) FROM packages", -1, &stmt, NULL); + if (r) { + ERROR(db->pakfire, "Could not prepare SQL statement: %s\n", + sqlite3_errmsg(db->handle)); + return -1; + } + + // Execute query + do { + r = sqlite3_step(stmt); + } while (r == SQLITE_BUSY); + + if (r == SQLITE_ROW) { + packages = sqlite3_column_int64(stmt, 0); + } + + sqlite3_finalize(stmt); + + return packages; +} + static int pakfire_db_add_dependencies(struct pakfire_db* db, unsigned long id, PakfirePackage pkg) { sqlite3_stmt* stmt = NULL; int r = 1; diff --git a/src/libpakfire/include/pakfire/db.h b/src/libpakfire/include/pakfire/db.h index 7ad58a102..7c0332196 100644 --- a/src/libpakfire/include/pakfire/db.h +++ b/src/libpakfire/include/pakfire/db.h @@ -21,6 +21,8 @@ #ifndef PAKFIRE_DB_H #define PAKFIRE_DB_H +#include + #include struct pakfire_db; @@ -37,6 +39,8 @@ struct pakfire_db* pakfire_db_unref(struct pakfire_db* db); int pakfire_db_check(struct pakfire_db* db); +ssize_t pakfire_db_packages(struct pakfire_db* db); + int pakfire_db_add_package(struct pakfire_db* db, PakfirePackage pkg, PakfireArchive archive); int pakfire_db_remove_package(struct pakfire_db* db, PakfirePackage pkg); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 99087a39b..53a4d8e20 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -82,6 +82,7 @@ global: pakfire_db_add_package; pakfire_db_check; pakfire_db_open; + pakfire_db_packages; pakfire_db_ref; pakfire_db_remove_package; pakfire_db_unref; diff --git a/tests/libpakfire/db.c b/tests/libpakfire/db.c index 05922ff26..5aede44c6 100644 --- a/tests/libpakfire/db.c +++ b/tests/libpakfire/db.c @@ -71,6 +71,10 @@ static int test_add_package(const struct test* t) { int r = pakfire_db_open(&db, t->pakfire, PAKFIRE_DB_READWRITE); ASSERT(!r); + // There must be no packages installed + ssize_t packages = pakfire_db_packages(db); + ASSERT(packages == 0); + char* path = pakfire_path_join(TEST_SRC_PATH, "data/beep-1.3-2.ip3.x86_64.pfm"); // Open archive @@ -85,6 +89,10 @@ static int test_add_package(const struct test* t) { r = pakfire_db_add_package(db, pkg, archive); ASSERT(r == 0); + // One package should be installed + packages = pakfire_db_packages(db); + ASSERT(packages == 1); + // Cleanup pakfire_archive_unref(archive); pakfire_db_unref(db);