UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

90 lines 2.42 kB
import { entityKind, is } from "../../entity.js"; import { GelDialect } from "../dialect.js"; import { SelectionProxyHandler } from "../../selection-proxy.js"; import { WithSubquery } from "../../subquery.js"; import { GelSelectBuilder } from "./select.js"; class QueryBuilder { static [entityKind] = "GelQueryBuilder"; dialect; dialectConfig; constructor(dialect) { this.dialect = is(dialect, GelDialect) ? dialect : void 0; this.dialectConfig = is(dialect, GelDialect) ? void 0 : dialect; } $with(alias) { const queryBuilder = this; return { as(qb) { if (typeof qb === "function") { qb = qb(queryBuilder); } return new Proxy( new WithSubquery(qb.getSQL(), qb.getSelectedFields(), alias, true), new SelectionProxyHandler({ alias, sqlAliasedBehavior: "alias", sqlBehavior: "error" }) ); } }; } with(...queries) { const self = this; function select(fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: self.getDialect(), withList: queries }); } function selectDistinct(fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: self.getDialect(), distinct: true }); } function selectDistinctOn(on, fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: self.getDialect(), distinct: { on } }); } return { select, selectDistinct, selectDistinctOn }; } select(fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: this.getDialect() }); } selectDistinct(fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: this.getDialect(), distinct: true }); } selectDistinctOn(on, fields) { return new GelSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: this.getDialect(), distinct: { on } }); } // Lazy load dialect to avoid circular dependency getDialect() { if (!this.dialect) { this.dialect = new GelDialect(this.dialectConfig); } return this.dialect; } } export { QueryBuilder }; //# sourceMappingURL=query-builder.js.map