-# TODO file tags and package tags
-{
-cat <<EOS
-.bail on
-attach '$pkgfile' as remote;
-
-begin;
-
-insert or rollback into packages
-select * from remote.packages P
-where
-printf('%s-%s-%s', P.package, P.version, P.release) = '$pkgid'
-;
-
-insert or rollback into packagefiles
-select * from remote.packagefiles PF
-where
-printf('%s-%s-%s', PF.package, PF.version, PF.release) = '$pkgid'
-;
-
-insert or rollback into scripts
-select * from remote.scripts PF
-where
-printf('%s-%s-%s', PF.package, PF.version, PF.release) = '$pkgid'
-;
-EOS
-
-# actual files
-if [ $mergefiles -eq 1 ]; then
-cat<<EOS
-insert into files
-select F.* from remote.files F
-inner join remote.packagefiles_pkgid PF
-on PF.hash = F.hash
-where
-PF.pkgid = '$pkgid'
-on conflict (hash) do nothing
-;
-EOS
-fi
+mergeone() {
+ pkgid=$1
+ where="where printf('%s-%s-%s', P.package, P.version, P.release) = '$pkgid'"
+ if [ $update -eq 1 ]; then
+ printf "delete from packages_pkgid where pkgid = '%s';\n" "$pkgid"
+ fi
+ printf "insert or rollback into packages select * from remote.packages P %s;\n" "$where"
+ printf "insert or rollback into packagefiles select * from remote.packagefiles P %s;\n" "$where"
+ printf "insert or rollback into scripts select * from remote.scripts P %s;\n" "$where"
+ if [ $mergefiles -eq 1 ]; then
+ printf "insert into files select F.* from remote.files F\n"
+ printf "inner join remote.packagefiles_pkgid P on P.hash = F.hash %s\n" "$where"
+ printf "on conflict (hash) do nothing;\n";
+ fi
+ # scripts
+ if [ $mergescripts -eq 1 ]; then
+ printf "insert into files select F.* from remote.files F\n"
+ printf "inner join remote.scripts_pkgid P on P.hash = F.hash where P.pkgid = '%s'\n" "$pkgid"
+ printf "on conflict (hash) do nothing;\n";
+ fi
+ if [ -n "$newstatus" ]; then
+ newstatus=$(zpm quote "$newstatus")
+ printf "update packages as P set status = '$newstatus' %s;\n" "$where"
+ fi
+}