#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 (!zpm || zpm->error || !pkgid || !callback) return 0;
+ if (where) {
+ sqlite3_str_appendf(s, "%s", where);
+ } else {
+ sqlite3_str_appendall(s, "true");
+ }
- sql = sqlite3_mprintf(files, pkgid);
+ if (pkgid) {
+ sqlite3_str_appendf(s, " and printf('%%s-%%s-%%s', package, version, release) = %Q", pkgid);
+ }
+
+
+ sql = sqlite3_str_value(s);
if (!sql) {
+ sqlite3_str_finish(s);
+ zpm->error = 1;
return 0;
+ }
+
+ zpm_exec(zpm, sql, callback, data, errmsg);
+ sqlite3_str_finish(s);
+ if (*errmsg) {
+ fprintf(stderr, "errmsg: %s\n", *errmsg);
+ zpm->error = 2;
+ return 0;
+ }
+
+ return 1;
+}
+
+int zpm_foreach_package(struct zpm *zpm, char *where,
+int (*callback)(void *cbdata, int ncols, char **vals, char **cols),
+void *data, char **errmsg) {
+ char *sql;
+ sqlite3_str *s;
+
+ if (!zpm || zpm->error || !callback) return 0;
+
+ s = sqlite3_str_new(zpm->db);
+ sqlite3_str_appendall(s, "select * from packages_pkgid");
+
+ if (where) {
+ sqlite3_str_appendf(s, " where %s", where);
+ }
+
+ sql = sqlite3_str_value(s);
+ if (!sql) {
+ 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;
}