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
Source
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