diff --git a/R/names.R b/R/names.R new file mode 100644 index 00000000..48bc2120 --- /dev/null +++ b/R/names.R @@ -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 +} diff --git a/R/query.R b/R/query.R index a4303f6b..4412b0ed 100644 --- a/R/query.R +++ b/R/query.R @@ -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) } ) @@ -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