2 db_start <- function() {
3 drv <- dbDriver('SQLite')
4 con <- dbConnect(drv, dbname=file.path(cache_root,'cran2deb.db'))
5 tables <- dbListTables(con)
6 if (!dbExistsTable(con,'sysreq_override')) {
7 dbGetQuery(con,paste('CREATE TABLE sysreq_override ('
8 ,' depend_alias TEXT NOT NULL'
9 ,',r_pattern TEXT PRIMARY KEY NOT NULL'
12 if (!dbExistsTable(con,'debian_dependency')) {
13 dbGetQuery(con,paste('CREATE TABLE debian_dependency ('
14 ,' id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'
15 ,',alias TEXT NOT NULL'
16 ,',build INTEGER NOT NULL'
17 ,',debian_pkg TEXT NOT NULL'
18 ,',UNIQUE (alias,build,debian_pkg)'
21 if (!dbExistsTable(con,'forced_depends')) {
22 dbGetQuery(con,paste('CREATE TABLE forced_depends ('
23 ,' r_name TEXT NOT NULL'
24 ,',depend_alias TEXT NOT NULL'
25 ,',PRIMARY KEY (r_name,depend_alias)'
28 if (!dbExistsTable(con,'license_override')) {
29 dbGetQuery(con,paste('CREATE TABLE license_override ('
30 ,' name TEXT PRIMARY KEY NOT NULL'
31 ,',accept INT NOT NULL'
34 if (!dbExistsTable(con,'license_hashes')) {
35 dbGetQuery(con,paste('CREATE TABLE license_hashes ('
36 ,' name TEXT NOT NULL'
37 ,',sha1 TEXT PRIMARY KEY NOT NULL'
40 if (!dbExistsTable(con,'database_versions')) {
41 dbGetQuery(con,paste('CREATE TABLE database_versions ('
42 ,' version INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'
43 ,',version_date INTEGER NOT NULL'
50 db_stop <- function(con,bump=F) {
57 db_quote <- function(text) {
58 return(paste('"',gsub('([^][[:alnum:]*?. ()<>:/=+%-])','\\\\\\1',text),'"',sep=''))
61 db_now <- function() {
62 return(as.integer(gsub('-','',Sys.Date())))
65 db_cur_version <- function(con) {
66 return(as.integer(dbGetQuery(con, 'SELECT max(version) FROM database_versions')[[1]]))
69 db_add_version <- function(con, version) {
70 dbGetQuery(con,paste('INSERT INTO database_versions (version,version_date)'
71 ,'VALUES (',as.integer(version),',',db_now(),')'))
74 db_bump <- function(con) {
75 db_add_version(con,db_cur_version(con)+1)
78 db_sysreq_override <- function(sysreq_text) {
80 results <- dbGetQuery(con,paste(
81 'SELECT DISTINCT depend_alias FROM sysreq_override WHERE'
82 ,db_quote(tolower(sysreq_text)),'LIKE r_pattern'))
84 if (length(results) == 0) {
87 return(results$depend_alias)
90 db_add_sysreq_override <- function(pattern,depend_alias) {
92 results <- dbGetQuery(con,paste(
93 'INSERT OR REPLACE INTO sysreq_override'
94 ,'(depend_alias, r_pattern) VALUES ('
95 ,' ',db_quote(tolower(depend_alias))
96 ,',',db_quote(tolower(pattern))
101 db_sysreq_overrides <- function() {
103 overrides <- dbGetQuery(con,paste('SELECT * FROM sysreq_override'))
108 db_get_depends <- function(depend_alias,build=F) {
110 results <- dbGetQuery(con,paste(
111 'SELECT DISTINCT debian_pkg FROM debian_dependency WHERE'
112 ,db_quote(tolower(depend_alias)),'= alias'
113 ,'AND',as.integer(build),'= build'))
115 return(results$debian_pkg)
118 db_add_depends <- function(depend_alias,debian_pkg,build=F) {
120 results <- dbGetQuery(con,paste(
121 'INSERT OR REPLACE INTO debian_dependency'
122 ,'(alias, build, debian_pkg) VALUES ('
123 ,' ',db_quote(tolower(depend_alias))
124 ,',',as.integer(build)
125 ,',',db_quote(tolower(debian_pkg))
130 db_depends <- function() {
132 depends <- dbGetQuery(con,paste('SELECT * FROM debian_dependency'))
137 db_get_forced_depends <- function(r_name) {
139 forced_depends <- dbGetQuery(con,
140 paste('SELECT depend_alias FROM forced_depends WHERE'
141 ,db_quote(r_name),'= r_name'))
143 return(forced_depends$depend_alias)
146 db_add_forced_depends <- function(r_name, depend_alias) {
147 if (!length(db_get_depends(depend_alias,build=F)) &&
148 !length(db_get_depends(depend_alias,build=T))) {
149 stop(paste('Debian dependency alias',depend_alias,'is not know,'
150 ,'yet trying to force a dependency on it?'))
154 paste('INSERT OR REPLACE INTO forced_depends (r_name, depend_alias)'
155 ,'VALUES (',db_quote(r_name),',',db_quote(depend_alias),')'))
159 db_forced_depends <- function() {
161 depends <- dbGetQuery(con,paste('SELECT * FROM forced_depends'))
166 db_license_override_name <- function(name) {
168 results <- dbGetQuery(con,paste(
169 'SELECT DISTINCT accept FROM license_override WHERE'
170 ,db_quote(tolower(name)),'= name'))
172 if (length(results) == 0) {
175 return(as.logical(results$accept))
178 db_add_license_override <- function(name,accept) {
179 message(paste('adding',name,'accept?',accept))
180 if (accept != TRUE && accept != FALSE) {
181 stop('accept must be TRUE or FALSE')
184 results <- dbGetQuery(con,paste(
185 'INSERT OR REPLACE INTO license_override'
186 ,'(name, accept) VALUES ('
187 ,' ',db_quote(tolower(name))
188 ,',',as.integer(accept)
193 db_license_override_hash <- function(license_sha1) {
195 results <- dbGetQuery(con,paste(
196 'SELECT DISTINCT accept FROM license_override'
197 ,'INNER JOIN license_hashes'
198 ,'ON license_hashes.name = license_override.name WHERE'
199 ,db_quote(tolower(license_sha1)),'= license_hashes.sha1'))
201 if (length(results) == 0) {
204 return(as.logical(results$accept))
207 db_license_overrides <- function() {
209 overrides <- dbGetQuery(con,paste('SELECT * FROM license_override'))
210 hashes <- dbGetQuery(con,paste('SELECT * FROM license_hashes'))
212 return(list(overrides=overrides,hashes=hashes))
215 db_add_license_hash <- function(name,license_sha1) {
216 if (is.na(db_license_override_name(name))) {
217 stop(paste('license',name,'is not know, yet trying to add a hash for it?'))
219 message(paste('adding hash',license_sha1,'for',name))
221 dbGetQuery(con,paste(
222 'INSERT OR REPLACE INTO license_hashes'
223 ,'(name, sha1) VALUES ('
224 ,' ',db_quote(tolower(name))
225 ,',',db_quote(tolower(license_sha1))