X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=db.sql;h=48ff62587a052f0873fd9a1eb057e244aa396933;hb=79885beec9c9d52d43d1c2dac0c981de280ac6f9;hp=316f3e47ba42354640d334341d0771bafd12f0aa;hpb=55218d5fc4522f66ffd3602fbc4410ebe5f0e670;p=zpackage 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 (