]> pd.if.org Git - zpackage/commitdiff
add check for different hash in install_status
authorNathan Wagner <nw@hydaspes.if.org>
Fri, 21 Sep 2018 10:01:49 +0000 (10:01 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Mon, 24 Sep 2018 10:40:18 +0000 (10:40 +0000)
cleanup schema, add foreign key cascades

fix query to find files for removal at upgrade

db.sql

diff --git a/db.sql b/db.sql
index 816cbe55e6e5f43562cffb693160c6cc9525a182..bf6fd22a07c01b886d9d6e26a9dc1557d5132c03 100644 (file)
--- a/db.sql
+++ b/db.sql
@@ -56,6 +56,29 @@ create view packages_pkgid as
 select printf('%s-%s-%s', package, version, release) as pkgid, *
 from packages;
 
+create trigger packages_update_trigger instead of
+update on packages_pkgid
+begin
+       update packages
+       set package = NEW.package,
+       version = NEW.version,
+       release = NEW.release,
+       description = NEW.description,
+       architecture = NEW.architecture,
+       url = NEW.url,
+       status = NEW.status,
+       licenses = NEW.licenses,
+       packager = NEW.packager,
+       build_time = NEW.build_time,
+       install_time = NEW.install_time,
+       checksum = NEW.checksum
+       where package = OLD.package
+       and version = OLD.version
+       and release = OLD.release
+       ;
+end
+;
+
 -- handle package status history with a logging trigger.
 create trigger logpkgstatus after update of status on packages
 begin insert into zpmlog (action,target,info)
@@ -71,7 +94,7 @@ create table packagetags (
        tag     text,
        set_time integer default (strftime('%s', 'now')),
        primary key (package,version,release,tag),
-       foreign key (package,version,release) references packages (package,version,release) on delete cascade
+       foreign key (package,version,release) references packages (package,version,release) on delete cascade on update cascade
 );
 
 -- packagefile hash is columns as text, joined with null bytes, then
@@ -111,7 +134,7 @@ create table packagefiles (
        hash    text, -- null if no actual content, i.e. anything but a regular file
        mtime   integer, -- seconds since epoch, finer resolution probably not needed
        primary key (package,version,release,path),
-       foreign key (package,version,release) references packages (package,version,release) on delete cascade,
+       foreign key (package,version,release) references packages (package,version,release) on delete cascade on update cascade,
        check (not (filetype = 'l' and target is null)),
        check (not (filetype = 'r' and hash is null)),
        check (not (filetype = 'c' and (devmajor is null or devminor is null)))
@@ -142,6 +165,7 @@ where status = 'installed'
 ;
 
 create view install_status as
+
 select 'new' as op, PN.*
 from packagefiles_status PN
 left join installed_ref_count RC on RC.path = PN.path
@@ -156,6 +180,7 @@ inner join installedfiles PI on PI.path = PN.path and PI.package = PN.package
 left join installed_ref_count RC on RC.path = PN.path
 where RC.refcount = 1
 and PN.status = 'installing'
+and PI.hash is not PN.hash
 
 union all
 
@@ -165,13 +190,13 @@ inner join installedfiles PI on PI.path = PN.path and PI.package != PN.package
 where PN.status = 'installing'
 
 union all
-
 select 'remove' as op, PI.*
 from installedfiles PI
 left join packagefiles_status PN
     on PI.path = PN.path and PI.package = PN.package
+       and PI.pkgid != PN.pkgid
 where PN.path is null
-and PN.status = 'installing'
+and PI.package in (select package from packages where status = 'installing')
 ;
 
 create table pathtags (
@@ -182,7 +207,9 @@ create table pathtags (
 
        path    text, -- filesystem path
        tag     text,
-       primary key (package,version,release,path,tag)
+       primary key (package,version,release,path,tag),
+       foreign key (package,version,release,path)
+       references packagefiles on delete cascade on update cascade
 )
 without rowid
 ;
@@ -209,7 +236,8 @@ without rowid
 -- and just hash, not package?
 create table elflibraries (
        file    text primary key,
-       soname  text
+       soname  text,
+       foreign key (file) references files on delete cascade
 )
 without rowid
 ;
@@ -217,7 +245,8 @@ without rowid
 create table elfneeded (
        file    text,
        needed  text, -- soname of dependency
-       primary key (file, needed)
+       primary key (file, needed),
+       foreign key (file) references files on delete cascade
 )
 without rowid
 ;
@@ -230,7 +259,7 @@ create table scripts (
        stage   text,
        hash    text,
        primary key (package,version,release,stage),
-       foreign key (package,version,release) references packages (package,version,release) on delete cascade
+       foreign key (package,version,release) references packages (package,version,release) on delete cascade on update cascade
 );
 
 create view scripts_pkgid as
@@ -243,12 +272,11 @@ create table packagedeps (
        package text,
        version text,
        release integer,
-       required        text, -- package name
-       -- following can be null for not checked
-       minversion      text,
-       minrelease      integer,
-       maxversion      text,
-       maxrelease      integer
+       requires text, -- package name (only)
+       minimum text,
+       maximum text,
+       primary key (package,version,release,package),
+       foreign key (package,version,release) references packages (package,version,release) on delete cascade on update cascade
 );
 
 -- capability labels