X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fdbquery.c;h=11131645d9b4d388c7229665515b588492a4164e;hb=1e4c821a25907f59c322fda9ea8bf66e0f54a021;hp=ab03984697b2f255fc88aaa9ebc9d0c0a8d78ba5;hpb=62b81a9629f5a80a4cf9d8fae6f778e2b857c2a6;p=zpackage diff --git a/lib/dbquery.c b/lib/dbquery.c index ab03984..1113164 100644 --- a/lib/dbquery.c +++ b/lib/dbquery.c @@ -35,6 +35,7 @@ sqlite3_stmt *zpm_dbqueryv(struct zpm *zpm, char *query, va_list args) { 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; } @@ -62,6 +63,26 @@ sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) { return st; } +void zpm_db_run(struct zpm *zpm, char *query, ...) { + sqlite3_stmt *st; + va_list args; + int rv; + + va_start(args, query); + st = zpm_dbqueryv(zpm, query, args); + va_end(args); + + rv = sqlite3_step(st); + + if (rv != SQLITE_DONE) { + zpm->error = 1; + zpm_seterror(zpm, "db error: %s", sqlite3_errstr(rv)); + } + + sqlite3_finalize(st); + return ; +} + char *zpm_db_string(struct zpm *zpm, char *query, ...) { sqlite3_stmt *st; va_list args; @@ -74,12 +95,40 @@ char *zpm_db_string(struct zpm *zpm, char *query, ...) { 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); + return result; +} + +int zpm_db_int(struct zpm *zpm, char *query, ...) { + sqlite3_stmt *st; + va_list args; + int rv; + int result = 0; + + va_start(args, query); + st = zpm_dbqueryv(zpm, query, args); + va_end(args); + + rv = sqlite3_step(st); + + if (rv == SQLITE_ROW) { + result = sqlite3_column_int(st, 0); } + /* TODO set error if it's not SQLITE_ROW */ sqlite3_finalize(st); return result;