Home / Class/ QueryBuilder Class — drizzle-orm Architecture

QueryBuilder Class — drizzle-orm Architecture

Architecture documentation for the QueryBuilder class in query-builder.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  7498c38a_7ddb_9cb7_5098_8006515160fd["QueryBuilder"]
  642c8c4e_4b43_0739_f7ae_558dc2a5794f["query-builder.ts"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|defined in| 642c8c4e_4b43_0739_f7ae_558dc2a5794f
  069a97fe_5a58_68da_d9ed_f6737f5ba02b["constructor()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| 069a97fe_5a58_68da_d9ed_f6737f5ba02b
  fe42b055_1649_10c7_40a0_32ddddfbf098["$with()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| fe42b055_1649_10c7_40a0_32ddddfbf098
  22ebfcf5_2c30_d37b_dd54_ef9309be8fa3["with()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| 22ebfcf5_2c30_d37b_dd54_ef9309be8fa3
  725ba790_3d33_af60_e449_c69e423c7476["select()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| 725ba790_3d33_af60_e449_c69e423c7476
  be33eff0_8f3e_0f2c_dba8_c2801ea1c74f["selectDistinct()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| be33eff0_8f3e_0f2c_dba8_c2801ea1c74f
  2682c3a0_aec8_723e_2c39_0b0290ebe3a1["selectDistinctOn()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| 2682c3a0_aec8_723e_2c39_0b0290ebe3a1
  7f2c29ae_8711_683f_d57a_dbc36455211b["getDialect()"]
  7498c38a_7ddb_9cb7_5098_8006515160fd -->|method| 7f2c29ae_8711_683f_d57a_dbc36455211b

Relationship Graph

Source Code

drizzle-orm/src/gel-core/query-builders/query-builder.ts lines 13–136

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'>;
		function selectDistinct(fields?: SelectedFields): GelSelectBuilder<SelectedFields | undefined, 'qb'> {
			return new GelSelectBuilder({
				fields: fields ?? undefined,
				session: undefined,
				dialect: self.getDialect(),
				distinct: true,
			});
		}

		function selectDistinctOn(on: (GelColumn | SQLWrapper)[]): GelSelectBuilder<undefined, 'qb'>;
		function selectDistinctOn<TSelection extends SelectedFields>(
			on: (GelColumn | SQLWrapper)[],
			fields: TSelection,
		): GelSelectBuilder<TSelection, 'qb'>;
		function selectDistinctOn(
			on: (GelColumn | SQLWrapper)[],
			fields?: SelectedFields,
		): GelSelectBuilder<SelectedFields | undefined, 'qb'> {
			return new GelSelectBuilder({
				fields: fields ?? undefined,
				session: undefined,
				dialect: self.getDialect(),
				distinct: { on },
			});
		}

		return { select, selectDistinct, selectDistinctOn };
	}

	select(): GelSelectBuilder<undefined, 'qb'>;
	select<TSelection extends SelectedFields>(fields: TSelection): GelSelectBuilder<TSelection, 'qb'>;
	select<TSelection extends SelectedFields>(fields?: TSelection): GelSelectBuilder<TSelection | undefined, 'qb'> {
		return new GelSelectBuilder({

Domain

Frequently Asked Questions

What is the QueryBuilder class?
QueryBuilder is a class in the drizzle-orm codebase, defined in drizzle-orm/src/gel-core/query-builders/query-builder.ts.
Where is QueryBuilder defined?
QueryBuilder is defined in drizzle-orm/src/gel-core/query-builders/query-builder.ts at line 13.

Analyze Your Own Codebase

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

Try Supermodel Free