]> git.ipfire.org Git - pakfire.git/commitdiff
db: Add function which returns how many packages are installed
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 7 Feb 2021 17:11:12 +0000 (17:11 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 7 Feb 2021 17:11:12 +0000 (17:11 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/db.c
src/libpakfire/include/pakfire/db.h
src/libpakfire/libpakfire.sym
tests/libpakfire/db.c

index f49c18c551505e0e77b9d0af23c1674c876e2e5f..6fb23dc4714663125d56917a08318425b4af5a7f 100644 (file)
@@ -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;
index 7ad58a102ea75983016b84833d73bb09a34664c6..7c03321969cf022bfa766ab59815c936dbf84b04 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef PAKFIRE_DB_H
 #define PAKFIRE_DB_H
 
+#include <sys/types.h>
+
 #include <pakfire/types.h>
 
 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);
 
index 99087a39b66ae27c42d92f89b36c5327fb1e1852..53a4d8e2040ca119890b0379dcff23d904cc9a74 100644 (file)
@@ -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;
index 05922ff2607751a3b911ac62f7deba8c1b62aeca..5aede44c6bef71587ad7ad6d8784129307b17bc5 100644 (file)
@@ -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);