Skip to content

Commit 3439a53

Browse files
committed
[annotation] Keep track of row timestamps.
1 parent 30d33d1 commit 3439a53

2 files changed

Lines changed: 33 additions & 7 deletions

File tree

R/review.R

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ REV_add_review_columns <- function(ns, data, choices, selected, roles, status) {
3030
}
3131

3232
REV_UI <- function(ns, roles) {
33-
choices <- setNames(c("", roles), c("---", make.names(roles)))
33+
choices <- setNames(c("", roles), c("<select reviewer role>", make.names(roles)))
3434

3535
res <- list()
3636
res[["ui"]] <- shiny::tagList(
@@ -91,23 +91,45 @@ REV_load_annotation_info <- function(folder, review, dataset_lists) {
9191
tracked_vars <- setdiff(names(dataset), c(id_vars, untracked_vars))
9292

9393
base_timestamp <- NA_real_
94+
data_timestamps <- rep(NA_real_, row_count)
9495
# <domain>_000.base
9596
fname <- file.path(dataset_list_folder, paste0(dataset_review_name, "_000.base"))
9697
if (file.exists(fname)) {
9798
contents <- readBin(con = fname, raw(), n = file.size(fname), endian = "little")
98-
base_info <- RS_parse_base(contents)
99-
base_timestamp <- base_info[["timestamp"]]
99+
delta_fnames <- list.files(dataset_list_folder,
100+
pattern = sprintf("^%s_[0-9]*.delta", dataset_review_name),
101+
full.names = TRUE)
102+
deltas <- local({
103+
res <- list()
104+
for (fname in delta_fnames){
105+
res[[length(res) + 1]] <- readBin(con = fname, raw(), n = file.size(fname), endian = "little")
106+
}
107+
return(res)
108+
})
109+
base_info <- RS_load(contents, deltas) # TODO? Call this RS_load_memory and write an RS_load() that works with fnames
100110
dataset_hash <- RS_hash_data_frame(dataset)
101111
if (!identical(dataset_hash, base_info[["contents_hash"]])) {
102-
browser() # TODO: Produce delta
112+
new_delta <- RS_compute_delta_memory(state = base_info, dataset)
113+
deltas[[length(deltas) + 1]] <- new_delta
114+
base_info <- RS_load(contents, deltas)
115+
116+
delta_number <- length(delta_fnames) + 1
117+
fname <- file.path(dataset_list_folder, sprintf("%s_%03d.delta", dataset_review_name, delta_number))
118+
writeBin(new_delta, fname)
119+
message(sprintf("Produced new delta %s", fname))
103120
}
121+
122+
base_timestamp <- base_info[["timestamp"]]
123+
data_timestamps <- base_info[["row_timestamps"]]
104124
} else {
105125
contents <- RS_compute_base_memory(dataset_review_name, dataset, id_vars, tracked_vars)
106-
base_timestamp <- RS_parse_base(contents)[["timestamp"]] # TODO: Consider providing timestamp to RS_compute_base_memory instead?
126+
base_info <- RS_parse_base(contents)
127+
base_timestamp <- base_info[["timestamp"]] # TODO: Consider providing timestamp to RS_compute_base_memory instead?
128+
data_timestamps <- base_info[["row_timestamps"]]
107129
writeBin(contents, fname)
108130
}
109131

110-
dataset_review[["data_timestamp"]] <- base_timestamp
132+
dataset_review[["data_timestamp"]] <- data_timestamps
111133
dataset_review[["timestamp"]] <- base_timestamp
112134

113135
# <domain>_<ROLE>.review

R/review_structures.R

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ RS_parse_base <- function(contents){
157157
row_count = row_count,
158158
timestamp = timestamp,
159159
id_hashes = id_hashes,
160-
tracked_hashes = tracked_hashes
160+
tracked_hashes = tracked_hashes,
161+
row_timestamps = rep(timestamp, row_count)
161162
)
162163

163164
return(res)
@@ -321,6 +322,7 @@ RS_parse_review_reviews <- function(contents, row_count, expected_role, expected
321322

322323
RS_load <- function(base, deltas){
323324
res <- RS_parse_base(base)
325+
base_timestamp <- res$timestamp
324326
for(delta in deltas){
325327
state_delta <- RS_parse_delta(contents = delta)
326328

@@ -336,8 +338,10 @@ RS_load <- function(base, deltas){
336338
res$row_count <- res$row_count + state_delta$new_row_count
337339
res$id_hashes <- cbind(res$id_hashes, state_delta$new_id_hashes)
338340
res$tracked_hashes <- cbind(res$tracked_hashes, state_delta$new_tracked_hashes)
341+
res$row_timestamps <- c(res$row_timestamps, rep(base_timestamp+state_delta$time_delta, state_delta$new_row_count))
339342
# modified rows
340343
res$tracked_hashes[,state_delta$modified_row_indices] <- state_delta$modified_tracked_hashes
344+
res$row_timestamps[state_delta$modified_row_indices] <- base_timestamp+state_delta$time_delta
341345
}
342346
return(res)
343347
}

0 commit comments

Comments
 (0)