From 62b81a9629f5a80a4cf9d8fae6f778e2b857c2a6 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Fri, 12 Oct 2018 23:35:54 +0000 Subject: [PATCH] add function to return one string column --- lib/dbquery.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- lib/integ.c | 1 - zpm.h | 4 ++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/lib/dbquery.c b/lib/dbquery.c index 3f81841..ab03984 100644 --- a/lib/dbquery.c +++ b/lib/dbquery.c @@ -1,3 +1,5 @@ +#define _POSIX_C_SOURCE 200809L + #include #include @@ -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; +} diff --git a/lib/integ.c b/lib/integ.c index 016302e..6abfcf3 100644 --- a/lib/integ.c +++ b/lib/integ.c @@ -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 1617619..64e5ac6 100644 --- a/zpm.h +++ b/zpm.h @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -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 -- 2.40.0