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

buildRelationalQueryWithoutPK() — drizzle-orm Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  548001e7_3776_357f_1960_62423198f20f["buildRelationalQueryWithoutPK()"]
  f80973ef_149c_bd36_66ee_1e7e9024a9d5["GelDialect"]
  548001e7_3776_357f_1960_62423198f20f -->|defined in| f80973ef_149c_bd36_66ee_1e7e9024a9d5
  36dfbc90_7d35_2469_60d2_b992c2272cc0["_getQuery()"]
  36dfbc90_7d35_2469_60d2_b992c2272cc0 -->|calls| 548001e7_3776_357f_1960_62423198f20f
  6a5af19b_779e_e705_f0b0_c71ea6c700fd["buildSelectQuery()"]
  548001e7_3776_357f_1960_62423198f20f -->|calls| 6a5af19b_779e_e705_f0b0_c71ea6c700fd
  style 548001e7_3776_357f_1960_62423198f20f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-orm/src/gel-core/dialect.ts lines 1141–1435

	buildRelationalQueryWithoutPK({
		fullSchema,
		schema,
		tableNamesMap,
		table,
		tableConfig,
		queryConfig: config,
		tableAlias,
		nestedQueryRelation,
		joinOn,
	}: {
		fullSchema: Record<string, unknown>;
		schema: TablesRelationalConfig;
		tableNamesMap: Record<string, string>;
		table: GelTable;
		tableConfig: TableRelationalConfig;
		queryConfig: true | DBQueryConfig<'many', true>;
		tableAlias: string;
		nestedQueryRelation?: Relation;
		joinOn?: SQL;
	}): BuildRelationalQueryResult<GelTable, GelColumn> {
		let selection: BuildRelationalQueryResult<GelTable, GelColumn>['selection'] = [];
		let limit, offset, orderBy: NonNullable<GelSelectConfig['orderBy']> = [], where;
		const joins: GelSelectJoinConfig[] = [];

		if (config === true) {
			const selectionEntries = Object.entries(tableConfig.columns);
			selection = selectionEntries.map((
				[key, value],
			) => ({
				dbKey: value.name,
				tsKey: key,
				field: aliasedTableColumn(value as GelColumn, tableAlias),
				relationTableTsKey: undefined,
				isJson: false,
				selection: [],
			}));
		} else {
			const aliasedColumns = Object.fromEntries(
				Object.entries(tableConfig.columns).map((
					[key, value],
				) => [key, aliasedTableColumn(value, tableAlias)]),
			);

			if (config.where) {
				const whereSql = typeof config.where === 'function'
					? config.where(aliasedColumns, getOperators())
					: config.where;
				where = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);
			}

			const fieldsSelection: { tsKey: string; value: GelColumn | SQL.Aliased }[] = [];
			let selectedColumns: string[] = [];

			// Figure out which columns to select
			if (config.columns) {
				let isIncludeMode = false;

				for (const [field, value] of Object.entries(config.columns)) {
					if (value === undefined) {
						continue;
					}

					if (field in tableConfig.columns) {
						if (!isIncludeMode && value === true) {
							isIncludeMode = true;
						}
						selectedColumns.push(field);
					}
				}

				if (selectedColumns.length > 0) {
					selectedColumns = isIncludeMode
						? selectedColumns.filter((c) => config.columns?.[c] === true)
						: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));
				}
			} else {
				// Select all columns if selection is not specified
				selectedColumns = Object.keys(tableConfig.columns);
			}

Domain

Subdomains

Called By

Frequently Asked Questions

What does buildRelationalQueryWithoutPK() do?
buildRelationalQueryWithoutPK() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/gel-core/dialect.ts.
Where is buildRelationalQueryWithoutPK() defined?
buildRelationalQueryWithoutPK() is defined in drizzle-orm/src/gel-core/dialect.ts at line 1141.
What does buildRelationalQueryWithoutPK() call?
buildRelationalQueryWithoutPK() calls 1 function(s): buildSelectQuery.
What calls buildRelationalQueryWithoutPK()?
buildRelationalQueryWithoutPK() is called by 1 function(s): _getQuery.

Analyze Your Own Codebase

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

Try Supermodel Free