+int zpm_db_set_pragma(struct zpm *db, int pragma, int value) {
+ int rc;
+ char *sql;
+ sqlite3_stmt *s;
+
+ switch (pragma) {
+ case 1: sql = "pragma application_id = ?;"; break;
+ case 2: sql = "pragma user_version = ?;"; break;
+ default: return -1; break;
+ }
+
+ rc = sqlite3_prepare_v2(db->db, sql, -1, &s, 0);
+
+ if (rc != SQLITE_OK) {
+ SQLERROR(sqlite3_errmsg(db->db));
+ return -1;
+ }
+
+ sqlite3_bind_int(s, 1, value);
+ if (rc != SQLITE_OK) {
+ SQLERROR(sqlite3_errmsg(db->db));
+ fprintf(stderr, "cant bind pragma value\n");
+ sqlite3_finalize(s);
+ return -1;
+ }
+ rc = sqlite3_step(s);
+ if (rc != SQLITE_DONE) {
+ SQLERROR(sqlite3_errmsg(db->db));
+ fprintf(stderr, "cant set pragma\n");
+ sqlite3_finalize(s);
+ return -1;
+ }
+
+ sqlite3_finalize(s);
+ return value;
+}
+
+int zpm_db_pragma(struct zpm *db, int pragma) {
+ int rc;
+ int value = -1;
+ char *sql = 0;
+ sqlite3_stmt *s;
+
+ switch (pragma) {
+ case 1: sql = "pragma application_id;"; break;
+ case 2: sql = "pragma user_version;"; break;
+ default: return -1; break;
+ }
+
+ rc = sqlite3_prepare_v2(db->db, sql, -1, &s, 0);
+
+ if (rc != SQLITE_OK) {
+ SQLERROR(sqlite3_errmsg(db->db));
+ fprintf(stderr, "%s, errnum = %d\n", sqlite3_errmsg(db->db), rc);
+ /* TODO just abort? */
+ return -1;
+ }
+
+ rc = sqlite3_step(s);
+ if (rc == SQLITE_ROW) {
+ value = sqlite3_column_int(s, 0);
+ }
+
+ sqlite3_finalize(s);
+ return value;
+}
+
+static
+#include "newdb.c"
+
+int zpm_db_initialize(struct zpm *pkg) {
+ //fprintf(stderr, "initializing zpm database\n");
+ switch (sqlite3_exec(pkg->db, createdb, (int (*)(void *,int,char **,char **))0, NULL, NULL)) {
+ case SQLITE_OK: break;
+ default:
+ SQLERROR(sqlite3_errmsg(pkg->db));
+ return 0;
+ break;
+ }
+ return 1;
+}
+