#define _POSIX_C_SOURCE 200809L #include #include #include #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 stage = %Q"; sqlite3_stmt *st; 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; } switch (sqlite3_step(st)) { case SQLITE_ROW: strncpy(hash, (const char *) sqlite3_column_text(st, 0), ZPM_HASH_STRLEN); 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 */ } sqlite3_finalize(st); return 1; }