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