Contents of /branches/mage-sql/usr/lib/mage/join-repos.sh
Parent Directory | Revision Log
Revision 1117 -
(show annotations)
(download)
(as text)
Sat Jul 17 10:49:21 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 6701 byte(s)
Sat Jul 17 10:49:21 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 6701 byte(s)
-added demo script for repository joins
1 | #!/bin/bash |
2 | |
3 | #REPOS="core extras nonfree" |
4 | REPOS="core extras" |
5 | #REPOS="core" |
6 | MAIN="main" |
7 | |
8 | DBSUFFIX="db" |
9 | DBFILE="${MAIN}.${DBSUFFIX}" |
10 | |
11 | die() |
12 | { |
13 | echo -e "Exited ${BASH_SOURCE} at line no ${BASH_LINENO}." |
14 | echo -e "$@" |
15 | exit 1 |
16 | } |
17 | |
18 | sql() |
19 | { |
20 | local sqlcmd="$*" |
21 | [[ -z ${sqlcmd} ]] && die "no sqlcmd given." |
22 | |
23 | sqlite3 -nullvalue 'NULL' -list -separator '|' "${DBFILE}" << EOF || die "error running '$@'" |
24 | ${sqlcmd}; |
25 | EOF |
26 | } |
27 | |
28 | sql_all_repos_attached() |
29 | { |
30 | local sqlcmd="$*" |
31 | [[ -z ${sqlcmd} ]] && die "no sqlcmd given." |
32 | |
33 | local SQLQUERY_ATTACH |
34 | local SQLQUERY_DETACH |
35 | |
36 | for db in ${REPOS} |
37 | do |
38 | # attach database |
39 | SQLQUERY_ATTACH+="attach database '${db}.${DBSUFFIX}' as ${db};" |
40 | |
41 | # detach database |
42 | SQLQUERY_DETACH+="detach database ${db};" |
43 | done |
44 | |
45 | sqlite3 -nullvalue 'NULL' -list -separator '|' "${DBFILE}" << EOF || die "error running '$@'" |
46 | ${SQLQUERY_ATTACH}; |
47 | ${sqlcmd}; |
48 | ${SQLQUERY_DETACH}; |
49 | EOF |
50 | } |
51 | |
52 | if [[ -f ${DBFILE} ]] |
53 | then |
54 | echo "deleting old ${DBFILE}..." |
55 | rm ${DBFILE} |
56 | fi |
57 | |
58 | # first of all create all sufficient tables |
59 | SQLQUERY="create table categories(id integer primary key, pcat text unique);" |
60 | SQLQUERY+="create table packages(id integer primary key,pname text,pver text,pbuild text,pcat_id numeric,state text,provide text,pkgtype text);" |
61 | SQLQUERY+="create table packages_info(id integer primary key, pkg_id numeric, arch text, md5 text, mtime numeric, homepage text, description text, size numeric);" |
62 | SQLQUERY+="create table depends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text);" |
63 | SQLQUERY+="create table sdepends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text);" |
64 | SQLQUERY+="create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text);" |
65 | # run it |
66 | sql "${SQLQUERY}" |
67 | |
68 | # add table with all loaded repos |
69 | SQLQUERY="create table repositories(id integer primary key, repository text);" |
70 | for db in ${REPOS} |
71 | do |
72 | SQLQUERY+="insert into ${MAIN}.repositories(repository) values('${db}');" |
73 | done |
74 | sql "${SQLQUERY}" |
75 | |
76 | |
77 | # |
78 | # categories |
79 | # |
80 | |
81 | # get all categories from all repos |
82 | SQLQUERY="select pcat from ${MAIN}.categories" |
83 | for db in ${REPOS} |
84 | do |
85 | SQLQUERY+=" union select pcat from ${db}.categories" |
86 | done |
87 | SQLQUERY+=";" |
88 | all_categories=$(sql_all_repos_attached "${SQLQUERY}") |
89 | # insert all categories |
90 | for pcat in ${all_categories} |
91 | do |
92 | sql "insert into ${MAIN}.categories(pcat) values('${pcat}')" |
93 | done |
94 | |
95 | |
96 | |
97 | |
98 | # |
99 | # virtual_defaults |
100 | # |
101 | |
102 | # get all categories from all repos |
103 | SQLQUERY="select vcat,vname,pcat,pname from ${MAIN}.virtual_defaults" |
104 | for db in ${REPOS} |
105 | do |
106 | SQLQUERY+=" union select vcat,vname,pcat,pname from ${db}.virtual_defaults" |
107 | done |
108 | SQLQUERY+=";" |
109 | all_virtual_defaults=$(sql_all_repos_attached "${SQLQUERY}") |
110 | # insert all virtual_defaults |
111 | for line in ${all_virtual_defaults} |
112 | do |
113 | vcat="$(echo ${line} | cut -d'|' -f1)" |
114 | vname="$(echo ${line} | cut -d'|' -f2)" |
115 | pcat="$(echo ${line} | cut -d'|' -f3)" |
116 | pname="$(echo ${line} | cut -d'|' -f4)" |
117 | |
118 | sql "insert into ${MAIN}.virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')" |
119 | done |
120 | |
121 | |
122 | |
123 | |
124 | # |
125 | # packages |
126 | # |
127 | SQLQUERY="" |
128 | for db in ${REPOS} |
129 | do |
130 | # attach database |
131 | SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};" |
132 | |
133 | # transitional copy of packages with corrected pcat_ids from main database |
134 | SQLQUERY+="insert into ${MAIN}.packages(pname,pver,pbuild,pcat_id,state,provide,pkgtype) |
135 | select ${db}.packages.pname, |
136 | ${db}.packages.pver, |
137 | ${db}.packages.pbuild, |
138 | ${MAIN}.categories.id, |
139 | ${db}.packages.state, |
140 | ${db}.packages.provide, |
141 | ${db}.packages.pkgtype |
142 | from ${db}.packages |
143 | inner join ${db}.categories |
144 | on ${db}.categories.id=${db}.packages.pcat_id |
145 | inner join ${MAIN}.categories |
146 | on ${MAIN}.categories.pcat=${db}.categories.pcat;" |
147 | # detach database |
148 | SQLQUERY+="detach database ${db};" |
149 | done |
150 | sql "${SQLQUERY}" |
151 | |
152 | |
153 | |
154 | |
155 | # |
156 | # packages_info |
157 | # |
158 | SQLQUERY="" |
159 | for db in ${REPOS} |
160 | do |
161 | # attach database |
162 | SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};" |
163 | |
164 | # transitional copy of packages_info with corrected pkg_ids from main database |
165 | SQLQUERY+="insert into ${MAIN}.packages_info(pkg_id,arch,md5,mtime,homepage,description,size) |
166 | select ${MAIN}.packages.id, |
167 | ${db}.packages_info.arch, |
168 | ${db}.packages_info.md5, |
169 | ${db}.packages_info.mtime, |
170 | ${db}.packages_info.homepage, |
171 | ${db}.packages_info.description, |
172 | ${db}.packages_info.size |
173 | from ${db}.packages_info |
174 | inner join ${db}.packages |
175 | on ${db}.packages.id=${db}.packages_info.pkg_id |
176 | inner join ${MAIN}.packages |
177 | on ${MAIN}.packages.pname=${db}.packages.pname |
178 | and ${MAIN}.packages.pver=${db}.packages.pver |
179 | and ${MAIN}.packages.pbuild=${db}.packages.pbuild;" |
180 | |
181 | # detach database |
182 | SQLQUERY+="detach database ${db};" |
183 | done |
184 | sql "${SQLQUERY}" |
185 | |
186 | |
187 | |
188 | |
189 | # |
190 | # depends |
191 | # |
192 | SQLQUERY="" |
193 | for db in ${REPOS} |
194 | do |
195 | # attach database |
196 | SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};" |
197 | |
198 | # transitional copy of depends with corrected pkg_ids and pcat_ids from main database |
199 | SQLQUERY+="insert into ${MAIN}.depends(pkg_id,relation,pcat_id,pname,pver,pbuild) |
200 | select ${MAIN}.packages.id, |
201 | ${db}.depends.relation, |
202 | ${MAIN}.categories.id, |
203 | ${db}.depends.pname, |
204 | ${db}.depends.pver, |
205 | ${db}.depends.pbuild |
206 | from ${db}.depends |
207 | inner join ${db}.packages |
208 | on ${db}.packages.id=${db}.depends.pkg_id |
209 | inner join ${db}.categories |
210 | on ${db}.categories.id=${db}.depends.pcat_id |
211 | inner join ${MAIN}.packages |
212 | on ${MAIN}.packages.pname=${db}.packages.pname |
213 | and ${MAIN}.packages.pver=${db}.packages.pver |
214 | and ${MAIN}.packages.pbuild=${db}.packages.pbuild |
215 | inner join ${MAIN}.categories |
216 | on ${MAIN}.categories.pcat=${db}.categories.pcat;" |
217 | |
218 | # detach database |
219 | SQLQUERY+="detach database ${db};" |
220 | done |
221 | sql "${SQLQUERY}" |
222 | |
223 | |
224 | |
225 | |
226 | # |
227 | # sdepends |
228 | # |
229 | SQLQUERY="" |
230 | for db in ${REPOS} |
231 | do |
232 | # attach database |
233 | SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};" |
234 | |
235 | # transitional copy of sdepends with corrected pkg_ids and pcat_ids from main database |
236 | SQLQUERY+="insert into ${MAIN}.sdepends(pkg_id,relation,pcat_id,pname,pver,pbuild) |
237 | select ${MAIN}.packages.id, |
238 | ${db}.sdepends.relation, |
239 | ${MAIN}.categories.id, |
240 | ${db}.sdepends.pname, |
241 | ${db}.sdepends.pver, |
242 | ${db}.sdepends.pbuild |
243 | from ${db}.sdepends |
244 | inner join ${db}.packages |
245 | on ${db}.packages.id=${db}.sdepends.pkg_id |
246 | inner join ${db}.categories |
247 | on ${db}.categories.id=${db}.sdepends.pcat_id |
248 | inner join ${MAIN}.packages |
249 | on ${MAIN}.packages.pname=${db}.packages.pname |
250 | and ${MAIN}.packages.pver=${db}.packages.pver |
251 | and ${MAIN}.packages.pbuild=${db}.packages.pbuild |
252 | inner join ${MAIN}.categories |
253 | on ${MAIN}.categories.pcat=${db}.categories.pcat;" |
254 | |
255 | # detach database |
256 | SQLQUERY+="detach database ${db};" |
257 | done |
258 | sql "${SQLQUERY}" |
Properties
Name | Value |
---|---|
svn:keywords | Id |