From b515d621f8cad499bd83a7df919079b2e47dcb09 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Fri, 12 Oct 2018 11:07:49 +0000 Subject: [PATCH] add where filter argument to foreach-path --- lib/foreach_path.c | 33 ++++++++++++++++++++++----------- zpm-foreach-path.c | 2 +- zpm.h | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/lib/foreach_path.c b/lib/foreach_path.c index b73739b..4afc122 100644 --- a/lib/foreach_path.c +++ b/lib/foreach_path.c @@ -9,31 +9,42 @@ #include "sqlite3.h" #include "zpm.h" -int zpm_foreach_path(struct zpm *zpm, char *pkgid, +int zpm_foreach_path(struct zpm *zpm, char *pkgid, char *where, int (*callback)(void *f, int ncols, char **vals, char **cols), void *data, char **errmsg) { + char *sql; + sqlite3_str *s; - char *files = "select * from packagefiles where" - " printf('%%s-%%s-%%s', package, version, release) = %Q" - " order by path" - ; + if (!zpm || zpm->error || !callback) return 0; - char *sql; + s = sqlite3_str_new(zpm->db); + sqlite3_str_appendall(s, "select * from packagefiles_pkgid where "); + + if (where) { + sqlite3_str_appendf(s, "%s", where); + } else { + sqlite3_str_appendall(s, "true"); + } + + if (pkgid) { + sqlite3_str_appendf(s, " and printf('%%s-%%s-%%s', package, version, release) = %Q", pkgid); + } - if (!zpm || zpm->error || !pkgid || !callback) return 0; - sql = sqlite3_mprintf(files, pkgid); + sql = sqlite3_str_value(s); if (!sql) { - return 0; + sqlite3_str_finish(s); zpm->error = 1; + return 0; } zpm_exec(zpm, sql, callback, data, errmsg); - if (errmsg) { + sqlite3_str_finish(s); + if (*errmsg) { + fprintf(stderr, "errmsg: %s\n", *errmsg); zpm->error = 2; return 0; } - sqlite3_free(sql); return 1; } diff --git a/zpm-foreach-path.c b/zpm-foreach-path.c index 2403576..cad1928 100644 --- a/zpm-foreach-path.c +++ b/zpm-foreach-path.c @@ -267,7 +267,7 @@ int main(int ac, char **av){ /* install a collation function */ // zpm_addvercmp(&pkg); - if (!zpm_foreach_path(&pkg, conf.pkgid, conf.callback, &conf, &errmsg)) { + if (!zpm_foreach_path(&pkg, conf.pkgid, 0, conf.callback, &conf, &errmsg)) { if (errmsg) { fprintf(stderr, "database error: %s\n", errmsg); exit(EXIT_FAILURE); diff --git a/zpm.h b/zpm.h index f3e3734..1617619 100644 --- a/zpm.h +++ b/zpm.h @@ -171,7 +171,7 @@ int zpm_addvercmp(struct zpm *pkg); int zpm_exec(struct zpm *z, const char *sql, int(*callback)(void *, int, char **, char**), void *arg, char **errmsg); -int zpm_foreach_path(struct zpm *zpm, char *pkgid, +int zpm_foreach_path(struct zpm *zpm, char *pkgid, char *where, int (*callback)(void *f, int ncols, char **vals, char **cols), void *data, char **errmsg); -- 2.40.0