]> pd.if.org Git - zpackage/blob - db.sql
add check constraints to package release
[zpackage] / db.sql
1 begin;
2
3 PRAGMA application_id = 0x5a504442;
4 PRAGMA user_version = 1;
5
6 -- should be faster with rowid due to the blob content
7 -- these are really just blobs of data
8 -- TODO copyright and license information should probably
9 -- go here
10 CREATE TABLE files (
11         hash text primary key, -- sha256 of content
12         size integer, -- bigint?  certainly need > 2GB
13         compression text, -- always xz?
14         content blob
15 )
16 ;
17
18 -- information about packages
19 -- a package is identified by a package,version,release triple
20 create table packages (
21         -- primary key columns
22         package text,
23         version text, -- the upstream version string
24         release integer, -- the local release number
25         pkgid   text, -- the three above joined with '-'
26
27         -- metadata columns
28         description     text,
29         architecture    text,
30         url     text,
31         status  text,
32         licenses        text, -- hash of actual license?  need table for more than one?
33         packager        text,
34         build_time      integer default (strftime('%s', 'now')),
35         install_time    integer,
36         checksum        text, -- checksum of package contents.  null for incompleted packages
37         primary key (package,version,release),
38         check (typeof(release) = 'integer'),
39         check (release > 0)
40         -- TODO enforce name and release conventions
41 )
42 without rowid
43 ;
44
45 -- handle package status history with a logging trigger.
46 create trigger logpkgstatus after update of status on packages
47 begin insert into zpmlog (action,target,info)
48         values (printf('status change %s %s', OLD.status, NEW.status),
49                 printf('%s-%s-%s', NEW.package, NEW.version, NEW.release),
50                 NULL); END;
51
52 create table packagetags (
53         -- package id triple
54         package text,
55         version text,
56         release integer,
57         tag     text,
58         set_time integer default (strftime('%s', 'now')),
59         primary key (package,version,release,tag),
60         foreign key (package,version,release) references packages (package,version,release) on delete cascade
61 );
62
63 -- packagefile hash is columns as text, joined with null bytes, then
64 -- sha256 sum of that
65 -- package checksum is package columns as text, joined with null bytes,
66 -- other than the checksum and install_time column
67 -- then that hashed.  finally, that hash, plus the ascii sorted
68 -- hashes of the package files all joined with newlines, hashed.
69 -- really don't like this.
70
71 -- files contained in a package
72 create table packagefiles (
73         -- package id triple
74         package text,
75         version text,
76         release integer,
77
78         path    text, -- filesystem path
79         mode    text, -- perms, use text for octal rep?
80         username        text, -- name of owner
81         groupname       text, -- group of owner
82         uid     integer, -- numeric uid, generally ignored
83         gid     integer, -- numeric gid, generally ignored
84         filetype varchar default 'r',
85         -- r regular file
86         -- d directory
87         -- s symlink
88         -- h hard link -- not supported
89         -- c character special and b device special files add dev number column
90         -- b block special
91         -- p fifos (i.e. pipe)
92         target  text, -- link target for links
93         -- device file dev numbers, should probably be a separate table
94         devmajor        integer,
95         devminor        integer,
96         hash    text, -- null if no actual content, i.e. anything but a regular file
97         mtime   integer, -- seconds since epoch, finer resolution probably not needed
98         primary key (package,version,release,path),
99         foreign key (package,version,release) references packages (package,version,release) on delete cascade
100 )
101 without rowid
102 ;
103
104 create table pathtags (
105         -- package id triple
106         package text,
107         version text,
108         release integer,
109
110         path    text, -- filesystem path
111         tag     text,
112         primary key (package,version,release,path,tag)
113 )
114 without rowid
115 ;
116
117 create table elfinfo (
118         file    text primary key, -- hash of blob
119         elftype text,
120         foreign key (file) references files on delete cascade
121 )
122 without rowid
123 ;
124
125 create table elfdeps (
126         file    text,
127         soname  text,
128         dependency text,
129         primary key (file, soname, dependency),
130         foreign key (file) references files on delete cascade
131 )
132 without rowid
133 ;
134
135 -- TODO just elf information?
136 -- and just hash, not package?
137 create table elflibraries (
138         file    text primary key,
139         soname  text,
140         foreign key (file) references files on delete cascade
141 )
142 without rowid
143 ;
144
145 create table elfneeded (
146         file    text,
147         needed  text, -- soname of dependency
148         primary key (file, needed),
149         foreign key (file) references files on delete cascade
150 )
151 without rowid
152 ;
153
154 -- package scripts: table of package, stage, file
155 create table scripts (
156         package text,
157         version text,
158         release integer,
159         stage   text,
160         hash    text
161 );
162
163 -- package dependencies: table of package, dependency, dep type (package, soname)
164 create table packagedeps (
165         package text,
166         version text,
167         release integer,
168         required        text, -- package name
169         -- following can be null for not checked
170         minversion      text,
171         minrelease      integer,
172         maxversion      text,
173         maxrelease      integer
174 );
175
176 -- capability labels
177 create table provides (
178         package text,
179         subpackage      text,
180         label   text -- a capability label
181 );
182
183 create table requires (
184         package text,
185         subpackage      text,
186         label   text -- a capability label
187 );
188
189 create table packagegroups (
190         package text,
191         "group" text
192 );
193
194 -- zpm actions
195 -- not sure how machine readable this needs to be,
196 -- do not at all for now, figure it out later
197 -- could be worth logging all commands in a history table,
198 -- the zpm driver could do that and capture the exit status
199 -- as well
200 -- might want the history table to note a "group" to tie together
201 -- sub-invocations, probably an environment variable set if not
202 -- already set by zpm, probably a uuid or a timestamp
203 create table zpmlog (
204         ts      text default (strftime('%Y-%m-%d %H:%M:%f', 'now')),
205         -- timestamp of action
206         action  text,
207         target  text, -- packagename, repo name, etc
208         info    text -- human readable
209 );
210
211 create table history (
212         ts      integer, -- again, probably needs timestamp sub second
213         cmd     text,
214         args    text,
215         status  integer
216 );
217
218 create table repository (
219         name    text primary key, -- our name for a repo
220         url     text not null,
221         priority        integer not null default 1,
222         refreshed       integer -- last refresh time
223 );
224
225 -- urls for downloading packages.  possibly unneeded
226 create table repository_packages (
227         repo    text,
228         pkg     text, -- glob pattern?  in which case others not needed
229         version text,
230         release text,
231         url     text
232 );
233
234 -- track which repository a package was cloned from, i.e. where we got it
235 create table packagesource (
236         name    text,
237         version text,
238         release integer,
239         repository      text references repository
240 );
241
242 commit;