Magellan Linux

Contents of /branches/mage-sql/usr/lib/mage/join-repos.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1119 - (show annotations) (download) (as text)
Thu Jul 22 07:22:24 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 6815 byte(s)
-renamed column repository to name in table repositories
-add repo_id to packages to associate  a package to its repository

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,repo_id numeric);"
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, name text);"
70 for db in ${REPOS}
71 do
72 SQLQUERY+="insert into ${MAIN}.repositories(name) 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,repo_id)
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 ${MAIN}.repositories.id
143 from ${db}.packages
144 inner join ${db}.categories
145 on ${db}.categories.id=${db}.packages.pcat_id
146 inner join ${MAIN}.categories
147 on ${MAIN}.categories.pcat=${db}.categories.pcat
148 inner join ${MAIN}.repositories
149 on ${MAIN}.repositories.name='${db}';"
150 # detach database
151 SQLQUERY+="detach database ${db};"
152 done
153 sql "${SQLQUERY}"
154
155
156
157
158 #
159 # packages_info
160 #
161 SQLQUERY=""
162 for db in ${REPOS}
163 do
164 # attach database
165 SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};"
166
167 # transitional copy of packages_info with corrected pkg_ids from main database
168 SQLQUERY+="insert into ${MAIN}.packages_info(pkg_id,arch,md5,mtime,homepage,description,size)
169 select ${MAIN}.packages.id,
170 ${db}.packages_info.arch,
171 ${db}.packages_info.md5,
172 ${db}.packages_info.mtime,
173 ${db}.packages_info.homepage,
174 ${db}.packages_info.description,
175 ${db}.packages_info.size
176 from ${db}.packages_info
177 inner join ${db}.packages
178 on ${db}.packages.id=${db}.packages_info.pkg_id
179 inner join ${MAIN}.packages
180 on ${MAIN}.packages.pname=${db}.packages.pname
181 and ${MAIN}.packages.pver=${db}.packages.pver
182 and ${MAIN}.packages.pbuild=${db}.packages.pbuild;"
183
184 # detach database
185 SQLQUERY+="detach database ${db};"
186 done
187 sql "${SQLQUERY}"
188
189
190
191
192 #
193 # depends
194 #
195 SQLQUERY=""
196 for db in ${REPOS}
197 do
198 # attach database
199 SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};"
200
201 # transitional copy of depends with corrected pkg_ids and pcat_ids from main database
202 SQLQUERY+="insert into ${MAIN}.depends(pkg_id,relation,pcat_id,pname,pver,pbuild)
203 select ${MAIN}.packages.id,
204 ${db}.depends.relation,
205 ${MAIN}.categories.id,
206 ${db}.depends.pname,
207 ${db}.depends.pver,
208 ${db}.depends.pbuild
209 from ${db}.depends
210 inner join ${db}.packages
211 on ${db}.packages.id=${db}.depends.pkg_id
212 inner join ${db}.categories
213 on ${db}.categories.id=${db}.depends.pcat_id
214 inner join ${MAIN}.packages
215 on ${MAIN}.packages.pname=${db}.packages.pname
216 and ${MAIN}.packages.pver=${db}.packages.pver
217 and ${MAIN}.packages.pbuild=${db}.packages.pbuild
218 inner join ${MAIN}.categories
219 on ${MAIN}.categories.pcat=${db}.categories.pcat;"
220
221 # detach database
222 SQLQUERY+="detach database ${db};"
223 done
224 sql "${SQLQUERY}"
225
226
227
228
229 #
230 # sdepends
231 #
232 SQLQUERY=""
233 for db in ${REPOS}
234 do
235 # attach database
236 SQLQUERY+="attach database '${db}.${DBSUFFIX}' as ${db};"
237
238 # transitional copy of sdepends with corrected pkg_ids and pcat_ids from main database
239 SQLQUERY+="insert into ${MAIN}.sdepends(pkg_id,relation,pcat_id,pname,pver,pbuild)
240 select ${MAIN}.packages.id,
241 ${db}.sdepends.relation,
242 ${MAIN}.categories.id,
243 ${db}.sdepends.pname,
244 ${db}.sdepends.pver,
245 ${db}.sdepends.pbuild
246 from ${db}.sdepends
247 inner join ${db}.packages
248 on ${db}.packages.id=${db}.sdepends.pkg_id
249 inner join ${db}.categories
250 on ${db}.categories.id=${db}.sdepends.pcat_id
251 inner join ${MAIN}.packages
252 on ${MAIN}.packages.pname=${db}.packages.pname
253 and ${MAIN}.packages.pver=${db}.packages.pver
254 and ${MAIN}.packages.pbuild=${db}.packages.pbuild
255 inner join ${MAIN}.categories
256 on ${MAIN}.categories.pcat=${db}.categories.pcat;"
257
258 # detach database
259 SQLQUERY+="detach database ${db};"
260 done
261 sql "${SQLQUERY}"

Properties

Name Value
svn:keywords Id