view.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { entityKind } from "../entity.js";
  2. import { SelectionProxyHandler } from "../selection-proxy.js";
  3. import { getTableColumns } from "../utils.js";
  4. import { QueryBuilder } from "./query-builders/query-builder.js";
  5. import { sqliteTable } from "./table.js";
  6. import { SQLiteViewBase } from "./view-base.js";
  7. class ViewBuilderCore {
  8. constructor(name) {
  9. this.name = name;
  10. }
  11. static [entityKind] = "SQLiteViewBuilderCore";
  12. config = {};
  13. }
  14. class ViewBuilder extends ViewBuilderCore {
  15. static [entityKind] = "SQLiteViewBuilder";
  16. as(qb) {
  17. if (typeof qb === "function") {
  18. qb = qb(new QueryBuilder());
  19. }
  20. const selectionProxy = new SelectionProxyHandler({
  21. alias: this.name,
  22. sqlBehavior: "error",
  23. sqlAliasedBehavior: "alias",
  24. replaceOriginalName: true
  25. });
  26. const aliasedSelectedFields = qb.getSelectedFields();
  27. return new Proxy(
  28. new SQLiteView({
  29. // sqliteConfig: this.config,
  30. config: {
  31. name: this.name,
  32. schema: void 0,
  33. selectedFields: aliasedSelectedFields,
  34. query: qb.getSQL().inlineParams()
  35. }
  36. }),
  37. selectionProxy
  38. );
  39. }
  40. }
  41. class ManualViewBuilder extends ViewBuilderCore {
  42. static [entityKind] = "SQLiteManualViewBuilder";
  43. columns;
  44. constructor(name, columns) {
  45. super(name);
  46. this.columns = getTableColumns(sqliteTable(name, columns));
  47. }
  48. existing() {
  49. return new Proxy(
  50. new SQLiteView({
  51. config: {
  52. name: this.name,
  53. schema: void 0,
  54. selectedFields: this.columns,
  55. query: void 0
  56. }
  57. }),
  58. new SelectionProxyHandler({
  59. alias: this.name,
  60. sqlBehavior: "error",
  61. sqlAliasedBehavior: "alias",
  62. replaceOriginalName: true
  63. })
  64. );
  65. }
  66. as(query) {
  67. return new Proxy(
  68. new SQLiteView({
  69. config: {
  70. name: this.name,
  71. schema: void 0,
  72. selectedFields: this.columns,
  73. query: query.inlineParams()
  74. }
  75. }),
  76. new SelectionProxyHandler({
  77. alias: this.name,
  78. sqlBehavior: "error",
  79. sqlAliasedBehavior: "alias",
  80. replaceOriginalName: true
  81. })
  82. );
  83. }
  84. }
  85. class SQLiteView extends SQLiteViewBase {
  86. static [entityKind] = "SQLiteView";
  87. constructor({ config }) {
  88. super(config);
  89. }
  90. }
  91. function sqliteView(name, selection) {
  92. if (selection) {
  93. return new ManualViewBuilder(name, selection);
  94. }
  95. return new ViewBuilder(name);
  96. }
  97. const view = sqliteView;
  98. export {
  99. ManualViewBuilder,
  100. SQLiteView,
  101. ViewBuilder,
  102. ViewBuilderCore,
  103. sqliteView,
  104. view
  105. };
  106. //# sourceMappingURL=view.js.map