{"version":3,"file":"view.cjs","names":["entityKind","QueryBuilder","SelectionProxyHandler","pgTableWithSchema","PgViewBase","PgViewConfig","PgMaterializedViewConfig"],"sources":["../../src/pg-core/view.ts"],"sourcesContent":["import type { Casing } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { AddAliasToSelection } from '~/query-builders/select.types.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport { getTableColumns } from '~/utils.ts';\nimport type { RequireAtLeastOne } from '~/utils.ts';\nimport type { AnyPgColumnBuilder, PgBuildColumns, PgColumn } from './columns/common.ts';\nimport { QueryBuilder } from './query-builders/query-builder.ts';\nimport { pgTableWithSchema } from './table.ts';\nimport { PgViewBase } from './view-base.ts';\nimport { PgMaterializedViewConfig, PgViewConfig } from './view-common.ts';\n\nexport type ViewWithConfig = RequireAtLeastOne<{\n\tcheckOption: 'local' | 'cascaded';\n\tsecurityBarrier: boolean;\n\tsecurityInvoker: boolean;\n}>;\n\nexport class DefaultViewBuilderCore<TConfig extends { name: string; columns?: unknown }> {\n\tstatic readonly [entityKind]: string = 'PgDefaultViewBuilderCore';\n\n\tdeclare readonly _: {\n\t\treadonly name: TConfig['name'];\n\t\treadonly columns: TConfig['columns'];\n\t};\n\n\tconstructor(\n\t\tprotected name: TConfig['name'],\n\t\tprotected schema: string | undefined,\n\t) {}\n\n\tprotected config: {\n\t\twith?: ViewWithConfig;\n\t} = {};\n\n\twith(config: ViewWithConfig): this {\n\t\tthis.config.with = config;\n\t\treturn this;\n\t}\n}\n\nexport class ViewBuilder<TName extends string = string> extends DefaultViewBuilderCore<{ name: TName }> {\n\tstatic override readonly [entityKind]: string = 'PgViewBuilder';\n\n\tas<TSelectedFields extends ColumnsSelection>(\n\t\tqb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>),\n\t): PgViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>> {\n\t\tif (typeof qb === 'function') {\n\t\t\tqb = qb(new QueryBuilder());\n\t\t}\n\t\tconst selectionProxy = new SelectionProxyHandler<TSelectedFields>({\n\t\t\talias: this.name,\n\t\t\tsqlBehavior: 'error',\n\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\treplaceOriginalName: true,\n\t\t});\n\t\tconst aliasedSelection = new Proxy(qb.getSelectedFields(), selectionProxy);\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: this.config,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: aliasedSelection,\n\t\t\t\t\tquery: qb.withoutSelectionCastCodecs().getSQL().inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tselectionProxy as any,\n\t\t) as PgViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;\n\t}\n}\n\nexport class ManualViewBuilder<\n\tTName extends string = string,\n\tTColumns extends Record<string, AnyPgColumnBuilder> = Record<string, AnyPgColumnBuilder>,\n> extends DefaultViewBuilderCore<{ name: TName; columns: TColumns }> {\n\tstatic override readonly [entityKind]: string = 'PgManualViewBuilder';\n\n\tprivate columns: Record<string, PgColumn>;\n\n\tconstructor(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t\tschema: string | undefined,\n\t\tcasing: Casing | undefined,\n\t) {\n\t\tsuper(name, schema);\n\t\tthis.columns = getTableColumns(pgTableWithSchema(name, columns, undefined, schema, casing));\n\t}\n\n\texisting(): PgViewWithSelection<TName, true, PgBuildColumns<TName, TColumns>> {\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: undefined,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: undefined,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgViewWithSelection<TName, true, PgBuildColumns<TName, TColumns>>;\n\t}\n\n\tas(query: SQL): PgViewWithSelection<TName, false, PgBuildColumns<TName, TColumns>> {\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: this.config,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: query.inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgViewWithSelection<TName, false, PgBuildColumns<TName, TColumns>>;\n\t}\n}\n\nexport type PgMaterializedViewWithConfig = RequireAtLeastOne<{\n\tfillfactor: number;\n\ttoastTupleTarget: number;\n\tparallelWorkers: number;\n\tautovacuumEnabled: boolean;\n\tvacuumIndexCleanup: 'auto' | 'off' | 'on';\n\tvacuumTruncate: boolean;\n\tautovacuumVacuumThreshold: number;\n\tautovacuumVacuumScaleFactor: number;\n\tautovacuumVacuumCostDelay: number;\n\tautovacuumVacuumCostLimit: number;\n\tautovacuumFreezeMinAge: number;\n\tautovacuumFreezeMaxAge: number;\n\tautovacuumFreezeTableAge: number;\n\tautovacuumMultixactFreezeMinAge: number;\n\tautovacuumMultixactFreezeMaxAge: number;\n\tautovacuumMultixactFreezeTableAge: number;\n\tlogAutovacuumMinDuration: number;\n\tuserCatalogTable: boolean;\n}>;\n\nexport class MaterializedViewBuilderCore<TConfig extends { name: string; columns?: unknown }> {\n\tstatic readonly [entityKind]: string = 'PgMaterializedViewBuilderCore';\n\n\tdeclare _: {\n\t\treadonly name: TConfig['name'];\n\t\treadonly columns: TConfig['columns'];\n\t};\n\n\tconstructor(\n\t\tprotected name: TConfig['name'],\n\t\tprotected schema: string | undefined,\n\t) {}\n\n\tprotected config: {\n\t\twith?: PgMaterializedViewWithConfig;\n\t\tusing?: string;\n\t\ttablespace?: string;\n\t\twithNoData?: boolean;\n\t} = {};\n\n\tusing(using: string): this {\n\t\tthis.config.using = using;\n\t\treturn this;\n\t}\n\n\twith(config: PgMaterializedViewWithConfig): this {\n\t\tthis.config.with = config;\n\t\treturn this;\n\t}\n\n\ttablespace(tablespace: string): this {\n\t\tthis.config.tablespace = tablespace;\n\t\treturn this;\n\t}\n\n\twithNoData(): this {\n\t\tthis.config.withNoData = true;\n\t\treturn this;\n\t}\n}\n\nexport class MaterializedViewBuilder<TName extends string = string>\n\textends MaterializedViewBuilderCore<{ name: TName }>\n{\n\tstatic override readonly [entityKind]: string = 'PgMaterializedViewBuilder';\n\n\tas<TSelectedFields extends ColumnsSelection>(\n\t\tqb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>),\n\t): PgMaterializedViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>> {\n\t\tif (typeof qb === 'function') {\n\t\t\tqb = qb(new QueryBuilder());\n\t\t}\n\t\tconst selectionProxy = new SelectionProxyHandler<TSelectedFields>({\n\t\t\talias: this.name,\n\t\t\tsqlBehavior: 'error',\n\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\treplaceOriginalName: true,\n\t\t});\n\t\tconst aliasedSelection = new Proxy(qb.getSelectedFields(), selectionProxy);\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: aliasedSelection,\n\t\t\t\t\tquery: qb.withoutSelectionCastCodecs().getSQL().inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tselectionProxy as any,\n\t\t) as PgMaterializedViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;\n\t}\n}\n\nexport class ManualMaterializedViewBuilder<\n\tTName extends string = string,\n\tTColumns extends Record<string, AnyPgColumnBuilder> = Record<string, AnyPgColumnBuilder>,\n> extends MaterializedViewBuilderCore<{ name: TName; columns: TColumns }> {\n\tstatic override readonly [entityKind]: string = 'PgManualMaterializedViewBuilder';\n\n\tprivate columns: Record<string, PgColumn>;\n\n\tconstructor(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t\tschema: string | undefined,\n\t\tcasing: Casing | undefined,\n\t) {\n\t\tsuper(name, schema);\n\t\tthis.columns = getTableColumns(pgTableWithSchema(name, columns, undefined, schema, casing));\n\t}\n\n\texisting(): PgMaterializedViewWithSelection<TName, true, PgBuildColumns<TName, TColumns>> {\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: undefined,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgMaterializedViewWithSelection<TName, true, PgBuildColumns<TName, TColumns>>;\n\t}\n\n\tas(query: SQL): PgMaterializedViewWithSelection<TName, false, PgBuildColumns<TName, TColumns>> {\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: query.inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgMaterializedViewWithSelection<TName, false, PgBuildColumns<TName, TColumns>>;\n\t}\n}\n\nexport class PgView<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> extends PgViewBase<TName, TExisting, TSelectedFields> {\n\tstatic override readonly [entityKind]: string = 'PgView';\n\n\t[PgViewConfig]: {\n\t\twith?: ViewWithConfig;\n\t} | undefined;\n\n\tconstructor({ pgConfig, config }: {\n\t\tpgConfig: {\n\t\t\twith?: ViewWithConfig;\n\t\t} | undefined;\n\t\tconfig: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t};\n\t}) {\n\t\tsuper(config);\n\t\tif (pgConfig) {\n\t\t\tthis[PgViewConfig] = {\n\t\t\t\twith: pgConfig.with,\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport type PgViewWithSelection<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> = PgView<TName, TExisting, TSelectedFields> & TSelectedFields;\n\nexport class PgMaterializedView<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> extends PgViewBase<TName, TExisting, TSelectedFields> {\n\tstatic override readonly [entityKind]: string = 'PgMaterializedView';\n\n\treadonly [PgMaterializedViewConfig]: {\n\t\treadonly with?: PgMaterializedViewWithConfig;\n\t\treadonly using?: string;\n\t\treadonly tablespace?: string;\n\t\treadonly withNoData?: boolean;\n\t} | undefined;\n\n\tconstructor({ pgConfig, config }: {\n\t\tpgConfig: {\n\t\t\twith: PgMaterializedViewWithConfig | undefined;\n\t\t\tusing: string | undefined;\n\t\t\ttablespace: string | undefined;\n\t\t\twithNoData: boolean | undefined;\n\t\t} | undefined;\n\t\tconfig: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t};\n\t}) {\n\t\tsuper(config);\n\t\tthis[PgMaterializedViewConfig] = {\n\t\t\twith: pgConfig?.with,\n\t\t\tusing: pgConfig?.using,\n\t\t\ttablespace: pgConfig?.tablespace,\n\t\t\twithNoData: pgConfig?.withNoData,\n\t\t};\n\t}\n}\n\nexport type PgMaterializedViewWithSelection<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> = PgMaterializedView<TName, TExisting, TSelectedFields> & TSelectedFields;\n\n/** @internal */\nexport function pgViewWithSchema(\n\tname: string,\n\tselection: Record<string, AnyPgColumnBuilder> | undefined,\n\tschema: string | undefined,\n\tcasing: Casing | undefined,\n): ViewBuilder | ManualViewBuilder {\n\tif (selection) {\n\t\treturn new ManualViewBuilder(name, selection, schema, casing);\n\t}\n\treturn new ViewBuilder(name, schema);\n}\n\n/** @internal */\nexport function pgMaterializedViewWithSchema(\n\tname: string,\n\tselection: Record<string, AnyPgColumnBuilder> | undefined,\n\tschema: string | undefined,\n\tcasing: Casing | undefined,\n): MaterializedViewBuilder | ManualMaterializedViewBuilder {\n\tif (selection) {\n\t\treturn new ManualMaterializedViewBuilder(name, selection, schema, casing);\n\t}\n\treturn new MaterializedViewBuilder(name, schema);\n}\n\nexport interface PgViewFn {\n\t<TName extends string>(name: TName): ViewBuilder<TName>;\n\t<TName extends string, TColumns extends Record<string, AnyPgColumnBuilder>>(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t): ManualViewBuilder<TName, TColumns>;\n}\n\nexport interface PgMaterializedViewFn {\n\t<TName extends string>(name: TName): MaterializedViewBuilder<TName>;\n\t<TName extends string, TColumns extends Record<string, AnyPgColumnBuilder>>(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t): ManualMaterializedViewBuilder<TName, TColumns>;\n}\n\n/** @internal */\nexport function pgViewWithCasing(casing: Casing | undefined): PgViewFn {\n\treturn ((name, columns) => pgViewWithSchema(name, columns, undefined, casing)) as PgViewFn;\n}\n\n/** @internal */\nexport function pgMaterializedViewWithCasing(casing: Casing | undefined): PgMaterializedViewFn {\n\treturn ((name, columns) => pgMaterializedViewWithSchema(name, columns, undefined, casing)) as PgMaterializedViewFn;\n}\n\nexport const pgView = pgViewWithCasing(undefined);\n\nexport const pgMaterializedView = pgMaterializedViewWithCasing(undefined);\n\nexport function isPgView(obj: unknown): obj is PgView {\n\treturn is(obj, PgView);\n}\n\nexport function isPgMaterializedView(obj: unknown): obj is PgMaterializedView {\n\treturn is(obj, PgMaterializedView);\n}\n"],"mappings":"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"}