@@ -531,36 +531,27 @@ sql_query_multi_join.DBIConnection <- function(
531531 }
532532
533533 from <- dbplyr_sql_subquery(con , x , name = table_names [[1 ]], lvl = lvl )
534-
535- join_table_queries <- purrr :: map2(
536- joins $ table ,
537- table_names [- 1 ],
538- function (table , name ) {
539- dbplyr_sql_subquery(con , table , name = name , lvl = lvl )
540- }
541- )
534+ names <- table_names [- 1 ]
535+ tables <- joins $ table
542536 types <- toupper(paste0(joins $ type , " JOIN" ))
543- join_clauses <- purrr :: map2(
544- types ,
545- join_table_queries ,
546- \(join_kw , from ) sql_clause(join_kw , from )
547- )
548537
549- on_clauses <- purrr :: map(
550- joins $ by ,
551- function (by ) {
552- on <- sql_join_tbls(con , by = by , na_matches = by $ na_matches )
553- sql_clause(" ON" , on , sep = " AND" , parens = TRUE , lvl = 1 )
554- }
555- )
556- join_on_clauses <- vctrs :: vec_interleave(join_clauses , on_clauses )
538+ n_joins <- length(types )
539+ out <- vector(" list" , n_joins * 2 )
540+
541+ for (i in seq_len(n_joins )) {
542+ table <- dbplyr_sql_subquery(con , tables [[i ]], name = names [[i ]], lvl = lvl )
543+ out [[2 * i - 1 ]] <- sql_clause(types [[i ]], table )
544+
545+ by <- joins $ by [[i ]]
546+ on <- sql_join_tbls(con , by = by , na_matches = by $ na_matches )
547+ out [[2 * i ]] <- sql_clause(" ON" , on , sep = " AND" , parens = TRUE , lvl = 1 )
548+ }
557549
558550 clauses <- list2(
559551 sql_clause_select(con , select ),
560552 sql_clause_from(from ),
561- !!! join_on_clauses
553+ !!! out
562554 )
563-
564555 sql_format_clauses(clauses , lvl = lvl , con = con )
565556}
566557
0 commit comments