March Docs

Preload

depot/lib/preload.march N+1 query prevention via batch preloading.

Instead of issuing one query per parent record to load associations, preload collects all foreign-key values from parent rows and issues a single WHERE pk IN ($1, $2, ...) query.

Usage: -- Load all posts for a list of user rows in one query: match all(pool, from("users") |> limit(50)) do Ok(users) -> match preload(pool, users, "id", "posts", "user_id") do Ok(posts) -> ... group posts by user_id yourself ... Err(e) -> ... end Err(e) -> ... end

Functions

fnbuild_preload_querybuild_preload_query(child_table, fk_col, vals)#
fndedup_stringsdedup_strings(strs) do dedup_acc(strs, Nil) end#
fnextract_col_valuesextract_col_values(result, col_name)#
fnpreloadpreload(pool, parent_result, parent_fk_col, child_table, child_fk_col)#
fnpreload_assocpreload_assoc(pool, parent_schema, parent_result, assoc_name)#
fnpreload_assoc_connpreload_assoc_conn(conn, parent_schema, parent_result, assoc_name)#
fnpreload_connpreload_conn(conn, parent_result, parent_fk_col, child_table, child_fk_col)#