1 #define _POSIX_C_SOURCE 200809L
10 int zpm_foreach_script(struct zpm *zpm, char *pkgstr, char *stage, void *cbd,
11 int (*cb)(void *ud, const char *pkg, const char *stage, const char *hash)) {
17 char *find = "select printf('%s-%s-%d', package, version, release) as pkgid, stage, hash from scripts where true";
18 char *pkgidwhere = " and printf('%s-%s-%d', package, version, release) = %Q";
19 char *stagewhere = " and stage = %Q";
29 pkgid = zpm_findpkg(zpm, pkgstr, 0);
35 s = sqlite3_str_new(zpm->db);
36 sqlite3_str_appendall(s, find);
39 sqlite3_str_appendf(s, pkgidwhere, pkgid);
43 sqlite3_str_appendf(s, stagewhere, stage);
46 sql = sqlite3_str_value(s);
48 sqlite3_str_finish(s);
56 st = zpm_dbquery(zpm, sql);
58 while ((rv = sqlite3_step(st)) == SQLITE_ROW) {
60 const char *sstage, *spkgid, *shash;
63 spkgid = (const char *)sqlite3_column_text(st, 0);
64 sstage = (const char *)sqlite3_column_text(st, 1);
65 shash = (const char *)sqlite3_column_text(st, 2);
67 cbrv = cb(cbd, spkgid, sstage, shash);
74 if (rv != SQLITE_DONE) {
86 int zpm_script_set(struct zpm *zpm, char *pkgstr, char *phase, char *hash) {
90 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 ";
91 char *delete = "delete from scripts where package = ? and version = ? and release = ? and stage = ?";
93 if (!zpm || !zpm->db || !phase) {
97 if (zpm_parse_package(pkgstr, package, version, &release)) {
99 zpm_db_run(zpm, insert, package, version, release, phase, hash);
101 zpm_db_run(zpm, delete, package, version, release, phase);
109 int zpm_script_hash(struct zpm *zpm, char *pkgstr, char *phase, char *hash) {
111 char *template = "select hash from scripts_pkgid where pkgid = %Q and stage = %Q";
114 pkgid = zpm_findpkg(zpm, pkgstr, NULL);
116 st = zpm_dbquery(zpm, template, pkgid, phase);
122 zpm->errmsg = strdup(sqlite3_errmsg(zpm->db));
126 switch (sqlite3_step(st)) {
128 strncpy(hash, (const char *) sqlite3_column_text(st, 0),
130 hash[ZPM_HASH_STRLEN] = 0;
132 default: zpm->error = 1; /* fall through */
133 zpm->errmsg = strdup(sqlite3_errmsg(zpm->db));
135 sqlite3_finalize(st);
136 return 0; break; /* not found */
139 sqlite3_finalize(st);