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