| |
|
| |
const char main_sql[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
|
| |
"maintainer, www, prefix, flatsize, pkgsize, "
|
| - |
"cksum, repopath, automatic) "
|
| + |
"cksum, repopath, automatic, opts) "
|
| |
"SELECT id, origin, name, version, comment, desc, "
|
| |
"arch, maintainer, www, prefix, flatsize, pkgsize, "
|
| - |
"cksum, path, 0 FROM '%s'.packages WHERE ";
|
| + |
"cksum, path, 0, (select group_concat(option) from '%s'.options WHERE package_id=id AND value='on') FROM '%s'.packages WHERE ";
|
| |
|
| |
const char deps_sql[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
|
| |
"maintainer, www, prefix, flatsize, pkgsize, "
|
| |
|
| |
/* Report and remove packages already installed and at the latest version */
|
| |
report_already_installed(db->sqlite);
|
| - |
if (!force)
|
| - |
sql_exec(db->sqlite, "DELETE from pkgjobs where (select p.origin from main.packages as p where p.origin=pkgjobs.origin and PKGLE(p.version,pkgjobs.version) and p.name = pkgjobs.name) IS NOT NULL;");
|
| + |
if (!force) {
|
| + |
sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
|
| + |
"(SELECT p.origin FROM main.packages AS p WHERE PKGLT(p.version, pkgjobs.version)) IS NOT NULL; ");
|
| + |
sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
|
| + |
"(SELECT p.origin FROM main.packages AS p WHERE "
|
| + |
"p.origin=pkgjobs.origin AND PKGLE(p.version,pkgjobs.version) AND p.name = pkgjobs.name "
|
| + |
"AND ( ((SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') IS NULL AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') == pkgjobs.opts)) IS NOT NULL;");
|
| + |
}
|
| |
|
| |
/* Append dependencies */
|
| |
sbuf_reset(sql);
|
| |
|
| |
const char pkgjobs_sql_1[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
|
| |
"maintainer, www, prefix, flatsize, pkgsize, "
|
| - |
"cksum, repopath, automatic) "
|
| + |
"cksum, repopath, automatic, opts) "
|
| |
"SELECT id, origin, name, version, comment, desc, "
|
| |
"arch, maintainer, www, prefix, flatsize, pkgsize, "
|
| - |
"cksum, path, 0 FROM '%s'.packages WHERE origin IN (select origin from main.packages)";
|
| + |
"cksum, path, 0 ,"
|
| + |
"(select group_concat(option) from '%s'.options WHERE package_id=id AND value='on') "
|
| + |
"FROM '%s'.packages WHERE origin IN (select origin from main.packages)";
|
| |
|
| |
const char pkgjobs_sql_2[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
|
| |
"maintainer, www, prefix, flatsize, pkgsize, "
|
| - |
"cksum, repopath, automatic) "
|
| + |
"cksum, repopath, automatic, opts) "
|
| |
"SELECT DISTINCT r.id, r.origin, r.name, r.version, r.comment, r.desc, "
|
| |
"r.arch, r.maintainer, r.www, r.prefix, r.flatsize, r.pkgsize, "
|
| - |
"r.cksum, r.path, 1 "
|
| + |
"r.cksum, r.path, 1, "
|
| + |
"(select group_concat(option) from '%s'.options WHERE package_id=r.id AND value='on') "
|
| |
"FROM '%s'.packages AS r where r.origin IN "
|
| |
"(SELECT d.origin from '%s'.deps AS d, pkgjobs as j WHERE d.package_id = j.pkgid) "
|
| |
"AND (SELECT p.origin from main.packages as p WHERE p.origin=r.origin AND version=r.version) IS NULL;";
|
| |
sql = sbuf_new_auto();
|
| |
create_temporary_pkgjobs(db->sqlite);
|
| |
|
| - |
sbuf_printf(sql, pkgjobs_sql_1, reponame);
|
| + |
sbuf_printf(sql, pkgjobs_sql_1, reponame, reponame);
|
| |
sbuf_finish(sql);
|
| |
sql_exec(db->sqlite, sbuf_get(sql));
|
| |
|
| |
/* Remove packages already installed and in the latest version */
|
| - |
if (!all)
|
| - |
sql_exec(db->sqlite, "DELETE from pkgjobs where (select p.origin from main.packages as p where p.origin=pkgjobs.origin and PKGLE(p.version,pkgjobs.version) and p.name = pkgjobs.name) IS NOT NULL;");
|
| + |
if (!all) {
|
| + |
sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
|
| + |
"(SELECT p.origin FROM main.packages AS p WHERE PKGLT(p.version, pkgjobs.version)) IS NOT NULL; ");
|
| + |
sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
|
| + |
"(SELECT p.origin FROM main.packages AS p WHERE "
|
| + |
"p.origin=pkgjobs.origin AND PKGLE(p.version,pkgjobs.version) AND p.name = pkgjobs.name "
|
| + |
"AND ( ((SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') IS NULL AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') == pkgjobs.opts)) IS NOT NULL;");
|
| + |
}
|
| |
|
| |
sbuf_reset(sql);
|
| - |
sbuf_printf(sql, pkgjobs_sql_2, reponame, reponame);
|
| + |
sbuf_printf(sql, pkgjobs_sql_2, reponame, reponame, reponame);
|
| |
sbuf_finish(sql);
|
| |
|
| |
do {
|