UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

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