+ 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);
+ }