--- /dev/null
+#include <stdarg.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "zpm.h"
+
+sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
+ sqlite3 *db;
+ char *sql;
+ va_list args;
+ sqlite3_stmt *st;
+ int rv;
+
+ if (!zpm || zpm->error || !zpm->db) {
+ zpm->error = 1;
+ return 0;
+ }
+
+ db = zpm->db;
+
+ va_start(args, query);
+ sql = sqlite3_vmprintf(query, args);
+ va_end(args);
+
+ if (!sql) {
+ zpm->error = 1;
+ return 0;
+ }
+
+ rv = sqlite3_prepare_v2(db, sql, strlen(sql), &st, NULL);
+ if (rv != SQLITE_OK) {
+ zpm->error = rv;
+ return 0;
+ }
+
+ return st;
+}