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'
43 db_stop <- function(con) {
47 db_quote <- function(text) {
48 return(paste('"',gsub('([^][[:alnum:]*?. ()<>:/=+%-])','\\\\\\1',text),'"',sep=''))
51 db_sysreq_override <- function(sysreq_text) {
53 results <- dbGetQuery(con,paste(
54 'SELECT DISTINCT depend_alias FROM sysreq_override WHERE'
55 ,db_quote(tolower(sysreq_text)),'LIKE r_pattern'))
57 if (length(results) == 0) {
60 return(results$depend_alias)
63 db_add_sysreq_override <- function(pattern,depend_alias) {
65 results <- dbGetQuery(con,paste(
66 'INSERT OR REPLACE INTO sysreq_override'
67 ,'(depend_alias, r_pattern) VALUES ('
68 ,' ',db_quote(tolower(depend_alias))
69 ,',',db_quote(tolower(pattern))
74 db_sysreq_overrides <- function() {
76 overrides <- dbGetQuery(con,paste('SELECT * FROM sysreq_override'))
81 db_get_depends <- function(depend_alias,build=F) {
83 results <- dbGetQuery(con,paste(
84 'SELECT DISTINCT debian_pkg FROM debian_dependency WHERE'
85 ,db_quote(tolower(depend_alias)),'= alias'
86 ,'AND',as.integer(build),'= build'))
88 return(results$debian_pkg)
91 db_add_depends <- function(depend_alias,debian_pkg,build=F) {
93 results <- dbGetQuery(con,paste(
94 'INSERT OR REPLACE INTO debian_dependency'
95 ,'(alias, build, debian_pkg) VALUES ('
96 ,' ',db_quote(tolower(depend_alias))
97 ,',',as.integer(build)
98 ,',',db_quote(tolower(debian_pkg))
103 db_depends <- function() {
105 depends <- dbGetQuery(con,paste('SELECT * FROM debian_dependency'))
110 db_get_forced_depends <- function(r_name) {
112 forced_depends <- dbGetQuery(con,
113 paste('SELECT depend_alias FROM forced_depends WHERE'
114 ,db_quote(r_name),'= r_name'))
116 return(forced_depends$depend_alias)
119 db_add_forced_depends <- function(r_name, depend_alias) {
120 if (!length(db_get_depends(depend_alias,build=F)) &&
121 !length(db_get_depends(depend_alias,build=T))) {
122 stop(paste('Debian dependency alias',depend_alias,'is not know,'
123 ,'yet trying to force a dependency on it?'))
127 paste('INSERT OR REPLACE INTO forced_depends (r_name, depend_alias)'
128 ,'VALUES (',db_quote(r_name),',',db_quote(depend_alias),')'))
132 db_forced_depends <- function() {
134 depends <- dbGetQuery(con,paste('SELECT * FROM forced_depends'))
139 db_license_override_name <- function(name) {
141 results <- dbGetQuery(con,paste(
142 'SELECT DISTINCT accept FROM license_override WHERE'
143 ,db_quote(tolower(name)),'= name'))
145 if (length(results) == 0) {
148 return(as.logical(results$accept))
151 db_add_license_override <- function(name,accept) {
152 message(paste('adding',name,'accept?',accept))
153 if (accept != TRUE && accept != FALSE) {
154 stop('accept must be TRUE or FALSE')
157 results <- dbGetQuery(con,paste(
158 'INSERT OR REPLACE INTO license_override'
159 ,'(name, accept) VALUES ('
160 ,' ',db_quote(tolower(name))
161 ,',',as.integer(accept)
166 db_license_override_hash <- function(license_sha1) {
168 results <- dbGetQuery(con,paste(
169 'SELECT DISTINCT accept FROM license_override'
170 ,'INNER JOIN license_hashes'
171 ,'ON license_hashes.name = license_override.name WHERE'
172 ,db_quote(tolower(license_sha1)),'= license_hashes.sha1'))
174 if (length(results) == 0) {
177 return(as.logical(results$accept))
180 db_license_overrides <- function() {
182 overrides <- dbGetQuery(con,paste('SELECT * FROM license_override'))
183 hashes <- dbGetQuery(con,paste('SELECT * FROM license_hashes'))
185 # TODO: change accept from 0,1 into FALSE,TRUE
186 return(list(overrides=overrides,hashes=hashes))
189 db_add_license_hash <- function(name,license_sha1) {
190 if (is.na(db_license_override_name(name))) {
191 stop(paste('license',name,'is not know, yet trying to add a hash for it?'))
193 message(paste('adding hash',license_sha1,'for',name))
195 dbGetQuery(con,paste(
196 'INSERT OR REPLACE INTO license_hashes'
197 ,'(name, sha1) VALUES ('
198 ,' ',db_quote(tolower(name))
199 ,',',db_quote(tolower(license_sha1))