view.d.ts 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import type { BuildColumns } from "../column-builder.js";
  2. import { entityKind } from "../entity.js";
  3. import type { TypedQueryBuilder } from "../query-builders/query-builder.js";
  4. import type { AddAliasToSelection } from "../query-builders/select.types.js";
  5. import type { ColumnsSelection, SQL } from "../sql/sql.js";
  6. import type { RequireAtLeastOne } from "../utils.js";
  7. import type { PgColumnBuilderBase } from "./columns/common.js";
  8. import { QueryBuilder } from "./query-builders/query-builder.js";
  9. import { PgViewBase } from "./view-base.js";
  10. import { PgViewConfig } from "./view-common.js";
  11. export type ViewWithConfig = RequireAtLeastOne<{
  12. checkOption: 'local' | 'cascaded';
  13. securityBarrier: boolean;
  14. securityInvoker: boolean;
  15. }>;
  16. export declare class DefaultViewBuilderCore<TConfig extends {
  17. name: string;
  18. columns?: unknown;
  19. }> {
  20. protected name: TConfig['name'];
  21. protected schema: string | undefined;
  22. static readonly [entityKind]: string;
  23. readonly _: {
  24. readonly name: TConfig['name'];
  25. readonly columns: TConfig['columns'];
  26. };
  27. constructor(name: TConfig['name'], schema: string | undefined);
  28. protected config: {
  29. with?: ViewWithConfig;
  30. };
  31. with(config: ViewWithConfig): this;
  32. }
  33. export declare class ViewBuilder<TName extends string = string> extends DefaultViewBuilderCore<{
  34. name: TName;
  35. }> {
  36. static readonly [entityKind]: string;
  37. as<TSelectedFields extends ColumnsSelection>(qb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>)): PgViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;
  38. }
  39. export declare class ManualViewBuilder<TName extends string = string, TColumns extends Record<string, PgColumnBuilderBase> = Record<string, PgColumnBuilderBase>> extends DefaultViewBuilderCore<{
  40. name: TName;
  41. columns: TColumns;
  42. }> {
  43. static readonly [entityKind]: string;
  44. private columns;
  45. constructor(name: TName, columns: TColumns, schema: string | undefined);
  46. existing(): PgViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>>;
  47. as(query: SQL): PgViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>>;
  48. }
  49. export type PgMaterializedViewWithConfig = RequireAtLeastOne<{
  50. fillfactor: number;
  51. toastTupleTarget: number;
  52. parallelWorkers: number;
  53. autovacuumEnabled: boolean;
  54. vacuumIndexCleanup: 'auto' | 'off' | 'on';
  55. vacuumTruncate: boolean;
  56. autovacuumVacuumThreshold: number;
  57. autovacuumVacuumScaleFactor: number;
  58. autovacuumVacuumCostDelay: number;
  59. autovacuumVacuumCostLimit: number;
  60. autovacuumFreezeMinAge: number;
  61. autovacuumFreezeMaxAge: number;
  62. autovacuumFreezeTableAge: number;
  63. autovacuumMultixactFreezeMinAge: number;
  64. autovacuumMultixactFreezeMaxAge: number;
  65. autovacuumMultixactFreezeTableAge: number;
  66. logAutovacuumMinDuration: number;
  67. userCatalogTable: boolean;
  68. }>;
  69. export declare class MaterializedViewBuilderCore<TConfig extends {
  70. name: string;
  71. columns?: unknown;
  72. }> {
  73. protected name: TConfig['name'];
  74. protected schema: string | undefined;
  75. static readonly [entityKind]: string;
  76. _: {
  77. readonly name: TConfig['name'];
  78. readonly columns: TConfig['columns'];
  79. };
  80. constructor(name: TConfig['name'], schema: string | undefined);
  81. protected config: {
  82. with?: PgMaterializedViewWithConfig;
  83. using?: string;
  84. tablespace?: string;
  85. withNoData?: boolean;
  86. };
  87. using(using: string): this;
  88. with(config: PgMaterializedViewWithConfig): this;
  89. tablespace(tablespace: string): this;
  90. withNoData(): this;
  91. }
  92. export declare class MaterializedViewBuilder<TName extends string = string> extends MaterializedViewBuilderCore<{
  93. name: TName;
  94. }> {
  95. static readonly [entityKind]: string;
  96. as<TSelectedFields extends ColumnsSelection>(qb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>)): PgMaterializedViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;
  97. }
  98. export declare class ManualMaterializedViewBuilder<TName extends string = string, TColumns extends Record<string, PgColumnBuilderBase> = Record<string, PgColumnBuilderBase>> extends MaterializedViewBuilderCore<{
  99. name: TName;
  100. columns: TColumns;
  101. }> {
  102. static readonly [entityKind]: string;
  103. private columns;
  104. constructor(name: TName, columns: TColumns, schema: string | undefined);
  105. existing(): PgMaterializedViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>>;
  106. as(query: SQL): PgMaterializedViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>>;
  107. }
  108. export declare class PgView<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> extends PgViewBase<TName, TExisting, TSelectedFields> {
  109. static readonly [entityKind]: string;
  110. [PgViewConfig]: {
  111. with?: ViewWithConfig;
  112. } | undefined;
  113. constructor({ pgConfig, config }: {
  114. pgConfig: {
  115. with?: ViewWithConfig;
  116. } | undefined;
  117. config: {
  118. name: TName;
  119. schema: string | undefined;
  120. selectedFields: ColumnsSelection;
  121. query: SQL | undefined;
  122. };
  123. });
  124. }
  125. export type PgViewWithSelection<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> = PgView<TName, TExisting, TSelectedFields> & TSelectedFields;
  126. export declare const PgMaterializedViewConfig: unique symbol;
  127. export declare class PgMaterializedView<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> extends PgViewBase<TName, TExisting, TSelectedFields> {
  128. static readonly [entityKind]: string;
  129. readonly [PgMaterializedViewConfig]: {
  130. readonly with?: PgMaterializedViewWithConfig;
  131. readonly using?: string;
  132. readonly tablespace?: string;
  133. readonly withNoData?: boolean;
  134. } | undefined;
  135. constructor({ pgConfig, config }: {
  136. pgConfig: {
  137. with: PgMaterializedViewWithConfig | undefined;
  138. using: string | undefined;
  139. tablespace: string | undefined;
  140. withNoData: boolean | undefined;
  141. } | undefined;
  142. config: {
  143. name: TName;
  144. schema: string | undefined;
  145. selectedFields: ColumnsSelection;
  146. query: SQL | undefined;
  147. };
  148. });
  149. }
  150. export type PgMaterializedViewWithSelection<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> = PgMaterializedView<TName, TExisting, TSelectedFields> & TSelectedFields;
  151. export declare function pgView<TName extends string>(name: TName): ViewBuilder<TName>;
  152. export declare function pgView<TName extends string, TColumns extends Record<string, PgColumnBuilderBase>>(name: TName, columns: TColumns): ManualViewBuilder<TName, TColumns>;
  153. export declare function pgMaterializedView<TName extends string>(name: TName): MaterializedViewBuilder<TName>;
  154. export declare function pgMaterializedView<TName extends string, TColumns extends Record<string, PgColumnBuilderBase>>(name: TName, columns: TColumns): ManualMaterializedViewBuilder<TName, TColumns>;
  155. export declare function isPgView(obj: unknown): obj is PgView;
  156. export declare function isPgMaterializedView(obj: unknown): obj is PgMaterializedView;