query-builder.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { entityKind, is } from "../../entity.js";
  2. import { MySqlDialect } from "../dialect.js";
  3. import { SelectionProxyHandler } from "../../selection-proxy.js";
  4. import { WithSubquery } from "../../subquery.js";
  5. import { MySqlSelectBuilder } from "./select.js";
  6. class QueryBuilder {
  7. static [entityKind] = "MySqlQueryBuilder";
  8. dialect;
  9. dialectConfig;
  10. constructor(dialect) {
  11. this.dialect = is(dialect, MySqlDialect) ? dialect : void 0;
  12. this.dialectConfig = is(dialect, MySqlDialect) ? void 0 : dialect;
  13. }
  14. $with = (alias, selection) => {
  15. const queryBuilder = this;
  16. const as = (qb) => {
  17. if (typeof qb === "function") {
  18. qb = qb(queryBuilder);
  19. }
  20. return new Proxy(
  21. new WithSubquery(
  22. qb.getSQL(),
  23. selection ?? ("getSelectedFields" in qb ? qb.getSelectedFields() ?? {} : {}),
  24. alias,
  25. true
  26. ),
  27. new SelectionProxyHandler({ alias, sqlAliasedBehavior: "alias", sqlBehavior: "error" })
  28. );
  29. };
  30. return { as };
  31. };
  32. with(...queries) {
  33. const self = this;
  34. function select(fields) {
  35. return new MySqlSelectBuilder({
  36. fields: fields ?? void 0,
  37. session: void 0,
  38. dialect: self.getDialect(),
  39. withList: queries
  40. });
  41. }
  42. function selectDistinct(fields) {
  43. return new MySqlSelectBuilder({
  44. fields: fields ?? void 0,
  45. session: void 0,
  46. dialect: self.getDialect(),
  47. withList: queries,
  48. distinct: true
  49. });
  50. }
  51. return { select, selectDistinct };
  52. }
  53. select(fields) {
  54. return new MySqlSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: this.getDialect() });
  55. }
  56. selectDistinct(fields) {
  57. return new MySqlSelectBuilder({
  58. fields: fields ?? void 0,
  59. session: void 0,
  60. dialect: this.getDialect(),
  61. distinct: true
  62. });
  63. }
  64. // Lazy load dialect to avoid circular dependency
  65. getDialect() {
  66. if (!this.dialect) {
  67. this.dialect = new MySqlDialect(this.dialectConfig);
  68. }
  69. return this.dialect;
  70. }
  71. }
  72. export {
  73. QueryBuilder
  74. };
  75. //# sourceMappingURL=query-builder.js.map