]> pd.if.org Git - zpackage/commitdiff
add function to return one string column
authorNathan Wagner <nw@hydaspes.if.org>
Fri, 12 Oct 2018 23:35:54 +0000 (23:35 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Sat, 3 Nov 2018 12:38:45 +0000 (12:38 +0000)
lib/dbquery.c
lib/integ.c
zpm.h

index 3f818418d88486e477df17a7544f8bfc04f1efe3..ab03984697b2f255fc88aaa9ebc9d0c0a8d78ba5 100644 (file)
@@ -1,3 +1,5 @@
+#define _POSIX_C_SOURCE 200809L
+
 #include <stdarg.h>
 #include <string.h>
 
@@ -5,10 +7,10 @@
 #include "zpm.h"
 
 #define SQLERROR(x) fprintf(stderr, "%s %d: %s\n", __func__, __LINE__, (x))
-sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
+
+sqlite3_stmt *zpm_dbqueryv(struct zpm *zpm, char *query, va_list args) {
        sqlite3 *db;
        char *sql;
-       va_list args;
        sqlite3_stmt *st;
        int rv;
 
@@ -23,9 +25,7 @@ sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
 
        db = zpm->db;
 
-       va_start(args, query);
        sql = sqlite3_vmprintf(query, args);
-       va_end(args);
 
        if (!sql) {
                zpm->error = 1;
@@ -41,3 +41,46 @@ sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
 
        return st;
 }
+
+sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
+       va_list args;
+       sqlite3_stmt *st;
+
+       if (!zpm || zpm->error) {
+               return 0;
+       }
+
+       if (!zpm->db) {
+               zpm->error = 1;
+               return 0;
+       }
+
+       va_start(args, query);
+       st = zpm_dbqueryv(zpm, query, args);
+       va_end(args);
+
+       return st;
+}
+
+char *zpm_db_string(struct zpm *zpm, char *query, ...) {
+       sqlite3_stmt *st;
+       va_list args;
+       int rv;
+       char *result = 0;
+
+       va_start(args, query);
+       st = zpm_dbqueryv(zpm, query, args);
+       va_end(args);
+
+       rv = sqlite3_step(st);
+
+       if (rv == SQLITE_ROW) {
+               result = (char *)sqlite3_column_text(st, 0);
+               if (result) {
+                       result = strdup(result);
+               }
+       }
+
+       sqlite3_finalize(st);
+       return result;
+}
index 016302e43f82dd0725192ea5b807d0d209fc42a7..6abfcf340cff7087ea82a75c9e83cffd215fa130 100644 (file)
@@ -187,5 +187,4 @@ int zpm_package_sethash(struct zpm *zpm, char *pkgid, char *hash) {
        sqlite3_free(sql);
 
        return 1;
-
 }
diff --git a/zpm.h b/zpm.h
index 1617619f227328a4b689f4a4b5b867e9f4f11b4a..64e5ac63ec9c49437cc2b4da2310111aa724d85c 100644 (file)
--- a/zpm.h
+++ b/zpm.h
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <time.h>
 #include <limits.h>
+#include <stdarg.h>
 
 #include <sqlite3.h>
 
@@ -179,7 +180,10 @@ int zpm_script_hash(struct zpm *zpm, char *pkgstr, char *phase, char *hash);
 int zpm_package_hash(struct zpm *zpm, char *pkgid, char *hash);
 int zpm_package_sethash(struct zpm *zpm, char *pkgid, char *hash);
 
+sqlite3_stmt *zpm_dbqueryv(struct zpm *zpm, char *query, va_list args);
 sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...);
+char *zpm_db_string(struct zpm *zpm, char *query, ...);
+
 struct zpm *zpm_clearmem(struct zpm *zpm);
 
 #endif