Skip to content

Commit

Permalink
- Data frames resulting from a query always have unique non-empty col…
Browse files Browse the repository at this point in the history
…umn names (r-dbi/DBItest#137).
  • Loading branch information
krlmlr committed Apr 26, 2018
1 parent a043ad2 commit 6aaf9a5
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
32 changes: 32 additions & 0 deletions R/names.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
set_tidy_names <- function(x) {
new_names <- tidy_names(names2(x))
names(x) <- new_names
x
}

names2 <- function(x) {
name <- names(x)
if (is.null(name)) {
name <- rep("", length(x))
}
name
}

tidy_names <- function(name) {
name[is.na(name)] <- ""
append_pos(name)
}

append_pos <- function(name) {
need_append_pos <- duplicated(name) | name == ""
if (any(need_append_pos)) {
rx <- "[.][.][1-9][0-9]*$"
has_suffix <- grepl(rx, name)
name[has_suffix] <- gsub(rx, "", name[has_suffix])
need_append_pos <- need_append_pos | has_suffix
}

append_pos <- which(need_append_pos)
name[append_pos] <- paste0(name[append_pos], "..", append_pos)
name
}
7 changes: 5 additions & 2 deletions R/query.R
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ setMethod("dbFetch", "MariaDBResult",
if (trunc(n) != n) stopc("n must be a whole number")
ret <- result_fetch(res@ptr, n = n)
ret <- convert_bigint(ret, res@bigint)
sqlColumnToRownames(ret, row.names)
ret <- sqlColumnToRownames(ret, row.names)
set_tidy_names(ret)
}
)

Expand Down Expand Up @@ -164,7 +165,9 @@ NULL
#' @export
#' @rdname result-meta
setMethod("dbColumnInfo", "MariaDBResult", function(res, ...) {
result_column_info(res@ptr)
df <- result_column_info(res@ptr)
df$name <- tidy_names(df$name)
df
})

#' @export
Expand Down

0 comments on commit 6aaf9a5

Please sign in to comment.