+#define _POSIX_C_SOURCE 200809L
+
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"
#include "zpm.h"
+int zpm_script_set(struct zpm *zpm, char *pkgstr, char *phase, char *hash) {
+ char package[64];
+ char version[32];
+ int release;
+ char *insert = "insert into scripts (package,version,release,stage,hash) values (%Q,%Q,%d,%Q,%Q) on conflict (package,version,release,stage) do update set hash = excluded.hash ";
+ char *delete = "delete from scripts where package = ? and version = ? and release = ? and stage = ?";
+
+ if (!zpm || !zpm->db || !phase) {
+ return 0;
+ }
+
+ if (zpm_parse_package(pkgstr, package, version, &release)) {
+ if (hash) {
+ zpm_db_run(zpm, insert, package, version, release, phase, hash);
+ } else {
+ zpm_db_run(zpm, delete, package, version, release, phase);
+
+ }
+ }
+
+ return !zpm->error;
+}
+
int zpm_script_hash(struct zpm *zpm, char *pkgstr, char *phase, char *hash) {
char *pkgid = 0;
- char *template = "select hash from scripts_pkgid where pkgid = %Q and phase = %Q";
+ char *template = "select hash from scripts_pkgid where pkgid = %Q and stage = %Q";
sqlite3_stmt *st;
- pkgid = zpm_findpkg(zpm, pkgstr);
+ pkgid = zpm_findpkg(zpm, pkgstr, NULL);
st = zpm_dbquery(zpm, template, pkgid, phase);
+
free(pkgid);
if (!st) {
+ zpm->error = 1;
+ zpm->errmsg = strdup(sqlite3_errmsg(zpm->db));
return 0;
}
hash[ZPM_HASH_STRLEN] = 0;
break;
default: zpm->error = 1; /* fall through */
+ zpm->errmsg = strdup(sqlite3_errmsg(zpm->db));
case SQLITE_DONE:
sqlite3_finalize(st);
return 0; break; /* not found */