query-builder.js 2.4 KB

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