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