From: Nathan Wagner Date: Fri, 9 Nov 2018 22:03:53 +0000 (+0000) Subject: add recursive library dependency view X-Git-Tag: v0.2.16~22 X-Git-Url: https://pd.if.org/git/?p=zpackage;a=commitdiff_plain;h=79885beec9c9d52d43d1c2dac0c981de280ac6f9 add recursive library dependency view --- diff --git a/db.sql b/db.sql index 316f3e4..48ff625 100644 --- a/db.sql +++ b/db.sql @@ -128,9 +128,9 @@ create table packagefiles ( release integer, path text, -- filesystem path - mode text not null, -- perms, use text for octal rep? - username text not null, -- name of owner - groupname text not null, -- group of owner + mode text not null default '0644', -- perms, use text for octal rep? + username text not null default 'root', -- name of owner + groupname text not null default 'root', -- group of owner uid integer, -- numeric uid, generally ignored gid integer, -- numeric gid, generally ignored configuration integer not null default 0, -- boolean if config file @@ -280,7 +280,7 @@ without rowid ; create table elfneeded ( - file text, + file text, -- hash of file needed text, -- soname of dependency primary key (file, needed) ) @@ -435,6 +435,19 @@ from syncstatus BASE where path in (select path from md_conflict where mdcount > 1) ; +create view needed_libraries as +with recursive +libs(file,needs,provider) as ( + select N.file, N.needed as needs, L.file as provider + from elfneeded N left join elflibraries L on N.needed = L.soname + union + select L.file, N.needed as needs, EL.file as provider + from libs L + join elfneeded N on N.file = L.provider + left join elflibraries EL on N.needed = EL.soname +) +select * from libs; + create view syncinfo as with preserved as ( @@ -492,6 +505,7 @@ modified as ( SS.rstatus in ('installing') ), -- preserve: libraries needed by something in installed or installing +/* needed as ( select distinct ED.library @@ -499,13 +513,23 @@ needed as ( where status in ('installed', 'installing') and library is not null ), +*/ +needed as ( + select NL.file as needslib, NL.provider as libraryhash + from needed_libraries NL + inner join syncstatus SS on SS.hash = NL.file + and SS.status in ('installed', 'installing') +), preserve as ( select distinct path,username,uid,groupname,gid,mode,filetype,mtime,hash, configuration,target,device, null as ohash from syncstatus SS - where path in (select library from needed) - and SS.rstatus in ('removing', 'removed') + join needed N on SS.hash = N.libraryhash + where SS.rstatus in ('removing', 'removed') +-- where SS.hash in (select libraryhash from needed) +-- where path in (select library from needed) +-- and SS.rstatus in ('removing', 'removed') ), -- remove: cur, not preserved, not in final set remove as (