#include <stdarg.h>
#include <string.h>
+#include <stdlib.h>
#include "sqlite3.h"
#include "zpm.h"
rv = sqlite3_prepare_v2(db, sql, strlen(sql), &st, NULL);
if (rv != SQLITE_OK) {
SQLERROR(sqlite3_errmsg(db));
+ fprintf(stderr, "sql (%d): %s\n", rv, sql);
zpm->error = rv;
return 0;
}
return ;
}
+int zpm_findhash(struct zpm *zpm, char *find, char *dest) {
+ int count;
+ char *found;
+
+ count = zpm_db_int(zpm, "select count(*) from files where hash like '%q%%';", find);
+ if (count != 1) {
+ return count;
+ }
+ if (dest) {
+ found = zpm_db_string(zpm, "select hash from files where hash like '%s%%' limit 1;", find);
+ if (find) {
+ strcpy(dest, found);
+ free(found);
+ } else {
+ count = 0;
+ }
+ }
+ return count;
+
+}
+
char *zpm_db_string(struct zpm *zpm, char *query, ...) {
sqlite3_stmt *st;
va_list args;
rv = sqlite3_step(st);
- if (rv == SQLITE_ROW) {
+ switch (rv) {
+ case SQLITE_ROW:
result = (char *)sqlite3_column_text(st, 0);
if (result) {
result = strdup(result);
}
+ break;
+ case SQLITE_DONE: break;
+ default:
+ zpm->error = 1;
+ zpm_seterror(zpm, "db error: %s", sqlite3_errstr(rv));
+ break;
}
sqlite3_finalize(st);