import type { BuildColumns } from '../column-builder.js'; import { entityKind } from '../entity.js'; import type { TypedQueryBuilder } from '../query-builders/query-builder.js'; import type { AddAliasToSelection } from '../query-builders/select.types.js'; import type { ColumnsSelection, SQL } from '../sql/sql.js'; import type { RequireAtLeastOne } from '../utils.js'; import type { PgColumnBuilderBase } from './columns/common.js'; import { QueryBuilder } from './query-builders/query-builder.js'; import { PgViewBase } from './view-base.js'; import { PgViewConfig } from './view-common.js'; export type ViewWithConfig = RequireAtLeastOne<{ checkOption: 'local' | 'cascaded'; securityBarrier: boolean; securityInvoker: boolean; }>; export declare class DefaultViewBuilderCore { protected name: TConfig['name']; protected schema: string | undefined; static readonly [entityKind]: string; readonly _: { readonly name: TConfig['name']; readonly columns: TConfig['columns']; }; constructor(name: TConfig['name'], schema: string | undefined); protected config: { with?: ViewWithConfig; }; with(config: ViewWithConfig): this; } export declare class ViewBuilder extends DefaultViewBuilderCore<{ name: TName; }> { static readonly [entityKind]: string; as(qb: TypedQueryBuilder | ((qb: QueryBuilder) => TypedQueryBuilder)): PgViewWithSelection>; } export declare class ManualViewBuilder = Record> extends DefaultViewBuilderCore<{ name: TName; columns: TColumns; }> { static readonly [entityKind]: string; private columns; constructor(name: TName, columns: TColumns, schema: string | undefined); existing(): PgViewWithSelection>; as(query: SQL): PgViewWithSelection>; } export type PgMaterializedViewWithConfig = RequireAtLeastOne<{ fillfactor: number; toastTupleTarget: number; parallelWorkers: number; autovacuumEnabled: boolean; vacuumIndexCleanup: 'auto' | 'off' | 'on'; vacuumTruncate: boolean; autovacuumVacuumThreshold: number; autovacuumVacuumScaleFactor: number; autovacuumVacuumCostDelay: number; autovacuumVacuumCostLimit: number; autovacuumFreezeMinAge: number; autovacuumFreezeMaxAge: number; autovacuumFreezeTableAge: number; autovacuumMultixactFreezeMinAge: number; autovacuumMultixactFreezeMaxAge: number; autovacuumMultixactFreezeTableAge: number; logAutovacuumMinDuration: number; userCatalogTable: boolean; }>; export declare class MaterializedViewBuilderCore { protected name: TConfig['name']; protected schema: string | undefined; static readonly [entityKind]: string; _: { readonly name: TConfig['name']; readonly columns: TConfig['columns']; }; constructor(name: TConfig['name'], schema: string | undefined); protected config: { with?: PgMaterializedViewWithConfig; using?: string; tablespace?: string; withNoData?: boolean; }; using(using: string): this; with(config: PgMaterializedViewWithConfig): this; tablespace(tablespace: string): this; withNoData(): this; } export declare class MaterializedViewBuilder extends MaterializedViewBuilderCore<{ name: TName; }> { static readonly [entityKind]: string; as(qb: TypedQueryBuilder | ((qb: QueryBuilder) => TypedQueryBuilder)): PgMaterializedViewWithSelection>; } export declare class ManualMaterializedViewBuilder = Record> extends MaterializedViewBuilderCore<{ name: TName; columns: TColumns; }> { static readonly [entityKind]: string; private columns; constructor(name: TName, columns: TColumns, schema: string | undefined); existing(): PgMaterializedViewWithSelection>; as(query: SQL): PgMaterializedViewWithSelection>; } export declare class PgView extends PgViewBase { static readonly [entityKind]: string; [PgViewConfig]: { with?: ViewWithConfig | undefined; } | undefined; constructor({ pgConfig, config }: { pgConfig: { with?: ViewWithConfig; } | undefined; config: { name: TName; schema: string | undefined; selectedFields: ColumnsSelection; query: SQL | undefined; }; }); } export type PgViewWithSelection = PgView & TSelectedFields; export declare const PgMaterializedViewConfig: unique symbol; export declare class PgMaterializedView extends PgViewBase { static readonly [entityKind]: string; readonly [PgMaterializedViewConfig]: { readonly with?: PgMaterializedViewWithConfig | undefined; readonly using?: string | undefined; readonly tablespace?: string | undefined; readonly withNoData?: boolean | undefined; } | undefined; constructor({ pgConfig, config }: { pgConfig: { with: PgMaterializedViewWithConfig | undefined; using: string | undefined; tablespace: string | undefined; withNoData: boolean | undefined; } | undefined; config: { name: TName; schema: string | undefined; selectedFields: ColumnsSelection; query: SQL | undefined; }; }); } export type PgMaterializedViewWithSelection = PgMaterializedView & TSelectedFields; /** @internal */ export declare function pgViewWithSchema(name: string, selection: Record | undefined, schema: string | undefined): ViewBuilder | ManualViewBuilder; /** @internal */ export declare function pgMaterializedViewWithSchema(name: string, selection: Record | undefined, schema: string | undefined): MaterializedViewBuilder | ManualMaterializedViewBuilder; export declare function pgView(name: TName): ViewBuilder; export declare function pgView>(name: TName, columns: TColumns): ManualViewBuilder; export declare function pgMaterializedView(name: TName): MaterializedViewBuilder; export declare function pgMaterializedView>(name: TName, columns: TColumns): ManualMaterializedViewBuilder; export declare function isPgView(obj: unknown): obj is PgView; export declare function isPgMaterializedView(obj: unknown): obj is PgMaterializedView; //# sourceMappingURL=view.d.ts.map