Home / File/ query-builder.ts — drizzle-orm Source File

query-builder.ts — drizzle-orm Source File

Architecture documentation for query-builder.ts, a typescript file in the drizzle-orm codebase. 11 imports, 2 dependents.

File typescript DrizzleORM QueryBuilders 11 imports 2 dependents 1 classes

Entity Profile

Dependency Diagram

graph LR
  642c8c4e_4b43_0739_f7ae_558dc2a5794f["query-builder.ts"]
  a2e1e4f4_2b6e_c197_a707_793466cb421f["index.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> a2e1e4f4_2b6e_c197_a707_793466cb421f
  d9d2f5d1_df48_1a41_8a59_514a1d97197d["subquery.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> d9d2f5d1_df48_1a41_8a59_514a1d97197d
  df5c4433_48d4_a196_2e73_fc27b943fdae["select.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> df5c4433_48d4_a196_2e73_fc27b943fdae
  b01e5373_9563_5641_c1d7_a767f8334cb9["GelSelectBuilder"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> b01e5373_9563_5641_c1d7_a767f8334cb9
  1802ae0d_e56f_7575_eb4a_b95e50f061c0["select.types.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> 1802ae0d_e56f_7575_eb4a_b95e50f061c0
  27705a9d_afe9_57dd_8c97_e52d8a67d426["entity.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> 27705a9d_afe9_57dd_8c97_e52d8a67d426
  f86d3f7c_7b46_5b9f_94e2_ac0a5f48d903["dialect.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> f86d3f7c_7b46_5b9f_94e2_ac0a5f48d903
  d31ad410_b8fc_5d88_a194_70aa7419676a["query-builder.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> d31ad410_b8fc_5d88_a194_70aa7419676a
  591617cf_1376_c0a1_4ba1_ecd59ca13a5b["selection-proxy.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> 591617cf_1376_c0a1_4ba1_ecd59ca13a5b
  be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd["sql.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd
  4d55618d_fa7b_8e54_edb2_b85ae393d95b["subquery.ts"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f --> 4d55618d_fa7b_8e54_edb2_b85ae393d95b
  b96b941f_c2be_27db_c79e_5975e751c4a6["insert.ts"]
  b96b941f_c2be_27db_c79e_5975e751c4a6 --> 642c8c4e_4b43_0739_f7ae_558dc2a5794f
  257a76b8_a6d7_188d_c192_237373f7f9c0["view.ts"]
  257a76b8_a6d7_188d_c192_237373f7f9c0 --> 642c8c4e_4b43_0739_f7ae_558dc2a5794f
  style 642c8c4e_4b43_0739_f7ae_558dc2a5794f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { entityKind, is } from '~/entity.ts';
import type { GelDialectConfig } from '~/gel-core/dialect.ts';
import { GelDialect } from '~/gel-core/dialect.ts';
import type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';
import { SelectionProxyHandler } from '~/selection-proxy.ts';
import type { ColumnsSelection, SQLWrapper } from '~/sql/sql.ts';
import { WithSubquery } from '~/subquery.ts';
import type { GelColumn } from '../columns/index.ts';
import type { WithSubqueryWithSelection } from '../subquery.ts';
import { GelSelectBuilder } from './select.ts';
import type { SelectedFields } from './select.types.ts';

export class QueryBuilder {
	static readonly [entityKind]: string = 'GelQueryBuilder';

	private dialect: GelDialect | undefined;
	private dialectConfig: GelDialectConfig | undefined;

	constructor(dialect?: GelDialect | GelDialectConfig) {
		this.dialect = is(dialect, GelDialect) ? dialect : undefined;
		this.dialectConfig = is(dialect, GelDialect) ? undefined : dialect;
	}

	$with<TAlias extends string>(alias: TAlias) {
		const queryBuilder = this;

		return {
			as<TSelection extends ColumnsSelection>(
				qb: TypedQueryBuilder<TSelection> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelection>),
			): WithSubqueryWithSelection<TSelection, TAlias> {
				if (typeof qb === 'function') {
					qb = qb(queryBuilder);
				}

				return new Proxy(
					new WithSubquery(qb.getSQL(), qb.getSelectedFields() as SelectedFields, alias, true),
					new SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),
				) as WithSubqueryWithSelection<TSelection, TAlias>;
			},
		};
	}

	with(...queries: WithSubquery[]) {
		const self = this;

		function select(): GelSelectBuilder<undefined, 'qb'>;
		function select<TSelection extends SelectedFields>(fields: TSelection): GelSelectBuilder<TSelection, 'qb'>;
		function select<TSelection extends SelectedFields>(
			fields?: TSelection,
		): GelSelectBuilder<TSelection | undefined, 'qb'> {
			return new GelSelectBuilder({
				fields: fields ?? undefined,
				session: undefined,
				dialect: self.getDialect(),
				withList: queries,
			});
		}

		function selectDistinct(): GelSelectBuilder<undefined, 'qb'>;
		function selectDistinct<TSelection extends SelectedFields>(fields: TSelection): GelSelectBuilder<TSelection, 'qb'>;
// ... (77 more lines)

Domain

Subdomains

Classes

Dependencies

Frequently Asked Questions

What does query-builder.ts do?
query-builder.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, QueryBuilders subdomain.
What does query-builder.ts depend on?
query-builder.ts imports 11 module(s): GelSelectBuilder, dialect.ts, entity.ts, index.ts, query-builder.ts, select.ts, select.types.ts, selection-proxy.ts, and 3 more.
What files import query-builder.ts?
query-builder.ts is imported by 2 file(s): insert.ts, view.ts.
Where is query-builder.ts in the architecture?
query-builder.ts is located at drizzle-orm/src/gel-core/query-builders/query-builder.ts (domain: DrizzleORM, subdomain: QueryBuilders, directory: drizzle-orm/src/gel-core/query-builders).

Analyze Your Own Codebase

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

Try Supermodel Free