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