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; 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; readonly using?: string; readonly tablespace?: string; readonly withNoData?: boolean; } | 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; 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;