Home / Function/ buildJoins() — drizzle-orm Function Reference

buildJoins() — drizzle-orm Function Reference

Architecture documentation for the buildJoins() function in dialect.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  b947243c_21ad_f757_2719_e0aeb7980c05["buildJoins()"]
  3977a3fd_2f08_73b1_4df4_3d0fd1858514["PgDialect"]
  b947243c_21ad_f757_2719_e0aeb7980c05 -->|defined in| 3977a3fd_2f08_73b1_4df4_3d0fd1858514
  51652aaf_93cd_307b_be64_ec6b5cfd33e6["buildUpdateQuery()"]
  51652aaf_93cd_307b_be64_ec6b5cfd33e6 -->|calls| b947243c_21ad_f757_2719_e0aeb7980c05
  9a7f35b1_0b1e_f3ac_68cb_233ef6bc00a0["buildSelectQuery()"]
  9a7f35b1_0b1e_f3ac_68cb_233ef6bc00a0 -->|calls| b947243c_21ad_f757_2719_e0aeb7980c05
  style b947243c_21ad_f757_2719_e0aeb7980c05 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-orm/src/pg-core/dialect.ts lines 279–325

	private buildJoins(joins: PgSelectJoinConfig[] | undefined): SQL | undefined {
		if (!joins || joins.length === 0) {
			return undefined;
		}

		const joinsArray: SQL[] = [];

		for (const [index, joinMeta] of joins.entries()) {
			if (index === 0) {
				joinsArray.push(sql` `);
			}
			const table = joinMeta.table;
			const lateralSql = joinMeta.lateral ? sql` lateral` : undefined;
			const onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;

			if (is(table, PgTable)) {
				const tableName = table[PgTable.Symbol.Name];
				const tableSchema = table[PgTable.Symbol.Schema];
				const origTableName = table[PgTable.Symbol.OriginalName];
				const alias = tableName === origTableName ? undefined : joinMeta.alias;
				joinsArray.push(
					sql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${
						tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined
					}${sql.identifier(origTableName)}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,
				);
			} else if (is(table, View)) {
				const viewName = table[ViewBaseConfig].name;
				const viewSchema = table[ViewBaseConfig].schema;
				const origViewName = table[ViewBaseConfig].originalName;
				const alias = viewName === origViewName ? undefined : joinMeta.alias;
				joinsArray.push(
					sql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${
						viewSchema ? sql`${sql.identifier(viewSchema)}.` : undefined
					}${sql.identifier(origViewName)}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,
				);
			} else {
				joinsArray.push(
					sql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${table}${onSql}`,
				);
			}
			if (index < joins.length - 1) {
				joinsArray.push(sql` `);
			}
		}

		return sql.join(joinsArray);
	}

Domain

Subdomains

Frequently Asked Questions

What does buildJoins() do?
buildJoins() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/pg-core/dialect.ts.
Where is buildJoins() defined?
buildJoins() is defined in drizzle-orm/src/pg-core/dialect.ts at line 279.
What calls buildJoins()?
buildJoins() is called by 2 function(s): buildSelectQuery, buildUpdateQuery.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free