Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#' @export
ScreenHandle <- R6Class(
classname = "ScreenHandle",
lock_class = TRUE,
public = list(
dbConnection = NULL,
initialize = function(dbConnection = NA) {
self$dbConnection <- dbConnection
},
get_by_id = function(dbID) {
query <- "SELECT * FROM Screen WHERE ID = ?"
df <- self$dbConnection$get_data(query, list(dbID))
if(length(df$ID)>0) {
screen <- Screen$new(dbConnection = self$dbConnection,
ID = df$ID,
name = df$name,
description = df$description,
status = df$status,
date_started = df$date_started,
date_ended = df$date_ended)
return(screen)
} else { return(NULL) }
},
get_all_by_name = function(name) {
query <- "SELECT DISTINCT ID FROM Screen WHERE name = ?"
df <- self$dbConnection$get_data(query, list(name))
if(length(df$ID)>0) {
screens <- list()
for(id in df$dbID) {
sc <- self$get_by_id(id)
screens <- c(screens, sc)
}
return(screens)
}
},
get_all_by_status = function(status) {
query <- "SELECT DISTINCT ID FROM Screen WHERE status = ?"
df <- self$dbConnection$get_data(query, list(status))
if(length(df$ID)>0) {
screens <- list()
for(id in df$ID) {
sc <- self$get_by_id(id)
screens <- c(screens, sc)
}
return(screens)
}
},
get_new_ID = function() {
query <- "SELECT seq FROM Screen ORDER BY seq DESC LIMIT 1"
df <- self$dbConnection$get_data(query)
if(nrow(df)>0) {
ID <- paste0("SCR:", sprintf("%012d", df$seq+1))
} else { # The table is empty
ID <- paste0("SCR:", sprintf("%012d",1))
}
return(ID)
},
store = function(screen.list) {
statement <- "INSERT IGNORE INTO Screen (ID, name, description, status, date_started, date_ended)
VALUES (?, ?, ?, ?, ?, ?)"
for(screen in screen.list) {
result <- self$dbConnection$execute(statement, list(screen$ID,
screen$name,
screen$description,
screen$status,
screen$date_started,
screen$date_ended))
if(length(screen$plates)>0) {
plh <- PlateHandle$new(self$dbConnection)
result <- plh$store(screen$plates)
}
if(length(screen$analyses)>0) {
ah <- AnalysisHandle$new(self$dbConnection)
result <- ah$store(screen$analyses)
}
}
}
)
)