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

buildSelection() — drizzle-orm Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  e2fb541e_5197_4994_9f97_bb47abf659ff["buildSelection()"]
  f80973ef_149c_bd36_66ee_1e7e9024a9d5["GelDialect"]
  e2fb541e_5197_4994_9f97_bb47abf659ff -->|defined in| f80973ef_149c_bd36_66ee_1e7e9024a9d5
  79a2c90c_d895_083e_e194_a2cb1d365c8e["buildDeleteQuery()"]
  79a2c90c_d895_083e_e194_a2cb1d365c8e -->|calls| e2fb541e_5197_4994_9f97_bb47abf659ff
  b6dba0b8_7a2e_9652_d94a_4567bdbe1d3b["buildUpdateQuery()"]
  b6dba0b8_7a2e_9652_d94a_4567bdbe1d3b -->|calls| e2fb541e_5197_4994_9f97_bb47abf659ff
  6a5af19b_779e_e705_f0b0_c71ea6c700fd["buildSelectQuery()"]
  6a5af19b_779e_e705_f0b0_c71ea6c700fd -->|calls| e2fb541e_5197_4994_9f97_bb47abf659ff
  0396b741_ac98_c02e_ce6b_3b28587ddc46["buildInsertQuery()"]
  0396b741_ac98_c02e_ce6b_3b28587ddc46 -->|calls| e2fb541e_5197_4994_9f97_bb47abf659ff
  style e2fb541e_5197_4994_9f97_bb47abf659ff fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-orm/src/gel-core/dialect.ts lines 201–272

	private buildSelection(
		fields: SelectedFieldsOrdered,
		// eslint-disable-next-line @typescript-eslint/no-unused-vars
		{ isSingleTable = false }: { isSingleTable?: boolean } = {},
	): SQL {
		const columnsLen = fields.length;

		const chunks = fields
			.flatMap(({ field }, i) => {
				const chunk: SQLChunk[] = [];

				if (is(field, SQL.Aliased) && field.isSelectionField) {
					chunk.push(sql.identifier(field.fieldAlias));
				} else if (is(field, SQL.Aliased) || is(field, SQL)) {
					const query = is(field, SQL.Aliased) ? field.sql : field;

					// Gel throws an error when more than one similarly named columns exist within context instead of preferring the closest one
					// thus forcing us to be explicit about column's source
					// if (isSingleTable) {
					// 	chunk.push(
					// 		new SQL(
					// 			query.queryChunks.map((c) => {
					// 				if (is(c, GelColumn)) {
					// 					return sql.identifier(this.casing.getColumnCasing(c));
					// 				}
					// 				return c;
					// 			}),
					// 		),
					// 	);
					// } else {
					chunk.push(query);
					// }

					if (is(field, SQL.Aliased)) {
						chunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);
					}
				} else if (is(field, Column)) {
					// Gel throws an error when more than one similarly named columns exist within context instead of preferring the closest one
					// thus forcing us to be explicit about column's source
					// if (isSingleTable) {
					// 	chunk.push(sql.identifier(this.casing.getColumnCasing(field)));
					// } else {
					chunk.push(field);
					// }
				} else if (is(field, Subquery)) {
					const entries = Object.entries(field._.selectedFields) as [string, SQL.Aliased | Column | SQL][];

					if (entries.length === 1) {
						const entry = entries[0]![1];

						const fieldDecoder = is(entry, SQL)
							? entry.decoder
							: is(entry, Column)
							? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }
							: entry.sql.decoder;

						if (fieldDecoder) {
							field._.sql.decoder = fieldDecoder;
						}
					}
					chunk.push(field);
				}

				if (i < columnsLen - 1) {
					chunk.push(sql`, `);
				}

				return chunk;
			});

		return sql.join(chunks);
	}

Domain

Subdomains

Frequently Asked Questions

What does buildSelection() do?
buildSelection() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/gel-core/dialect.ts.
Where is buildSelection() defined?
buildSelection() is defined in drizzle-orm/src/gel-core/dialect.ts at line 201.
What calls buildSelection()?
buildSelection() is called by 4 function(s): buildDeleteQuery, buildInsertQuery, buildSelectQuery, buildUpdateQuery.

Analyze Your Own Codebase

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

Try Supermodel Free