diff --git a/R/dm_from_con.R b/R/dm_from_con.R index d2269efa4d..f8adcc11fa 100644 --- a/R/dm_from_con.R +++ b/R/dm_from_con.R @@ -93,18 +93,20 @@ dm_from_con <- function(con = NULL, table_names = NULL, learn_keys = NULL, ) } - if (is_null(table_names)) { - src_tbl_names <- get_src_tbl_names(src, ..., names = .names) - } else { - src_tbl_names <- table_names - } + tbl_ids <- get_src_tbl_names(src, ..., names = .names) + + # Fetch only the tbls which were specifically requested + if (!is.null(table_names)) { + not_found <- setdiff(table_names, names(tbl_ids)) - nms <- purrr::map_chr(src_tbl_names, ~ .x@name[["table"]]) + if (length(not_found) > 0) { + cli::cli_warn("Could not find table{?s}: {not_found}") + } + + tbl_ids <- tbl_ids[intersect(table_names, names(tbl_ids))] + } - tbls <- - set_names(src_tbl_names, nms) %>% - quote_ids(con) %>% - map(possibly(tbl, NULL), src = src) + tbls <- map(tbl_ids, possibly(tbl, NULL), src = src) bad <- map_lgl(tbls, is_null) if (any(bad)) {