pqb 0.11.21 → 0.11.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -5
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/columns/columnType.ts","../src/raw.ts","../src/sql/common.ts","../src/columns/operators.ts","../src/columns/utils.ts","../src/columns/code.ts","../src/columns/number.ts","../src/columns/string.ts","../src/columns/dateTime.ts","../src/columns/boolean.ts","../src/columns/enum.ts","../src/columns/json.ts","../src/columns/array.ts","../src/query.ts","../src/sql/distinct.ts","../src/sql/orderBy.ts","../src/sql/window.ts","../src/queryDataUtils.ts","../src/sql/join.ts","../src/sql/where.ts","../src/sql/aggregate.ts","../src/errors.ts","../src/sql/select.ts","../src/sql/having.ts","../src/sql/with.ts","../src/sql/types.ts","../src/sql/fromAndAs.ts","../src/sql/insert.ts","../src/sql/update.ts","../src/sql/delete.ts","../src/sql/truncate.ts","../src/sql/columnInfo.ts","../src/quote.ts","../src/sql/copy.ts","../src/sql/toSql.ts","../src/sql/data.ts","../src/utils.ts","../src/columns/customType.ts","../src/columns/columnTypes.ts","../src/columns/columnsSchema.ts","../src/columns/virtual.ts","../src/columns/unknown.ts","../src/columns/columnsByType.ts","../src/adapter.ts","../src/queryMethods/get.ts","../src/queryMethods/_join.ts","../src/queryMethods/select.ts","../src/queryMethods/aggregate.ts","../src/queryMethods/callbacks.ts","../src/queryMethods/clear.ts","../src/queryMethods/columnInfo.ts","../src/queryMethods/delete.ts","../src/queryMethods/for.ts","../src/queryMethods/from.ts","../src/queryMethods/having.ts","../src/queryMethods/then.ts","../src/queryMethods/create.ts","../src/queryBase.ts","../src/queryMethods/where.ts","../src/queryMethods/join.ts","../src/queryMethods/json.ts","../src/queryMethods/log.ts","../src/queryMethods/merge.ts","../src/queryMethods/with.ts","../src/queryMethods/union.ts","../src/queryMethods/update.ts","../src/queryMethods/transaction.ts","../src/queryMethods/window.ts","../src/queryMethods/upsertOrCreate.ts","../src/queryMethods/raw.ts","../src/queryMethods/copy.ts","../src/queryMethods/as.ts","../src/queryMethods/queryMethods.ts","../src/db.ts","../src/relations.ts","../src/testTransaction.ts"],"sourcesContent":["import { ColumnsShape } from './columnsSchema';\nimport { Query } from '../query';\nimport {\n BaseOperators,\n ColumnDataBase,\n ColumnTypeBase,\n HiddenColumn,\n PrimaryKeyColumn,\n pushColumnData,\n setColumnData,\n ValidationContext,\n MaybeArray,\n StringKey,\n QueryCommon,\n MessageParam,\n raw,\n EncodeColumn,\n ParseColumn,\n} from 'orchid-core';\nimport { TableData } from './columnTypes';\n\nexport type ColumnData = ColumnDataBase & {\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n validationDefault?: unknown;\n indexes?: Omit<SingleColumnIndexOptions, 'column'>[];\n comment?: string;\n collate?: string;\n compression?: string;\n foreignKeys?: ForeignKey<string, string[]>[];\n identity?: TableData.Identity;\n};\n\nexport type ForeignKeyMatch = 'FULL' | 'PARTIAL' | 'SIMPLE';\n\nexport type ForeignKeyAction =\n | 'NO ACTION'\n | 'RESTRICT'\n | 'CASCADE'\n | 'SET NULL'\n | 'SET DEFAULT';\n\nexport type ForeignKey<Table extends string, Columns extends string[]> = (\n | {\n fn(): new () => { table: Table; columns: { shape: ColumnsShape } };\n }\n | {\n table: Table;\n }\n) & {\n columns: Columns;\n name?: string;\n dropMode?: DropMode;\n} & ForeignKeyOptions;\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type ForeignKeyOptions = {\n name?: string;\n match?: ForeignKeyMatch;\n onUpdate?: ForeignKeyAction;\n onDelete?: ForeignKeyAction;\n dropMode?: DropMode;\n};\n\nexport type IndexColumnOptions = (\n | { column: string }\n | { expression: string }\n) & {\n collate?: string;\n opclass?: string;\n order?: string;\n};\n\nexport type IndexOptions = {\n name?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n using?: string;\n include?: MaybeArray<string>;\n with?: string;\n tablespace?: string;\n where?: string;\n dropMode?: 'CASCADE' | 'RESTRICT';\n};\n\nexport type SingleColumnIndexOptions = IndexColumnOptions & IndexOptions;\n\nexport type ForeignKeyTable = new () => {\n schema?: string;\n table: string;\n columns: { shape: ColumnsShape };\n};\n\nexport type ColumnNameOfTable<Table extends ForeignKeyTable> = StringKey<\n keyof InstanceType<Table>['columns']['shape']\n>;\n\nexport type ColumnFromDbParams = {\n isNullable?: boolean;\n default?: string;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n};\n\nconst knownDefaults: Record<string, string> = {\n current_timestamp: 'now()',\n 'transaction_timestamp()': 'now()',\n};\n\nexport const simplifyColumnDefault = (value?: string) => {\n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n return raw(knownDefaults[lower] || value);\n }\n return;\n};\n\nexport const instantiateColumn = (\n klass: new (...args: never[]) => ColumnType,\n params: ColumnFromDbParams,\n): ColumnType => {\n const column = new (klass as unknown as new () => ColumnType)();\n\n Object.assign(column.data, {\n ...params,\n default: simplifyColumnDefault(params.default),\n });\n return column as unknown as ColumnType;\n};\n\nexport abstract class ColumnType<\n Type = unknown,\n Ops extends BaseOperators = BaseOperators,\n InputType = Type,\n> extends ColumnTypeBase<Type, Ops, InputType, ColumnData> {\n primaryKey<T extends ColumnType>(this: T): PrimaryKeyColumn<T> {\n return setColumnData(\n this,\n 'isPrimaryKey',\n true,\n ) as unknown as PrimaryKeyColumn<T>;\n }\n\n foreignKey<\n T extends ColumnType,\n Table extends ForeignKeyTable,\n Column extends ColumnNameOfTable<Table>,\n >(\n this: T,\n fn: () => Table,\n column: Column,\n options?: ForeignKeyOptions,\n ): Omit<T, 'foreignKeyData'> & {\n foreignKeyData: ForeignKey<InstanceType<Table>['table'], [Column]>;\n };\n foreignKey<T extends ColumnType, Table extends string, Column extends string>(\n this: T,\n table: Table,\n column: Column,\n options?: ForeignKeyOptions,\n ): Omit<T, 'foreignKeyData'> & {\n foreignKeyData: ForeignKey<Table, [Column]>;\n };\n foreignKey(\n fnOrTable: (() => ForeignKeyTable) | string,\n column: string,\n options: ForeignKeyOptions = {},\n ) {\n const item =\n typeof fnOrTable === 'string'\n ? { table: fnOrTable, columns: [column], ...options }\n : { fn: fnOrTable, columns: [column], ...options };\n return pushColumnData(this, 'foreignKeys', item);\n }\n\n hidden<T extends ColumnType>(this: T): HiddenColumn<T> {\n return setColumnData(this, 'isHidden', true) as HiddenColumn<T>;\n }\n\n encode<T extends ColumnType, Input>(\n this: T,\n fn: (input: Input) => unknown,\n ): EncodeColumn<T, Input> {\n return Object.assign(Object.create(this), {\n encodeFn: fn,\n }) as unknown as EncodeColumn<T, Input>;\n }\n\n parse<T extends ColumnType, Output>(\n this: T,\n fn: (input: T['type']) => Output,\n ): ParseColumn<T, Output> {\n return Object.assign(Object.create(this), {\n parseFn: fn,\n parseItem: fn,\n }) as unknown as ParseColumn<T, Output>;\n }\n\n as<\n T extends ColumnType,\n C extends ColumnType<T['type'], BaseOperators, T['inputType']>,\n >(this: T, column: C): C {\n return setColumnData(this, 'as', column) as unknown as C;\n }\n\n toSQL() {\n return this.dataType;\n }\n\n index<T extends ColumnType>(\n this: T,\n options: Omit<SingleColumnIndexOptions, 'column'> = {},\n ): T {\n return pushColumnData(this, 'indexes', options);\n }\n\n unique<T extends ColumnType>(\n this: T,\n options: Omit<SingleColumnIndexOptions, 'column' | 'unique'> = {},\n ): T {\n return pushColumnData(this, 'indexes', { ...options, unique: true });\n }\n\n comment<T extends ColumnType>(this: T, comment: string): T {\n return setColumnData(this, 'comment', comment);\n }\n\n validationDefault<T extends ColumnType>(this: T, value: T['type']): T {\n return setColumnData(this, 'validationDefault', value as unknown);\n }\n\n compression<T extends ColumnType>(this: T, compression: string): T {\n return setColumnData(this, 'compression', compression);\n }\n\n collate<T extends ColumnType>(this: T, collate: string): T {\n return setColumnData(this, 'collate', collate);\n }\n\n modifyQuery<T extends ColumnType>(this: T, cb: (q: Query) => void): T {\n return setColumnData(this, 'modifyQuery', cb as (q: QueryCommon) => void);\n }\n\n transform<T extends ColumnType, Transformed>(\n this: T,\n fn: (input: T['type'], ctx: ValidationContext) => Transformed,\n ): Omit<T, 'type'> & { type: Transformed } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['transform', fn]];\n return cloned as Omit<T, 'type'> & { type: Transformed };\n }\n\n to<T extends ColumnType, ToType extends ColumnType>(\n this: T,\n fn: (input: T['type']) => ToType['type'] | undefined,\n type: ToType,\n ): ToType {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['to', fn, type], ...cloned.chain];\n return cloned as ToType;\n }\n\n refine<T extends ColumnType, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type']) => unknown,\n params?: MessageParam,\n ): T & { type: RefinedOutput } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['refine', check, cloned]];\n\n if (typeof params === 'string' || params?.message) {\n cloned.data = {\n ...this.data,\n errors: {\n ...this.data.errors,\n refine: typeof params === 'string' ? params : params.message,\n },\n };\n }\n\n return cloned as T & { type: RefinedOutput };\n }\n\n superRefine<T extends ColumnType, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type'], ctx: ValidationContext) => unknown,\n ): T & { type: RefinedOutput } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['superRefine', check]];\n return cloned as T & { type: RefinedOutput };\n }\n}\n","import { RawExpression } from 'orchid-core';\n\nconst keys: string[] = [];\nexport const getRaw = (raw: RawExpression, valuesArray: unknown[]) => {\n if (!raw.__values) {\n return raw.__raw;\n }\n\n const arr = raw.__raw.split(\"'\");\n const values = raw.__values as Record<string, unknown>;\n const len = arr.length;\n keys.length = 0;\n for (let i = 0; i < len; i += 2) {\n arr[i] = arr[i].replace(/\\$(\\w+)/g, (_, key) => {\n const value = values[key];\n if (value === undefined) {\n throw new Error(`Query variable \\`${key}\\` is not provided`);\n }\n\n keys.push(key);\n valuesArray.push(value);\n return `$${valuesArray.length}`;\n });\n }\n\n if (keys.length > 0 && keys.length < Object.keys(values).length) {\n for (const key in values) {\n if (!keys.includes(key)) {\n throw new Error(`Query variable \\`${key}\\` is unused`);\n }\n }\n }\n\n return arr.join(\"'\");\n};\n","import { getRaw } from '../raw';\nimport { Expression } from '../utils';\nimport { QueryData } from './data';\n\nexport type ColumnNamesShape = Record<string, { data: { name?: string } }>;\n\nexport const q = (sql: string) => `\"${sql}\"`;\n\n// quote column with table or as\nexport const qc = (column: string, quotedAs?: string) =>\n quotedAs ? `${quotedAs}.${q(column)}` : column;\n\nconst getJoinedColumnName = (\n data: Pick<QueryData, 'joinedShapes'>,\n shape: ColumnNamesShape,\n table: string,\n key: string,\n isOwnColumn: boolean,\n) =>\n ((isOwnColumn ? shape[key] : undefined) || data.joinedShapes?.[table]?.[key])\n ?.data.name;\n\nexport const revealColumnToSql = (\n data: Pick<QueryData, 'joinedShapes'>,\n shape: ColumnNamesShape,\n column: string,\n quotedAs?: string,\n select?: true,\n) => {\n const index = column.indexOf('.');\n if (index !== -1) {\n const table = column.slice(0, index);\n const key = column.slice(index + 1);\n const quoted = q(table);\n return `${quoted}.${q(\n getJoinedColumnName(data, shape, table, key, quoted === quotedAs) || key,\n )}`;\n } else if (data.joinedShapes?.[column]) {\n return select ? `row_to_json(\"${column}\".*)` : `\"${column}\".r`;\n } else if (quotedAs && shape[column]) {\n return `${quotedAs}.${q(shape[column].data.name || column)}`;\n } else {\n return q(shape[column]?.data.name || column);\n }\n};\n\nexport const revealColumnToSqlWithAs = (\n data: QueryData,\n column: string,\n quotedAs?: string,\n select?: true,\n) => {\n const index = column.indexOf('.');\n if (index !== -1) {\n const table = column.slice(0, index);\n const key = column.slice(index + 1);\n const quoted = q(table);\n const name = getJoinedColumnName(\n data,\n data.shape,\n table,\n key,\n quoted === quotedAs,\n );\n return `${quoted}.${q(name || key)}${\n name && name !== key ? ` AS ${q(key)}` : ''\n }`;\n } else if (data.joinedShapes?.[column]) {\n return select\n ? `row_to_json(\"${column}\".*) \"${column}\"`\n : `\"${column}\".r \"${column}\"`;\n } else {\n const name = data.shape[column]?.data.name;\n return `${quotedAs ? `${quotedAs}.` : ''}${q(name || column)}${\n name && name !== column ? ` AS ${q(column)}` : ''\n }`;\n }\n};\n\nexport const rawOrRevealColumnToSql = (\n data: Pick<QueryData, 'shape' | 'joinedShapes'>,\n expr: Expression,\n values: unknown[],\n quotedAs: string | undefined,\n shape: ColumnNamesShape = data.shape,\n select?: true,\n) => {\n return typeof expr === 'string'\n ? revealColumnToSql(data, shape, expr, quotedAs, select)\n : getRaw(expr, values);\n};\n\nexport const quoteSchemaAndTable = (\n schema: string | undefined,\n table: string,\n) => {\n return schema ? `${q(schema)}.${q(table)}` : q(table);\n};\n\nexport const addValue = (values: unknown[], value: unknown) => {\n values.push(value);\n return `$${values.length}`;\n};\n","import { Query } from '../query';\nimport { addValue } from '../sql/common';\nimport { getRaw } from '../raw';\nimport { createOperator, isRaw, RawExpression } from 'orchid-core';\n\nconst quoteValue = (\n arg: unknown,\n values: unknown[],\n jsonArray?: boolean,\n): string => {\n if (arg && typeof arg === 'object') {\n if (!jsonArray && Array.isArray(arg)) {\n return `(${arg.map((value) => addValue(values, value)).join(', ')})`;\n }\n\n if ('toSql' in arg) {\n return `(${(arg as Query).toSql({ values }).text})`;\n }\n\n if (isRaw(arg)) {\n return getRaw(arg, values);\n }\n }\n\n return addValue(values, arg);\n};\n\nconst all = {\n equals: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NULL`\n : `${key} = ${quoteValue(value, values)}`,\n ),\n not: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NOT NULL`\n : `${key} <> ${quoteValue(value, values)}`,\n ),\n in: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `${key} IN ${quoteValue(value, values)}`,\n ),\n notIn: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `NOT ${key} IN ${quoteValue(value, values)}`,\n ),\n lt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} < ${quoteValue(value, values)}`,\n ),\n lte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <= ${quoteValue(value, values)}`,\n ),\n gt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} > ${quoteValue(value, values)}`,\n ),\n gte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} >= ${quoteValue(value, values)}`,\n ),\n contains: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n containsSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} LIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n startsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE ${quoteValue(value, values)} || '%'`,\n ),\n startsWithSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE ${quoteValue(value, values)} || '%'`,\n ),\n endsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)}`,\n ),\n endsWithSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE '%' || ${quoteValue(value, values)}`,\n ),\n between: <T>() =>\n createOperator<[T | Query | RawExpression, T | Query | RawExpression]>(\n (key, [from, to], values) =>\n `${key} BETWEEN ${quoteValue(from, values)} AND ${quoteValue(\n to,\n values,\n )}`,\n ),\n jsonPath: <T>() =>\n createOperator<\n [path: string, op: string, value: T | Query | RawExpression]\n >(\n (key, [path, op, value], values) =>\n `jsonb_path_query_first(${key}, '${path}') #>> '{}' ${op} ${quoteValue(\n value,\n values,\n true,\n )}`,\n ),\n jsonSupersetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} @> ${quoteValue(value, values, true)}`,\n ),\n jsonSubsetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <@ ${quoteValue(value, values, true)}`,\n ),\n};\n\nconst base = <T>() => ({\n equals: all.equals<T>(),\n not: all.not<T>(),\n in: all.in<T>(),\n notIn: all.notIn<T>(),\n});\n\nconst numeric = <T>() => ({\n ...base<T>(),\n lt: all.lt<T>(),\n lte: all.lte<T>(),\n gt: all.gt<T>(),\n gte: all.gte<T>(),\n between: all.between<T>(),\n});\n\nconst text = <T>() => ({\n ...base<T>(),\n contains: all.contains<T>(),\n containsSensitive: all.containsSensitive<T>(),\n startsWith: all.startsWith<T>(),\n startsWithSensitive: all.startsWithSensitive<T>(),\n endsWith: all.endsWith<T>(),\n endsWithSensitive: all.endsWithSensitive<T>(),\n});\n\nconst json = <T>() => ({\n ...base<T>(),\n jsonPath: all.jsonPath<T>(),\n jsonSupersetOf: all.jsonSupersetOf<T>(),\n jsonSubsetOf: all.jsonSubsetOf<T>(),\n});\n\nexport const Operators = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any: base<any>(),\n boolean: base<boolean>(),\n number: numeric<number>(),\n date: numeric<Date>(),\n time: numeric<Date>(),\n text: text<string>(),\n json: json<unknown>(),\n // TODO: array operators\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n array: base<any>(),\n};\n","export const cloneInstance = <T>(instance: T): T => {\n return Object.assign(\n Object.create(Object.getPrototypeOf(instance)),\n instance,\n );\n};\n\nexport const assignMethodsToClass = <Methods extends Record<string, unknown>>(\n klass: { prototype: unknown },\n methods: Methods,\n) => {\n for (const name in methods) {\n Object.defineProperty(klass.prototype, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value(...args: unknown[]) {\n const cloned = cloneInstance(this);\n return (\n methods as unknown as Record<string, (...args: unknown[]) => unknown>\n )[name].apply(cloned, args);\n },\n });\n }\n};\n","import { ColumnData, ColumnType, ForeignKey } from './columnType';\nimport { getConstraintKind, TableData } from './columnTypes';\nimport {\n addCode,\n Code,\n columnChainToCode,\n columnDefaultArgumentToCode,\n columnErrorMessagesToCode,\n ColumnsShapeBase,\n ColumnTypeBase,\n isRaw,\n objectHasValues,\n quoteObjectKey,\n RawExpression,\n rawToCode,\n singleQuote,\n singleQuoteArray,\n toArray,\n} from 'orchid-core';\n\nconst isDefaultTimeStamp = (item: ColumnTypeBase) => {\n if (item.dataType !== 'timestamptz') return false;\n\n const def = item.data.default;\n return def && isRaw(def) && def.__raw.startsWith('now()');\n};\n\nconst combineCodeElements = (input: Code): Code => {\n if (typeof input === 'string') return input;\n\n const output: Code = [];\n let i = -1;\n\n for (const item of input) {\n if (typeof item === 'string') {\n if (typeof output[i] === 'string') {\n output[i] += item;\n } else {\n output[++i] = item;\n }\n } else {\n output[++i] = combineCodeElements(item);\n }\n }\n\n return output;\n};\n\nexport const columnsShapeToCode = (\n shape: ColumnsShapeBase,\n tableData: TableData,\n t: string,\n): Code[] => {\n const hasTimestamps =\n 'createdAt' in shape &&\n isDefaultTimeStamp(shape.createdAt) &&\n 'updatedAt' in shape &&\n isDefaultTimeStamp(shape.updatedAt);\n\n const code: Code = [];\n\n for (const key in shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n\n code.push(\n ...combineCodeElements([\n `${quoteObjectKey(key)}: `,\n ...toArray(shape[key].toCode(t)),\n ',',\n ]),\n );\n }\n\n if (hasTimestamps) {\n code.push(`...${t}.timestamps(),`);\n }\n\n const { primaryKey, indexes, constraints } = tableData;\n if (primaryKey) {\n code.push(primaryKeyToCode(primaryKey, t));\n }\n\n if (indexes) {\n for (const index of indexes) {\n code.push(...indexToCode(index, t));\n }\n }\n\n if (constraints) {\n for (const item of constraints) {\n code.push(...constraintToCode(item, t));\n }\n }\n\n return code;\n};\n\nexport const primaryKeyToCode = (\n primaryKey: TableData.PrimaryKey,\n t: string,\n): string => {\n const name = primaryKey.options?.name;\n\n return `...${t}.primaryKey([${primaryKey.columns\n .map(singleQuote)\n .join(', ')}]${name ? `, { name: ${singleQuote(name)} }` : ''}),`;\n};\n\nexport const indexToCode = (index: TableData.Index, t: string): Code[] => {\n const code: Code[] = [];\n\n code.push(`...${t}.index(`);\n\n const columnsMultiline = index.columns.some((column) => {\n for (const key in column) {\n if (key !== 'column' && column[key as keyof typeof column] !== undefined)\n return true;\n }\n return false;\n });\n if (columnsMultiline) {\n const objects: Code[] = [];\n\n for (const column of index.columns) {\n const expr = 'column' in column ? column.column : column.expression;\n\n let hasOptions = false;\n for (const key in column) {\n if (key !== 'column' && key !== 'expression') {\n hasOptions = true;\n }\n }\n\n if (!hasOptions) {\n objects.push(`${singleQuote(expr)},`);\n } else {\n const props: Code[] = [\n `${'column' in column ? 'column' : 'expression'}: ${singleQuote(\n expr,\n )},`,\n ];\n if (column.collate !== undefined) {\n props.push(`collate: ${singleQuote(column.collate)},`);\n }\n if (column.opclass !== undefined) {\n props.push(`opclass: ${singleQuote(column.opclass)},`);\n }\n if (column.order !== undefined) {\n props.push(`order: ${singleQuote(column.order)},`);\n }\n\n objects.push('{', props, '},');\n }\n }\n\n code.push(['[', objects, ']']);\n } else {\n addCode(\n code,\n `[${index.columns\n .map((it) => singleQuote((it as { column: string }).column))\n .join(', ')}]`,\n );\n }\n\n const hasOptions = objectHasValues(index.options);\n if (hasOptions) {\n if (columnsMultiline) {\n const columns = code[code.length - 1] as string[];\n columns[columns.length - 1] += ',';\n code.push(['{']);\n } else {\n addCode(code, ', {');\n }\n\n const options: string[] = [];\n for (const key in index.options) {\n const value = index.options[key as keyof typeof index.options];\n if (value === null || value === undefined) continue;\n\n options.push(\n `${key}: ${\n typeof value === 'object'\n ? singleQuoteArray(value)\n : typeof value === 'string'\n ? singleQuote(value)\n : value\n },`,\n );\n }\n\n if (columnsMultiline) {\n code.push([options, '},']);\n } else {\n code.push(options);\n addCode(code, '}');\n }\n }\n\n if (columnsMultiline) {\n code.push('),');\n } else {\n addCode(code, '),');\n }\n\n return code;\n};\n\nexport const constraintToCode = (\n item: TableData.Constraint,\n t: string,\n): Code => {\n const kind = getConstraintKind(item);\n\n if (kind === 'foreignKey' && item.references) {\n return [\n `...${t}.foreignKey(`,\n referencesArgsToCode(item.references, item.name),\n '),',\n ];\n } else if (kind === 'check' && item.check) {\n return [`...${t}.check(${rawToCode(t, item.check)}),`];\n } else {\n return [`...${t}.constraint({`, constraintPropsToCode(t, item), '}),'];\n }\n};\n\nexport const constraintPropsToCode = (\n t: string,\n item: TableData.Constraint,\n): Code[] => {\n const props: Code[] = [];\n\n if (item.name) {\n props.push(`name: ${singleQuote(item.name)},`);\n }\n\n if (item.references) {\n props.push(\n `references: [`,\n referencesArgsToCode(item.references, false),\n '],',\n );\n }\n\n if (item.check) {\n props.push(`check: ${rawToCode(t, item.check)},`);\n }\n\n return props;\n};\n\nexport const referencesArgsToCode = (\n {\n columns,\n fnOrTable,\n foreignColumns,\n options,\n }: Exclude<TableData.Constraint['references'], undefined>,\n name: string | false = options?.name || false,\n): Code[] => {\n const args: Code[] = [];\n\n args.push(`${singleQuoteArray(columns)},`);\n\n args.push(\n `${\n typeof fnOrTable === 'string'\n ? singleQuote(fnOrTable)\n : fnOrTable.toString()\n },`,\n );\n\n args.push(`${singleQuoteArray(foreignColumns)},`);\n\n if (objectHasValues(options) || name) {\n const lines: string[] = [];\n if (name) lines.push(`name: ${singleQuote(name)},`);\n for (const key in options) {\n if (key === 'name') continue;\n const value = options[key as keyof typeof options];\n if (value) lines.push(`${key}: ${singleQuote(value)},`);\n }\n args.push('{', lines, '},');\n }\n\n return args;\n};\n\nexport const columnForeignKeysToCode = (\n foreignKeys: ForeignKey<string, string[]>[],\n): Code[] => {\n const code: Code[] = [];\n for (const foreignKey of foreignKeys) {\n addCode(code, `.foreignKey(`);\n for (const part of foreignKeyArgumentToCode(foreignKey)) {\n addCode(code, part);\n }\n addCode(code, ')');\n }\n return code;\n};\n\nexport const foreignKeyArgumentToCode = (\n foreignKey: ForeignKey<string, string[]>,\n): Code[] => {\n const code: Code = [];\n\n if ('fn' in foreignKey) {\n code.push(foreignKey.fn.toString());\n } else {\n code.push(singleQuote(foreignKey.table));\n }\n addCode(code, `, ${singleQuote(foreignKey.columns[0])}`);\n\n const hasOptions =\n foreignKey.name ||\n foreignKey.match ||\n foreignKey.onUpdate ||\n foreignKey.onDelete;\n\n if (hasOptions) {\n const arr: string[] = [];\n\n if (foreignKey.name) arr.push(`name: ${singleQuote(foreignKey.name)},`);\n if (foreignKey.match) arr.push(`match: ${singleQuote(foreignKey.match)},`);\n if (foreignKey.onUpdate)\n arr.push(`onUpdate: ${singleQuote(foreignKey.onUpdate)},`);\n if (foreignKey.onDelete)\n arr.push(`onDelete: ${singleQuote(foreignKey.onDelete)},`);\n\n addCode(code, ', {');\n code.push(arr);\n addCode(code, '}');\n }\n\n return code;\n};\n\nexport const columnIndexesToCode = (\n indexes: Exclude<ColumnData['indexes'], undefined>,\n): Code[] => {\n const code: Code[] = [];\n for (const index of indexes) {\n addCode(code, `.${index.unique ? 'unique' : 'index'}(`);\n\n const arr: string[] = [];\n\n if (index.collate) arr.push(`collate: ${singleQuote(index.collate)},`);\n if (index.opclass) arr.push(`opclass: ${singleQuote(index.opclass)},`);\n if (index.order) arr.push(`order: ${singleQuote(index.order)},`);\n if (index.name) arr.push(`name: ${singleQuote(index.name)},`);\n if (index.using) arr.push(`using: ${singleQuote(index.using)},`);\n if (index.include)\n arr.push(\n `include: ${\n typeof index.include === 'string'\n ? singleQuote(index.include)\n : `[${index.include.map(singleQuote).join(', ')}]`\n },`,\n );\n if (index.nullsNotDistinct) arr.push(`nullsNotDistinct: true,`);\n if (index.with) arr.push(`with: ${singleQuote(index.with)},`);\n if (index.tablespace)\n arr.push(`tablespace: ${singleQuote(index.tablespace)},`);\n if (index.where) arr.push(`where: ${singleQuote(index.where)},`);\n\n if (arr.length) {\n addCode(code, '{');\n addCode(code, arr);\n addCode(code, '}');\n }\n\n addCode(code, ')');\n }\n return code;\n};\n\nexport const columnCheckToCode = (t: string, check: RawExpression): string => {\n return `.check(${rawToCode(t, check)})`;\n};\n\nexport const identityToCode = (\n identity: TableData.Identity,\n dataType?: string,\n) => {\n const code: Code[] = [];\n\n if (dataType === 'integer') {\n code.push(`identity(`);\n } else {\n code.push(`${dataType}().identity(`);\n }\n\n const props: string[] = [];\n if (identity.always) props.push(`always: true,`);\n if (identity.incrementBy) props.push(`incrementBy: ${identity.incrementBy},`);\n if (identity.startWith) props.push(`startWith: ${identity.startWith},`);\n if (identity.min) props.push(`min: ${identity.min},`);\n if (identity.max) props.push(`max: ${identity.max},`);\n if (identity.cache) props.push(`cache: ${identity.cache},`);\n\n if (props.length) {\n addCode(code, '{');\n code.push(props, '}');\n }\n\n addCode(code, ')');\n\n return code;\n};\n\nexport const columnCode = (\n type: ColumnType,\n t: string,\n code: Code,\n data = type.data,\n skip?: Record<'encodeFn', unknown>,\n): Code => {\n code = toArray(code);\n\n let prepend = `${t}.`;\n if (data.name) {\n prepend += `name(${singleQuote(data.name)}).`;\n }\n\n if (typeof code[0] === 'string') {\n code[0] = `${prepend}${code[0]}`;\n } else {\n code[0].unshift(prepend);\n }\n\n if (data.isPrimaryKey) addCode(code, '.primaryKey()');\n\n if (data.foreignKeys) {\n for (const part of columnForeignKeysToCode(data.foreignKeys)) {\n addCode(code, part);\n }\n }\n\n if (data.isHidden) addCode(code, '.hidden()');\n\n if (data.isNullable) addCode(code, '.nullable()');\n\n if (type.encodeFn && type.encodeFn !== skip?.encodeFn)\n addCode(code, `.encode(${type.encodeFn.toString()})`);\n\n if (type.parseFn && !('hideFromCode' in type.parseFn))\n addCode(code, `.parse(${type.parseFn.toString()})`);\n\n if (data.as) addCode(code, `.as(${data.as.toCode(t)})`);\n\n if (data.default !== undefined && data.default !== null) {\n addCode(code, `.default(${columnDefaultArgumentToCode(t, data.default)})`);\n }\n\n if (data.indexes) {\n for (const part of columnIndexesToCode(data.indexes)) {\n addCode(code, part);\n }\n }\n\n if (data.comment) addCode(code, `.comment(${singleQuote(data.comment)})`);\n\n if (data.check) {\n addCode(code, columnCheckToCode(t, data.check));\n }\n\n if (data.errors) {\n for (const part of columnErrorMessagesToCode(data.errors)) {\n addCode(code, part);\n }\n }\n\n const { validationDefault } = data;\n if (validationDefault) {\n addCode(\n code,\n `.validationDefault(${\n typeof validationDefault === 'function'\n ? validationDefault.toString()\n : typeof validationDefault === 'string'\n ? singleQuote(validationDefault)\n : JSON.stringify(validationDefault)\n })`,\n );\n }\n\n if (data.compression)\n addCode(code, `.compression(${singleQuote(data.compression)})`);\n\n if (data.collate) addCode(code, `.collate(${singleQuote(data.collate)})`);\n\n if (data.modifyQuery)\n addCode(code, `.modifyQuery(${data.modifyQuery.toString()})`);\n\n return columnChainToCode(type.chain, t, code);\n};\n","import { Operators } from './operators';\nimport { ColumnData, ColumnType } from './columnType';\nimport { assignMethodsToClass } from './utils';\nimport {\n numberTypeMethods,\n Code,\n RawExpression,\n joinTruthy,\n BaseNumberData,\n numberDataToCode,\n setColumnData,\n addCode,\n ColumnWithDefault,\n ColumnTypeBase,\n} from 'orchid-core';\nimport { columnCode, identityToCode } from './code';\nimport type { TableData } from './columnTypes';\n\nexport type NumberColumn = ColumnType<number, typeof Operators.number>;\n\nexport type NumberColumnData = BaseNumberData & {\n identity: TableData.Identity;\n};\n\nexport type SerialColumnData = NumberColumnData & {\n default: RawExpression;\n};\n\ntype NumberMethods = typeof numberTypeMethods;\n\nexport interface NumberBaseColumn\n extends ColumnType<number, typeof Operators.number>,\n NumberMethods {}\n\nexport abstract class NumberBaseColumn extends ColumnType<\n number,\n typeof Operators.number\n> {\n declare data: NumberColumnData;\n operators = Operators.number;\n}\n\nassignMethodsToClass(NumberBaseColumn, numberTypeMethods);\n\nexport abstract class IntegerBaseColumn extends NumberBaseColumn {\n declare data: NumberColumnData;\n constructor() {\n super();\n this.data.int = true;\n }\n}\n\nexport abstract class NumberAsStringBaseColumn extends ColumnType<\n string,\n typeof Operators.number\n> {\n operators = Operators.number;\n declare data: ColumnData;\n}\n\nexport class DecimalBaseColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.number> {\n declare data: ColumnData & {\n numericPrecision: Precision;\n numericScale: Scale;\n };\n operators = Operators.number;\n dataType = 'decimal' as const;\n\n constructor(numericPrecision?: Precision, numericScale?: Scale) {\n super();\n this.data.numericPrecision = numericPrecision as Precision;\n this.data.numericScale = numericScale as Scale;\n }\n\n toCode(t: string): Code {\n const { numericPrecision, numericScale } = this.data;\n return columnCode(\n this,\n t,\n `decimal(${numericPrecision || ''}${\n numericScale ? `, ${numericScale}` : ''\n })`,\n );\n }\n\n toSQL() {\n const { numericPrecision, numericScale } = this.data;\n\n return joinTruthy(\n this.dataType,\n numericPrecision\n ? numericScale\n ? `(${numericPrecision}, ${numericScale})`\n : `(${numericPrecision})`\n : undefined,\n );\n }\n}\n\nconst intToCode = (column: ColumnType, t: string): Code => {\n let code: Code[];\n\n if (column.data.identity) {\n code = identityToCode(column.data.identity, column.dataType);\n } else {\n code = [`${column.dataType}()`];\n }\n\n addCode(code, numberDataToCode(column.data));\n\n return columnCode(column, t, code);\n};\n\nexport type IdentityColumn<T extends ColumnTypeBase> = ColumnWithDefault<\n T,\n RawExpression\n>;\n\n// signed two-byte integer\nexport class SmallIntColumn extends IntegerBaseColumn {\n dataType = 'smallint' as const;\n parseItem = parseInt;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// signed four-byte integer\nexport class IntegerColumn extends IntegerBaseColumn {\n dataType = 'integer' as const;\n parseItem = parseInt;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// signed eight-byte integer\nexport class BigIntColumn extends NumberAsStringBaseColumn {\n dataType = 'bigint' as const;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// exact numeric of selectable precision\nexport class DecimalColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends DecimalBaseColumn<Precision, Scale> {}\n\n// single precision floating-point number (4 bytes)\nexport class RealColumn extends NumberBaseColumn {\n dataType = 'real' as const;\n parseItem = parseFloat;\n toCode(t: string): Code {\n return columnCode(this, t, `real()${numberDataToCode(this.data)}`);\n }\n}\n\n// double precision floating-point number (8 bytes)\nexport class DoublePrecisionColumn extends NumberAsStringBaseColumn {\n dataType = 'double precision' as const;\n toCode(t: string): Code {\n return columnCode(this, t, `doublePrecision()`);\n }\n}\n\n// autoincrementing two-byte integer\nexport class SmallSerialColumn extends IntegerBaseColumn {\n dataType = 'smallint' as const;\n parseItem = parseInt;\n declare data: SerialColumnData;\n\n constructor() {\n super();\n this.data.int = true;\n }\n\n toSQL() {\n return 'smallserial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `smallSerial()${numberDataToCode(this.data)}`);\n }\n}\n\n// autoincrementing four-byte integer\nexport class SerialColumn extends IntegerBaseColumn {\n dataType = 'integer' as const;\n parseItem = parseInt;\n declare data: SerialColumnData;\n\n constructor() {\n super();\n this.data.int = true;\n }\n\n toSQL() {\n return 'serial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `serial()${numberDataToCode(this.data)}`);\n }\n}\n\n// autoincrementing eight-byte integer\nexport class BigSerialColumn extends NumberAsStringBaseColumn {\n dataType = 'bigint' as const;\n declare data: SerialColumnData;\n\n toSql() {\n return 'bigserial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `bigSerial()`);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { NumberBaseColumn } from './number';\nimport { assignMethodsToClass } from './utils';\nimport {\n stringTypeMethods,\n Code,\n joinTruthy,\n BaseStringData,\n stringDataToCode,\n PrimaryKeyColumn,\n raw,\n RawExpression,\n} from 'orchid-core';\nimport { columnCode } from './code';\n\nexport type StringColumn = ColumnType<string, typeof Operators.text>;\n\nexport type TextColumnData = BaseStringData;\n\ntype TextMethods = typeof textMethods;\nconst textMethods = stringTypeMethods();\n\nexport interface TextBaseColumn\n extends ColumnType<string, typeof Operators.text>,\n TextMethods {}\n\nexport abstract class TextBaseColumn extends ColumnType<\n string,\n typeof Operators.text\n> {\n declare data: TextColumnData;\n operators = Operators.text;\n}\n\nassignMethodsToClass(TextBaseColumn, textMethods);\n\nexport abstract class LimitedTextBaseColumn<\n Limit extends number | undefined = undefined,\n> extends TextBaseColumn {\n declare data: TextColumnData & { maxChars: Limit };\n\n constructor(limit?: Limit) {\n super();\n this.data.maxChars = limit as Limit;\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.maxChars !== undefined && `(${this.data.maxChars})`,\n );\n }\n}\n\n// character varying(n), varchar(n) variable-length with limit\nexport class VarCharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'varchar' as const;\n toCode(t: string): Code {\n const { maxChars } = this.data;\n return columnCode(\n this,\n t,\n `varchar(${maxChars ?? ''})${stringDataToCode(this.data)}`,\n );\n }\n}\n\n// character(n), char(n) fixed-length, blank padded\nexport class CharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'char' as const;\n toCode(t: string): Code {\n const { maxChars } = this.data;\n return columnCode(\n this,\n t,\n `char(${maxChars ?? ''})${stringDataToCode(this.data)}`,\n );\n }\n}\n\nconst setTextColumnData = (\n column: { data: TextColumnData & { minArg?: number; maxArg?: number } },\n minArg?: number,\n maxArg?: number,\n) => {\n if (minArg !== undefined) {\n column.data.min = column.data.minArg = minArg;\n if (maxArg !== undefined) {\n column.data.max = column.data.maxArg = maxArg;\n }\n }\n};\n\nconst textColumnToCode = (\n column: TextBaseColumn & {\n data: TextColumnData & { minArg?: number; maxArg?: number };\n },\n t: string,\n) => {\n const data = { ...column.data };\n let args = '';\n if (data.minArg !== undefined && data.min === data.minArg) {\n args += data.minArg;\n delete data.min;\n if (data.maxArg !== undefined && data.max === data.maxArg) {\n args += `, ${data.maxArg}`;\n delete data.max;\n }\n }\n return columnCode(\n column,\n t,\n `${column.dataType}(${args})${stringDataToCode(data)}`,\n );\n};\n\n// text\tvariable unlimited length\nexport class TextColumn extends TextBaseColumn {\n dataType = 'text' as const;\n declare data: TextColumnData & { minArg?: number; maxArg?: number };\n\n constructor(minArg?: number, maxArg?: number) {\n super();\n setTextColumnData(this, minArg, maxArg);\n }\n\n toCode(t: string): Code {\n return textColumnToCode(this, t);\n }\n}\n\n// To store binary strings\nexport class ByteaColumn extends ColumnType<Buffer, typeof Operators.text> {\n dataType = 'bytea' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `bytea()`);\n }\n}\n\n// point\t16 bytes\tPoint on a plane\t(x,y)\nexport class PointColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `point()`);\n }\n}\n\n// line\t32 bytes\tInfinite line\t{A,B,C}\nexport class LineColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'line' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `line()`);\n }\n}\n\n// lseg\t32 bytes\tFinite line segment\t((x1,y1),(x2,y2))\nexport class LsegColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'lseg' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `lseg()`);\n }\n}\n\n// box\t32 bytes\tRectangular box\t((x1,y1),(x2,y2))\nexport class BoxColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'box' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `box()`);\n }\n}\n\n// path\t16+16n bytes\tClosed path (similar to polygon)\t((x1,y1),...)\n// path\t16+16n bytes\tOpen path\t[(x1,y1),...]\nexport class PathColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'path' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `path()`);\n }\n}\n\n// polygon\t40+16n bytes\tPolygon (similar to closed path)\t((x1,y1),...)\nexport class PolygonColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'polygon' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `polygon()`);\n }\n}\n\n// circle\t24 bytes\tCircle\t<(x,y),r> (center point and radius)\nexport class CircleColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'circle' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `circle()`);\n }\n}\n\nexport class MoneyColumn extends NumberBaseColumn {\n dataType = 'money' as const;\n\n toCode(t: string): Code {\n return columnCode(this, t, `money()`);\n }\n\n parseFn = Object.assign(\n function (input: unknown) {\n return parseFloat((input as string).replace(/,/g, '').replace(/\\$/g, ''));\n },\n {\n hideFromCode: true,\n },\n );\n}\n\n// cidr\t7 or 19 bytes\tIPv4 and IPv6 networks\nexport class CidrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'cidr' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `cidr()`);\n }\n}\n\n// inet\t7 or 19 bytes\tIPv4 and IPv6 hosts and networks\nexport class InetColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'inet' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `inet()`);\n }\n}\n\n// macaddr\t6 bytes\tMAC addresses\nexport class MacAddrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `macaddr()`);\n }\n}\n\n// macaddr8\t8 bytes\tMAC addresses (EUI-64 format)\nexport class MacAddr8Column extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr8' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `macaddr8()`);\n }\n}\n\n// Bit strings are strings of 1's and 0's.\n// They can be used to store or visualize bit masks.\n// There are two SQL bit types: bit(n) and bit varying(n), where n is a positive integer.\nexport class BitColumn<Length extends number> extends ColumnType<\n string,\n typeof Operators.text\n> {\n dataType = 'bit' as const;\n operators = Operators.text;\n declare data: ColumnData & { length: Length };\n\n constructor(length: Length) {\n super();\n this.data.length = length;\n }\n\n toCode(t: string): Code {\n const { length } = this.data;\n return columnCode(this, t, `bit(${length})`);\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\nexport class BitVaryingColumn<\n Length extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.text> {\n dataType = 'bit varying' as const;\n operators = Operators.text;\n declare data: ColumnData & { length: Length };\n\n constructor(length?: Length) {\n super();\n this.data.length = length as Length;\n }\n\n toCode(t: string): Code {\n const { length } = this.data;\n return columnCode(this, t, `bitVarying(${length ?? ''})`);\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\n// A tsvector value is a sorted list of distinct lexemes\nexport class TsVectorColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsvector' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `tsvector()`);\n }\n}\n\n// A tsquery value stores lexemes that are to be searched for\nexport class TsQueryColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsquery' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `tsquery()`);\n }\n}\n\nconst uuidDefault = raw('gen_random_uuid()');\n\n// uuid stores Universally Unique Identifiers (UUID)\nexport class UUIDColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'uuid' as const;\n operators = Operators.text;\n\n primaryKey<T extends ColumnType>(this: T): PrimaryKeyColumn<T> {\n const column = super.primaryKey();\n if (!column.data.default) column.data.default = uuidDefault;\n return column as unknown as PrimaryKeyColumn<T>;\n }\n\n toCode(t: string): Code {\n const { data } = this;\n return columnCode(\n this,\n t,\n `uuid()`,\n typeof data.default === 'object' &&\n (data.default as RawExpression).__raw === uuidDefault.__raw\n ? { ...data, default: undefined }\n : data,\n );\n }\n}\n\n// xml data type can be used to store XML data\nexport class XMLColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'xml' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `xml()`);\n }\n}\n\n// citext is a postgres extension\nexport class CitextColumn extends TextBaseColumn {\n dataType = 'citext' as const;\n declare data: TextColumnData & { minArg?: number; maxArg?: number };\n\n constructor(minArg?: number, maxArg?: number) {\n super();\n setTextColumnData(this, minArg, maxArg);\n }\n\n toCode(t: string): Code {\n return textColumnToCode(this, t);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport {\n dateTypeMethods,\n Code,\n joinTruthy,\n DateColumnData,\n dateDataToCode,\n EncodeColumn,\n ParseColumn,\n} from 'orchid-core';\nimport { assignMethodsToClass } from './utils';\nimport { IntegerColumn } from './number';\nimport { columnCode } from './code';\n\ntype DateMethods = typeof dateTypeMethods;\n\nexport interface DateBaseColumn\n extends ColumnType<string, typeof Operators.date, string | number | Date>,\n DateMethods {}\n\nconst dateTimeEncode = (input: string | number | Date) => {\n return typeof input === 'object' ? input : new Date(input);\n};\n\nconst skip = { encodeFn: dateTimeEncode };\n\nexport abstract class DateBaseColumn extends ColumnType<\n string,\n typeof Operators.date,\n string | number | Date\n> {\n declare data: DateColumnData;\n operators = Operators.date;\n encodeFn = dateTimeEncode;\n\n asNumber() {\n return this.parse(Date.parse).as(\n new IntegerColumn() as never,\n ) as unknown as EncodeColumn<IntegerColumn, string | number | Date>;\n }\n\n asDate<T extends ColumnType>(this: T): ParseColumn<T, Date> {\n return this.parse((input) => new Date(input as string));\n }\n}\n\nassignMethodsToClass(DateBaseColumn, dateTypeMethods);\n\n// date\t4 bytes\tdate (no time of day)\t4713 BC\t5874897 AD 1 day\nexport class DateColumn extends DateBaseColumn {\n dataType = 'date' as const;\n toCode(t: string): Code {\n return columnCode(\n this,\n t,\n `date()${dateDataToCode(this.data)}`,\n this.data,\n skip,\n );\n }\n}\n\nexport abstract class DateTimeBaseClass<\n Precision extends number | undefined = undefined,\n> extends DateBaseColumn {\n declare data: DateColumnData & { dateTimePrecision: Precision };\n\n constructor(dateTimePrecision?: Precision) {\n super();\n this.data.dateTimePrecision = dateTimePrecision as Precision;\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.dateTimePrecision !== undefined &&\n `(${this.data.dateTimePrecision})`,\n );\n }\n}\n\nexport abstract class DateTimeTzBaseClass<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n abstract baseDataType: string;\n\n toSQL() {\n return joinTruthy(\n this.baseDataType,\n this.data.dateTimePrecision !== undefined &&\n `(${this.data.dateTimePrecision})`,\n ' with time zone',\n );\n }\n}\n\nconst timestampToCode = <P extends number>(\n self: TimestampColumn<P> | TimestampTZColumn<P>,\n t: string,\n) => {\n const { dateTimePrecision: p } = self.data;\n return columnCode(\n self,\n t,\n `${self instanceof TimestampColumn ? 'timestampNoTZ' : 'timestamp'}(${\n p && p !== 6 ? p : ''\n })${dateDataToCode(self.data)}`,\n self.data,\n skip,\n );\n};\n\n// timestamp [ (p) ] [ without time zone ]\t8 bytes\tboth date and time (no time zone)\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampColumn<\n Precision extends number,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'timestamp' as const;\n toCode(t: string): Code {\n return timestampToCode(this, t);\n }\n}\n\n// timestamp [ (p) ] with time zone\t8 bytes\tboth date and time, with time zone\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampTZColumn<\n Precision extends number,\n> extends DateTimeTzBaseClass<Precision> {\n dataType = 'timestamptz' as const;\n baseDataType = 'timestamp' as const;\n toCode(t: string): Code {\n return timestampToCode(this, t);\n }\n}\n\n// time [ (p) ] [ without time zone ]\t8 bytes\ttime of day (no date)\t00:00:00\t24:00:00\t1 microsecond\nexport class TimeColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'time' as const;\n toCode(t: string): Code {\n const { dateTimePrecision } = this.data;\n return columnCode(\n this,\n t,\n `time(${dateTimePrecision || ''})${dateDataToCode(this.data)}`,\n this.data,\n skip,\n );\n }\n}\n\nexport type TimeInterval = {\n years?: number;\n months?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\n// interval [ fields ] [ (p) ]\t16 bytes\ttime interval\t-178000000 years\t178000000 years\t1 microsecond\nexport class IntervalColumn<\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n> extends ColumnType<TimeInterval, typeof Operators.date> {\n dataType = 'interval' as const;\n declare data: ColumnData & { fields: Fields; precision: Precision };\n operators = Operators.date;\n\n constructor(fields?: Fields, precision?: Precision) {\n super();\n this.data.fields = fields as Fields;\n this.data.precision = precision as Precision;\n }\n\n toCode(t: string): Code {\n const { fields, precision } = this.data;\n return columnCode(\n this,\n t,\n `interval(${[fields && `'${fields}'`, precision && String(precision)]\n .filter((part) => part)\n .join(', ')})`,\n this.data,\n skip,\n );\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.fields && ` ${this.data.fields}`,\n this.data.precision !== undefined && ` (${this.data.precision})`,\n );\n }\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport { Code } from 'orchid-core';\n\n// 1 byte, true or false\nexport class BooleanColumn extends ColumnType<\n boolean,\n typeof Operators.boolean\n> {\n dataType = 'boolean' as const;\n operators = Operators.boolean;\n\n toCode(t: string): Code {\n return columnCode(this, t, 'boolean()');\n }\n\n parseItem = (input: string) => input[0] === 't';\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport { Code } from 'orchid-core';\n\nexport class EnumColumn<\n U extends string = string,\n T extends [U, ...U[]] = [U],\n> extends ColumnType<T[number], typeof Operators.any> {\n operators = Operators.any;\n dataType = 'enum';\n\n constructor(public enumName: string, public options: T) {\n super();\n }\n\n toCode(t: string, migration?: boolean): Code {\n const options = migration\n ? ''\n : `, [${this.options.map((option) => `'${option}'`).join(', ')}]`;\n return columnCode(this, t, `enum('${this.enumName}'${options})`);\n }\n\n toSQL() {\n const name = this.enumName;\n const index = name.indexOf('.');\n return `\"${\n index === -1 ? name : `${name.slice(0, index)}\".\"${name.slice(index + 1)}`\n }\"`;\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport {\n scalarTypes,\n array,\n discriminatedUnion,\n enumType,\n instanceOf,\n intersection,\n lazy,\n literal,\n map,\n nativeEnum,\n nullable,\n nullish,\n object,\n optional,\n record,\n set,\n tuple,\n union,\n JSONTypeAny,\n Code,\n} from 'orchid-core';\n\nexport type JSONTypes = typeof jsonTypes;\nexport const jsonTypes = {\n array,\n discriminatedUnion,\n enum: enumType,\n instanceOf,\n intersection,\n lazy,\n literal,\n map,\n nativeEnum,\n nullable,\n nullish,\n object,\n optional,\n record,\n ...scalarTypes,\n set,\n tuple,\n union,\n};\n\nexport class JSONColumn<\n Type extends JSONTypeAny = JSONTypeAny,\n> extends ColumnType<Type['type'], typeof Operators.json> {\n dataType = 'jsonb' as const;\n operators = Operators.json;\n declare data: ColumnData & { schema: Type };\n\n constructor(\n schemaOrFn: Type | ((j: JSONTypes) => Type) = scalarTypes.unknown() as Type,\n ) {\n super();\n\n this.data.schema =\n typeof schemaOrFn === 'function' ? schemaOrFn(jsonTypes) : schemaOrFn;\n }\n\n toCode(t: string): Code {\n const { schema } = this.data;\n return columnCode(this, t, `json((t) => ${schema.toCode('t')})`);\n }\n}\n\nexport class JSONTextColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'json' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `jsonText()`);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { assignMethodsToClass } from './utils';\nimport {\n arrayMethods,\n addCode,\n Code,\n ColumnTypeBase,\n ArrayMethodsData,\n arrayDataToCode,\n} from 'orchid-core';\nimport { columnCode } from './code';\n\nexport type ArrayData<Item extends ColumnTypeBase> = ColumnData &\n ArrayMethodsData & {\n item: Item;\n };\n\ntype ArrayMethods = typeof arrayMethods;\n\nexport interface ArrayColumn<Item extends ColumnType>\n extends ColumnType<Item['type'][], typeof Operators.array>,\n ArrayMethods {}\n\nexport class ArrayColumn<Item extends ColumnType> extends ColumnType<\n Item['type'][],\n typeof Operators.array\n> {\n dataType = 'array' as const;\n operators = Operators.array;\n declare data: ArrayData<Item>;\n\n constructor(item: Item) {\n super();\n this.data.item = item;\n }\n\n toSQL() {\n return `${this.data.item.toSQL()}[]`;\n }\n\n toCode(this: ArrayColumn<Item>, t: string): Code {\n const code: Code[] = ['array('];\n addCode(code, this.data.item.toCode(t));\n addCode(code, `)${arrayDataToCode(this.data)}`);\n return columnCode(this, t, code);\n }\n\n parseFn = Object.assign(\n (input: unknown) => {\n const entries: unknown[] = [];\n parseArray(\n input as string,\n 0,\n (input as string).length,\n entries,\n false,\n this.data.item,\n );\n return entries;\n },\n {\n hideFromCode: true,\n },\n );\n}\n\nconst parseArray = (\n input: string,\n pos: number,\n len: number,\n entries: unknown[],\n nested: boolean,\n item: ColumnType,\n): number => {\n if (input[0] === '[') {\n while (pos < len) {\n let char = input[pos++];\n if (char === '\\\\') {\n char = input[pos++];\n }\n if (char === '=') break;\n }\n }\n\n let quote = false;\n let start = pos;\n while (pos < len) {\n let char = input[pos++];\n const escaped = char === '\\\\';\n if (escaped) {\n char = input[pos++];\n }\n\n if (char === '\"' && !escaped) {\n if (quote) {\n pushEntry(input, start, pos, entries, item);\n } else {\n start = pos;\n }\n quote = !quote;\n } else if (char === ',' && !quote) {\n if (start !== pos) {\n pushEntry(input, start, pos, entries, item);\n }\n start = pos;\n } else if (char === '{' && !quote) {\n let array: unknown[];\n let nestedItem = item;\n if (nested) {\n array = [];\n entries.push(array);\n if ('item' in item.data) {\n nestedItem = (item as ArrayColumn<ColumnType>).data\n .item as ColumnType;\n }\n } else {\n array = entries;\n }\n pos = parseArray(input, pos, len, array, true, nestedItem);\n start = pos + 1;\n } else if (char === '}' && !quote) {\n if (start !== pos) {\n pushEntry(input, start, pos, entries, item);\n }\n start = pos + 1;\n break;\n }\n }\n\n return pos;\n};\n\nassignMethodsToClass(ArrayColumn, arrayMethods);\n\nconst pushEntry = (\n input: string,\n start: number,\n pos: number,\n entries: unknown[],\n item: ColumnType,\n) => {\n let entry: unknown = input.slice(start, pos - 1);\n if (entry === 'NULL') {\n entry = null;\n } else if (item.parseItem) {\n entry = item.parseItem(entry as string);\n }\n entries.push(entry);\n};\n","import {\n ColumnInfo,\n GetArg,\n getValueKey,\n OnQueryBuilder,\n QueryMethods,\n WhereQueryBuilder,\n} from './queryMethods';\nimport { QueryData } from './sql';\nimport { ColumnsShape, ColumnType } from './columns';\nimport { AliasOrTable } from './utils';\nimport { Db } from './db';\nimport { RelationQueryBase, RelationsBase } from './relations';\nimport { QueryError, QueryErrorName } from './errors';\nimport {\n ColumnShapeOutput,\n ColumnsShapeBase,\n ColumnTypeBase,\n ColumnTypesBase,\n EmptyObject,\n QueryCommon,\n RawExpression,\n Spread,\n StringKey,\n ThenResult,\n} from 'orchid-core';\nimport { QueryBase } from './queryBase';\n\nexport type ColumnParser = (input: unknown) => unknown;\nexport type ColumnsParsers = Record<string | getValueKey, ColumnParser>;\n\nexport type SelectableBase = Record<\n PropertyKey,\n { as: string; column: ColumnType }\n>;\n\nexport type SelectableFromShape<\n Shape extends ColumnsShapeBase,\n Table extends string | undefined,\n> = { [K in keyof Shape]: { as: K; column: Shape[K] } } & {\n [K in keyof Shape as `${Table}.${StringKey<K>}`]: {\n as: K;\n column: Shape[K];\n };\n};\n\nexport type WithDataItem = { table: string; shape: ColumnsShape };\nexport type WithDataBase = Record<never, WithDataItem>;\n\nexport type Query = QueryCommon &\n QueryMethods & {\n queryBuilder: Db;\n columnTypes: ColumnTypesBase;\n whereQueryBuilder: typeof WhereQueryBuilder;\n onQueryBuilder: typeof OnQueryBuilder;\n table?: string;\n shape: ColumnsShape;\n singlePrimaryKey: string;\n primaryKeys: string[];\n type: Record<string, unknown>;\n inputType: Record<string, unknown>;\n query: QueryData;\n result: ColumnsShape;\n selectable: SelectableBase;\n returnType: QueryReturnType;\n then: ThenResult<unknown>;\n windows: EmptyObject;\n defaultSelectColumns: string[];\n relations: RelationsBase;\n relationsQueries: Record<string, Query>;\n withData: WithDataBase;\n error: new (\n message: string,\n length: number,\n name: QueryErrorName,\n ) => QueryError;\n isSubQuery: boolean;\n };\n\nexport type Selectable<T extends QueryBase> = StringKey<keyof T['selectable']>;\n\nexport type QueryWithTable = Query & { table: string };\n\nexport type QueryReturnType =\n | 'all'\n | 'one'\n | 'oneOrThrow'\n | 'rows'\n | 'pluck'\n | 'value'\n | 'valueOrThrow'\n | 'rowCount'\n | 'void';\n\nexport const queryTypeWithLimitOne = {\n one: true,\n oneOrThrow: true,\n} as Record<QueryReturnType, true | undefined>;\n\nexport const isQueryReturnsAll = (q: Query) =>\n !q.query.returnType || q.query.returnType === 'all';\n\nexport type QueryReturnsAll<T extends QueryReturnType> = (\n QueryReturnType extends T ? 'all' : T\n) extends 'all'\n ? true\n : false;\n\nexport type QueryThen<\n ReturnType extends QueryReturnType,\n Result extends ColumnsShapeBase,\n> = QueryReturnsAll<ReturnType> extends true\n ? ThenResult<ColumnShapeOutput<Result>[]>\n : ReturnType extends 'one'\n ? ThenResult<ColumnShapeOutput<Result> | undefined>\n : ReturnType extends 'oneOrThrow'\n ? ThenResult<ColumnShapeOutput<Result>>\n : ReturnType extends 'value'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type'] | undefined>\n : never\n : ReturnType extends 'valueOrThrow'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type']>\n : never\n : ReturnType extends 'rows'\n ? ThenResult<ColumnShapeOutput<Result>[keyof Result][][]>\n : ReturnType extends 'pluck'\n ? Result extends { pluck: ColumnType }\n ? ThenResult<Result['pluck']['type'][]>\n : never\n : ReturnType extends 'rowCount'\n ? ThenResult<number>\n : ReturnType extends 'void'\n ? ThenResult<void>\n : never;\n\nexport type AddQuerySelect<\n T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>,\n Result extends ColumnsShapeBase,\n> = T['meta']['hasSelect'] extends true\n ? MergeSelect<T, Result>\n : {\n [K in keyof T]: K extends 'meta'\n ? T['meta'] & { hasSelect: true }\n : K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : T[K];\n };\n\ntype MergeSelect<\n T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>,\n Result extends ColumnsShapeBase,\n Merged extends ColumnsShapeBase = {\n [K in keyof T['result']]: K extends keyof Result ? unknown : T['result'][K];\n } & Result,\n> = {\n [K in keyof T]: K extends 'result'\n ? Merged\n : K extends 'then'\n ? QueryThen<T['returnType'], Merged>\n : T[K];\n};\n\nexport type SetQueryReturns<T extends Query, R extends QueryReturnType> = Omit<\n T,\n 'returnType' | 'then'\n> & { returnType: R; then: QueryThen<R, T['result']> };\n\nexport type SetQueryReturnsAll<T extends Query> = SetQueryReturns<T, 'all'>;\n\nexport type SetQueryReturnsOneOptional<T extends Query> = SetQueryReturns<\n T,\n 'one'\n>;\n\nexport type SetQueryReturnsOne<T extends Query> = SetQueryReturns<\n T,\n 'oneOrThrow'\n>;\n\nexport type SetQueryReturnsRows<T extends Query> = SetQueryReturns<T, 'rows'>;\n\nexport type SetQueryReturnsPluck<\n T extends Query,\n S extends keyof T['selectable'] | RawExpression,\n C extends ColumnTypeBase = S extends keyof T['selectable']\n ? T['selectable'][S]['column']\n : S extends RawExpression\n ? S['__column']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { pluck: C };\n returnType: 'pluck';\n then: ThenResult<C['type'][]>;\n};\n\nexport type SetQueryReturnsValueOptional<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnTypeBase,\n Column extends ColumnTypeBase = Arg extends ColumnTypeBase\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { value: Column };\n returnType: 'value';\n then: ThenResult<Column['type'] | undefined>;\n};\n\nexport type SetQueryReturnsValue<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnTypeBase,\n Column extends ColumnTypeBase = Arg extends ColumnTypeBase\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { value: Column };\n returnType: 'valueOrThrow';\n then: ThenResult<Column['type']>;\n};\n\nexport type SetQueryReturnsRowCount<T extends Query> = SetQueryReturns<\n T,\n 'rowCount'\n>;\n\nexport type SetQueryReturnsVoid<T extends Query> = SetQueryReturns<T, 'void'>;\n\nexport type SetQueryReturnsColumnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined,\n Result = Column extends keyof T['shape']\n ? ColumnInfo\n : Record<keyof T['shape'], ColumnInfo>,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n result: { value: ColumnType<Result> };\n returnType: 'value';\n then: ThenResult<Result>;\n};\n\nexport type SetQueryTableAlias<\n T extends Pick<Query, 'selectable' | 'table' | 'meta'> & {\n shape: ColumnsShapeBase;\n },\n As extends string,\n> = {\n [K in keyof T]: K extends 'selectable'\n ? Omit<\n T['selectable'],\n `${AliasOrTable<T>}.${StringKey<keyof T['shape']>}`\n > & {\n [K in keyof T['shape'] as `${As}.${StringKey<keyof T['shape']>}`]: {\n as: K;\n column: T['shape'][K];\n };\n }\n : K extends 'meta'\n ? Omit<T['meta'], 'as'> & {\n as: As;\n }\n : T[K];\n};\n\nexport type SetQueryWith<\n T extends Query,\n WithData extends Record<string, WithDataItem>,\n> = Omit<T, 'withData'> & { withData: WithData };\n\nexport type AddQueryWith<\n T extends Query,\n With extends WithDataItem,\n> = SetQueryWith<T, Spread<[T['withData'], { [K in With['table']]: With }]>>;\n\nexport type SetQueryWindows<T extends Query, W extends EmptyObject> = T & {\n windows: W;\n};\n","import { rawOrRevealColumnToSql } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { QueryBase } from '../queryBase';\n\nexport const pushDistinctSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n distinct: Exclude<SelectQueryData['distinct'], undefined>,\n quotedAs?: string,\n) => {\n ctx.sql.push('DISTINCT');\n\n if (distinct.length) {\n const columns = distinct?.map((item) =>\n rawOrRevealColumnToSql(table.query, item, ctx.values, quotedAs),\n );\n ctx.sql.push(`ON (${columns?.join(', ') || ''})`);\n }\n};\n","import { OrderItem } from './types';\nimport { revealColumnToSql } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { QueryData, SelectQueryData } from './data';\nimport { isRaw } from 'orchid-core';\n\nexport const pushOrderBySql = (\n ctx: ToSqlCtx,\n data: QueryData,\n quotedAs: string | undefined,\n order: Exclude<SelectQueryData['order'], undefined>,\n) => {\n ctx.sql.push(\n `ORDER BY ${order\n .map((item) => orderByToSql(data, item, ctx.values, quotedAs))\n .join(', ')}`,\n );\n};\n\nexport const orderByToSql = (\n data: QueryData,\n order: OrderItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof order === 'string') {\n return `${revealColumnToSql(data, data.shape, order, quotedAs)} ASC`;\n }\n\n if (isRaw(order)) {\n return getRaw(order, values);\n }\n\n const sql: string[] = [];\n for (const key in order) {\n const value = order[key];\n sql.push(`${revealColumnToSql(data, data.shape, key, quotedAs)} ${value}`);\n }\n return sql.join(', ');\n};\n","import { WindowDeclaration } from './types';\nimport { q, rawOrRevealColumnToSql } from './common';\nimport { orderByToSql } from './orderBy';\nimport { getRaw } from '../raw';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { QueryData } from './data';\n\nexport const windowToSql = (\n data: QueryData,\n window: string | WindowDeclaration | RawExpression,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof window === 'object') {\n if (isRaw(window)) {\n return `(${getRaw(window, values)})`;\n } else {\n const sql: string[] = [];\n if (window.partitionBy) {\n sql.push(\n `PARTITION BY ${\n Array.isArray(window.partitionBy)\n ? window.partitionBy\n .map((partitionBy) =>\n rawOrRevealColumnToSql(data, partitionBy, values, quotedAs),\n )\n .join(', ')\n : rawOrRevealColumnToSql(\n data,\n window.partitionBy,\n values,\n quotedAs,\n )\n }`,\n );\n }\n if (window.order) {\n sql.push(\n `ORDER BY ${orderByToSql(data, window.order, values, quotedAs)}`,\n );\n }\n return `(${sql.join(' ')})`;\n }\n } else {\n return q(window as string);\n }\n};\n","import { QueryData } from './sql';\nimport { pushOrNewArrayToObject } from 'orchid-core';\n\nexport const pushQueryArray = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[key as keyof typeof q.query])\n (q.query as Record<string, unknown>)[key] = value;\n else\n (q.query[key as keyof typeof q.query] as unknown[]).push(\n ...(value as unknown[]),\n );\n return q as T;\n};\n\nexport const pushQueryValue = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n pushOrNewArrayToObject(\n q.query as unknown as Record<string, unknown[]>,\n key,\n value,\n );\n return q;\n};\n\nexport const setQueryObjectValue = <T extends { query: QueryData }>(\n q: T,\n object: string,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[object as keyof typeof q.query])\n (q.query as unknown as Record<string, Record<string, unknown>>)[object] = {\n [key]: value,\n };\n else\n (q.query as unknown as Record<string, Record<string, unknown>>)[object][\n key\n ] = value;\n return q as unknown as T;\n};\n","import {\n ColumnNamesShape,\n q,\n quoteSchemaAndTable,\n rawOrRevealColumnToSql,\n revealColumnToSql,\n} from './common';\nimport { JoinItem, SimpleJoinItem } from './types';\nimport { Query, QueryWithTable } from '../query';\nimport { whereToSql } from './where';\nimport { Relation } from '../relations';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { JoinedShapes, QueryData, SelectQueryData } from './data';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { getQueryAs } from '../utils';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { QueryBase } from '../queryBase';\n\ntype ItemOf3Or4Length =\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn?: string | RawExpression,\n ];\n\nexport const processJoinItem = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n item: Pick<SimpleJoinItem, 'args' | 'isSubQuery'>,\n quotedAs: string | undefined,\n): { target: string; conditions?: string } => {\n let target: string;\n let conditions: string | undefined;\n\n const { args } = item;\n const [first] = args;\n if (typeof first === 'string') {\n if (first in table.relations) {\n const {\n key,\n query: toQuery,\n joinQuery,\n } = (table.relations as Record<string, Relation>)[first];\n\n const jq = joinQuery(table, toQuery);\n const { query: j } = jq;\n\n const tableName = (\n typeof j.from === 'string' ? j.from : jq.table\n ) as string;\n\n target = quoteSchemaAndTable(j.schema, tableName);\n\n const as = j.as || key;\n const joinAs = q(as as string);\n if (as !== tableName) {\n target += ` AS ${joinAs}`;\n }\n\n const queryData = {\n shape: j.shape,\n joinedShapes: {\n ...query.joinedShapes,\n ...j.joinedShapes,\n [(table.query.as || table.table) as string]: table.shape,\n },\n and: j.and ? [...j.and] : [],\n or: j.or ? [...j.or] : [],\n };\n\n if (args[1]) {\n const arg = (args[1] as (q: unknown) => QueryBase)(\n new ctx.onQueryBuilder(jq, j, table),\n ).query;\n\n if (arg.and) queryData.and.push(...arg.and);\n if (arg.or) queryData.or.push(...arg.or);\n }\n\n conditions = whereToSql(ctx, jq, queryData, joinAs);\n } else {\n target = q(first);\n const joinShape = (query.joinedShapes as JoinedShapes)[first];\n conditions = processArgs(\n args,\n ctx,\n table,\n query,\n first,\n target,\n joinShape,\n quotedAs,\n );\n }\n } else {\n const joinQuery = first.query;\n\n const quotedFrom =\n typeof joinQuery.from === 'string' ? q(joinQuery.from) : undefined;\n\n target = quotedFrom || quoteSchemaAndTable(joinQuery.schema, first.table);\n\n let joinAs = quotedFrom || q(first.table);\n\n const qAs = joinQuery.as ? q(joinQuery.as) : undefined;\n const addAs = qAs && qAs !== joinAs;\n\n const joinedShape = first.shape;\n if (item.isSubQuery) {\n const subQuery = first.toSql({\n values: ctx.values,\n });\n\n target = `(${subQuery.text}) ${qAs || joinAs}`;\n if (addAs) joinAs = qAs;\n } else {\n if (addAs) {\n joinAs = qAs;\n target += ` AS ${qAs}`;\n }\n }\n\n conditions = processArgs(\n args,\n ctx,\n table,\n query,\n first,\n joinAs,\n joinedShape,\n quotedAs,\n );\n\n // if it's a sub query, WHERE conditions are already in the sub query\n if (!item.isSubQuery) {\n const whereSql = whereToSql(\n ctx,\n first,\n {\n ...joinQuery,\n joinedShapes: {\n ...query.joinedShapes,\n ...joinQuery.joinedShapes,\n [(table.query.as || table.table) as string]: table.query.shape,\n },\n },\n joinAs,\n );\n if (whereSql) {\n if (conditions) conditions += ` AND ${whereSql}`;\n else conditions = whereSql;\n }\n }\n }\n\n return { target, conditions };\n};\n\nconst processArgs = (\n args: SimpleJoinItem['args'],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n first:\n | string\n | (QueryWithTable & {\n joinQueryAfterCallback?(fromQuery: Query, toQuery: Query): Query;\n }),\n joinAs: string,\n joinShape: ColumnNamesShape,\n quotedAs?: string,\n) => {\n if (args.length === 2) {\n const arg = args[1];\n if (typeof arg === 'function') {\n const joinedShapes = {\n ...query.joinedShapes,\n [(table.query.as || table.table) as string]: table.shape,\n };\n\n let q: QueryBase;\n let data;\n if (typeof first === 'string') {\n const name = first;\n const query = table.query;\n const shape = query.withShapes?.[name];\n if (!shape) {\n throw new Error('Cannot get shape of `with` statement');\n }\n q = Object.create(table);\n q.query = {\n type: undefined,\n shape,\n adapter: query.adapter,\n handleResult: query.handleResult,\n returnType: 'all',\n logger: query.logger,\n } as SelectQueryData;\n data = { shape, joinedShapes };\n } else {\n q = first;\n\n if (first.joinQueryAfterCallback) {\n let base = q.baseQuery;\n if (q.query.as) {\n base = base.as(q.query.as);\n }\n\n const { query } = first.joinQueryAfterCallback(table as Query, base);\n if (query.and) {\n pushQueryArray(q, 'and', query.and);\n }\n if (query.or) {\n pushQueryArray(q, 'or', query.or);\n }\n }\n\n data = {\n ...first.query,\n joinedShapes: { ...first.query.joinedShapes, ...joinedShapes },\n };\n }\n\n const jq = arg(new ctx.onQueryBuilder(q, data, table));\n\n if (jq.query.joinedShapes !== joinedShapes) {\n jq.query.joinedShapes = {\n ...jq.query.joinedShapes,\n ...joinedShapes,\n };\n }\n\n return whereToSql(ctx, jq, jq.query, joinAs);\n } else {\n return getObjectOrRawConditions(\n query,\n arg,\n ctx.values,\n quotedAs,\n joinAs,\n joinShape,\n );\n }\n } else if (args.length >= 3) {\n return getConditionsFor3Or4LengthItem(\n query,\n joinAs,\n ctx.values,\n quotedAs,\n args as ItemOf3Or4Length,\n joinShape,\n );\n }\n\n return undefined;\n};\n\nconst getConditionsFor3Or4LengthItem = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n target: string,\n values: unknown[],\n quotedAs: string | undefined,\n args: ItemOf3Or4Length,\n joinShape: ColumnNamesShape,\n): string => {\n const [, leftColumn, opOrRightColumn, maybeRightColumn] = args;\n\n const op = maybeRightColumn ? opOrRightColumn : '=';\n const rightColumn = maybeRightColumn ? maybeRightColumn : opOrRightColumn;\n\n return `${rawOrRevealColumnToSql(\n query,\n leftColumn,\n values,\n target,\n joinShape,\n )} ${op} ${rawOrRevealColumnToSql(\n query,\n rightColumn,\n values,\n quotedAs,\n query.shape,\n )}`;\n};\n\nconst getObjectOrRawConditions = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n data: Record<string, string | RawExpression> | RawExpression | true,\n values: unknown[],\n quotedAs: string | undefined,\n joinAs: string,\n joinShape: ColumnNamesShape,\n): string => {\n if (data === true) {\n return 'true';\n } else if (isRaw(data)) {\n return getRaw(data, values);\n } else {\n const pairs: string[] = [];\n const shape = query.shape;\n\n for (const key in data) {\n const value = data[key];\n\n pairs.push(\n `${revealColumnToSql(\n query,\n joinShape,\n key,\n joinAs,\n )} = ${rawOrRevealColumnToSql(query, value, values, quotedAs, shape)}`,\n );\n }\n\n return pairs.join(', ');\n }\n};\n\nexport const pushJoinSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: QueryData & {\n join: JoinItem[];\n },\n quotedAs?: string,\n) => {\n query.join.forEach((item) => {\n if (Array.isArray(item)) {\n const q = item[1];\n const { aliasValue } = ctx;\n ctx.aliasValue = true;\n ctx.sql.push(\n `${item[0]} LATERAL (${q.toSql(ctx).text}) \"${\n item[2] || getQueryAs(q)\n }\" ON true`,\n );\n ctx.aliasValue = aliasValue;\n } else {\n const { target, conditions } = processJoinItem(\n ctx,\n table,\n query,\n item,\n quotedAs,\n );\n\n ctx.sql.push(item.type, target);\n if (conditions) ctx.sql.push('ON', conditions);\n }\n });\n};\n\nconst skipQueryKeysForSubQuery: Record<string, boolean> = {\n adapter: true,\n updateData: true,\n parsers: true,\n as: true,\n and: true,\n or: true,\n returnType: true,\n joinedShapes: true,\n returnsOne: true,\n};\n\nexport const getIsJoinSubQuery = (query: QueryData, baseQuery: QueryData) => {\n for (const key in query) {\n if (\n !skipQueryKeysForSubQuery[key] &&\n (query as Record<string, unknown>)[key] !==\n (baseQuery as Record<string, unknown>)[key]\n ) {\n return true;\n }\n }\n return false;\n};\n","import { Query } from '../query';\nimport {\n SimpleJoinItem,\n WhereInItem,\n WhereItem,\n WhereJsonPathEqualsItem,\n WhereOnItem,\n WhereOnJoinItem,\n} from './types';\nimport { addValue, q, qc, revealColumnToSql } from './common';\nimport { getQueryAs } from '../utils';\nimport { processJoinItem } from './join';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { JoinedShapes, QueryData } from './data';\nimport { isRaw, RawExpression, MaybeArray, toArray } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const pushWhereStatementSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n) => {\n const res = whereToSql(ctx, table, query, quotedAs, false);\n if (res) {\n ctx.sql.push('WHERE', res);\n }\n};\n\nexport const pushWhereToSql = (\n sql: string[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n) => {\n const res = whereToSql(ctx, table, query, quotedAs, not);\n if (res) {\n sql.push(res);\n }\n};\n\nexport const whereToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n): string | undefined => {\n if (query.or) {\n const ors = query.and ? [query.and, ...query.or] : query.or;\n return ors\n .map((and) => processAnds(and, ctx, table, query, quotedAs, not))\n .join(' OR ');\n } else if (query.and) {\n return processAnds(query.and, ctx, table, query, quotedAs, not);\n } else {\n return undefined;\n }\n};\n\nconst processAnds = (\n and: WhereItem[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n): string => {\n const ands: string[] = [];\n and.forEach((data) =>\n processWhere(ands, ctx, table, query, data, quotedAs, not),\n );\n return ands.join(' AND ');\n};\n\nconst processWhere = (\n ands: string[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n data: WhereItem,\n quotedAs?: string,\n not?: boolean,\n) => {\n const prefix = not ? 'NOT ' : '';\n\n if (typeof data === 'function') {\n const qb = data(new ctx.whereQueryBuilder(table, query));\n pushWhereToSql(ands, ctx, qb, qb.query, quotedAs, not);\n return;\n }\n\n if ('prototype' in data || 'baseQuery' in data) {\n const query = data as Query;\n const sql = whereToSql(\n ctx,\n query,\n query.query,\n query.table && q(query.table),\n );\n if (sql) {\n ands.push(`${prefix}(${sql})`);\n }\n return;\n }\n\n if (isRaw(data)) {\n ands.push(`${prefix}(${getRaw(data, ctx.values)})`);\n return;\n }\n\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (value === undefined) continue;\n\n if (key === 'AND') {\n const arr = toArray(value as MaybeArray<WhereItem>);\n ands.push(processAnds(arr, ctx, table, query, quotedAs, not));\n } else if (key === 'OR') {\n const arr = (value as MaybeArray<WhereItem>[]).map(toArray);\n ands.push(\n arr\n .map((and) => processAnds(and, ctx, table, query, quotedAs, not))\n .join(' OR '),\n );\n } else if (key === 'NOT') {\n const arr = toArray(value as MaybeArray<WhereItem>);\n ands.push(processAnds(arr, ctx, table, query, quotedAs, !not));\n } else if (key === 'ON') {\n if (Array.isArray(value)) {\n const item = value as WhereJsonPathEqualsItem;\n const leftColumn = revealColumnToSql(\n query,\n query.shape,\n item[0],\n quotedAs,\n );\n\n const leftPath = item[1];\n const rightColumn = revealColumnToSql(\n query,\n query.shape,\n item[2],\n quotedAs,\n );\n\n const rightPath = item[3];\n\n ands.push(\n `${prefix}jsonb_path_query_first(${leftColumn}, ${addValue(\n ctx.values,\n leftPath,\n )}) = jsonb_path_query_first(${rightColumn}, ${addValue(\n ctx.values,\n rightPath,\n )})`,\n );\n } else {\n const item = value as WhereOnItem;\n const leftColumn = revealColumnToSql(\n query,\n query.shape,\n item.on[0],\n q(getJoinItemSource(item.joinFrom)),\n );\n\n const joinTo = getJoinItemSource(item.joinTo);\n const joinedShape = (query.joinedShapes as JoinedShapes)[joinTo];\n\n const [op, rightColumn] =\n item.on.length === 2\n ? [\n '=',\n revealColumnToSql(query, joinedShape, item.on[1], q(joinTo)),\n ]\n : [\n item.on[1],\n revealColumnToSql(query, joinedShape, item.on[2], q(joinTo)),\n ];\n\n ands.push(`${prefix}${leftColumn} ${op} ${rightColumn}`);\n }\n } else if (key === 'IN') {\n toArray(value as MaybeArray<WhereInItem>).forEach((item) => {\n pushIn(query, ands, prefix, quotedAs, ctx.values, item);\n });\n } else if (key === 'EXISTS') {\n const joinItems = Array.isArray((value as unknown[])[0])\n ? value\n : [value];\n\n (\n joinItems as { args: SimpleJoinItem['args']; isSubQuery: boolean }[]\n ).forEach((args) => {\n const { target, conditions } = processJoinItem(\n ctx,\n table,\n query,\n args,\n quotedAs,\n );\n\n ands.push(\n `${prefix}EXISTS (SELECT 1 FROM ${target} WHERE ${conditions} LIMIT 1)`,\n );\n });\n } else if (\n typeof value === 'object' &&\n value &&\n value.constructor === Object\n ) {\n if (isRaw(value)) {\n ands.push(\n `${prefix}${revealColumnToSql(\n query,\n query.shape,\n key,\n quotedAs,\n )} = ${getRaw(value, ctx.values)}`,\n );\n } else {\n let column = query.shape[key];\n let quotedColumn: string | undefined;\n if (column) {\n quotedColumn = qc(column.data.name || key, quotedAs);\n } else if (!column) {\n const index = key.indexOf('.');\n if (index !== -1) {\n const joinedTable = key.slice(0, index);\n const joinedColumn = key.slice(index + 1);\n column = query.joinedShapes?.[joinedTable]?.[\n joinedColumn\n ] as typeof column;\n quotedColumn = qc(\n column?.data.name || joinedColumn,\n q(joinedTable),\n );\n } else {\n quotedColumn = undefined;\n }\n\n if (!column || !quotedColumn) {\n // TODO: custom error classes\n throw new Error(`Unknown column ${key} provided to condition`);\n }\n }\n\n for (const op in value) {\n const operator = column.operators[op];\n if (!operator) {\n // TODO: custom error classes\n throw new Error(`Unknown operator ${op} provided to condition`);\n }\n\n if (value[op as keyof typeof value] === undefined) continue;\n\n ands.push(\n `${prefix}${operator(\n quotedColumn as string,\n value[op as keyof typeof value],\n ctx.values,\n )}`,\n );\n }\n }\n } else {\n ands.push(\n `${prefix}${revealColumnToSql(query, query.shape, key, quotedAs)} ${\n value === null ? 'IS NULL' : `= ${addValue(ctx.values, value)}`\n }`,\n );\n }\n }\n};\n\nconst getJoinItemSource = (joinItem: WhereOnJoinItem) => {\n return typeof joinItem === 'string' ? joinItem : getQueryAs(joinItem);\n};\n\nconst pushIn = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n ands: string[],\n prefix: string,\n quotedAs: string | undefined,\n values: unknown[],\n arg: {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n },\n) => {\n let value: string;\n\n if (Array.isArray(arg.values)) {\n value = `${arg.values\n .map(\n (arr) => `(${arr.map((value) => addValue(values, value)).join(', ')})`,\n )\n .join(', ')}`;\n\n if (arg.columns.length > 1) value = `(${value})`;\n } else if (isRaw(arg.values)) {\n value = getRaw(arg.values, values);\n } else {\n const sql = makeSql(arg.values, { values });\n value = `(${sql.text})`;\n }\n\n const columnsSql = arg.columns\n .map((column) => revealColumnToSql(query, query.shape, column, quotedAs))\n .join(', ');\n\n ands.push(\n `${prefix}${\n arg.columns.length > 1 ? `(${columnsSql})` : columnsSql\n } IN ${value}`,\n );\n};\n","import { AggregateItem } from './types';\nimport { addValue, rawOrRevealColumnToSql, q } from './common';\nimport { getRaw } from '../raw';\nimport { windowToSql } from './window';\nimport { pushOrderBySql } from './orderBy';\nimport { whereToSql } from './where';\nimport { ToSqlCtx } from './toSql';\nimport { Expression } from '../utils';\nimport { isRaw, emptyObject } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const aggregateToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n item: AggregateItem,\n quotedAs?: string,\n) => {\n const sql: string[] = [`${item.function}(`];\n ctx = { ...ctx, sql };\n\n const options = item.options || emptyObject;\n\n if (options.distinct && !options.withinGroup) sql.push('DISTINCT ');\n\n if (typeof item.arg === 'object') {\n if (Array.isArray(item.arg)) {\n sql.push(\n `${rawOrRevealColumnToSql(\n table.query,\n item.arg[0],\n ctx.values,\n quotedAs,\n )}, ${addValue(ctx.values, item.arg[1])}`,\n );\n } else if (isRaw(item.arg)) {\n sql.push(getRaw(item.arg, ctx.values));\n } else {\n const args: string[] = [];\n for (const key in item.arg) {\n args.push(\n // ::text is needed to bypass \"could not determine data type of parameter\" postgres error\n `${addValue(ctx.values, key)}::text, ${rawOrRevealColumnToSql(\n table.query,\n item.arg[key as keyof typeof item.arg] as unknown as Expression,\n ctx.values,\n quotedAs,\n )}`,\n );\n }\n sql.push(args.join(', '));\n }\n } else if (item.arg) {\n sql.push(\n rawOrRevealColumnToSql(table.query, item.arg, ctx.values, quotedAs),\n );\n }\n\n if (options.withinGroup) sql.push(') WITHIN GROUP (');\n else if (options.order) sql.push(' ');\n\n if (options.order) pushOrderBySql(ctx, table.query, quotedAs, options.order);\n\n sql.push(')');\n\n if (options.filter || options.filterOr) {\n const whereSql = whereToSql(\n ctx,\n table,\n {\n and: options.filter ? [options.filter] : undefined,\n or: options.filterOr?.map((item) => [item]),\n shape: table.query.shape,\n joinedShapes: table.query.joinedShapes,\n },\n quotedAs,\n );\n if (whereSql) {\n sql.push(` FILTER (WHERE ${whereSql})`);\n }\n }\n\n if (options.over) {\n sql.push(\n ` OVER ${windowToSql(table.query, options.over, ctx.values, quotedAs)}`,\n );\n }\n\n if (options.as) sql.push(` AS ${q(options.as)}`);\n\n return sql.join('');\n};\n","import { ColumnsShape } from './columns';\nimport { Query } from './query';\n\nexport abstract class OrchidOrmError extends Error {\n abstract query: Query;\n}\n\nexport class NotFoundError extends OrchidOrmError {\n constructor(public query: Query, message = 'Record is not found') {\n super(message);\n }\n}\n\nexport class OrchidOrmInternalError extends Error {\n constructor(public query: Query, message?: string) {\n super(message);\n }\n}\n\nexport type QueryErrorName =\n | 'parseComplete'\n | 'bindComplete'\n | 'closeComplete'\n | 'noData'\n | 'portalSuspended'\n | 'replicationStart'\n | 'emptyQuery'\n | 'copyDone'\n | 'copyData'\n | 'rowDescription'\n | 'parameterDescription'\n | 'parameterStatus'\n | 'backendKeyData'\n | 'notification'\n | 'readyForQuery'\n | 'commandComplete'\n | 'dataRow'\n | 'copyInResponse'\n | 'copyOutResponse'\n | 'authenticationOk'\n | 'authenticationMD5Password'\n | 'authenticationCleartextPassword'\n | 'authenticationSASL'\n | 'authenticationSASLContinue'\n | 'authenticationSASLFinal'\n | 'error'\n | 'notice';\n\nexport abstract class QueryError<\n T extends { shape: ColumnsShape } = { shape: ColumnsShape },\n> extends OrchidOrmInternalError {\n message!: string;\n name!: QueryErrorName;\n stack: string | undefined;\n code: string | undefined;\n detail: string | undefined;\n severity: string | undefined;\n hint: string | undefined;\n position: string | undefined;\n internalPosition: string | undefined;\n internalQuery: string | undefined;\n where: string | undefined;\n schema: string | undefined;\n table: string | undefined;\n column: string | undefined;\n dataType: string | undefined;\n constraint: string | undefined;\n file: string | undefined;\n line: string | undefined;\n routine: string | undefined;\n\n get isUnique() {\n return this.code === '23505';\n }\n\n columnsCache?: { [K in keyof T['shape']]?: true };\n get columns() {\n if (this.columnsCache) return this.columnsCache;\n\n const columns: { [K in keyof T['shape']]?: true } = {};\n\n if (this.detail) {\n const list = this.detail.match(/\\((.*)\\)=/)?.[1];\n if (list) {\n list.split(', ').forEach((item) => {\n const column = (\n item.startsWith('\"') ? item.slice(1, -1) : item\n ) as keyof T['shape'];\n\n columns[column] = true;\n });\n }\n }\n\n return (this.columnsCache = columns);\n }\n}\n\nexport class MoreThanOneRowError extends OrchidOrmInternalError {\n constructor(query: Query, message?: string) {\n super(query, message);\n }\n}\n\nexport class UnhandledTypeError extends OrchidOrmInternalError {\n constructor(public query: Query, value: never) {\n super(query, `Unhandled type: ${JSON.stringify(value)} received`);\n }\n}\n","import { JsonItem, SelectFunctionItem, SelectItem } from './types';\nimport { getRaw } from '../raw';\nimport { Query } from '../query';\nimport {\n addValue,\n q,\n revealColumnToSql,\n revealColumnToSqlWithAs,\n} from './common';\nimport { aggregateToSql } from './aggregate';\nimport { OrchidOrmInternalError, UnhandledTypeError } from '../errors';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { Expression } from '../utils';\nimport { isRaw, raw } from 'orchid-core';\n\nconst jsonColumnOrMethodToSql = (\n table: Query,\n column: string | JsonItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n return typeof column === 'string'\n ? revealColumnToSql(table.query, table.query.shape, column, quotedAs)\n : jsonToSql(table, column, values, quotedAs);\n};\n\nconst jsonToSql = (\n table: Query,\n item: JsonItem,\n values: unknown[],\n quotedAs?: string,\n): string => {\n const json = item.__json;\n if (json[0] === 'pathQuery') {\n const [, , , column, path, options] = json;\n return `jsonb_path_query(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, ${addValue(values, path)}${\n options?.vars ? `, ${addValue(values, options.vars)}` : ''\n }${options?.silent ? ', true' : ''})`;\n } else if (json[0] === 'set') {\n const [, , , column, path, value, options] = json;\n return `jsonb_set(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.createIfMissing ? ', true' : ''\n })`;\n } else if (json[0] === 'insert') {\n const [, , , column, path, value, options] = json;\n return `jsonb_insert(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.insertAfter ? ', true' : ''\n })`;\n } else if (json[0] === 'remove') {\n const [, , , column, path] = json;\n return `${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )} #- '{${path.join(', ')}}'`;\n }\n return '';\n};\n\nexport const pushSelectSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n quotedAs?: string,\n) => {\n ctx.sql.push(selectToSql(ctx, table, query, quotedAs));\n};\n\nexport const selectToSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n quotedAs?: string,\n): string => {\n if (query.select) {\n const list: string[] = [];\n for (const item of query.select) {\n if (typeof item === 'string') {\n list.push(\n item === '*'\n ? selectAllSql(table, query, quotedAs)\n : revealColumnToSqlWithAs(table.query, item, quotedAs, true),\n );\n } else {\n if ('selectAs' in item) {\n const obj = item.selectAs as Record<string, Expression | Query>;\n for (const as in obj) {\n const value = obj[as];\n if (typeof value === 'object' || typeof value === 'function') {\n if (isRaw(value)) {\n list.push(`${getRaw(value, ctx.values)} AS ${q(as)}`);\n } else {\n pushSubQuerySql(value as Query, as, ctx.values, list);\n }\n } else {\n list.push(\n `${revealColumnToSql(\n table.query,\n table.query.shape,\n value as string,\n quotedAs,\n true,\n )} AS ${q(as)}`,\n );\n }\n }\n } else if ('__json' in item) {\n list.push(\n `${jsonToSql(table, item, ctx.values, quotedAs)} AS ${q(\n item.__json[1],\n )}`,\n );\n } else if (isRaw(item)) {\n const sql = getRaw(item, ctx.values);\n list.push(ctx.aliasValue ? `${sql} r` : sql);\n } else if ('arguments' in item) {\n list.push(\n `${(item as SelectFunctionItem).function}(${selectToSql(\n ctx,\n table,\n { select: item.arguments },\n quotedAs,\n )})${item.as ? ` AS ${q((item as { as: string }).as)}` : ''}`,\n );\n } else {\n const sql = aggregateToSql(ctx, table, item, quotedAs);\n list.push(ctx.aliasValue ? `${sql} r` : sql);\n }\n }\n }\n return list.join(', ');\n }\n\n return selectAllSql(table, query, quotedAs);\n};\n\nexport const selectAllSql = (\n table: Query,\n query: Pick<SelectQueryData, 'join'>,\n quotedAs?: string,\n) => {\n return query.join?.length\n ? table.internal.columnsForSelectAll\n ?.map((item) => `${quotedAs}.${item}`)\n .join(', ') || `${quotedAs}.*`\n : table.internal.columnsForSelectAll?.join(', ') || '*';\n};\n\nconst pushSubQuerySql = (\n query: Query,\n as: string,\n values: unknown[],\n list: string[],\n) => {\n const { returnType = 'all' } = query.query;\n\n if (query.query.joinedForSelect) {\n let sql;\n switch (returnType) {\n case 'one':\n case 'oneOrThrow':\n sql = `row_to_json(\"${query.query.joinedForSelect}\".*)`;\n break;\n case 'all':\n case 'pluck':\n case 'value':\n case 'valueOrThrow':\n case 'rows':\n sql = `\"${query.query.joinedForSelect}\".r`;\n break;\n case 'rowCount':\n case 'void':\n return;\n default:\n throw new UnhandledTypeError(query, returnType);\n }\n if (sql) list.push(`${coalesce(query, values, sql)} ${q(as)}`);\n return;\n }\n\n switch (returnType) {\n case 'all':\n case 'one':\n case 'oneOrThrow':\n query = query._json() as unknown as typeof query;\n break;\n case 'pluck': {\n const { select } = query.query;\n const first = select?.[0];\n if (!select || !first) {\n throw new OrchidOrmInternalError(\n query,\n `Nothing was selected for pluck`,\n );\n }\n\n const cloned = query.clone();\n cloned.query.select = [{ selectAs: { c: first } }] as SelectItem[];\n query = cloned._wrap(cloned.baseQuery.clone()) as unknown as typeof query;\n query._getOptional(raw(`COALESCE(json_agg(\"c\"), '[]')`));\n break;\n }\n case 'value':\n case 'valueOrThrow':\n case 'rows':\n case 'rowCount':\n case 'void':\n break;\n default:\n throw new UnhandledTypeError(query, returnType);\n }\n\n list.push(\n `${coalesce(query, values, `(${makeSql(query, { values }).text})`)} AS ${q(\n as,\n )}`,\n );\n};\n\nconst coalesce = (query: Query, values: unknown[], sql: string) => {\n const { coalesceValue } = query.query;\n if (coalesceValue !== undefined) {\n let value;\n if (\n typeof coalesceValue === 'object' &&\n coalesceValue &&\n isRaw(coalesceValue)\n ) {\n value = getRaw(coalesceValue, values);\n } else {\n values.push(coalesceValue);\n value = `$${values.length}`;\n }\n return `COALESCE(${sql}, ${value})`;\n }\n\n return sql;\n};\n","import { AggregateItemOptions, HavingItem } from './types';\nimport { getRaw } from '../raw';\nimport { aggregateToSql } from './aggregate';\nimport { addValue, q } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { Operator, isRaw, RawExpression, emptyObject } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nconst aggregateOptionNames: (keyof AggregateItemOptions)[] = [\n 'distinct',\n 'order',\n 'filter',\n 'filterOr',\n 'withinGroup',\n];\n\nexport const pushHavingSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n) => {\n const conditions = havingToSql(ctx, table, query, quotedAs);\n if (conditions.length) ctx.sql.push('HAVING', conditions);\n};\n\nexport const havingToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n): string => {\n const or =\n query.having && query.havingOr\n ? [query.having, ...query.havingOr]\n : query.having\n ? [query.having]\n : query.havingOr;\n if (!or?.length) return '';\n\n const ors: string[] = [];\n or.forEach((and) => {\n const ands: string[] = [];\n and.forEach((item) => {\n if ('prototype' in item || 'baseQuery' in item) {\n const query = item as QueryBase;\n const sql = havingToSql(\n ctx,\n query,\n query.query as SelectQueryData,\n query.table && q(query.table),\n );\n if (sql.length) ands.push(`(${sql})`);\n return;\n }\n\n if (isRaw(item)) {\n ands.push(getRaw(item, ctx.values));\n return;\n }\n\n for (const key in item) {\n const columns = item[key as keyof Exclude<HavingItem, RawExpression>];\n if (typeof columns === 'object') {\n for (const column in columns) {\n const valueOrOptions = columns[column as keyof typeof columns];\n if (\n typeof valueOrOptions === 'object' &&\n valueOrOptions !== null &&\n valueOrOptions !== undefined\n ) {\n for (const op in valueOrOptions) {\n if (\n !aggregateOptionNames.includes(\n op as keyof AggregateItemOptions,\n )\n ) {\n const operator = table.query.shape[column].operators[\n op\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as Operator<any>;\n if (!operator) {\n // TODO: custom error classes\n throw new Error(\n `Unknown operator ${op} provided to condition`,\n );\n }\n\n const expression = aggregateToSql(\n ctx,\n table,\n {\n function: key,\n arg: column,\n options: valueOrOptions as AggregateItemOptions,\n },\n quotedAs,\n );\n\n ands.push(\n operator(\n expression,\n valueOrOptions[op as keyof typeof valueOrOptions],\n ctx.values,\n ),\n );\n }\n }\n } else {\n ands.push(\n `${aggregateToSql(\n ctx,\n table,\n {\n function: key,\n arg: column,\n options: emptyObject,\n },\n quotedAs,\n )} = ${addValue(ctx.values, valueOrOptions)}`,\n );\n }\n }\n } else {\n ands.push(`${key}(*) = ${columns}`);\n }\n }\n });\n\n ors.push(ands.join(' AND '));\n });\n\n return ors.join(' OR ');\n};\n","import { q } from './common';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { QueryData } from './data';\nimport { isRaw } from 'orchid-core';\n\nexport const pushWithSql = (\n ctx: ToSqlCtx,\n withData: Exclude<QueryData['with'], undefined>,\n) => {\n if (!withData.length) return;\n\n ctx.sql.push(\n 'WITH',\n withData\n .map((withItem) => {\n const [name, options, query] = withItem;\n\n let inner: string;\n if (isRaw(query)) {\n inner = getRaw(query, ctx.values);\n } else {\n inner = makeSql(query, { values: ctx.values }).text;\n }\n\n return `${options.recursive ? 'RECURSIVE ' : ''}${q(name)}${\n options.columns ? `(${options.columns.map(q).join(', ')})` : ''\n } AS ${\n options.materialized\n ? 'MATERIALIZED '\n : options.notMaterialized\n ? 'NOT MATERIALIZED '\n : ''\n }(${inner})`;\n })\n .join(', '),\n );\n};\n","import { Query, QueryWithTable, SelectableBase } from '../query';\nimport { RelationQuery } from '../relations';\nimport { Expression } from '../utils';\nimport { SelectQueryData } from './data';\nimport { ColumnTypeBase, MaybeArray, RawExpression } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\n// used in `from` logic to decide if convert query to sql or just write table name\nexport const checkIfASimpleQuery = (q: Query) => {\n if (\n (q.query.returnType && q.query.returnType !== 'all') ||\n q.internal.columnsForSelectAll\n )\n return false;\n const keys = Object.keys(q.query) as (keyof SelectQueryData)[];\n return !keys.some((key) => queryKeysOfNotSimpleQuery.includes(key));\n};\n\nconst queryKeysOfNotSimpleQuery: (keyof SelectQueryData)[] = [\n 'with',\n 'as',\n 'from',\n 'and',\n 'or',\n 'select',\n 'distinct',\n 'fromOnly',\n 'join',\n 'group',\n 'having',\n 'havingOr',\n 'window',\n 'union',\n 'order',\n 'limit',\n 'offset',\n 'for',\n];\n\nexport type WithItem = [\n as: string,\n options: WithOptions,\n query: Query | RawExpression,\n];\n\nexport type WithOptions = {\n columns?: string[];\n recursive?: true;\n materialized?: true;\n notMaterialized?: true;\n};\n\nexport type JsonItem<\n As extends string = string,\n Type extends ColumnTypeBase = ColumnTypeBase,\n> = {\n __json:\n | [\n kind: 'set',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n createIfMissing?: boolean;\n },\n ]\n | [\n kind: 'insert',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n insertAfter?: boolean;\n },\n ]\n | [\n kind: 'remove',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n ]\n | [\n kind: 'pathQuery',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: string,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ];\n};\n\nexport type SelectItem =\n | string\n | RelationQuery\n | AggregateItem\n | { selectAs: Record<string, string | Query | RawExpression> }\n | SelectFunctionItem\n | JsonItem\n | RawExpression;\n\nexport type SelectFunctionItem = {\n function: string;\n arguments: SelectItem[];\n as?: string;\n};\n\nexport type JoinItem = SimpleJoinItem | JoinLateralItem;\n\nexport type SimpleJoinItem = {\n type: string;\n args:\n | [relation: string]\n | [\n arg: string | QueryWithTable,\n conditions:\n | Record<string, string | RawExpression>\n | RawExpression\n | ((q: unknown) => QueryBase)\n | true,\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn: string | RawExpression,\n ];\n // available only for QueryWithTable as first argument\n isSubQuery: boolean;\n};\n\nexport type JoinLateralItem = [type: string, joined: Query, as?: string];\n\nexport type WhereItem =\n | (Omit<\n Record<\n string,\n | unknown\n | Record<string, unknown | Query | RawExpression>\n | RawExpression\n >,\n 'NOT' | 'AND' | 'OR' | 'IN' | 'EXISTS' | 'ON' | 'ON_JSON_PATH_EQUALS'\n > & {\n NOT?: MaybeArray<WhereItem>;\n AND?: MaybeArray<WhereItem>;\n OR?: MaybeArray<WhereItem>[];\n IN?: MaybeArray<WhereInItem>;\n EXISTS?: MaybeArray<SimpleJoinItem['args']>;\n ON?: WhereOnItem | WhereJsonPathEqualsItem;\n })\n | ((q: unknown) => QueryBase)\n | Query\n | RawExpression;\n\nexport type WhereInItem = {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n};\n\nexport type WhereJsonPathEqualsItem = [\n leftColumn: string,\n leftPath: string,\n rightColumn: string,\n rightPath: string,\n];\n\nexport type WhereOnItem = {\n joinFrom: WhereOnJoinItem;\n joinTo: WhereOnJoinItem;\n on:\n | [leftFullColumn: string, rightFullColumn: string]\n | [leftFullColumn: string, op: string, rightFullColumn: string];\n};\n\nexport type WhereOnJoinItem =\n | { table?: string; query: { as?: string } }\n | string;\n\nexport type AggregateItemOptions = {\n as?: string;\n distinct?: boolean;\n order?: OrderItem[];\n filter?: WhereItem;\n filterOr?: WhereItem[];\n withinGroup?: boolean;\n over?: string;\n window?: WindowItem;\n};\n\nexport type SortDir = 'ASC' | 'DESC' | 'ASC NULLS FIRST' | 'DESC NULLS LAST';\n\nexport type OrderItem = string | Record<string, SortDir> | RawExpression;\n\nexport type AggregateItemArg =\n | Expression\n | Record<string, Expression>\n | [Expression, string];\n\nexport type AggregateItem = {\n function: string;\n arg?: AggregateItemArg;\n options: AggregateItemOptions;\n};\n\nexport type ColumnOperators<\n S extends SelectableBase,\n Column extends keyof S,\n> = {\n [O in keyof S[Column]['column']['operators']]?:\n | S[Column]['column']['operators'][O]['type'];\n};\n\ntype HavingItemObject = Record<string, unknown>;\n\nexport type HavingItem =\n | Record<string, HavingItemObject>\n | { count?: number | HavingItemObject }\n | Query\n | RawExpression;\n\nexport type WindowItem = Record<string, WindowDeclaration | RawExpression>;\n\nexport type WindowDeclaration = {\n partitionBy?: Expression | Expression[];\n order?: OrderItem;\n};\n\nexport type UnionItem = Query | RawExpression;\n\nexport type UnionKind =\n | 'UNION'\n | 'UNION ALL'\n | 'INTERSECT'\n | 'INTERSECT ALL'\n | 'EXCEPT'\n | 'EXCEPT ALL';\n\nexport type OnConflictItem = string | string[] | RawExpression;\n\nexport type OnConflictMergeUpdate =\n | string\n | string[]\n | Record<string, unknown>\n | RawExpression;\n","import { quoteSchemaAndTable } from './common';\nimport { checkIfASimpleQuery } from './types';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { SelectQueryData } from './data';\nimport { isRaw } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const pushFromAndAs = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n) => {\n ctx.sql.push('FROM');\n if (query.fromOnly) ctx.sql.push('ONLY');\n\n const from = getFrom(table, query, ctx.values);\n ctx.sql.push(from);\n\n if (query.as && quotedAs && quotedAs !== from) {\n ctx.sql.push('AS', quotedAs);\n }\n};\n\nconst getFrom = (\n table: QueryBase,\n query: SelectQueryData,\n values: unknown[],\n) => {\n if (query.from) {\n const { from } = query;\n if (typeof from === 'object') {\n if (isRaw(from)) {\n return getRaw(from, values);\n }\n\n if (!from.table) {\n const sql = makeSql(from, { values });\n return `(${sql.text})`;\n }\n\n // if query contains more than just schema return (SELECT ...)\n if (!checkIfASimpleQuery(from)) {\n const sql = makeSql(from, { values });\n return `(${sql.text})`;\n }\n\n return quoteSchemaAndTable(from.query.schema, from.table);\n }\n\n return quoteSchemaAndTable(query.schema, from);\n }\n\n return quoteSchemaAndTable(query.schema, table.table as string);\n};\n","import { addValue, q } from './common';\nimport { pushWhereStatementSql } from './where';\nimport { Query } from '../query';\nimport { selectToSql } from './select';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { getRaw } from '../raw';\nimport { InsertQueryData, QueryData } from './data';\nimport { isRaw, raw, RawExpression } from 'orchid-core';\nimport { ColumnData } from '../columns';\n\n// reuse array for the columns list\nconst quotedColumns: string[] = [];\n\nexport const pushInsertSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: InsertQueryData,\n quotedAs: string,\n) => {\n const { shape } = table.query;\n\n const { columns } = query;\n quotedColumns.length = columns.length;\n for (let i = 0, len = columns.length; i < len; i++) {\n quotedColumns[i] = q(shape[columns[i]]?.data.name || columns[i]);\n }\n\n let runtimeDefaults: (() => unknown)[] | undefined;\n if (table.internal.runtimeDefaultColumns) {\n runtimeDefaults = [];\n for (const key of table.internal.runtimeDefaultColumns) {\n if (!columns.includes(key)) {\n const column = shape[key];\n quotedColumns.push(q(column.data.name || key));\n runtimeDefaults.push(column.data.default as () => unknown);\n }\n }\n }\n\n let values = query.values;\n if (quotedColumns.length === 0) {\n const key = Object.keys(table.shape)[0];\n const column = table.shape[key];\n quotedColumns[0] = q(column?.data.name || key);\n\n if (Array.isArray(values) && Array.isArray(values[0])) {\n values = [[undefined]];\n }\n }\n\n ctx.sql.push(`INSERT INTO ${quotedAs}(${quotedColumns.join(', ')})`);\n\n if ('from' in values) {\n const { from, values: v } = values;\n const q = from.clone();\n\n if (v) {\n pushQueryValue(\n q,\n 'select',\n raw(encodeRow(ctx, v[0], runtimeDefaults), false),\n );\n }\n\n ctx.sql.push(makeSql(q, { values: ctx.values }).text);\n } else if (isRaw(values)) {\n let valuesSql = getRaw(values, ctx.values);\n\n if (runtimeDefaults) {\n valuesSql += `, ${runtimeDefaults\n .map((fn) => addValue(ctx.values, fn()))\n .join(', ')}`;\n }\n\n ctx.sql.push(`VALUES (${valuesSql})`);\n } else if (isRaw(values[0])) {\n let sql;\n\n if (runtimeDefaults) {\n const { values: v } = ctx;\n sql = (values as RawExpression[])\n .map(\n (raw) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n `(${getRaw(raw, v)}, ${runtimeDefaults!\n .map((fn) => addValue(v, fn()))\n .join(', ')})`,\n )\n .join(', ');\n } else {\n const { values: v } = ctx;\n sql = (values as RawExpression[])\n .map((raw) => `(${getRaw(raw, v)})`)\n .join(', ');\n }\n\n ctx.sql.push(`VALUES ${sql}`);\n } else {\n ctx.sql.push(\n `VALUES ${(values as unknown[][])\n .map((row) => `(${encodeRow(ctx, row, runtimeDefaults)})`)\n .join(', ')}`,\n );\n }\n\n if (query.onConflict) {\n ctx.sql.push('ON CONFLICT');\n\n const { expr, type } = query.onConflict;\n if (expr) {\n if (typeof expr === 'string') {\n ctx.sql.push(`(${q(shape[expr]?.data.name || expr)})`);\n } else if (Array.isArray(expr)) {\n ctx.sql.push(\n `(${expr\n .map((item) => q(shape[item]?.data.name || item))\n .join(', ')})`,\n );\n } else {\n ctx.sql.push(getRaw(expr, ctx.values));\n }\n } else if (type === 'merge') {\n // TODO: optimize, unique columns could be stored in Query.internal\n // consider saving a cache of columns for this case into Query.internal\n\n const { indexes } = table.internal;\n\n const quotedUniques = columns.reduce((arr: string[], key, i) => {\n const unique =\n // check column index\n (shape[key]?.data as ColumnData).indexes?.some(\n (index) => index.unique,\n ) ||\n // check table composite indexes\n indexes?.some((index) =>\n index.columns.some(\n (item) => 'column' in item && item.column === key,\n ),\n );\n\n if (unique) arr.push(quotedColumns[i]);\n return arr;\n }, []);\n\n ctx.sql.push(`(${quotedUniques.join(', ')})`);\n }\n\n if (type === 'ignore') {\n ctx.sql.push('DO NOTHING');\n } else if (type === 'merge') {\n let set: string;\n\n const { update } = query.onConflict;\n if (update) {\n if (typeof update === 'string') {\n const name = q(shape[update]?.data.name || update);\n set = `${name} = excluded.${name}`;\n } else if (Array.isArray(update)) {\n set = update\n .map((item) => {\n const name = q(shape[item]?.data.name || item);\n return `${name} = excluded.${name}`;\n })\n .join(', ');\n } else if (isRaw(update)) {\n set = getRaw(update, ctx.values);\n } else {\n const arr: string[] = [];\n for (const key in update) {\n arr.push(\n `${q(shape[key]?.data.name || key)} = ${addValue(\n ctx.values,\n update[key],\n )}`,\n );\n }\n set = arr.join(', ');\n }\n } else {\n set = quotedColumns\n .map((column) => `${column} = excluded.${column}`)\n .join(', ');\n }\n\n ctx.sql.push('DO UPDATE SET', set);\n }\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n pushReturningSql(ctx, table, query, quotedAs);\n};\n\nconst encodeRow = (\n ctx: ToSqlCtx,\n row: unknown[],\n runtimeDefaults?: (() => unknown)[],\n) => {\n const arr = row.map((value) =>\n value === undefined ? 'DEFAULT' : addValue(ctx.values, value),\n );\n\n if (runtimeDefaults) {\n for (const fn of runtimeDefaults) {\n arr.push(addValue(ctx.values, fn()));\n }\n }\n\n return arr.join(', ');\n};\n\nexport const pushReturningSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: QueryData,\n quotedAs: string,\n) => {\n if (query.select) {\n ctx.sql.push(`RETURNING ${selectToSql(ctx, table, query, quotedAs)}`);\n }\n};\n","import { Query } from '../query';\nimport { addValue, q, quoteSchemaAndTable } from './common';\nimport { pushReturningSql } from './insert';\nimport { pushWhereStatementSql } from './where';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport {\n UpdateQueryData,\n UpdateQueryDataItem,\n UpdateQueryDataObject,\n} from './data';\nimport { isRaw, pushOrNewArray } from 'orchid-core';\n\nexport const pushUpdateSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: UpdateQueryData,\n quotedAs: string,\n) => {\n const quotedTable = quoteSchemaAndTable(query.schema, table.table as string);\n ctx.sql.push(`UPDATE ${quotedTable}`);\n\n if (quotedTable !== quotedAs) {\n ctx.sql.push(`AS ${quotedAs}`);\n }\n\n ctx.sql.push('SET');\n\n const set: string[] = [];\n processData(ctx, table, set, query.updateData);\n ctx.sql.push(set.join(', '));\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n pushReturningSql(ctx, table, query, quotedAs);\n};\n\nconst processData = (\n ctx: ToSqlCtx,\n table: Query,\n set: string[],\n data: UpdateQueryDataItem[],\n) => {\n let append: UpdateQueryDataItem[] | undefined;\n data.forEach((item) => {\n if (typeof item === 'function') {\n const result = item(data);\n if (result) append = pushOrNewArray(append, result);\n } else if (isRaw(item)) {\n set.push(getRaw(item, ctx.values));\n } else {\n const shape = table.query.shape;\n for (const key in item) {\n const value = item[key];\n if (value !== undefined) {\n set.push(\n `${q(shape[key].data.name || key)} = ${processValue(\n table,\n ctx.values,\n key,\n value,\n )}`,\n );\n }\n }\n }\n });\n\n if (append) processData(ctx, table, set, append);\n};\n\nconst processValue = (\n table: Query,\n values: unknown[],\n key: string,\n value: UpdateQueryDataObject[string],\n) => {\n if (value && typeof value === 'object') {\n if (isRaw(value)) {\n return getRaw(value, values);\n } else if ('op' in value && 'arg' in value) {\n return `${q(table.query.shape[key].data.name || key)} ${\n (value as { op: string }).op\n } ${addValue(values, (value as { arg: unknown }).arg)}`;\n }\n }\n\n return addValue(values, value);\n};\n","import { Query } from '../query';\nimport { pushWhereStatementSql } from './where';\nimport { pushReturningSql } from './insert';\nimport { processJoinItem } from './join';\nimport { ToSqlCtx } from './toSql';\nimport { q } from './common';\nimport { DeleteQueryData } from './data';\n\nexport const pushDeleteSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: DeleteQueryData,\n quotedAs: string,\n) => {\n const from = q(table.table as string);\n ctx.sql.push(`DELETE FROM ${from}`);\n\n if (from !== quotedAs) {\n ctx.sql.push(`AS ${quotedAs}`);\n }\n\n let conditions: string | undefined;\n if (query.join?.length) {\n const items: { target: string; conditions?: string }[] = [];\n for (const item of query.join) {\n // skip join lateral: it's not supported here, and it's not clean if it's supported in DELETE by the db\n if (!Array.isArray(item)) {\n items.push(processJoinItem(ctx, table, query, item, quotedAs));\n }\n }\n\n if (items.length) {\n ctx.sql.push(`USING ${items.map((item) => item.target).join(', ')}`);\n\n conditions = items\n .map((item) => item.conditions)\n .filter(Boolean)\n .join(' AND ');\n }\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n\n if (conditions?.length) {\n if (query.and?.length || query.or?.length) {\n ctx.sql.push('AND', conditions);\n } else {\n ctx.sql.push('WHERE', conditions);\n }\n }\n\n pushReturningSql(ctx, table, query, quotedAs);\n};\n","import { quoteSchemaAndTable } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { TruncateQueryData } from './data';\n\nexport const pushTruncateSql = (\n ctx: ToSqlCtx,\n table: string,\n query: TruncateQueryData,\n) => {\n ctx.sql.push('TRUNCATE', quoteSchemaAndTable(query.schema, table));\n\n if (query.restartIdentity) ctx.sql.push('RESTART IDENTITY');\n if (query.cascade) ctx.sql.push('CASCADE');\n};\n","import { addValue } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { ColumnInfoQueryData } from './data';\nimport { Query } from '../query';\n\nexport const pushColumnInfoSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: ColumnInfoQueryData,\n) => {\n ctx.sql.push(\n `SELECT * FROM information_schema.columns WHERE table_name = ${addValue(\n ctx.values,\n table.table,\n )} AND table_catalog = current_database() AND table_schema = ${\n query.schema || 'current_schema()'\n }`,\n );\n\n if (query.column) {\n ctx.sql.push(\n `AND column_name = ${addValue(\n ctx.values,\n table.query.shape[query.column]?.data.name || query.column,\n )}`,\n );\n }\n};\n","const singleQuoteRegex = /'/g;\nconst doubleQuoteRegex = /\"/g;\n\n// eslint-disable-next-line\ntype Value = any\n\nconst quoteValue = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return String(value);\n else if (type === 'string')\n return `\"${(value as string)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `\"${value.toISOString()}\"`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (value === null || value === undefined) return 'NULL';\n else\n return `\"${JSON.stringify(value)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n};\n\nconst quoteArray = (array: Value[]) => `'{${array.map(quoteValue).join(',')}}'`;\n\nexport const quote = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return `${value}`;\n else if (type === 'string') return quoteString(value);\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `'${value.toISOString()}'`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (value === null || value === undefined) return 'NULL';\n else return `'${JSON.stringify(value).replace(singleQuoteRegex, \"''\")}'`;\n};\n\nexport const quoteString = (value: string) => {\n return `'${(value as string).replace(singleQuoteRegex, \"''\")}'`;\n};\n","import { ToSqlCtx } from './toSql';\nimport { CopyQueryData } from './data';\nimport { Query } from '../query';\nimport { q } from './common';\nimport { quoteString } from '../quote';\nimport { pushWhereStatementSql } from './where';\n\nexport const pushCopySql = (\n ctx: ToSqlCtx,\n table: Query,\n query: CopyQueryData,\n quotedAs?: string,\n) => {\n const { sql } = ctx;\n const { copy } = query;\n\n const columns = copy.columns\n ? `(${copy.columns\n .map((item) => q(query.shape[item]?.data.name || item))\n .join(', ')})`\n : '';\n\n const target = 'from' in copy ? copy.from : copy.to;\n\n sql.push(\n `COPY ${q(table.table as string)}${columns} ${\n 'from' in copy ? 'FROM' : 'TO'\n } ${\n typeof target === 'string'\n ? quoteString(target)\n : `PROGRAM ${quoteString(target.program)}`\n }`,\n );\n\n if (Object.keys(copy).length > (copy.columns ? 2 : 1)) {\n const options: string[] = [];\n\n if (copy.format) options.push(`FORMAT ${copy.format}`);\n if (copy.freeze) options.push(`FREEZE ${copy.freeze}`);\n if (copy.delimiter)\n options.push(`DELIMITER ${quoteString(copy.delimiter)}`);\n if (copy.null) options.push(`NULL ${quoteString(copy.null)}`);\n if (copy.header) options.push(`HEADER ${copy.header}`);\n if (copy.quote) options.push(`QUOTE ${quoteString(copy.quote)}`);\n if (copy.escape) options.push(`ESCAPE ${quoteString(copy.escape)}`);\n if (copy.forceQuote)\n options.push(\n `FORCE_QUOTE ${\n copy.forceQuote === '*'\n ? '*'\n : `(${copy.forceQuote.map(q).join(', ')})`\n }`,\n );\n if (copy.forceNotNull)\n options.push(`FORCE_NOT_NULL (${copy.forceNotNull.map(q).join(', ')})`);\n if (copy.forceNull)\n options.push(`FORCE_NULL (${copy.forceNull.map(q).join(', ')})`);\n if (copy.encoding) options.push(`ENCODING ${quoteString(copy.encoding)}`);\n\n sql.push(`WITH (${options.join(', ')})`);\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n};\n","import { Query, queryTypeWithLimitOne } from '../query';\nimport { addValue, q, revealColumnToSql } from './common';\nimport { JoinItem } from './types';\nimport { pushDistinctSql } from './distinct';\nimport { pushSelectSql } from './select';\nimport { windowToSql } from './window';\nimport { pushJoinSql } from './join';\nimport { pushWhereStatementSql } from './where';\nimport { pushHavingSql } from './having';\nimport { pushWithSql } from './with';\nimport { pushFromAndAs } from './fromAndAs';\nimport { pushInsertSql } from './insert';\nimport { pushUpdateSql } from './update';\nimport { pushDeleteSql } from './delete';\nimport { pushTruncateSql } from './truncate';\nimport { pushColumnInfoSql } from './columnInfo';\nimport { pushOrderBySql } from './orderBy';\nimport { OnQueryBuilder, WhereQueryBuilder } from '../queryMethods';\nimport { getRaw } from '../raw';\nimport { QueryData } from './data';\nimport { pushCopySql } from './copy';\nimport { isRaw, Sql } from 'orchid-core';\n\nexport type ToSqlCtx = {\n whereQueryBuilder: typeof WhereQueryBuilder;\n onQueryBuilder: typeof OnQueryBuilder;\n sql: string[];\n values: unknown[];\n // selected value in JOIN LATERAL will have an alias to reference it from SELECT\n aliasValue?: true;\n};\n\nexport type toSqlCacheKey = typeof toSqlCacheKey;\nexport const toSqlCacheKey = Symbol('toSqlCache');\n\nexport type ToSqlOptions = {\n clearCache?: boolean;\n values?: unknown[];\n};\n\ntype ToSqlOptionsInternal = ToSqlOptions & {\n aliasValue?: true;\n};\n\nexport const toSql = (table: Query, options?: ToSqlOptions): Sql => {\n return (\n (!options?.clearCache && table.query[toSqlCacheKey]) ||\n (table.query[toSqlCacheKey] = makeSql(table, options))\n );\n};\n\nexport const makeSql = (table: Query, options?: ToSqlOptionsInternal): Sql => {\n const query = table.query;\n const sql: string[] = [];\n const values = options?.values || [];\n const ctx: ToSqlCtx = {\n whereQueryBuilder: table.whereQueryBuilder,\n onQueryBuilder: table.onQueryBuilder,\n sql,\n values,\n aliasValue: options?.aliasValue,\n };\n\n if (query.with) {\n pushWithSql(ctx, query.with);\n }\n\n if (query.type) {\n if (query.type === 'truncate') {\n if (!table.table) throw new Error('Table is missing for truncate');\n\n pushTruncateSql(ctx, table.table, query);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'columnInfo') {\n if (!table.table) throw new Error('Table is missing for truncate');\n\n pushColumnInfoSql(ctx, table, query);\n return { text: sql.join(' '), values };\n }\n\n if (!table.table) throw new Error(`Table is missing for ${query.type}`);\n\n const quotedAs = q(query.as || table.table);\n\n if (query.type === 'insert') {\n pushInsertSql(ctx, table, query, q(table.table));\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'update') {\n pushUpdateSql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'delete') {\n pushDeleteSql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'copy') {\n pushCopySql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n }\n\n const quotedAs =\n (query.as || table.table) && q((query.as || table.table) as string);\n\n sql.push('SELECT');\n\n if (query.distinct) {\n pushDistinctSql(ctx, table, query.distinct, quotedAs);\n }\n\n pushSelectSql(ctx, table, query, quotedAs);\n\n if (table.table || query.from) {\n pushFromAndAs(ctx, table, query, quotedAs);\n }\n\n if (query.join) {\n pushJoinSql(\n ctx,\n table,\n query as QueryData & { join: JoinItem[] },\n quotedAs,\n );\n }\n\n if (query.and || query.or) {\n pushWhereStatementSql(ctx, table, query, quotedAs);\n }\n\n if (query.group) {\n const group = query.group.map((item) =>\n typeof item === 'object' && isRaw(item)\n ? getRaw(item, values)\n : revealColumnToSql(\n table.query,\n table.query.shape,\n item as string,\n quotedAs,\n ),\n );\n sql.push(`GROUP BY ${group.join(', ')}`);\n }\n\n if (query.having || query.havingOr) {\n pushHavingSql(ctx, table, query, quotedAs);\n }\n\n if (query.window) {\n const window: string[] = [];\n query.window.forEach((item) => {\n for (const key in item) {\n window.push(\n `${q(key)} AS ${windowToSql(query, item[key], values, quotedAs)}`,\n );\n }\n });\n sql.push(`WINDOW ${window.join(', ')}`);\n }\n\n if (query.union) {\n query.union.forEach((item) => {\n let itemSql: string;\n if (isRaw(item.arg)) {\n itemSql = getRaw(item.arg, values);\n } else {\n const argSql = makeSql(item.arg, { values });\n itemSql = argSql.text;\n }\n sql.push(`${item.kind} ${item.wrap ? `(${itemSql})` : itemSql}`);\n });\n }\n\n if (query.order) {\n pushOrderBySql(ctx, query, quotedAs, query.order);\n }\n\n if (!query.returnsOne) {\n const limit = queryTypeWithLimitOne[query.returnType] ? 1 : query.limit;\n if (limit) {\n sql.push(`LIMIT ${addValue(values, limit)}`);\n }\n }\n\n if (query.offset) {\n sql.push(`OFFSET ${addValue(values, query.offset)}`);\n }\n\n if (query.for) {\n sql.push('FOR', query.for.type);\n const { tableNames } = query.for;\n if (tableNames) {\n if (isRaw(tableNames)) {\n sql.push('OF', getRaw(tableNames, values));\n } else {\n sql.push('OF', tableNames.map(q).join(', '));\n }\n }\n if (query.for.mode) sql.push(query.for.mode);\n }\n\n return { text: sql.join(' '), values };\n};\n","import { ColumnsParsers, Query, QueryReturnType } from '../query';\nimport {\n AfterCallback,\n BeforeCallback,\n getValueKey,\n QueryLogger,\n QueryLogObject,\n} from '../queryMethods';\nimport { Adapter, QueryResult } from '../adapter';\nimport { RelationQueryData, relationQueryKey } from '../relations';\nimport { ColumnsShape } from '../columns';\nimport { toSqlCacheKey } from './toSql';\nimport {\n HavingItem,\n JoinItem,\n OnConflictItem,\n OnConflictMergeUpdate,\n OrderItem,\n SelectItem,\n UnionItem,\n UnionKind,\n WhereItem,\n WindowItem,\n WithItem,\n} from './types';\nimport { Expression } from '../utils';\nimport {\n RawExpression,\n ColumnsShapeBase,\n ColumnTypeBase,\n MaybeArray,\n Sql,\n} from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport type JoinedShapes = Record<string, ColumnsShapeBase>;\nexport type JoinedParsers = Record<string, ColumnsParsers>;\n\nexport type CommonQueryData = {\n adapter: Adapter;\n shape: ColumnsShapeBase;\n patchResult?(queryResult: QueryResult): Promise<void>;\n handleResult(q: Query, result: QueryResult, isSubQuery?: true): unknown;\n returnType: QueryReturnType;\n [relationQueryKey]?: RelationQueryData;\n wrapInTransaction?: boolean;\n throwOnNotFound?: boolean;\n with?: WithItem[];\n withShapes?: Record<string, ColumnsShape>;\n joinTo?: QueryBase;\n joinedShapes?: JoinedShapes;\n joinedParsers?: JoinedParsers;\n joinedForSelect?: string;\n innerJoinLateral?: true;\n schema?: string;\n select?: SelectItem[];\n as?: string;\n from?: string | Query | RawExpression;\n and?: WhereItem[];\n or?: WhereItem[][];\n coalesceValue?: unknown | RawExpression;\n parsers?: ColumnsParsers;\n notFoundDefault?: unknown;\n defaults?: Record<string, unknown>;\n beforeQuery?: BeforeCallback[];\n afterQuery?: AfterCallback[];\n log?: QueryLogObject;\n logger: QueryLogger;\n autoPreparedStatements?: boolean;\n [toSqlCacheKey]?: Sql;\n};\n\nexport type SelectQueryData = CommonQueryData & {\n type: undefined;\n distinct?: Expression[];\n fromOnly?: boolean;\n join?: JoinItem[];\n group?: (string | RawExpression)[];\n having?: HavingItem[];\n havingOr?: HavingItem[][];\n window?: WindowItem[];\n union?: { arg: UnionItem; kind: UnionKind; wrap?: boolean }[];\n order?: OrderItem[];\n returnsOne?: true;\n limit?: number;\n offset?: number;\n for?: {\n type: 'UPDATE' | 'NO KEY UPDATE' | 'SHARE' | 'KEY SHARE';\n tableNames?: string[] | RawExpression;\n mode?: 'NO WAIT' | 'SKIP LOCKED';\n };\n // column type for query with 'value' or 'valueOrThrow' return type\n [getValueKey]?: ColumnTypeBase;\n};\n\nexport type InsertQueryData = CommonQueryData & {\n type: 'insert';\n columns: string[];\n values:\n | unknown[][]\n | MaybeArray<RawExpression>\n | {\n from: Query;\n values?: unknown[][];\n };\n using?: JoinItem[];\n join?: JoinItem[];\n onConflict?:\n | {\n type: 'ignore';\n expr?: OnConflictItem;\n }\n | {\n type: 'merge';\n expr?: OnConflictItem;\n update?: OnConflictMergeUpdate;\n };\n beforeCreate?: BeforeCallback[];\n afterCreate?: AfterCallback[];\n};\n\nexport type UpdateQueryDataObject = Record<\n string,\n RawExpression | { op: string; arg: unknown } | unknown\n>;\n\nexport type UpdatedAtDataInjector = (\n data: UpdateQueryDataItem[],\n) => UpdateQueryDataItem | void;\n\nexport type UpdateQueryDataItem =\n | UpdateQueryDataObject\n | RawExpression\n | UpdatedAtDataInjector;\n\nexport type UpdateQueryData = CommonQueryData & {\n type: 'update';\n updateData: UpdateQueryDataItem[];\n beforeUpdate?: BeforeCallback[];\n afterUpdate?: AfterCallback[];\n};\n\nexport type DeleteQueryData = CommonQueryData & {\n type: 'delete';\n join?: JoinItem[];\n beforeDelete?: BeforeCallback[];\n afterDelete?: AfterCallback[];\n};\n\nexport type TruncateQueryData = CommonQueryData & {\n type: 'truncate';\n restartIdentity?: boolean;\n cascade?: boolean;\n};\n\nexport type ColumnInfoQueryData = CommonQueryData & {\n type: 'columnInfo';\n column?: string;\n};\n\nexport type CopyQueryData = CommonQueryData & {\n type: 'copy';\n copy: CopyOptions;\n};\n\nexport type CopyOptions<Column = string> = {\n columns?: Column[];\n format?: 'text' | 'csv' | 'binary';\n freeze?: boolean;\n delimiter?: string;\n null?: string;\n header?: boolean | 'match';\n quote?: string;\n escape?: string;\n forceQuote?: Column[] | '*';\n forceNotNull?: Column[];\n forceNull?: Column[];\n encoding?: string;\n} & (\n | {\n from: string | { program: string };\n }\n | {\n to: string | { program: string };\n }\n);\n\nexport type QueryData =\n | SelectQueryData\n | InsertQueryData\n | UpdateQueryData\n | DeleteQueryData\n | TruncateQueryData\n | ColumnInfoQueryData\n | CopyQueryData;\n\nexport const cloneQueryArrays = (q: QueryData) => {\n if (q.with) q.with = q.with?.slice(0);\n if (q.select) q.select = q.select?.slice(0);\n if (q.and) q.and = q.and?.slice(0);\n if (q.or) q.or = q.or?.slice(0);\n if (q.beforeQuery) q.beforeQuery = q.beforeQuery?.slice(0);\n if (q.afterQuery) q.afterQuery = q.afterQuery?.slice(0);\n\n // may have data for updating timestamps on any kind of query\n (q as UpdateQueryData).updateData = (q as UpdateQueryData).updateData?.slice(\n 0,\n );\n\n if (q.type === undefined) {\n if (q.distinct) q.distinct = q.distinct?.slice(0);\n if (q.join) q.join = q.join?.slice(0);\n if (q.group) q.group = q.group?.slice(0);\n if (q.having) q.having = q.having?.slice(0);\n if (q.havingOr) q.havingOr = q.havingOr?.slice(0);\n if (q.window) q.window = q.window?.slice(0);\n if (q.union) q.union = q.union?.slice(0);\n if (q.order) q.order = q.order?.slice(0);\n } else if (q.type === 'insert') {\n q.columns = q.columns?.slice(0);\n q.values = Array.isArray(q.values) ? q.values.slice(0) : q.values;\n if (q.using) q.using = q.using?.slice(0);\n if (q.join) q.join = q.join?.slice(0);\n if (q.beforeCreate) q.beforeCreate = q.beforeCreate?.slice(0);\n if (q.afterCreate) q.afterCreate = q.afterCreate?.slice(0);\n } else if (q.type === 'update') {\n if (q.beforeUpdate) q.beforeUpdate = q.beforeUpdate?.slice(0);\n if (q.afterUpdate) q.afterUpdate = q.afterUpdate?.slice(0);\n } else if (q.type === 'delete') {\n if (q.beforeDelete) q.beforeDelete = q.beforeDelete?.slice(0);\n if (q.afterDelete) q.afterDelete = q.afterDelete?.slice(0);\n }\n};\n","import { cloneQueryArrays, QueryData, toSqlCacheKey } from './sql';\nimport type { Query, Selectable } from './query';\nimport type { ColumnType } from './columns';\nimport type {\n RawExpression,\n ColumnOutput,\n ColumnTypeBase,\n StringKey,\n} from 'orchid-core';\n\nexport const getClonedQueryData = (query: QueryData): QueryData => {\n const cloned = { ...query };\n delete cloned[toSqlCacheKey];\n if (cloned.parsers) cloned.parsers = { ...cloned.parsers };\n cloneQueryArrays(cloned);\n return cloned as QueryData;\n};\n\nexport const getQueryAs = (q: { table?: string; query: { as?: string } }) => {\n return q.query.as || (q.table as string);\n};\n\nexport const makeRegexToFindInSql = (value: string) => {\n return new RegExp(`${value}(?=(?:[^']*'[^']*')*[^']*$)`, 'g');\n};\n\nexport type AliasOrTable<T extends Pick<Query, 'table' | 'meta'>> =\n T['meta']['as'] extends string\n ? T['meta']['as']\n : T['table'] extends string\n ? T['table']\n : never;\n\nexport type Expression<\n T extends Query = Query,\n C extends ColumnTypeBase = ColumnTypeBase,\n> = StringKey<keyof T['selectable']> | RawExpression<C>;\n\nexport type ExpressionOfType<T extends Query, C extends ColumnTypeBase, Type> =\n | {\n [K in keyof T['selectable']]: ColumnOutput<\n T['selectable'][K]['column']\n > extends Type | null\n ? K\n : never;\n }[Selectable<T>]\n | RawExpression<C>;\n\nexport type NumberExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, number>;\n\nexport type StringExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, string>;\n\nexport type BooleanExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, boolean>;\n\nexport type ExpressionOutput<\n T extends Query,\n Expr extends Expression<T>,\n> = Expr extends keyof T['selectable']\n ? T['selectable'][Expr]['column']\n : Expr extends RawExpression<infer ColumnType>\n ? ColumnType\n : never;\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { Code, singleQuote } from 'orchid-core';\nimport { columnCode } from './code';\n\n// for a user-defined type, or for unsupported yet type from some module\nexport class CustomTypeColumn extends ColumnType<\n unknown,\n typeof Operators.any\n> {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n this.data.isOfCustomType = true;\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `type(${singleQuote(this.dataType)})`);\n }\n}\n\n// domain column type: https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-user-defined-data-types/\nexport class DomainColumn extends CustomTypeColumn {\n toCode(t: string): Code {\n return columnCode(this, t, `domain(${singleQuote(this.dataType)})`);\n }\n}\n","import {\n BigIntColumn,\n BigSerialColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n IntegerColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n} from './number';\nimport {\n BitColumn,\n BitVaryingColumn,\n BoxColumn,\n ByteaColumn,\n CharColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n InetColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n TextColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n XMLColumn,\n} from './string';\nimport {\n DateColumn,\n IntervalColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n} from './dateTime';\nimport { BooleanColumn } from './boolean';\nimport { EnumColumn } from './enum';\nimport { JSONColumn, JSONTextColumn, JSONTypes } from './json';\nimport {\n ColumnTypesBase,\n EmptyObject,\n emptyObject,\n JSONTypeAny,\n makeTimestampsHelpers,\n MaybeArray,\n name,\n raw,\n RawExpression,\n setDefaultNowFn,\n toArray,\n} from 'orchid-core';\nimport { ArrayColumn } from './array';\nimport {\n ColumnNameOfTable,\n ColumnType,\n DropMode,\n ForeignKeyTable,\n IndexColumnOptions,\n IndexOptions,\n ForeignKeyOptions,\n} from './columnType';\nimport { makeRegexToFindInSql } from '../utils';\nimport { ColumnsShape } from './columnsSchema';\nimport { CustomTypeColumn, DomainColumn } from './customType';\n\nexport type ColumnTypes = typeof columnTypes;\n\nexport type TableData = {\n primaryKey?: TableData.PrimaryKey;\n indexes?: TableData.Index[];\n constraints?: TableData.Constraint[];\n};\n\nexport namespace TableData {\n export type PrimaryKey = {\n columns: string[];\n options?: { name?: string };\n };\n\n export type Index = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\n };\n\n export type Constraint = {\n name?: string;\n check?: Check;\n identity?: Identity;\n references?: References;\n dropMode?: DropMode;\n };\n\n export type Check = RawExpression;\n\n export type References = {\n columns: string[];\n fnOrTable: (() => ForeignKeyTable) | string;\n foreignColumns: string[];\n options?: ForeignKeyOptions;\n };\n\n export type Identity = {\n always?: boolean;\n } & Omit<SequenceOptions, 'dataType' | 'ownedBy'>;\n\n export type SequenceOptions = {\n dataType?: 'smallint' | 'integer' | 'bigint';\n incrementBy?: number;\n startWith?: number;\n min?: number;\n max?: number;\n cache?: number;\n cycle?: boolean;\n ownedBy?: string;\n };\n}\n\nexport const getConstraintKind = (\n it: TableData.Constraint,\n): 'constraint' | 'foreignKey' | 'check' => {\n let num = 0;\n for (const key in it) {\n if (\n (key === 'references' || key === 'check') &&\n it[key as keyof typeof it] !== undefined\n ) {\n num++;\n }\n }\n return num === 1 ? (it.references ? 'foreignKey' : 'check') : 'constraint';\n};\n\nexport const newTableData = (): TableData => ({});\n\nlet tableData: TableData = newTableData();\n\nexport const getTableData = () => tableData;\n\nexport const resetTableData = (data: TableData = newTableData()) => {\n tableData = data;\n};\n\nexport const getColumnTypes = <\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape,\n>(\n types: CT,\n fn: (t: CT) => Shape,\n nowSQL: string | undefined,\n data: TableData = newTableData(),\n) => {\n if (nowSQL) setDefaultNowFn(nowSQL);\n\n resetTableData(data);\n return fn(types);\n};\n\nfunction text(min: number, max: number) {\n return new TextColumn(min, max);\n}\n\nexport type DefaultColumnTypes = typeof columnTypes;\nexport const columnTypes = {\n name,\n raw,\n smallint() {\n return new SmallIntColumn();\n },\n integer() {\n return new IntegerColumn();\n },\n bigint() {\n return new BigIntColumn();\n },\n numeric<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(precision?: Precision, scale?: Scale) {\n return new DecimalColumn(precision, scale);\n },\n decimal<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(precision?: Precision, scale?: Scale) {\n return new DecimalColumn(precision, scale);\n },\n real() {\n return new RealColumn();\n },\n doublePrecision() {\n return new DoublePrecisionColumn();\n },\n identity(options?: TableData.Identity) {\n return new IntegerColumn().identity(options);\n },\n smallSerial() {\n return new SmallSerialColumn();\n },\n serial() {\n return new SerialColumn();\n },\n bigSerial() {\n return new BigSerialColumn();\n },\n money() {\n return new MoneyColumn();\n },\n varchar<Limit extends number | undefined = undefined>(limit?: Limit) {\n return new VarCharColumn(limit);\n },\n char<Limit extends number | undefined = undefined>(limit?: Limit) {\n return new CharColumn(limit);\n },\n text,\n string: text,\n citext(min: number, max: number) {\n return new CitextColumn(min, max);\n },\n bytea() {\n return new ByteaColumn();\n },\n date() {\n return new DateColumn();\n },\n timestampNoTZ<Precision extends number>(precision?: Precision) {\n return new TimestampColumn(precision);\n },\n timestamp<Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) {\n return new TimestampTZColumn(precision);\n },\n time<Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) {\n return new TimeColumn(precision);\n },\n interval<\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n >(fields?: Fields, precision?: Precision) {\n return new IntervalColumn(fields, precision);\n },\n boolean() {\n return new BooleanColumn();\n },\n enum<U extends string, T extends [U, ...U[]]>(dataType: string, type: T) {\n return new EnumColumn<U, T>(dataType, type);\n },\n point() {\n return new PointColumn();\n },\n line() {\n return new LineColumn();\n },\n lseg() {\n return new LsegColumn();\n },\n box() {\n return new BoxColumn();\n },\n path() {\n return new PathColumn();\n },\n polygon() {\n return new PolygonColumn();\n },\n circle() {\n return new CircleColumn();\n },\n cidr() {\n return new CidrColumn();\n },\n inet() {\n return new InetColumn();\n },\n macaddr() {\n return new MacAddrColumn();\n },\n macaddr8() {\n return new MacAddr8Column();\n },\n bit<Length extends number>(length: Length) {\n return new BitColumn(length);\n },\n bitVarying<Length extends number | undefined = undefined>(length?: Length) {\n return new BitVaryingColumn(length);\n },\n tsvector() {\n return new TsVectorColumn();\n },\n tsquery() {\n return new TsQueryColumn();\n },\n uuid() {\n return new UUIDColumn();\n },\n xml() {\n return new XMLColumn();\n },\n json<Type extends JSONTypeAny>(schemaOrFn: Type | ((j: JSONTypes) => Type)) {\n return new JSONColumn(schemaOrFn);\n },\n jsonText() {\n return new JSONTextColumn();\n },\n array<Item extends ColumnType>(item: Item) {\n return new ArrayColumn(item);\n },\n type(dataType: string) {\n return new CustomTypeColumn(dataType);\n },\n domain(dataType: string) {\n return new DomainColumn(dataType);\n },\n\n primaryKey(columns: string[], options?: { name?: string }) {\n tableData.primaryKey = { columns, options };\n return emptyObject;\n },\n\n index(\n columns: MaybeArray<string | IndexColumnOptions>,\n options: IndexOptions = {},\n ) {\n const index = {\n columns: toArray(columns).map((column) =>\n typeof column === 'string' ? { column } : column,\n ),\n options,\n };\n\n (tableData.indexes ??= []).push(index);\n return emptyObject;\n },\n\n unique(\n columns: MaybeArray<string | IndexColumnOptions>,\n options: IndexOptions = {},\n ) {\n const index = {\n columns: toArray(columns).map((column) =>\n typeof column === 'string' ? { column } : column,\n ),\n options: { ...options, unique: true },\n };\n\n (tableData.indexes ??= []).push(index);\n\n return emptyObject;\n },\n\n constraint<\n Table extends (() => ForeignKeyTable) | string,\n Columns extends Table extends () => ForeignKeyTable\n ? [\n ColumnNameOfTable<ReturnType<Table>>,\n ...ColumnNameOfTable<ReturnType<Table>>[],\n ]\n : [string, ...string[]],\n >({\n name,\n references,\n check,\n dropMode,\n }: {\n name?: string;\n references?: [\n columns: string[],\n fnOrTable: Table,\n foreignColumns: Columns,\n options?: ForeignKeyOptions,\n ];\n check?: RawExpression;\n dropMode?: DropMode;\n }): EmptyObject {\n (tableData.constraints ??= []).push({\n name,\n references: references\n ? {\n columns: references[0],\n fnOrTable: references[1],\n foreignColumns: references[2],\n options: references[3],\n }\n : undefined,\n check,\n dropMode,\n });\n return emptyObject;\n },\n\n foreignKey<\n Table extends (() => ForeignKeyTable) | string,\n Columns extends Table extends () => ForeignKeyTable\n ? [\n ColumnNameOfTable<ReturnType<Table>>,\n ...ColumnNameOfTable<ReturnType<Table>>[],\n ]\n : [string, ...string[]],\n >(\n columns: string[],\n fnOrTable: Table,\n foreignColumns: Columns,\n options?: ForeignKeyOptions & { name?: string; dropMode?: DropMode },\n ): EmptyObject {\n (tableData.constraints ??= []).push({\n name: options?.name,\n references: {\n columns,\n fnOrTable,\n foreignColumns,\n options,\n },\n dropMode: options?.dropMode,\n });\n return emptyObject;\n },\n\n check(check: RawExpression): EmptyObject {\n (tableData.constraints ??= []).push({\n check,\n });\n return emptyObject;\n },\n\n ...makeTimestampsHelpers(\n makeRegexToFindInSql('\\\\bupdatedAt\\\\b\"?\\\\s*='),\n '\"updatedAt\"',\n makeRegexToFindInSql('\\\\bupdated_at\\\\b\"?\\\\s*='),\n '\"updated_at\"',\n ),\n};\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\n\nexport type ColumnsShape = Record<string, ColumnType>;\n\nexport abstract class ColumnsObject<\n Shape extends ColumnsShape,\n> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] },\n typeof Operators.any\n> {\n dataType = 'object' as const;\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\nexport abstract class ArrayOfColumnsObjects<\n Shape extends ColumnsShape,\n> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] }[],\n typeof Operators.any\n> {\n dataType = 'array' as const;\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\nexport abstract class PluckResultColumnType<\n C extends ColumnType,\n> extends ColumnType<C['type'][], typeof Operators.any> {}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { Query } from '../query';\nimport { CreateCtx, UpdateCtx } from '../queryMethods';\n\nexport abstract class VirtualColumn extends ColumnType<\n unknown,\n typeof Operators.any\n> {\n dataType = '';\n operators = Operators.any;\n\n toCode(): never {\n throw new Error(`toCode is not implemented for virtual column`);\n }\n\n create?(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ): void;\n\n update?(q: Query, ctx: UpdateCtx, set: Record<string, unknown>): void;\n}\n","import { VirtualColumn } from './virtual';\n\n// unknown column is used for the case of raw SQL when user doesn't specify a column\nexport class UnknownColumn extends VirtualColumn {}\n","import { ColumnType } from './columnType';\nimport { BooleanColumn } from './boolean';\nimport {\n BitColumn,\n BitVaryingColumn,\n BoxColumn,\n ByteaColumn,\n CharColumn,\n CidrColumn,\n CircleColumn,\n InetColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n TextColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n XMLColumn,\n} from './string';\nimport {\n BigIntColumn,\n BigSerialColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n IntegerColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n} from './number';\nimport { JSONColumn, JSONTextColumn } from './json';\nimport {\n DateColumn,\n IntervalColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n} from './dateTime';\n\nexport const columnsByType: Record<\n string,\n new (...args: never[]) => ColumnType\n> = {\n bool: BooleanColumn,\n boolean: BooleanColumn,\n bytea: ByteaColumn,\n char: CharColumn,\n int8: BigIntColumn,\n bigint: BigIntColumn,\n int2: SmallIntColumn,\n smallint: SmallIntColumn,\n int4: IntegerColumn,\n integer: IntegerColumn,\n text: TextColumn,\n json: JSONTextColumn,\n xml: XMLColumn,\n point: PointColumn,\n lseg: LsegColumn,\n path: PathColumn,\n box: BoxColumn,\n polygon: PolygonColumn,\n line: LineColumn,\n cidr: CidrColumn,\n float4: RealColumn,\n real: RealColumn,\n float8: DoublePrecisionColumn,\n 'double precision': DoublePrecisionColumn,\n circle: CircleColumn,\n macaddr8: MacAddr8Column,\n money: MoneyColumn,\n macaddr: MacAddrColumn,\n inet: InetColumn,\n bpchar: CharColumn,\n character: CharColumn,\n varchar: VarCharColumn,\n 'character varying': VarCharColumn,\n date: DateColumn,\n time: TimeColumn,\n 'time without time zone': TimeColumn,\n timestamp: TimestampColumn,\n 'timestamp without time zone': TimestampColumn,\n timestamptz: TimestampTZColumn,\n 'timestamp with time zone': TimestampTZColumn,\n interval: IntervalColumn,\n bit: BitColumn,\n varbit: BitVaryingColumn,\n 'bit varying': BitVaryingColumn,\n numeric: DecimalColumn,\n decimal: DecimalColumn,\n uuid: UUIDColumn,\n tsvector: TsVectorColumn,\n tsquery: TsQueryColumn,\n jsonb: JSONColumn,\n smallserial: SmallSerialColumn,\n serial: SerialColumn,\n bigserial: BigSerialColumn,\n};\n","import pg, { Pool, PoolClient, PoolConfig } from 'pg';\nimport { AdapterBase, QueryInput, QueryResultRow, Sql } from 'orchid-core';\nconst { types } = pg;\n\nexport type TypeParsers = Record<number, (input: string) => unknown>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryResult<T extends QueryResultRow = any> = {\n rowCount: number;\n rows: T[];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryArraysResult<R extends any[] = any[]> = {\n rowCount: number;\n rows: R[];\n fields: { name: string }[];\n};\n\nconst defaultTypeParsers: TypeParsers = {};\n\nfor (const key in types.builtins) {\n const id = types.builtins[key as keyof typeof types.builtins];\n defaultTypeParsers[id] = types.getTypeParser(id);\n}\n\n[\n types.builtins.DATE,\n types.builtins.TIMESTAMP,\n types.builtins.TIMESTAMPTZ,\n types.builtins.TIME,\n types.builtins.CIRCLE,\n].forEach((id) => {\n delete defaultTypeParsers[id];\n});\n\nconst returnArg = (arg: unknown) => arg;\n\nexport type AdapterConfig = Omit<PoolConfig, 'types' | 'connectionString'> & {\n schema?: string;\n databaseURL?: string;\n};\n\nexport type AdapterOptions = AdapterConfig & {\n types?: TypeParsers;\n};\n\nexport class Adapter implements AdapterBase {\n types: TypeParsers;\n pool: Pool;\n config: PoolConfig;\n schema?: string;\n\n constructor({ types = defaultTypeParsers, ...config }: AdapterOptions) {\n this.types = types;\n\n let schema = config.schema;\n if (config.databaseURL) {\n const url = new URL(config.databaseURL);\n\n const ssl = url.searchParams.get('ssl');\n\n if (ssl === 'false') {\n url.searchParams.delete('ssl');\n } else if (!config.ssl && ssl === 'true') {\n config.ssl = true;\n }\n\n if (!schema) {\n schema = url.searchParams.get('schema') || undefined;\n }\n\n config.databaseURL = url.toString();\n (config as PoolConfig).connectionString = config.databaseURL;\n }\n\n if (schema) this.schema = schema === 'public' ? undefined : schema;\n\n this.config = config;\n this.pool = new pg.Pool(config);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query<T extends QueryResultRow = any>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryResult<T>> {\n return performQuery(this.pool, query, types, this.schema) as Promise<\n QueryResult<T>\n >;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arrays<R extends any[] = any[]>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryArraysResult<R>> {\n return performQuery(this.pool, query, types, this.schema, 'array');\n }\n\n async transaction<Result>(\n begin: Sql,\n cb: (adapter: TransactionAdapter) => Promise<Result>,\n ): Promise<Result> {\n const client = await this.pool.connect();\n try {\n await setSearchPath(client, this.schema);\n await performQueryOnClient(client, begin, this.types);\n let result;\n try {\n result = await cb(new TransactionAdapter(this, client, this.types));\n } catch (err) {\n await performQueryOnClient(client, { text: 'ROLLBACK' }, this.types);\n throw err;\n }\n await performQueryOnClient(client, { text: 'COMMIT' }, this.types);\n return result;\n } finally {\n client.release();\n }\n }\n\n close(): Promise<void> {\n const { pool } = this;\n this.pool = new pg.Pool(this.config);\n return pool.end();\n }\n}\n\nconst defaultTypesConfig = {\n getTypeParser(id: number) {\n return defaultTypeParsers[id] || returnArg;\n },\n};\n\ntype ConnectionSchema = { connection: { schema?: string } };\n\nconst setSearchPath = (client: PoolClient, schema?: string) => {\n if ((client as unknown as ConnectionSchema).connection.schema !== schema) {\n (client as unknown as ConnectionSchema).connection.schema = schema;\n return client.query(`SET search_path = ${schema || 'public'}`);\n }\n return;\n};\n\nconst performQuery = async (\n pool: Pool,\n query: QueryInput,\n types?: TypeParsers,\n schema?: string,\n rowMode?: 'array',\n) => {\n const client = await pool.connect();\n try {\n await setSearchPath(client, schema);\n return await performQueryOnClient(client, query, types, rowMode);\n } finally {\n client.release();\n }\n};\n\nconst performQueryOnClient = (\n client: PoolClient,\n query: QueryInput,\n types?: TypeParsers,\n rowMode?: 'array',\n) => {\n const params = {\n text: typeof query === 'string' ? query : query.text,\n values: typeof query === 'string' ? undefined : query.values,\n rowMode,\n types: types\n ? {\n getTypeParser(id: number) {\n return types[id] || returnArg;\n },\n }\n : defaultTypesConfig,\n };\n\n return client.query(params);\n};\n\nexport class TransactionAdapter implements Adapter {\n pool: Pool;\n config: PoolConfig;\n\n constructor(\n public adapter: Adapter,\n public client: PoolClient,\n public types: TypeParsers,\n ) {\n this.pool = adapter.pool;\n this.config = adapter.config;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryResult<T>> {\n return await performQueryOnClient(this.client, query, types);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryArraysResult<R>> {\n return await performQueryOnClient(this.client, query, types, 'array');\n }\n\n async transaction<Result>(\n _: Sql,\n cb: (adapter: TransactionAdapter) => Promise<Result>,\n ): Promise<Result> {\n return await cb(this);\n }\n\n close() {\n return this.adapter.close();\n }\n}\n","import {\n Query,\n SetQueryReturnsValue,\n SetQueryReturnsValueOptional,\n} from '../query';\nimport { addParserForRawExpression, processSelectArg } from './select';\nimport { RawExpression, ColumnTypeBase, StringKey } from 'orchid-core';\nimport { SelectQueryData } from '../sql';\nimport { QueryBase } from '../queryBase';\n\nexport type GetArg<T extends QueryBase> =\n | StringKey<keyof T['selectable']>\n | RawExpression;\n\ntype UnwrapRaw<\n T extends Query,\n Arg extends GetArg<T>,\n> = Arg extends RawExpression ? Arg['__column'] : Exclude<Arg, RawExpression>;\n\ntype GetResult<T extends Query, Arg extends GetArg<T>> = SetQueryReturnsValue<\n T,\n UnwrapRaw<T, Arg>\n>;\n\ntype GetOptionalResult<\n T extends Query,\n Arg extends GetArg<T>,\n> = SetQueryReturnsValueOptional<T, UnwrapRaw<T, Arg>>;\n\nexport type getValueKey = typeof getValueKey;\nexport const getValueKey = Symbol('get');\n\nconst _get = <\n T extends Query,\n R extends 'value' | 'valueOrThrow',\n Arg extends GetArg<T>,\n>(\n q: T,\n returnType: R,\n arg: Arg,\n): R extends 'value' ? GetOptionalResult<T, Arg> : GetResult<T, Arg> => {\n q.query.returnType = returnType;\n\n if (typeof arg === 'string') {\n let type = q.query.shape[arg] as ColumnTypeBase | undefined;\n if (type) {\n } else {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === (q.query.as || q.table)) {\n type = q.query.shape[column];\n } else {\n type = q.query.joinedShapes?.[table]?.[column];\n }\n }\n }\n\n (q.query as SelectQueryData)[getValueKey] = type;\n\n q.query.select = [\n processSelectArg(\n q,\n q.query.as || q.table,\n arg as unknown as Exclude<GetArg<T>, RawExpression>,\n getValueKey,\n ),\n ];\n } else {\n (q.query as SelectQueryData)[getValueKey] = arg.__column;\n addParserForRawExpression(q, getValueKey, arg);\n q.query.select = [arg];\n }\n\n return q as unknown as GetResult<T, Arg> & GetOptionalResult<T, Arg>;\n};\n\nexport class QueryGet {\n get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return this.clone()._get(arg);\n }\n\n _get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return _get(this, 'valueOrThrow', arg);\n }\n\n getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return this.clone()._getOptional(arg);\n }\n\n _getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return _get(this, 'value', arg);\n }\n}\n","import { ColumnsParsers, Query } from '../query';\nimport { ColumnsShapeBase } from 'orchid-core';\nimport { getIsJoinSubQuery } from '../sql/join';\nimport { getShapeFromSelect } from './select';\nimport { Relation } from '../relations';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport {\n JoinArgs,\n JoinCallback,\n JoinFirstArg,\n JoinLateralCallback,\n JoinLateralResult,\n JoinResult,\n} from './join';\nimport { ColumnsShape } from '../columns';\nimport { getQueryAs } from '../utils';\nimport { QueryBase } from '../queryBase';\n\nexport const _join = <\n T extends Query,\n Arg extends JoinFirstArg<T>,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Args extends JoinArgs<T, Arg>,\n>(\n q: T,\n require: RequireJoined,\n type: string,\n args: [arg: Arg, ...args: Args] | [arg: Arg, cb: JoinCallback<T, Arg>],\n): JoinResult<T, Arg, RequireJoined, RequireMain> => {\n let joinKey: string | undefined;\n let shape: ColumnsShapeBase | undefined;\n let parsers: ColumnsParsers | undefined;\n let isSubQuery = false;\n\n if (typeof args[0] === 'function') {\n args[0] = (args[0] as (q: Record<string, Query>) => Arg)(\n q.relationsQueries,\n );\n (\n args[0] as unknown as { joinQueryAfterCallback: unknown }\n ).joinQueryAfterCallback = (\n args[0] as unknown as { joinQuery: unknown }\n ).joinQuery;\n }\n\n const first = args[0];\n\n if (typeof first === 'object') {\n isSubQuery = getIsJoinSubQuery(first.query, first.baseQuery.query);\n\n joinKey = first.query.as || first.table;\n if (joinKey) {\n shape = getShapeFromSelect(first, isSubQuery);\n parsers = first.query.parsers;\n\n if (isSubQuery) {\n args[0] = first.clone() as Arg;\n (args[0] as Query).shape = shape as ColumnsShape;\n }\n }\n } else {\n joinKey = first as string;\n\n const relation = (q.relations as Record<string, Relation>)[joinKey];\n if (relation) {\n shape = getShapeFromSelect(relation.query);\n parsers = relation.query.query.parsers;\n } else {\n shape = q.query.withShapes?.[joinKey];\n if (shape) {\n // clone the shape to mutate it below, in other cases the shape is newly created\n if (!require) shape = { ...shape };\n\n parsers = {} as ColumnsParsers;\n for (const key in shape) {\n const parser = shape[key].parseFn;\n if (parser) {\n parsers[key] = parser;\n }\n }\n }\n }\n }\n\n if (joinKey) {\n setQueryObjectValue(q, 'joinedShapes', joinKey, shape);\n setQueryObjectValue(q, 'joinedParsers', joinKey, parsers);\n }\n\n return pushQueryValue(q, 'join', {\n type,\n args,\n isSubQuery,\n }) as unknown as JoinResult<T, Arg, RequireJoined, RequireMain>;\n};\n\nexport const _joinLateral = <\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n>(\n q: T,\n type: string,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n as?: string,\n): JoinLateralResult<T, R, RequireJoined, RequireMain> => {\n let relation: Relation | undefined;\n if (typeof arg === 'string') {\n relation = (q.relations as Record<string, Relation>)[arg];\n if (relation) {\n arg = relation.query as Arg;\n } else {\n const shape = q.query.withShapes?.[arg];\n if (shape) {\n const t = Object.create(q.queryBuilder);\n t.table = arg;\n t.shape = shape;\n t.query = {\n ...t.query,\n shape,\n };\n t.baseQuery = t;\n arg = t as Arg;\n }\n }\n }\n\n const query = arg as Query;\n query.query.joinTo = q;\n (query.query.joinedShapes ??= {})[getQueryAs(q)] = q.query.shape;\n let result = cb(query as never);\n\n if (relation) {\n result = relation.joinQuery(q, result as unknown as Query) as unknown as R;\n }\n\n const joinKey = as || result.query.as || result.table;\n if (joinKey) {\n const shape = getShapeFromSelect(result, true);\n setQueryObjectValue(q, 'joinedShapes', joinKey, shape);\n setQueryObjectValue(q, 'joinedParsers', joinKey, result.query.parsers);\n }\n\n return pushQueryValue(q, 'join', [type, result, as]) as JoinLateralResult<\n T,\n R,\n RequireJoined,\n RequireMain\n >;\n};\n","import {\n ColumnParser,\n ColumnsParsers,\n Query,\n QueryReturnsAll,\n QueryThen,\n SelectableBase,\n} from '../query';\nimport {\n ArrayOfColumnsObjects,\n ColumnsObject,\n JSONTextColumn,\n PluckResultColumnType,\n} from '../columns';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { JoinedParsers, QueryData, SelectItem, SelectQueryData } from '../sql';\nimport { isRequiredRelationKey, Relation } from '../relations';\nimport { getValueKey } from './get';\nimport { QueryResult } from '../adapter';\nimport { UnknownColumn } from '../columns/unknown';\nimport {\n StringKey,\n isRaw,\n RawExpression,\n ColumnsShapeBase,\n NullableColumn,\n ColumnTypeBase,\n EmptyObject,\n raw,\n setColumnData,\n} from 'orchid-core';\nimport { QueryBase } from '../queryBase';\nimport { _joinLateral } from './_join';\n\n// .select method argument\nexport type SelectArg<T extends QueryBase> =\n | '*'\n | StringKey<keyof T['selectable']>\n | SelectAsArg<T>;\n\n// .select method object argument\n// key is alias for selected item,\n// value can be a column, raw, or a function returning query or raw\ntype SelectAsArg<T extends QueryBase> = Record<string, SelectAsValue<T>>;\n\n// .select method object argument value\n// can be column, raw, or a function returning query or raw\ntype SelectAsValue<T extends QueryBase> =\n | StringKey<keyof T['selectable']>\n | RawExpression\n | ((q: T) => Query)\n | ((q: T) => RawExpression)\n | ((q: T) => Query | RawExpression);\n\n// tuple for the result of selected by objects args\n// the first element is shape of selected data\n// the second is 'selectable', it allows to order and filter by the records\n// that were implicitly joined when selecting belongsTo or hasOne relation\n// ```ts\n// db.book.select({ author: (q) => q.author }).order('author.name')\n// ```\ntype SelectObjectResultTuple = [ColumnsShapeBase, SelectableBase];\n\n// query type after select\ntype SelectResult<\n T extends Query,\n Args extends SelectArg<T>[],\n // shape of the columns selected by string args\n SelectStringsResult extends ColumnsShapeBase = SelectStringArgsResult<\n T,\n Args\n >,\n // keys of selected columns by string args\n StringsKeys extends keyof SelectStringsResult = keyof SelectStringsResult,\n // tuple for the result of selected by objects args\n SelectAsResult extends SelectObjectResultTuple = SpreadSelectObjectArgs<\n T,\n Args,\n [EmptyObject, T['selectable']]\n >,\n // keys of combined object args\n AsKeys extends keyof SelectAsResult[0] = keyof SelectAsResult[0],\n // previous result keys to preserve, if the query has select\n ResultKeys extends keyof T['result'] = T['meta']['hasSelect'] extends true\n ? keyof T['result']\n : never,\n // to include all columns when * arg is provided\n ShapeKeys extends keyof T['shape'] = '*' extends Args[number]\n ? keyof T['shape']\n : never,\n // combine previously selected items, all columns if * was provided,\n // and the selected by string and object arguments\n Result extends ColumnsShapeBase = {\n [K in StringsKeys | AsKeys | ResultKeys | ShapeKeys]: K extends StringsKeys\n ? SelectStringsResult[K]\n : K extends AsKeys\n ? SelectAsResult[0][K]\n : K extends ResultKeys\n ? T['result'][K]\n : K extends ShapeKeys\n ? T['shape'][K]\n : never;\n },\n> = (T['meta']['hasSelect'] extends true\n ? unknown\n : { meta: { hasSelect: true } }) & {\n [K in keyof T]: K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : K extends 'selectable'\n ? SelectAsResult[1]\n : T[K];\n};\n\n// map string args of the select into a resulting object\ntype SelectStringArgsResult<T extends Query, Args extends SelectArg<T>[]> = {\n [Arg in Args[number] as Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['as']\n : never]: Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : never;\n};\n\n// combine multiple object args of the select into a tuple\ntype SpreadSelectObjectArgs<\n T extends Query,\n Args extends [...unknown[]],\n Result extends SelectObjectResultTuple,\n> = Args extends [infer L, ...infer R]\n ? SpreadSelectObjectArgs<T, R, SelectAsResult<T, L, Result>>\n : Result;\n\n// map a single object arg of the select into the tuple of selected data and selectable columns\ntype SelectAsResult<\n T extends Query,\n Arg,\n Result extends SelectObjectResultTuple,\n Shape = Result[0],\n AddSelectable extends SelectableBase = {\n [K in keyof Arg]: Arg[K] extends ((q: T) => infer R extends Query)\n ? // turn union of objects into intersection\n // https://stackoverflow.com/questions/66445084/intersection-of-an-objects-value-types-in-typescript\n (x: {\n [C in keyof R['result'] as `${StringKey<K>}.${StringKey<C>}`]: {\n as: C;\n column: R['result'][C];\n };\n }) => void\n : never;\n }[keyof Arg] extends (x: infer I) => void\n ? { [K in keyof I]: I[K] }\n : never,\n> = Arg extends SelectAsArg<T>\n ? [\n {\n [K in keyof Shape | keyof Arg]: K extends keyof Arg\n ? SelectAsValueResult<T, Arg[K]>\n : K extends keyof Shape\n ? Shape[K]\n : never;\n },\n Result[1] & AddSelectable,\n ]\n : Result;\n\n// map a single value of select object arg into a column\ntype SelectAsValueResult<\n T extends Query,\n Arg extends SelectAsValue<T>,\n> = Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RawExpression\n ? Arg['__column']\n : Arg extends (q: T) => infer R\n ? R extends Query\n ? SelectSubQueryResult<R>\n : R extends RawExpression\n ? R['__column']\n : R extends Query | RawExpression\n ?\n | SelectSubQueryResult<Exclude<R, RawExpression>>\n | Exclude<R, Query>['__column']\n : never\n : never;\n\n// map a sub query result into a column\n// query that returns many becomes an array column\n// query that returns a single value becomes a column of that value\n// query that returns 'pluck' becomes a column with array type of specific value type\n// query that returns a single record becomes an object column, possibly nullable\ntype SelectSubQueryResult<\n Arg extends Query & { [isRequiredRelationKey]?: boolean },\n> = QueryReturnsAll<Arg['returnType']> extends true\n ? ArrayOfColumnsObjects<Arg['result']>\n : Arg['returnType'] extends 'valueOrThrow'\n ? Arg['result']['value']\n : Arg['returnType'] extends 'pluck'\n ? PluckResultColumnType<Arg['result']['pluck']>\n : Arg[isRequiredRelationKey] extends true\n ? ColumnsObject<Arg['result']>\n : NullableColumn<ColumnsObject<Arg['result']>>;\n\n// add a parser for a raw expression column\n// is used by .select and .get methods\nexport const addParserForRawExpression = (\n q: Query,\n key: string | getValueKey,\n raw: RawExpression,\n) => {\n const parser = raw.__column?.parseFn;\n if (parser) addParserToQuery(q.query, key, parser);\n};\n\n// these are used as a wrapper to pass sub query result to `parseRecord`\nconst subQueryResult: QueryResult = {\n // sub query can't return a rowCount, use -1 as for impossible case\n rowCount: -1,\n rows: [],\n};\n\n// add parsers when selecting a full joined table by name or alias\nconst addParsersForSelectJoined = (q: Query, arg: string, as = arg) => {\n const parsers = (q.query.joinedParsers as JoinedParsers)[arg];\n if (parsers) {\n addParserToQuery(q.query, as, (item) => {\n subQueryResult.rows = [item];\n const type = q.query.returnType;\n q.query.returnType = 'one';\n const res = q.query.handleResult(q, subQueryResult, true);\n q.query.returnType = type;\n return res;\n });\n }\n};\n\n// add parser for a single key-value pair of selected object\nexport const addParserForSelectItem = <T extends Query>(\n q: T,\n as: string | getValueKey | undefined,\n key: string,\n arg: StringKey<keyof T['selectable']> | RawExpression | Query,\n): string | RawExpression | Query => {\n if (typeof arg === 'object') {\n if (isRaw(arg)) {\n addParserForRawExpression(q, key, arg);\n } else {\n const { parsers } = arg.query;\n if (parsers) {\n addParserToQuery(q.query, key, (item) => {\n const t = arg.query.returnType || 'all';\n subQueryResult.rows =\n t === 'value' || t === 'valueOrThrow'\n ? [[item]]\n : t === 'one' || t === 'oneOrThrow'\n ? [item]\n : (item as unknown[]);\n\n return arg.query.handleResult(arg, subQueryResult, true);\n });\n }\n }\n return arg;\n } else {\n if (q.query.joinedShapes?.[arg]) {\n addParsersForSelectJoined(q, arg, key);\n } else {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === as) {\n const parser = q.query.parsers?.[column];\n if (parser) addParserToQuery(q.query, key, parser);\n } else {\n const parser = q.query.joinedParsers?.[table]?.[column];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n } else {\n const parser = q.query.parsers?.[arg];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n }\n\n return arg;\n }\n};\n\n// generic utility to add a parser to the query object\nexport const addParserToQuery = (\n query: QueryData,\n key: string | getValueKey,\n parser: ColumnParser,\n) => {\n if (query.parsers) query.parsers[key] = parser;\n else query.parsers = { [key]: parser } as ColumnsParsers;\n};\n\n// process select argument: add parsers, join relations when needed\nexport const processSelectArg = <T extends Query>(\n q: T,\n as: string | undefined,\n arg: SelectArg<T>,\n columnAs?: string | getValueKey,\n): SelectItem => {\n if (typeof arg === 'string') {\n if (q.query.joinedShapes?.[arg]) {\n addParsersForSelectJoined(q, arg);\n return arg;\n } else {\n return processSelectColumnArg(q, arg, as, columnAs);\n }\n }\n\n const selectAs: Record<string, string | Query | RawExpression> = {};\n\n for (const key in arg as SelectAsArg<T>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let value = (arg as SelectAsArg<T>)[key] as any;\n\n if (typeof value === 'function') {\n const { isSubQuery } = q;\n q.isSubQuery = true;\n value = value(q);\n q.isSubQuery = isSubQuery;\n\n if (!isRaw(value) && value.joinQuery) {\n value = value.joinQuery(q, value);\n value.query.joinedForSelect = key;\n\n let query;\n const returnType = value.query.returnType;\n if (!returnType || returnType === 'all') {\n query = value.json(false);\n value.query.coalesceValue = raw(\"'[]'\");\n } else if (returnType === 'pluck') {\n query = value\n .wrap(value.baseQuery.clone())\n ._jsonAgg(value.query.select[0]);\n value.query.coalesceValue = raw(\"'[]'\");\n } else {\n if (\n (returnType === 'value' || returnType === 'valueOrThrow') &&\n value.query.select\n ) {\n if (typeof value.query.select[0] === 'string') {\n value.query.select[0] = {\n selectAs: { r: value.query.select[0] },\n };\n }\n }\n\n query = value;\n }\n\n _joinLateral(\n q,\n value.query.innerJoinLateral ? 'JOIN' : 'LEFT JOIN',\n query,\n (q) => q,\n key,\n );\n }\n }\n\n selectAs[key] = addParserForSelectItem(q, as, key, value);\n }\n\n return { selectAs };\n};\n\n// process string select arg\n// adds a column parser for a column\nconst processSelectColumnArg = <T extends Query>(\n q: T,\n arg: string,\n as?: string,\n columnAs?: string | getValueKey,\n): SelectItem => {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === as) {\n const parser = q.query.parsers?.[column];\n if (parser) addParserToQuery(q.query, columnAs || column, parser);\n } else {\n const parser = q.query.joinedParsers?.[table]?.[column];\n if (parser) addParserToQuery(q.query, columnAs || column, parser);\n }\n } else {\n const parser = q.query.parsers?.[arg];\n if (parser) addParserToQuery(q.query, columnAs || arg, parser);\n }\n return arg;\n};\n\n// is mapping result of a query into a columns shape\n// in this way, result of a sub query becomes available outside of it for using in WHERE and other methods\n//\n// when isSubQuery is true, it will remove data.name of columns,\n// so that outside of the sub-query the columns are named with app-side names,\n// while db column names are encapsulated inside the sub-query\nexport const getShapeFromSelect = (q: QueryBase, isSubQuery?: boolean) => {\n const query = q.query as SelectQueryData;\n const { select, shape } = query;\n let result: ColumnsShapeBase;\n if (!select) {\n // when no select, and it is a sub-query, return the table shape with unnamed columns\n if (isSubQuery) {\n result = {};\n for (const key in shape) {\n const column = shape[key];\n result[key] = column.data.name\n ? setColumnData(column, 'name', undefined)\n : column;\n }\n } else {\n result = shape;\n }\n } else {\n result = {};\n for (const item of select) {\n if (typeof item === 'string') {\n addColumnToShapeFromSelect(q, item, shape, query, result, isSubQuery);\n } else if ('selectAs' in item) {\n for (const key in item.selectAs) {\n const it = item.selectAs[key];\n if (typeof it === 'string') {\n addColumnToShapeFromSelect(\n q,\n it,\n shape,\n query,\n result,\n isSubQuery,\n key,\n );\n } else if (isRaw(it)) {\n result[key] = it.__column || new UnknownColumn();\n } else {\n const { returnType } = it.query;\n if (returnType === 'value' || returnType === 'valueOrThrow') {\n const type = (it.query as SelectQueryData)[getValueKey];\n if (type) result[key] = type;\n } else {\n result[key] = new JSONTextColumn();\n }\n }\n }\n }\n }\n }\n\n return result;\n};\n\n// converts selected items into a shape of columns\n// when `isSubQuery` is true, it un-names named columns\nconst addColumnToShapeFromSelect = (\n q: QueryBase,\n arg: string,\n shape: ColumnsShapeBase,\n query: SelectQueryData,\n result: ColumnsShapeBase,\n isSubQuery?: boolean,\n key?: string,\n) => {\n if ((q.relations as Record<string, Relation>)[arg]) {\n result[key || arg] = new JSONTextColumn();\n return;\n }\n\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n if (table === (q.query.as || q.table)) {\n result[key || column] = shape[column];\n } else {\n const it = query.joinedShapes?.[table]?.[column];\n if (it) result[key || column] = maybeUnNameColumn(it, isSubQuery);\n }\n } else if (arg === '*') {\n for (const key in shape) {\n result[key] = maybeUnNameColumn(shape[key], isSubQuery);\n }\n } else {\n result[key || arg] = maybeUnNameColumn(shape[arg], isSubQuery);\n }\n};\n\n// un-name a column if `isSubQuery` is true\nconst maybeUnNameColumn = (column: ColumnTypeBase, isSubQuery?: boolean) => {\n return isSubQuery && column.data.name\n ? setColumnData(column, 'name', undefined)\n : column;\n};\n\nexport class Select {\n select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n return this.clone()._select(...args) as unknown as SelectResult<T, K>;\n }\n\n _select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n if (!args.length) {\n return this as unknown as SelectResult<T, K>;\n }\n\n const as = this.query.as || this.table;\n const selectArgs = args.map((item) => processSelectArg(this, as, item));\n\n return pushQueryArray(\n this,\n 'select',\n selectArgs,\n ) as unknown as SelectResult<T, K>;\n }\n\n selectAll<T extends Query>(this: T): SelectResult<T, ['*']> {\n return this.clone()._selectAll();\n }\n\n _selectAll<T extends Query>(this: T): SelectResult<T, ['*']> {\n this.query.select = ['*'];\n return this as unknown as SelectResult<T, ['*']>;\n }\n}\n","import { AddQuerySelect, Query, SetQueryReturnsValue } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport {\n ArrayColumn,\n BooleanColumn,\n ColumnType,\n IntegerColumn,\n NumberColumn,\n StringColumn,\n} from '../columns';\nimport {\n BooleanExpression,\n Expression,\n ExpressionOutput,\n NumberExpression,\n StringExpression,\n} from '../utils';\nimport { OrderArg, WindowArgDeclaration } from './queryMethods';\nimport { WhereArg } from './where';\nimport { addParserToQuery } from './select';\nimport { SelectItem, SelectQueryData } from '../sql';\nimport { getValueKey } from './get';\nimport {\n raw,\n CoalesceString,\n ColumnTypeBase,\n NullableColumn,\n} from 'orchid-core';\n\nconst allColumns = raw('*');\n\nexport type AggregateArg<T extends Query> =\n | Expression<T>\n | Record<string, Expression<T>>\n | [Expression<T>, string];\n\nexport type AggregateOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = {\n as?: As;\n distinct?: boolean;\n order?: OrderArg<T> | OrderArg<T>[];\n filter?: WhereArg<T>;\n filterOr?: WhereArg<T>[];\n withinGroup?: boolean;\n over?: keyof T['windows'] | WindowArgDeclaration<T>;\n};\n\n// 1 in the name means only methods which takes 1 argument are listed here\n// only such one argument methods are available in .having method\nexport type Aggregate1ArgumentTypes<\n T extends Query = Query,\n C extends ColumnType = ColumnType,\n> = {\n count: Expression<T, C>;\n avg: NumberExpression<T, C>;\n min: Expression<T, C>;\n max: Expression<T, C>;\n sum: NumberExpression<T, C>;\n bitAnd: NumberExpression<T, C>;\n bitOr: NumberExpression<T, C>;\n boolAnd: BooleanExpression<T, C>;\n boolOr: BooleanExpression<T, C>;\n every: BooleanExpression<T, C>;\n jsonAgg: Expression<T, C>;\n jsonbAgg: Expression<T, C>;\n xmlAgg: Expression<T, C>;\n};\n\nexport const aggregate1FunctionNames = {\n count: 'count',\n avg: 'avg',\n min: 'min',\n max: 'max',\n sum: 'sum',\n bitAnd: 'bit_and',\n bitOr: 'bit_or',\n boolAnd: 'bool_and',\n boolOr: 'bool_or',\n every: 'every',\n jsonAgg: 'json_agg',\n jsonbAgg: 'jsonb_agg',\n xmlAgg: 'xmlagg',\n} as const;\n\nexport type SelectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnTypeBase,\n> = AddQuerySelect<T, Record<CoalesceString<As, Func>, Value>>;\n\ntype AT1<T extends Query> = Aggregate1ArgumentTypes<T>;\n\nexport type WindowFunctionOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = { as?: As } & WindowArgDeclaration<T>;\n\nconst buildAggregateSelectItem = <T extends Query>(\n functionName: string,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T>,\n) => {\n return {\n function: functionName,\n arg,\n options: {\n ...options,\n order: options?.order\n ? Array.isArray(options.order)\n ? options.order\n : [options.order]\n : undefined,\n filter: options?.filter,\n filterOr: options?.filterOr,\n },\n };\n};\n\nconst parseIntColumn = new IntegerColumn().parse((input) =>\n parseInt(input as unknown as string),\n);\n\nconst parseIntOrNullColumn = new IntegerColumn().parse((input) =>\n input === null ? null : parseInt(input as unknown as string),\n);\n\nconst get = <T extends Query, Column extends ColumnType>(\n q: Query,\n): SetQueryReturnsValue<T, Column> => {\n q.query.returnType = 'valueOrThrow';\n\n const select = q.query.select as SelectItem[];\n if (select.length > 1) {\n select[0] = select[select.length - 1];\n select.length = 1;\n }\n\n return q as unknown as SetQueryReturnsValue<T, Column>;\n};\n\nexport class Aggregate {\n selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, Func, As, Value> {\n return this.clone()._selectAgg(functionName, arg, options) as SelectAgg<\n T,\n Func,\n As,\n Value\n >;\n }\n\n _selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnTypeBase,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n columnType?: ColumnTypeBase,\n ): SelectAgg<T, Func, As, Value> {\n pushQueryValue(\n this,\n 'select',\n buildAggregateSelectItem<T>(functionName, arg, options),\n );\n\n if (columnType?.parseFn) {\n (this.query as SelectQueryData)[getValueKey] = columnType;\n\n addParserToQuery(this.query, getValueKey, columnType.parseFn);\n\n addParserToQuery(\n this.query,\n options?.as || functionName,\n columnType.parseFn,\n );\n }\n\n return this as unknown as SelectAgg<T, Func, As, Value>;\n }\n\n count<T extends Query>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> & { isCount: true } {\n return this.clone()._count(arg, options);\n }\n\n _count<T extends Query>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> & { isCount: true } {\n return get<T, NumberColumn>(\n this._selectCount(arg, options),\n ) as unknown as SetQueryReturnsValue<T, NumberColumn> & { isCount: true };\n }\n\n selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this.clone()._selectCount(arg, options);\n }\n\n _selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this._selectAgg(\n aggregate1FunctionNames.count,\n arg === '*' ? allColumns : arg,\n options,\n parseIntColumn,\n );\n }\n\n avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._avg(arg, options);\n }\n\n _avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectAvg(arg, options));\n }\n\n selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectAvg(arg, options);\n }\n\n _selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.avg,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._min(arg, options);\n }\n\n _min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMin(arg, options));\n }\n\n selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMin(arg, options);\n }\n\n _selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.min,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._max(arg, options);\n }\n\n _max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMax(arg, options));\n }\n\n selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMax(arg, options);\n }\n\n _selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.max,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._sum(arg, options);\n }\n\n _sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectSum(arg, options));\n }\n\n selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectSum(arg, options);\n }\n\n _selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.sum,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitAnd(arg, options);\n }\n\n _bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitAnd(arg, options),\n );\n }\n\n selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitAnd(arg, options);\n }\n\n _selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitAnd, arg, options);\n }\n\n bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitOr(arg, options);\n }\n\n _bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitOr(arg, options),\n );\n }\n\n selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitOr(arg, options);\n }\n\n _selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitOr, arg, options);\n }\n\n boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolAnd(arg, options);\n }\n\n _boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolAnd(arg, options),\n );\n }\n\n selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolAnd(arg, options);\n }\n\n _selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolAnd, arg, options);\n }\n\n boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolOr(arg, options);\n }\n\n _boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolOr(arg, options),\n );\n }\n\n selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolOr(arg, options);\n }\n\n _selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolOr, arg, options);\n }\n\n every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._every(arg, options);\n }\n\n _every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectEvery(arg, options),\n );\n }\n\n selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectEvery(arg, options);\n }\n\n _selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.every, arg, options);\n }\n\n jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonAgg(arg, options);\n }\n\n _jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonAgg(arg, options),\n );\n }\n\n selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonAgg(arg, options);\n }\n\n _selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonAgg, arg, options);\n }\n\n jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonbAgg(arg, options);\n }\n\n _jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonbAgg(arg, options),\n );\n }\n\n selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonbAgg(arg, options);\n }\n\n _selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonbAgg, arg, options);\n }\n\n xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._xmlAgg(arg, options);\n }\n\n _xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectXmlAgg(arg, options),\n );\n }\n\n selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectXmlAgg(arg, options);\n }\n\n _selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this._selectAgg(aggregate1FunctionNames.xmlAgg, arg, options);\n }\n\n jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonObjectAgg(obj, options);\n }\n\n _jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonObjectAgg(obj, options));\n }\n\n selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonObjectAgg(obj, options);\n }\n\n _selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('json_object_agg', obj, options);\n }\n\n jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonbObjectAgg(obj, options);\n }\n\n _jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonbObjectAgg(obj, options));\n }\n\n selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonbObjectAgg(obj, options);\n }\n\n _selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('jsonb_object_agg', obj, options);\n }\n\n stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._stringAgg(arg, delimiter, options);\n }\n\n _stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectStringAgg(arg, delimiter, options),\n );\n }\n\n selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectStringAgg(arg, delimiter, options);\n }\n\n _selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this._selectAgg('string_agg', [arg, delimiter], options);\n }\n}\n","import { Query } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\n\nexport type BeforeCallback<T extends Query = Query> = (\n query: T,\n) => void | Promise<void>;\n\nexport type AfterCallback<T extends Query = Query> = (\n query: T,\n data: unknown,\n) => void | Promise<void>;\n\nexport class QueryCallbacks {\n beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeQuery(cb);\n }\n _beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeQuery', cb);\n }\n\n afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterQuery(cb);\n }\n _afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterQuery', cb);\n }\n\n beforeCreate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeCreate(cb);\n }\n _beforeCreate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeCreate', cb);\n }\n\n afterCreate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterCreate(cb);\n }\n _afterCreate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterCreate', cb);\n }\n\n beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeUpdate(cb);\n }\n _beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeUpdate', cb);\n }\n\n afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterUpdate(cb);\n }\n _afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterUpdate', cb);\n }\n\n beforeDelete<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeDelete(cb);\n }\n _beforeDelete<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeDelete', cb);\n }\n\n afterDelete<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterDelete(cb);\n }\n _afterDelete<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterDelete', cb);\n }\n}\n","import { Query } from '../query';\nimport { isRaw } from 'orchid-core';\n\nexport type ClearStatement =\n | 'with'\n | 'select'\n | 'where'\n | 'union'\n | 'using'\n | 'join'\n | 'group'\n | 'order'\n | 'having'\n | 'limit'\n | 'offset'\n | 'counters';\n\nexport class Clear {\n clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n return this.clone()._clear(...clears);\n }\n\n _clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n clears.forEach((clear) => {\n if (clear === 'where') {\n delete this.query.and;\n delete this.query.or;\n } else if (clear === 'counters') {\n if ('type' in this.query && this.query.type === 'update') {\n this.query.updateData = this.query.updateData.filter((item) => {\n if (!isRaw(item) && typeof item !== 'function') {\n let removed = false;\n for (const key in item) {\n const value = item[key] as Record<string, unknown>;\n if (\n typeof value === 'object' &&\n (value.op === '+' || value.op === '-')\n ) {\n delete item[key];\n removed = true;\n }\n }\n if (removed && !Object.keys(item).length) {\n return false;\n }\n }\n\n return true;\n });\n }\n } else {\n delete (this.query as Record<string, unknown>)[clear];\n }\n });\n return this;\n }\n}\n","import { Query, SetQueryReturnsColumnInfo } from '../query';\nimport { ColumnInfoQueryData } from '../sql';\n\nexport type ColumnInfo = {\n defaultValue: unknown;\n type: string;\n maxLength: number | null;\n nullable: boolean;\n};\n\nconst rowToColumnInfo = (row: unknown): ColumnInfo => {\n const typed = row as {\n column_default: string | null;\n is_nullable: 'YES' | 'NO';\n data_type: string;\n character_maximum_length: number | null;\n };\n\n return {\n defaultValue: typed.column_default,\n type: typed.data_type,\n maxLength: typed.character_maximum_length,\n nullable: typed.is_nullable === 'YES',\n };\n};\n\nexport class ColumnInfoMethods {\n columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n return this.clone()._columnInfo(column);\n }\n\n _columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n this.query.type = 'columnInfo';\n this.query.returnType = 'all';\n\n if (column) {\n (this.query as ColumnInfoQueryData).column = column as string;\n }\n\n this.query.handleResult = (_, result) => {\n if (column) {\n return rowToColumnInfo(result.rows[0]);\n } else {\n const info: Record<string, ColumnInfo> = {};\n result.rows.forEach((row) => {\n info[(row as { column_name: string }).column_name] =\n rowToColumnInfo(row);\n });\n return info;\n }\n };\n\n return this as unknown as SetQueryReturnsColumnInfo<T, Column>;\n }\n}\n","import { Query, SetQueryReturnsRowCount } from '../query';\n\nexport type DeleteMethodsNames = 'del' | '_del' | 'delete' | '_delete';\n\ntype DeleteArgs<T extends Query> = T['meta']['hasWhere'] extends true\n ? []\n : [never];\n\ntype DeleteResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? T\n : SetQueryReturnsRowCount<T>;\n\nconst del = <T extends Query>(self: T): DeleteResult<T> => {\n return _del(self.clone()) as unknown as DeleteResult<T>;\n};\n\nconst _del = <T extends Query>(q: T): DeleteResult<T> => {\n if (!q.query.select) {\n q.query.returnType = 'rowCount';\n }\n\n q.query.type = 'delete';\n return q as unknown as DeleteResult<T>;\n};\n\nexport class Delete {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n del<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _del<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n delete<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _delete<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this);\n }\n}\n","import { Query } from '../query';\nimport { SelectQueryData } from '../sql';\nimport { RawExpression } from 'orchid-core';\n\ntype ForQueryBuilder<Q extends Query> = Q & {\n noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n _noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n _skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n};\n\nconst forQueryBuilder = <T extends Query>(\n q: T,\n type: Exclude<SelectQueryData['for'], undefined>['type'],\n tableNames?: string[] | RawExpression,\n) => {\n (q.query as SelectQueryData).for = { type, tableNames };\n q.baseQuery = Object.create(q.baseQuery);\n q.baseQuery.baseQuery = q.baseQuery;\n\n Object.assign(q.baseQuery, {\n noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._noWait();\n },\n _noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'NO WAIT';\n return this;\n },\n skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._skipLocked();\n },\n _skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'SKIP LOCKED';\n return this;\n },\n });\n\n return q.clone() as ForQueryBuilder<T>;\n};\n\nexport class For {\n forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forUpdate(tableNames);\n }\n\n _forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'UPDATE', tableNames);\n }\n\n forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forNoKeyUpdate(tableNames);\n }\n\n _forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'NO KEY UPDATE', tableNames);\n }\n\n forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forShare(tableNames);\n }\n\n _forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'SHARE', tableNames);\n }\n\n forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forKeyShare(tableNames);\n }\n\n _forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'KEY SHARE', tableNames);\n }\n}\n","import {\n Query,\n QueryThen,\n SelectableBase,\n SelectableFromShape,\n SetQueryTableAlias,\n WithDataItem,\n} from '../query';\nimport { SelectQueryData } from '../sql';\nimport { AliasOrTable } from '../utils';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { getShapeFromSelect } from './select';\n\nexport type FromArgs<T extends Query> = [\n first: Query | RawExpression | Exclude<keyof T['withData'], symbol | number>,\n second?: { only?: boolean },\n];\n\nexport type FromResult<\n T extends Query,\n Args extends FromArgs<T>,\n Arg = Args[0],\n> = Arg extends string\n ? T['withData'] extends Record<string, WithDataItem>\n ? Arg extends keyof T['withData']\n ? Omit<T, 'meta' | 'selectable'> & {\n meta: Omit<T['meta'], 'as'> & {\n as?: string;\n };\n selectable: SelectableFromShape<T['withData'][Arg]['shape'], Arg>;\n }\n : SetQueryTableAlias<T, Arg>\n : SetQueryTableAlias<T, Arg>\n : Arg extends Query\n ? FromQueryResult<T, Arg>\n : T;\n\ntype FromQueryResult<\n T extends Query,\n Q extends Query,\n Selectable extends SelectableBase = {\n [K in keyof Q['result']]: K extends string\n ? {\n as: K;\n column: Q['result'][K];\n }\n : never;\n },\n> = {\n [K in keyof T]: K extends 'meta'\n ? Omit<T['meta'], 'hasSelect' | 'as'> & { as: AliasOrTable<Q> }\n : K extends 'selectable'\n ? Selectable\n : K extends 'result' | 'shape'\n ? Q['result']\n : K extends 'then'\n ? QueryThen<T['returnType'], Q['result']>\n : T[K];\n};\n\nexport class From {\n from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n return this.clone()._from(...args) as FromResult<T, Args>;\n }\n\n _from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n if (typeof args[0] === 'string') {\n this.query.as ||= args[0];\n } else if (!isRaw(args[0] as RawExpression)) {\n const q = args[0] as Query;\n this.query.as ||= q.query.as || q.table || 't';\n this.query.shape = getShapeFromSelect(args[0] as Query, true);\n this.query.parsers = q.query.parsers;\n } else {\n this.query.as ||= 't';\n }\n\n if (args[1]?.only) {\n (this.query as SelectQueryData).fromOnly = args[1].only;\n }\n\n this.query.from = args[0];\n\n return this as unknown as FromResult<T, Args>;\n }\n}\n","import { Query } from '../query';\nimport {\n AggregateItemOptions,\n ColumnOperators,\n HavingItem,\n OrderItem,\n WhereItem,\n} from '../sql';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { Aggregate1ArgumentTypes, AggregateOptions } from './aggregate';\nimport { isRaw, RawExpression } from 'orchid-core';\n\ntype HavingArgObject<\n T extends Query,\n Agg extends keyof Aggregate1ArgumentTypes<T>,\n> = {\n [Column in Exclude<Aggregate1ArgumentTypes<T>[Agg], RawExpression>]?:\n | T['selectable'][Column]['column']['type']\n | (ColumnOperators<T['selectable'], Column> & AggregateOptions<T>);\n};\n\nexport type HavingArg<T extends Query = Query> =\n | ({\n [Agg in keyof Aggregate1ArgumentTypes<T>]?: HavingArgObject<T, Agg>;\n } & {\n count?: number | HavingArgObject<T, 'count'>;\n })\n | Query\n | RawExpression;\n\nconst processHavingArg = <T extends Query>(arg: HavingArg<T>): HavingItem => {\n if ('baseQuery' in arg || isRaw(arg)) {\n return arg;\n } else {\n const processed = { ...arg } as Record<\n string,\n Record<string, AggregateItemOptions>\n >;\n\n for (const fn in arg) {\n const data = arg[fn as keyof typeof arg];\n if (typeof data === 'object') {\n processed[fn] = { ...data } as typeof processed[string];\n for (const column in data) {\n const value = data[column as keyof typeof data];\n\n if (typeof value === 'object') {\n processed[fn][column] = { ...(value as object) };\n\n const options = value as AggregateOptions<T>;\n\n if (\n 'order' in options &&\n options.order &&\n !Array.isArray(options.order)\n ) {\n processed[fn][column].order = [options.order as OrderItem];\n }\n\n if ('filter' in options && options.filter) {\n processed[fn][column].filter = options.filter as WhereItem;\n }\n\n if ('filterOr' in options && options.filterOr) {\n processed[fn][column].filterOr = options.filterOr as WhereItem[];\n }\n }\n }\n }\n }\n return processed;\n }\n};\n\nexport class Having {\n having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._having(...args);\n }\n\n _having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'having',\n args.map((arg) => processHavingArg(arg)),\n );\n }\n\n havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._havingOr(...args);\n }\n\n _havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'havingOr',\n args.map((arg) => [processHavingArg(arg)]),\n );\n }\n}\n","import { ColumnsParsers, Query, QueryReturnType } from '../query';\nimport { NotFoundError, QueryError } from '../errors';\nimport { QueryArraysResult, QueryResult } from '../adapter';\nimport { CommonQueryData } from '../sql';\nimport { AfterCallback, BeforeCallback } from './callbacks';\nimport { getValueKey } from './get';\nimport pg from 'pg';\nimport { AdapterBase, Sql } from 'orchid-core';\n\nexport const queryMethodByReturnType: Record<\n QueryReturnType,\n 'query' | 'arrays'\n> = {\n all: 'query',\n rows: 'arrays',\n pluck: 'arrays',\n one: 'query',\n oneOrThrow: 'query',\n value: 'arrays',\n valueOrThrow: 'arrays',\n rowCount: 'arrays',\n void: 'arrays',\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Resolve = (result: any) => any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Reject = (error: any) => any;\n\nlet queryError: Error = undefined as unknown as Error;\n\nexport class Then {\n get then() {\n queryError = new Error();\n return maybeWrappedThen;\n }\n\n async catch<T extends Query, Result>(\n this: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fn: (reason: any) => Result | PromiseLike<Result>,\n ): Promise<ReturnType<T['then']> | Result> {\n return this.then(undefined, fn);\n }\n}\n\nexport const handleResult: CommonQueryData['handleResult'] = (\n q,\n result: QueryResult,\n isSubQuery?: true,\n) => {\n return parseResult(\n q,\n q.query.parsers,\n q.query.returnType || 'all',\n result,\n isSubQuery,\n );\n};\n\nfunction maybeWrappedThen(this: Query, resolve?: Resolve, reject?: Reject) {\n const adapter = this.internal.transactionStorage.getStore();\n if (this.query.wrapInTransaction && !adapter) {\n return this.transaction(\n () =>\n new Promise((resolve, reject) => {\n const adapter =\n this.internal.transactionStorage.getStore() as AdapterBase;\n return then(this, adapter, resolve, reject);\n }),\n ).then(resolve, reject);\n } else {\n return then(this, adapter || this.query.adapter, resolve, reject);\n }\n}\n\nconst queriesNames: Record<string, string> = {};\nlet nameI = 0;\n\nconst then = async (\n q: Query,\n adapter: AdapterBase,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve?: (result: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject?: (error: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> => {\n let sql: (Sql & { name?: string }) | undefined;\n let logData: unknown | undefined;\n\n // save error to a local variable before async operations\n const localError = queryError;\n\n try {\n let beforeCallbacks: BeforeCallback[] | undefined;\n let afterCallbacks: AfterCallback[] | undefined;\n if (q.query.type === 'insert') {\n beforeCallbacks = q.query.beforeCreate;\n afterCallbacks = q.query.afterCreate;\n } else if (q.query.type === 'update') {\n beforeCallbacks = q.query.beforeUpdate;\n afterCallbacks = q.query.afterUpdate;\n } else if (q.query.type === 'delete') {\n beforeCallbacks = q.query.beforeDelete;\n afterCallbacks = q.query.afterDelete;\n }\n\n if (beforeCallbacks || q.query.beforeQuery) {\n await Promise.all(\n getCallbacks(beforeCallbacks, q.query.beforeQuery).map((cb) => cb(q)),\n );\n }\n\n sql = q.toSql();\n\n if (q.query.autoPreparedStatements) {\n sql.name =\n queriesNames[sql.text] ||\n (queriesNames[sql.text] = (nameI++).toString(36));\n }\n\n if (q.query.log) {\n logData = q.query.log.beforeQuery(sql);\n }\n\n const queryResult = (await adapter[\n queryMethodByReturnType[q.query.returnType || 'all'] as 'query'\n ](sql)) as QueryResult;\n\n if (q.query.patchResult) {\n await q.query.patchResult(queryResult);\n }\n\n if (q.query.log) {\n q.query.log.afterQuery(sql, logData);\n // set sql to be undefined to prevent logging on error in case if afterCallbacks throws\n sql = undefined;\n }\n\n const result = q.query.handleResult(q, queryResult);\n\n if (afterCallbacks || q.query.afterQuery) {\n await Promise.all(\n getCallbacks(q.query.afterQuery, afterCallbacks).map((query) =>\n query(q, result),\n ),\n );\n }\n\n resolve?.(result);\n } catch (err) {\n let error;\n if (err instanceof pg.DatabaseError) {\n error = new (q.error as unknown as new () => QueryError)();\n assignError(error, err);\n error.cause = localError;\n } else {\n error = err;\n if (error instanceof Error) {\n error.cause = localError;\n }\n }\n\n if (q.query.log && sql && logData) {\n q.query.log.onError(error as Error, sql, logData);\n }\n reject?.(error);\n }\n};\n\nconst assignError = (to: QueryError, from: pg.DatabaseError) => {\n to.message = from.message;\n (to as { length?: number }).length = from.length;\n (to as { name?: string }).name = from.name;\n to.severity = from.severity;\n to.code = from.code;\n to.detail = from.detail;\n to.hint = from.hint;\n to.position = from.position;\n to.internalPosition = from.internalPosition;\n to.internalQuery = from.internalQuery;\n to.where = from.where;\n to.schema = from.schema;\n to.table = from.table;\n to.column = from.column;\n to.dataType = from.dataType;\n to.constraint = from.constraint;\n to.file = from.file;\n to.line = from.line;\n to.routine = from.routine;\n\n return to;\n};\n\nexport const parseResult = (\n q: Query,\n parsers: ColumnsParsers | undefined,\n returnType: QueryReturnType | undefined = 'all',\n result: QueryResult,\n isSubQuery?: boolean,\n): unknown => {\n switch (returnType) {\n case 'all': {\n if (q.query.throwOnNotFound && result.rows.length === 0)\n throw new NotFoundError(q);\n\n return parsers\n ? result.rows.map((row) => parseRecord(parsers, row))\n : result.rows;\n }\n case 'one': {\n const row = result.rows[0];\n if (!row) return;\n\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'oneOrThrow': {\n const row = result.rows[0];\n if (!row) throw new NotFoundError(q);\n\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'rows': {\n return parsers\n ? parseRows(\n parsers,\n (result as unknown as QueryArraysResult).fields,\n result.rows,\n )\n : result.rows;\n }\n case 'pluck': {\n if (parsers?.pluck) {\n if (isSubQuery) {\n return result.rows.map((row) => parsers.pluck(row));\n }\n return result.rows.map((row) => parsers.pluck(row[0]));\n } else if (isSubQuery) {\n return result.rows;\n }\n return result.rows.map((row) => row[0]);\n }\n case 'value': {\n const value = result.rows[0]?.[0];\n return value !== undefined\n ? parseValue(value, parsers)\n : q.query.notFoundDefault;\n }\n case 'valueOrThrow': {\n const value = result.rows[0]?.[0];\n if (value === undefined) throw new NotFoundError(q);\n return parseValue(value, parsers);\n }\n case 'rowCount': {\n if (q.query.throwOnNotFound && result.rowCount === 0) {\n throw new NotFoundError(q);\n }\n return result.rowCount;\n }\n case 'void': {\n return;\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const parseRecord = (parsers: ColumnsParsers, row: any) => {\n for (const key in parsers) {\n if (row[key] !== null && row[key] !== undefined) {\n row[key] = parsers[key](row[key]);\n }\n }\n return row;\n};\n\nconst parseRows = (\n parsers: ColumnsParsers,\n fields: { name: string }[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: any[],\n) => {\n fields.forEach((field, i) => {\n const parser = parsers[field.name];\n if (parser) {\n rows.forEach((row) => {\n row[i] = parser(row[i]);\n });\n }\n });\n return rows;\n};\n\nconst parseValue = (value: unknown, parsers?: ColumnsParsers) => {\n if (value !== null) {\n const parser = parsers?.[getValueKey];\n if (parser) {\n return parser(value);\n }\n }\n return value;\n};\n\nconst getCallbacks = <T extends BeforeCallback[] | AfterCallback[]>(\n first?: T,\n second?: T,\n): T => {\n return (\n first && second ? [...first, ...second] : first ? first : second\n ) as T;\n};\n","import {\n Query,\n QueryReturnsAll,\n QueryReturnType,\n queryTypeWithLimitOne,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n} from '../query';\nimport {\n BelongsToRelation,\n HasAndBelongsToManyRelation,\n HasManyRelation,\n HasOneRelation,\n RelationsBase,\n} from '../relations';\nimport { InsertQueryData, OnConflictItem, OnConflictMergeUpdate } from '../sql';\nimport { WhereArg } from './where';\nimport { queryMethodByReturnType } from './then';\nimport { NotFoundError } from '../errors';\nimport { VirtualColumn } from '../columns';\nimport { anyShape } from '../db';\nimport {\n RawExpression,\n EmptyObject,\n SetOptional,\n StringKey,\n} from 'orchid-core';\n\nexport type CreateData<\n T extends Query,\n Data = SetOptional<T['inputType'], keyof T['meta']['defaults']>,\n> = [keyof T['relations']] extends [never]\n ? Data\n : OmitBelongsToForeignKeys<T['relations'], Data> & CreateRelationData<T>;\n\ntype OmitBelongsToForeignKeys<R extends RelationsBase, Data> = Omit<\n Data,\n {\n [K in keyof R]: R[K] extends BelongsToRelation\n ? R[K]['options']['foreignKey']\n : never;\n }[keyof R]\n>;\n\ntype CreateRelationData<T extends Query> = {\n [K in keyof T['relations']]: T['relations'][K] extends BelongsToRelation\n ? CreateBelongsToData<T, K, T['relations'][K]>\n : T['relations'][K] extends HasOneRelation\n ? CreateHasOneData<T, K, T['relations'][K]>\n : T['relations'][K] extends HasManyRelation | HasAndBelongsToManyRelation\n ? CreateHasManyData<T, K, T['relations'][K]>\n : EmptyObject;\n}[keyof T['relations']];\n\ntype CreateBelongsToData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends BelongsToRelation,\n FKeys = {\n [K in Rel['options']['foreignKey']]: Rel['options']['foreignKey'] extends keyof T['inputType']\n ? T['inputType'][Rel['options']['foreignKey']]\n : never;\n },\n> =\n | {\n [K in keyof FKeys]: K extends keyof T['meta']['defaults']\n ? { [L in K]?: FKeys[L] }\n : { [L in K]: FKeys[L] };\n }[keyof FKeys]\n | {\n [K in Key]:\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n connect?: never;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect: WhereArg<Rel['table']>;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect?: never;\n connectOrCreate: {\n where: WhereArg<Rel['table']>;\n create: CreateData<Rel['nestedCreateQuery']>;\n };\n };\n };\n\ntype CreateHasOneData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends HasOneRelation,\n> = 'through' extends Rel['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?:\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n connect?: never;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect: WhereArg<Rel['table']>;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect?: never;\n connectOrCreate: {\n where?: WhereArg<Rel['table']>;\n create?: CreateData<Rel['nestedCreateQuery']>;\n };\n };\n };\n\ntype CreateHasManyData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends HasManyRelation | HasAndBelongsToManyRelation,\n> = 'through' extends Rel['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?: {\n create?: CreateData<Rel['nestedCreateQuery']>[];\n connect?: WhereArg<Rel['table']>[];\n connectOrCreate?: {\n where: WhereArg<Rel['table']>;\n create: CreateData<Rel['nestedCreateQuery']>;\n }[];\n };\n };\n\ntype CreateResult<T extends Query> = T extends { isCount: true }\n ? T\n : QueryReturnsAll<T['returnType']> extends true\n ? SetQueryReturnsOne<T>\n : T;\n\ntype CreateManyResult<T extends Query> = T extends { isCount: true }\n ? T\n : T['returnType'] extends 'one' | 'oneOrThrow'\n ? SetQueryReturnsAll<T>\n : T;\n\ntype CreateRawData<T extends Query> = {\n columns: (keyof T['shape'])[];\n values: RawExpression;\n};\n\ntype CreateManyRawData<T extends Query> = {\n columns: (keyof T['shape'])[];\n values: RawExpression[];\n};\n\ntype RawRequiredColumns<T extends Query> = {\n [K in keyof T['inputType'] as K extends keyof T['meta']['defaults']\n ? never\n : null extends T['inputType'][K]\n ? never\n : undefined extends T['inputType'][K]\n ? never\n : K]: true;\n};\n\ntype CreateRawArgs<\n T extends Query,\n Arg extends { columns: (keyof T['shape'])[] },\n> = keyof RawRequiredColumns<T> extends Arg['columns'][number]\n ? [data: Arg]\n : [\n `Missing required columns: ${Exclude<\n StringKey<keyof RawRequiredColumns<T>>,\n Arg['columns'][number]\n >}`,\n ];\n\ntype OnConflictArg<T extends Query> =\n | keyof T['shape']\n | (keyof T['shape'])[]\n | RawExpression;\n\nexport type CreateCtx = {\n requiredReturning: Record<string, boolean>;\n columns: Map<string, number>;\n returnTypeAll?: true;\n resultAll: Record<string, unknown>[];\n};\n\ntype Encoder = (input: unknown) => unknown;\n\nconst handleSelect = (q: Query) => {\n const select = q.query.select?.[0];\n const isCount =\n typeof select === 'object' &&\n 'function' in select &&\n select.function === 'count';\n\n if (isCount) {\n q.query.select = undefined;\n } else if (!q.query.select) {\n q.query.select = ['*'];\n }\n};\n\nconst processCreateItem = (\n q: Query,\n item: Record<string, unknown>,\n rowIndex: number,\n ctx: CreateCtx,\n encoders: Record<string, Encoder>,\n) => {\n const { shape } = q.query;\n Object.keys(item).forEach((key) => {\n if (shape[key] instanceof VirtualColumn) {\n (shape[key] as VirtualColumn).create?.(q, ctx, item, rowIndex);\n } else if (!ctx.columns.has(key) && (shape[key] || shape === anyShape)) {\n ctx.columns.set(key, ctx.columns.size);\n encoders[key] = shape[key]?.encodeFn as Encoder;\n }\n });\n};\n\nconst createCtx = (): CreateCtx => ({\n requiredReturning: {},\n columns: new Map(),\n resultAll: undefined as unknown as Record<string, unknown>[],\n});\n\nconst getSingleReturnType = (q: Query) => {\n const { select, returnType = 'all' } = q.query;\n if (select) {\n return returnType === 'all' ? 'one' : returnType;\n } else {\n return 'rowCount';\n }\n};\n\nconst getManyReturnType = (q: Query) => {\n const { select, returnType } = q.query;\n if (select) {\n return returnType === 'one' || returnType === 'oneOrThrow'\n ? 'all'\n : returnType;\n } else {\n return 'rowCount';\n }\n};\n\nconst mapColumnValues = (\n columns: string[],\n encoders: Record<string, Encoder>,\n data: Record<string, unknown>,\n) => {\n return columns.map((key) =>\n encoders[key] ? encoders[key](data[key]) : data[key],\n );\n};\n\nconst handleOneData = (q: Query, data: CreateData<Query>, ctx: CreateCtx) => {\n const encoders: Record<string, Encoder> = {};\n const defaults = q.query.defaults;\n\n if (defaults) {\n data = { ...defaults, ...data };\n }\n\n processCreateItem(q, data, 0, ctx, encoders);\n\n const columns = Array.from(ctx.columns.keys());\n const values = [mapColumnValues(columns, encoders, data)];\n\n return { columns, values };\n};\n\nconst handleManyData = (\n q: Query,\n data: CreateData<Query>[],\n ctx: CreateCtx,\n) => {\n const encoders: Record<string, Encoder> = {};\n const defaults = q.query.defaults;\n\n if (defaults) {\n data = data.map((item) => ({ ...defaults, ...item }));\n }\n\n data.forEach((item, i) => {\n processCreateItem(q, item, i, ctx, encoders);\n });\n\n const values = Array(data.length);\n const columns = Array.from(ctx.columns.keys());\n\n data.forEach((item, i) => {\n (values as unknown[][])[i] = mapColumnValues(columns, encoders, item);\n });\n\n return { columns, values };\n};\n\nconst insert = (\n self: Query,\n {\n columns,\n values,\n }: {\n columns: string[];\n values: InsertQueryData['values'];\n },\n returnType: QueryReturnType,\n ctx?: CreateCtx,\n) => {\n const q = self as Query & { query: InsertQueryData };\n const returning = q.query.select;\n\n delete q.query.and;\n delete q.query.or;\n\n q.query.type = 'insert';\n q.query.columns = columns;\n q.query.values = values;\n\n if (!ctx) {\n q.query.returnType = returnType;\n return q;\n }\n\n if (\n returnType === 'oneOrThrow' ||\n (values as { from?: Query }).from?.query.returnType === 'oneOrThrow'\n ) {\n const { handleResult } = q.query;\n q.query.handleResult = (q, r, s) => {\n if (r.rowCount === 0) {\n throw new NotFoundError(q);\n }\n return handleResult(q, r, s);\n };\n }\n\n const requiredColumns = Object.keys(ctx.requiredReturning);\n if (requiredColumns.length && !returning?.includes('*')) {\n if (!returning) {\n q.query.select = requiredColumns;\n } else {\n q.query.select = [\n ...new Set([...(returning as string[]), ...requiredColumns]),\n ];\n }\n }\n\n if (ctx.returnTypeAll) {\n q.query.returnType = 'all';\n const { handleResult } = q.query;\n q.query.handleResult = (q, queryResult, s) => {\n ctx.resultAll = handleResult(q, queryResult, s) as Record<\n string,\n unknown\n >[];\n\n if (queryMethodByReturnType[returnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n q.query.returnType = returnType;\n return handleResult(q, queryResult, s);\n };\n } else {\n q.query.returnType = returnType;\n }\n\n return q;\n};\n\nconst getFromSelectColumns = (\n from: Query,\n obj?: { columns: string[] },\n many?: boolean,\n) => {\n if (!many && !queryTypeWithLimitOne[from.query.returnType]) {\n throw new Error(\n 'Cannot create based on a query which returns multiple records',\n );\n }\n\n const queryColumns: string[] = [];\n from.query.select?.forEach((item) => {\n if (typeof item === 'string') {\n const index = item.indexOf('.');\n queryColumns.push(index === -1 ? item : item.slice(index + 1));\n } else if ('selectAs' in item) {\n queryColumns.push(...Object.keys(item.selectAs));\n }\n });\n\n if (obj?.columns) {\n queryColumns.push(...obj.columns);\n }\n\n return queryColumns;\n};\n\nconst createFromQuery = <\n T extends Query,\n Q extends Query,\n Many extends boolean,\n>(\n q: T,\n from: Q,\n many: Many,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n): Many extends true ? CreateManyResult<T> : CreateResult<T> => {\n handleSelect(q);\n\n const ctx = createCtx();\n\n const obj = data && handleOneData(q, data, ctx);\n\n const columns = getFromSelectColumns(from, obj, many);\n\n return insert(\n q,\n { columns, values: { from, values: obj?.values } },\n getSingleReturnType(q),\n ctx,\n ) as Many extends true ? CreateManyResult<T> : CreateResult<T>;\n};\n\nexport type CreateMethodsNames =\n | 'create'\n | '_create'\n | 'createMany'\n | '_createMany'\n | 'createRaw'\n | '_createRaw'\n | 'createFrom'\n | '_createFrom';\n\nexport class Create {\n create<T extends Query>(this: T, data: CreateData<T>): CreateResult<T> {\n return this.clone()._create(data);\n }\n _create<T extends Query>(this: T, data: CreateData<T>): CreateResult<T> {\n handleSelect(this);\n const ctx = createCtx();\n const obj = handleOneData(this, data, ctx) as {\n columns: string[];\n values: InsertQueryData['values'];\n };\n\n const values = (this.query as InsertQueryData).values;\n if (values && 'from' in values) {\n obj.columns = getFromSelectColumns(values.from, obj);\n values.values = obj.values as unknown[][];\n obj.values = values;\n }\n\n return insert(this, obj, getSingleReturnType(this), ctx) as CreateResult<T>;\n }\n\n createMany<T extends Query>(\n this: T,\n data: CreateData<T>[],\n ): CreateManyResult<T> {\n return this.clone()._createMany(data);\n }\n _createMany<T extends Query>(\n this: T,\n data: CreateData<T>[],\n ): CreateManyResult<T> {\n handleSelect(this);\n const ctx = createCtx();\n return insert(\n this,\n handleManyData(this, data, ctx),\n getManyReturnType(this),\n ctx,\n ) as CreateManyResult<T>;\n }\n\n createRaw<T extends Query, Arg extends CreateRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._createRaw(args[0] as any);\n }\n _createRaw<T extends Query, Arg extends CreateRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateResult<T> {\n handleSelect(this);\n return insert(\n this,\n args[0] as { columns: string[]; values: RawExpression },\n getSingleReturnType(this),\n ) as CreateResult<T>;\n }\n\n createManyRaw<T extends Query, Arg extends CreateManyRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateManyResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._createManyRaw(args[0] as any);\n }\n _createManyRaw<T extends Query, Arg extends CreateManyRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateManyResult<T> {\n handleSelect(this);\n return insert(\n this,\n args[0] as { columns: string[]; values: RawExpression[] },\n getSingleReturnType(this),\n ) as CreateManyResult<T>;\n }\n\n createFrom<\n T extends Query,\n Q extends Query & { returnType: 'one' | 'oneOrThrow' },\n >(\n this: T,\n query: Q,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n ): CreateResult<T> {\n return this.clone()._createFrom(query, data);\n }\n _createFrom<\n T extends Query,\n Q extends Query & { returnType: 'one' | 'oneOrThrow' },\n >(\n this: T,\n query: Q,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n ): CreateResult<T> {\n return createFromQuery(this, query, false, data);\n }\n\n createManyFrom<T extends Query, Q extends Query>(\n this: T,\n query: Q,\n ): CreateManyResult<T> {\n return this.clone()._createManyFrom(query);\n }\n _createManyFrom<T extends Query, Q extends Query>(\n this: T,\n query: Q,\n ): CreateManyResult<T> {\n return createFromQuery(this, query, true);\n }\n\n defaults<T extends Query, Data extends Partial<CreateData<T>>>(\n this: T,\n data: Data,\n ): T & {\n meta: {\n defaults: Record<keyof Data, true>;\n };\n } {\n return (this.clone() as T)._defaults(data);\n }\n _defaults<T extends Query, Data extends Partial<CreateData<T>>>(\n this: T,\n data: Data,\n ): T & { meta: { defaults: Record<keyof Data, true> } } {\n this.query.defaults = data;\n return this as T & { meta: { defaults: Record<keyof Data, true> } };\n }\n\n onConflict<T extends Query, Arg extends OnConflictArg<T>>(\n this: T,\n arg?: Arg,\n ): OnConflictQueryBuilder<T, Arg> {\n return this.clone()._onConflict(arg);\n }\n _onConflict<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined = undefined,\n >(this: T, arg?: Arg): OnConflictQueryBuilder<T, Arg> {\n return new OnConflictQueryBuilder(this, arg as Arg);\n }\n}\n\nexport class OnConflictQueryBuilder<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined,\n> {\n constructor(private query: T, private onConflict: Arg) {}\n\n ignore(): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'ignore',\n expr: this.onConflict as OnConflictItem,\n };\n return this.query;\n }\n\n merge(\n update?:\n | keyof T['shape']\n | (keyof T['shape'])[]\n | Partial<T['inputType']>\n | RawExpression,\n ): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'merge',\n expr: this.onConflict as OnConflictItem,\n update: update as OnConflictMergeUpdate,\n };\n return this.query;\n }\n}\n","import { Query, SelectableBase, WithDataBase } from './query';\nimport { QueryData } from './sql';\nimport {\n ColumnsShapeBase,\n QueryBaseCommon,\n QueryInternal,\n QueryMetaBase,\n} from 'orchid-core';\nimport { RelationsBase } from './relations';\nimport { getClonedQueryData } from './utils';\nimport { ColumnsShape } from './columns';\n\nexport abstract class QueryBase implements QueryBaseCommon {\n clone<T extends QueryBase>(this: T): T {\n const cloned = Object.create(this.baseQuery);\n cloned.query = getClonedQueryData(this.query);\n return cloned;\n }\n abstract result: ColumnsShape;\n query = {} as QueryData;\n table?: string;\n selectable!: SelectableBase;\n shape!: ColumnsShapeBase;\n relations!: RelationsBase;\n withData!: WithDataBase;\n baseQuery!: Query;\n internal!: QueryInternal;\n meta!: QueryMetaBase;\n}\n","import { Query } from '../query';\nimport { ColumnOperators, QueryData } from '../sql';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { JoinArgs, JoinCallback, JoinFirstArg } from './join';\nimport {\n RawExpression,\n ColumnsShapeBase,\n MaybeArray,\n emptyObject,\n} from 'orchid-core';\nimport { getIsJoinSubQuery } from '../sql/join';\nimport { getShapeFromSelect } from './select';\nimport { ColumnsShape } from '../columns';\nimport { QueryBase } from '../queryBase';\n\nexport type WhereArg<T extends QueryBase> =\n | (Omit<\n {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type']\n | null\n | ColumnOperators<T['selectable'], K>\n | RawExpression;\n },\n 'NOT' | 'OR' | 'IN' | 'EXISTS'\n > & {\n NOT?: MaybeArray<WhereArg<T>>;\n OR?: MaybeArray<WhereArg<T>>[];\n IN?: MaybeArray<{\n columns: (keyof T['selectable'])[];\n values: unknown[][] | Query | RawExpression;\n }>;\n })\n | QueryBase\n | RawExpression\n | ((q: WhereQueryBuilder<T>) => WhereQueryBuilder);\n\nexport type WhereInColumn<T extends QueryBase> =\n | keyof T['selectable']\n | [keyof T['selectable'], ...(keyof T['selectable'])[]];\n\nexport type WhereInValues<\n T extends QueryBase,\n Column extends WhereInColumn<T>,\n> = Column extends keyof T['selectable']\n ? T['selectable'][Column]['column']['type'][] | Query | RawExpression\n :\n | ({\n [I in keyof Column]: Column[I] extends keyof T['selectable']\n ? T['selectable'][Column[I]]['column']['type']\n : never;\n } & {\n length: Column extends { length: number } ? Column['length'] : never;\n })[]\n | Query\n | RawExpression;\n\nexport type WhereResult<T extends QueryBase> = T & {\n meta: {\n hasWhere: true;\n };\n};\n\nexport type WhereInArg<T extends Pick<Query, 'selectable'>> = {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type'][]\n | Query\n | RawExpression;\n};\n\nexport const addWhere = <T extends Where>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(q, 'and', args) as unknown as WhereResult<T>;\n};\n\nexport const addWhereNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryValue(q, 'and', {\n NOT: args,\n }) as unknown as WhereResult<T>;\n};\n\nexport const addOr = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [item]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addOrNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [{ NOT: item }]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addWhereIn = <T extends QueryBase>(\n q: T,\n and: boolean,\n arg: unknown,\n values: unknown[] | unknown[][] | Query | RawExpression | undefined,\n not?: boolean,\n): WhereResult<T> => {\n const op = not ? 'notIn' : 'in';\n\n let item;\n if (values) {\n if (Array.isArray(arg)) {\n item = {\n IN: {\n columns: arg,\n values,\n },\n };\n if (not) item = { NOT: item };\n } else {\n item = { [arg as string]: { [op]: values } };\n }\n } else {\n item = {} as Record<string, { in: unknown[] }>;\n for (const key in arg as Record<string, unknown[]>) {\n item[key] = { [op as 'in']: (arg as Record<string, unknown[]>)[key] };\n }\n }\n\n if (and) {\n pushQueryValue(q, 'and', item);\n } else {\n pushQueryValue(q, 'or', [item]);\n }\n\n return q as unknown as WhereResult<T>;\n};\n\nconst existsArgs = (args: [JoinFirstArg<Query>, ...JoinArgs<Query, Query>]) => {\n const q = args[0];\n\n let isSubQuery;\n if (typeof q === 'object') {\n isSubQuery = getIsJoinSubQuery(q.query, q.baseQuery.query);\n if (isSubQuery) {\n args[0] = q.clone();\n args[0].shape = getShapeFromSelect(q, true) as ColumnsShape;\n }\n } else {\n isSubQuery = false;\n }\n\n return {\n EXISTS: {\n args,\n isSubQuery,\n },\n } as never;\n};\n\nexport abstract class Where extends QueryBase {\n where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._where(...args);\n }\n\n _where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhere(this, args);\n }\n\n whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._whereNot(...args);\n }\n\n _whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhereNot(this, args);\n }\n\n and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.where(...args);\n }\n\n _and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._where(...args);\n }\n\n andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.whereNot(...args);\n }\n\n _andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._whereNot(...args);\n }\n\n or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._or(...args);\n }\n\n _or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOr(this, args);\n }\n\n orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._orNot(...args);\n }\n\n _orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOrNot(this, args);\n }\n\n whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): T;\n whereIn<T extends Where>(this: T, arg: WhereInArg<T>): T;\n whereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereIn(\n arg as any,\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values);\n }\n\n orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return this.clone()._orWhereIn(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arg as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values);\n }\n\n whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n whereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereNotIn(arg as any, values as any);\n }\n\n _whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values, true);\n }\n\n orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._orWhereNotIn(arg as any, values as any);\n }\n\n _orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values, true);\n }\n\n whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n ...args: JoinArgs<T, Arg>\n ): WhereResult<T>;\n whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereExists(arg: any, ...args: any) {\n return this.clone()._whereExists(arg, ...args);\n }\n _whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n ...args: JoinArgs<T, Arg>\n ): WhereResult<T>;\n _whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereExists(this: Where, ...args: any) {\n return this._where(existsArgs(args));\n }\n\n orWhereExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n orWhereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereExists(arg: any, ...args: any) {\n return this.clone()._orWhereExists(arg, ...args);\n }\n _orWhereExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _orWhereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereExists(this: Where, ...args: any) {\n return this._or(existsArgs(args));\n }\n\n whereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n whereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereNotExists(arg: any, ...args: any) {\n return this.clone()._whereNotExists(arg, ...args);\n }\n _whereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _whereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereNotExists(this: Where, ...args: any) {\n return this._whereNot(existsArgs(args));\n }\n\n orWhereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n orWhereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereNotExists(arg: any, ...args: any) {\n return this.clone()._orWhereNotExists(arg, ...args);\n }\n _orWhereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _orWhereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereNotExists(this: Where, ...args: any) {\n return this._orNot(existsArgs(args));\n }\n}\n\nexport class WhereQueryBuilder<Q extends QueryBase = QueryBase>\n extends Where\n implements QueryBase\n{\n declare selectable: Q['selectable'];\n declare relations: Q['relations'];\n declare result: Q['result'];\n shape: Q['shape'];\n baseQuery: Query;\n withData = emptyObject;\n internal: Q['internal'];\n\n constructor(\n q: QueryBase,\n { shape, joinedShapes }: Pick<QueryData, 'shape' | 'joinedShapes'>,\n ) {\n super();\n this.internal = q.internal;\n this.table = typeof q === 'object' ? q.table : q;\n this.shape = shape;\n this.query = {\n shape: shape as ColumnsShapeBase,\n joinedShapes,\n } as QueryData;\n this.baseQuery = this as unknown as Query;\n if (typeof q === 'object' && q.query.as) {\n this.query.as = q.query.as;\n }\n }\n}\n","import {\n Query,\n QueryThen,\n Selectable,\n SelectableBase,\n WithDataBase,\n WithDataItem,\n} from '../query';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport { WhereQueryBuilder } from './where';\nimport { Relation, RelationsBase } from '../relations';\nimport { QueryData } from '../sql';\nimport {\n RawExpression,\n StringKey,\n QueryInternal,\n EmptyTuple,\n NullableColumn,\n QueryMetaBase,\n} from 'orchid-core';\nimport { _join, _joinLateral } from './_join';\nimport { AliasOrTable } from '../utils';\nimport { ColumnsObject, ColumnsShape } from '../columns';\nimport { QueryBase } from '../queryBase';\n\ntype WithSelectable<\n T extends QueryBase,\n W extends keyof T['withData'],\n> = T['withData'][W] extends WithDataItem\n ?\n | StringKey<keyof T['withData'][W]['shape']>\n | `${T['withData'][W]['table']}.${StringKey<\n keyof T['withData'][W]['shape']\n >}`\n : never;\n\nexport type JoinFirstArg<T extends QueryBase> =\n | Query\n | keyof T['relations']\n | keyof T['withData']\n | ((q: Pick<T, keyof T['relations']>) => Query);\n\nexport type JoinArgs<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n> = Arg extends Query\n ? JoinQueryArgs<T, Arg>\n : Arg extends keyof T['relations']\n ? EmptyTuple\n : Arg extends keyof T['withData']\n ? JoinWithArgs<T, Arg>\n : never;\n\ntype JoinSelectable<Q extends Query> =\n | keyof Q['result']\n | `${AliasOrTable<Q>}.${StringKey<keyof Q['result']>}`;\n\ntype JoinQueryArgs<T extends QueryBase, Q extends Query> =\n | [\n conditions:\n | Record<JoinSelectable<Q>, Selectable<T> | RawExpression>\n | RawExpression\n | true,\n ]\n | [\n leftColumn: JoinSelectable<Q> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n leftColumn: JoinSelectable<Q> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ];\n\ntype JoinWithArgs<T extends QueryBase, W extends keyof T['withData']> =\n | [\n conditions:\n | Record<WithSelectable<T, W>, Selectable<T> | RawExpression>\n | RawExpression,\n ]\n | [\n leftColumn: WithSelectable<T, W> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n leftColumn: WithSelectable<T, W> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ];\n\nexport type JoinResult<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Cb extends (q: never) => { meta: QueryMetaBase } = () => {\n meta: QueryMetaBase;\n },\n J extends Pick<Query, 'result' | 'table' | 'meta'> = Arg extends Query\n ? Arg\n : T['relations'] extends Record<string, Relation>\n ? Arg extends keyof T['relations']\n ? T['relations'][Arg]['table']\n : Arg extends (q: never) => Query\n ? ReturnType<Arg>\n : Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? {\n table: T['withData'][Arg]['table'];\n result: T['withData'][Arg]['shape'];\n meta: QueryMetaBase;\n }\n : never\n : never\n : never,\n Selectable extends SelectableBase = JoinResultSelectable<\n J,\n RequireJoined,\n ReturnType<Cb>\n >,\n> = RequireMain extends true\n ? JoinAddSelectable<T, Selectable>\n : JoinOptionalMain<T, Selectable>;\n\nexport type JoinLateralResult<\n T extends Query,\n R extends QueryBase,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Selectable extends SelectableBase = JoinResultSelectable<\n R,\n RequireJoined,\n { meta: QueryMetaBase }\n >,\n> = RequireMain extends true\n ? JoinAddSelectable<T, Selectable>\n : JoinOptionalMain<T, Selectable>;\n\ntype JoinResultSelectable<\n J extends Pick<Query, 'result' | 'table' | 'meta'>,\n RequireJoined extends boolean,\n CbResult extends { meta: QueryMetaBase },\n Result extends ColumnsShape = RequireJoined extends true\n ? J['result']\n : { [K in keyof J['result']]: NullableColumn<J['result'][K]> },\n As extends string = CbResult extends { meta: QueryMetaBase & { as: string } }\n ? CbResult['meta']['as']\n : AliasOrTable<J>,\n> = {\n [K in keyof Result as `${As}.${StringKey<K>}`]: {\n as: K;\n column: Result[K];\n };\n} & {\n [K in As]: {\n as: K;\n column: RequireJoined extends true\n ? ColumnsObject<J['result']>\n : NullableColumn<ColumnsObject<J['result']>>;\n };\n};\n\ntype JoinAddSelectable<T extends Query, Selectable extends SelectableBase> = {\n [K in keyof T]: K extends 'selectable' ? T['selectable'] & Selectable : T[K];\n};\n\ntype JoinOptionalMain<\n T extends Query,\n Selectable extends SelectableBase,\n Result extends ColumnsShape = {\n [K in keyof T['result']]: NullableColumn<T['result'][K]>;\n },\n> = {\n [K in keyof T]: K extends 'selectable'\n ? {\n [K in keyof T['selectable']]: {\n as: T['selectable'][K]['as'];\n column: NullableColumn<T['selectable'][K]['column']>;\n };\n } & Selectable\n : K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : T[K];\n};\n\ntype JoinWithArgToQuery<\n With extends WithDataItem,\n Selectable extends SelectableBase = {\n [K in keyof With['shape']]: {\n as: StringKey<K>;\n column: With['shape'][K];\n };\n },\n> = {\n query: QueryData;\n table: With['table'];\n clone<T extends QueryBase>(this: T): T;\n selectable: Selectable & {\n [K in keyof Selectable as `${With['table']}.${StringKey<K>}`]: Selectable[K];\n };\n shape: With['shape'];\n result: With['shape'];\n baseQuery: Query;\n relations: RelationsBase;\n withData: WithDataBase;\n meta: QueryMetaBase;\n internal: QueryInternal;\n};\n\ntype JoinArgToQuery<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n> = Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? JoinWithArgToQuery<T['withData'][Arg]>\n : never\n : Arg extends Query\n ? Arg\n : Arg extends keyof T['relations']\n ? T['relations'][Arg] extends Relation\n ? T['relations'][Arg]['table']\n : never\n : never;\n\nexport type JoinCallback<T extends QueryBase, Arg extends JoinFirstArg<T>> = (\n q: OnQueryBuilder<T, JoinArgToQuery<T, Arg>>,\n) => OnQueryBuilder;\n\nexport type JoinLateralCallback<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n Q extends QueryBase = JoinArgToQuery<T, Arg>,\n> = (q: Q & OnQueryBuilder<T, Q>) => R;\n\nexport class Join {\n join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, true>;\n join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n join(this: Query, ...args: any) {\n return _join(this.clone(), true, 'JOIN', args);\n }\n _join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, true>;\n _join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _join(this: Query, ...args: any) {\n return _join(this, true, 'JOIN', args);\n }\n\n leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, true>;\n leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n leftJoin(this: Query, ...args: any) {\n return _join(this.clone(), false, 'LEFT JOIN', args);\n }\n _leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, true>;\n _leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _leftJoin(this: Query, ...args: any) {\n return _join(this, false, 'LEFT JOIN', args);\n }\n\n rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, false>;\n rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rightJoin(this: Query, ...args: any) {\n return _join(this.clone(), true, 'RIGHT JOIN', args);\n }\n _rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, false>;\n _rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _rightJoin(this: Query, ...args: any) {\n return _join(this, true, 'RIGHT JOIN', args);\n }\n\n fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, false>;\n fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fullJoin(this: Query, ...args: any) {\n return _join(this.clone(), false, 'FULL JOIN', args);\n }\n _fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, false>;\n _fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _fullJoin(this: Query, ...args: any) {\n return _join(this, false, 'FULL JOIN', args);\n }\n\n joinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, true, true> {\n return _joinLateral<T, Arg, R, true, true>(this.clone(), 'JOIN', arg, cb);\n }\n _joinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, true, true> {\n return _joinLateral<T, Arg, R, true, true>(this, 'JOIN', arg, cb);\n }\n\n leftJoinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, false, true> {\n return _joinLateral<T, Arg, R, false, true>(\n this.clone(),\n 'LEFT JOIN',\n arg,\n cb,\n );\n }\n _leftJoinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, false, true> {\n return _joinLateral<T, Arg, R, false, true>(this, 'LEFT JOIN', arg, cb);\n }\n}\n\ntype OnArgs<Q extends { selectable: SelectableBase }> =\n | [leftColumn: keyof Q['selectable'], rightColumn: keyof Q['selectable']]\n | [\n leftColumn: keyof Q['selectable'],\n op: string,\n rightColumn: keyof Q['selectable'],\n ];\n\nconst makeOnItem = (\n joinTo: QueryBase,\n joinFrom: QueryBase,\n args: OnArgs<QueryBase>,\n) => {\n return {\n ON: {\n joinTo,\n joinFrom,\n on: args,\n },\n };\n};\n\nexport const pushQueryOn = <T extends QueryBase>(\n q: T,\n joinFrom: QueryBase,\n joinTo: QueryBase,\n ...on: OnArgs<QueryBase>\n): T => {\n return pushQueryValue(q, 'and', makeOnItem(joinFrom, joinTo, on));\n};\n\nexport const pushQueryOrOn: typeof pushQueryOn = (\n q,\n joinFrom,\n joinTo,\n ...on\n) => {\n return pushQueryValue(q, 'or', [makeOnItem(joinFrom, joinTo, on)]);\n};\n\nexport const addQueryOn = <T extends QueryBase>(\n q: T,\n joinFrom: QueryBase,\n joinTo: QueryBase,\n ...args: OnArgs<QueryBase>\n): T => {\n const cloned = q.clone() as typeof q;\n setQueryObjectValue(\n cloned,\n 'joinedShapes',\n (joinFrom.query.as || joinFrom.table) as string,\n joinFrom.query.shape,\n );\n return pushQueryOn(cloned, joinFrom, joinTo, ...args);\n};\n\nexport const addQueryOrOn: typeof pushQueryOrOn = (\n q,\n joinFrom,\n joinTo,\n ...args\n) => {\n return pushQueryOrOn(q.clone() as typeof q, joinFrom, joinTo, ...args);\n};\n\ntype OnJsonPathEqualsArgs<T extends QueryBase> = [\n leftColumn: keyof T['selectable'],\n leftPath: string,\n rightColumn: keyof T['selectable'],\n rightPath: string,\n];\n\nexport class OnQueryBuilder<\n S extends QueryBase = QueryBase,\n J extends QueryBase = QueryBase,\n >\n extends WhereQueryBuilder<\n J & {\n selectable: Omit<S['selectable'], keyof S['shape']>;\n }\n >\n implements QueryBase\n{\n constructor(\n q: QueryBase,\n data: Pick<QueryData, 'shape' | 'joinedShapes'>,\n joinTo: QueryBase,\n ) {\n super(q, data);\n this.query.joinTo = joinTo;\n }\n\n on<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._on(...args);\n }\n _on<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOn(this, this.query.joinTo as QueryBase, this, ...args);\n }\n\n orOn<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._orOn(...args);\n }\n _orOn<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOrOn(this, this.query.joinTo as QueryBase, this, ...args);\n }\n\n onJsonPathEquals<T extends OnQueryBuilder>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return this.clone()._onJsonPathEquals(...args);\n }\n _onJsonPathEquals<T extends OnQueryBuilder>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return pushQueryValue(this, 'and', { ON: args });\n }\n}\n","import {\n AddQuerySelect,\n Query,\n queryTypeWithLimitOne,\n SetQueryReturnsValueOptional,\n} from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { ColumnType, StringColumn } from '../columns';\nimport { JsonItem } from '../sql';\nimport { raw, StringKey, ColumnTypeBase } from 'orchid-core';\n\ntype JsonColumnName<T extends Pick<Query, 'selectable'>> = StringKey<\n {\n [K in keyof T['selectable']]: T['selectable'][K]['column']['dataType'] extends 'jsonb'\n ? K\n : never;\n }[keyof T['selectable']]\n>;\n\ntype ColumnOrJsonMethod<T extends Query> = JsonColumnName<T> | JsonItem;\n\ntype JsonSetResult<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string,\n Type extends ColumnTypeBase = Column extends keyof T['shape']\n ? T['shape'][Column]\n : Column extends JsonItem\n ? Column['__json'][2]\n : ColumnType,\n> = JsonItem<As, Type> &\n (Type extends ColumnTypeBase ? AddQuerySelect<T, Record<As, Type>> : T);\n\ntype JsonPathQueryResult<\n T extends Query,\n As extends string,\n Type extends ColumnType,\n> = JsonItem &\n AddQuerySelect<\n T,\n {\n [K in As]: Type;\n }\n >;\n\nexport class Json {\n json<T extends Query>(\n this: T,\n coalesce?: boolean,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n return this.clone()._json(coalesce);\n }\n\n _json<T extends Query>(\n this: T,\n coalesce?: boolean,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n const q = this._wrap(this.baseQuery.clone()) as T;\n // json_agg is used instead of jsonb_agg because it is 2x faster, according to my benchmarks\n q._getOptional(\n raw(\n queryTypeWithLimitOne[this.query.returnType]\n ? `row_to_json(\"t\".*)`\n : coalesce !== false\n ? `COALESCE(json_agg(row_to_json(\"t\".*)), '[]')`\n : 'json_agg(row_to_json(\"t\".*))',\n ),\n );\n return q as unknown as SetQueryReturnsValueOptional<T, StringColumn>;\n }\n\n jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonSet(column, path, value, options);\n }\n\n _jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'set',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonInsert(...args);\n }\n\n _jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'insert',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonRemove(...args);\n }\n\n _jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'remove',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n ...args: [\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ]\n ): JsonPathQueryResult<T, As, Type> {\n const q = this.clone() as T;\n return q._jsonPathQuery(...args);\n }\n\n _jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ): JsonPathQueryResult<T, As, Type> {\n const json: JsonItem = {\n __json: ['pathQuery', as, type, column, path, options],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonPathQueryResult<T, As, Type>;\n }\n}\n","import { Query } from '../query';\nimport { quote } from '../quote';\nimport { Sql } from 'orchid-core';\n\nexport type QueryLogObject = {\n colors: boolean;\n beforeQuery(sql: Sql): unknown;\n afterQuery(sql: Sql, logData: unknown): void;\n onError(error: Error, sql: Sql, logData: unknown): void;\n};\n\nexport type QueryLogger = {\n log(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport type QueryLogOptions = {\n log?: boolean | Partial<QueryLogObject>;\n logger?: QueryLogger;\n};\n\nexport const logColors = {\n boldCyanBright: (message: string) =>\n `\\u001b[1m\\u001b[96m${message}\\u001b[39m\\u001b[22m`,\n\n boldBlue: (message: string) =>\n `\\u001b[1m\\u001b[34m${message}\\u001b[39m\\u001b[22m`,\n\n boldYellow: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldMagenta: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldRed: (message: string) =>\n `\\u001b[1m\\u001b[31m${message}\\u001b[39m\\u001b[22m`,\n};\n\nconst makeMessage = (\n colors: boolean,\n timeColor: (message: string) => string,\n time: [number, number],\n sqlColor: (message: string) => string,\n sql: string,\n valuesColor: (message: string) => string,\n values: unknown[],\n): string => {\n const elapsed = process.hrtime(time);\n const formattedTime = `(${elapsed[0] ? `${elapsed[0]}s ` : ''}${(\n elapsed[1] / 1000000\n ).toFixed(1)}ms)`;\n\n const result = `${colors ? timeColor(formattedTime) : formattedTime} ${\n colors ? sqlColor(sql) : sql\n }`;\n\n if (!values.length) {\n return result;\n }\n\n const formattedValues = `[${values.map(quote).join(', ')}]`;\n\n return `${result} ${colors ? valuesColor(formattedValues) : formattedValues}`;\n};\n\nexport const logParamToLogObject = (\n logger: QueryLogger,\n log: QueryLogOptions['log'],\n): QueryLogObject | undefined => {\n if (!log) return;\n const logObject = Object.assign(\n {\n colors: true,\n beforeQuery() {\n return process.hrtime();\n },\n afterQuery(sql, time: [number, number]) {\n logger.log(\n makeMessage(\n colors,\n logColors.boldCyanBright,\n time,\n logColors.boldBlue,\n sql.text,\n logColors.boldYellow,\n sql.values,\n ),\n );\n },\n onError(error, sql, time: [number, number]) {\n const message = `Error: ${error.message}`;\n\n logger.error(\n `${makeMessage(\n colors,\n logColors.boldMagenta,\n time,\n logColors.boldRed,\n sql.text,\n logColors.boldYellow,\n sql.values,\n )} ${colors ? logColors.boldRed(message) : message}`,\n );\n },\n } as QueryLogObject,\n log === true ? {} : log,\n );\n\n const colors = logObject.colors;\n\n return logObject;\n};\n\nexport class QueryLog {\n log<T extends Query>(this: T, log = true): T {\n return this.clone()._log(log);\n }\n\n _log<T extends Query>(this: T, log = true): T {\n this.query.log = logParamToLogObject(this.query.logger, log);\n return this;\n }\n}\n","import { Query, QueryReturnType, QueryThen } from '../query';\nimport { getValueKey } from './get';\nimport { SelectQueryData } from '../sql';\nimport { Spread } from 'orchid-core';\n\nexport type MergeQuery<\n T extends Query,\n Q extends Query,\n ReturnType extends QueryReturnType = QueryReturnType extends Q['returnType']\n ? T['returnType']\n : Q['returnType'],\n> = Omit<\n T,\n 'result' | 'returnType' | 'then' | 'selectable' | 'windows' | 'withData'\n> & {\n meta: Q['meta'];\n result: T['meta']['hasSelect'] extends true\n ? Spread<[T['result'], Q['result']]>\n : Q['result'];\n returnType: ReturnType;\n then: T['meta']['hasSelect'] extends true\n ? QueryThen<ReturnType, Spread<[T['result'], Q['result']]>>\n : QueryThen<ReturnType, Q['result']>;\n selectable: T['selectable'] & Q['selectable'];\n windows: T['windows'] & Q['windows'];\n withData: T['withData'] & Q['withData'];\n};\n\nconst mergableObjects: Record<string, boolean> = {\n shape: true,\n withShapes: true,\n parsers: true,\n defaults: true,\n joinedShapes: true,\n joinedParsers: true,\n};\n\nexport class MergeQueryMethods {\n merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q> {\n return this.clone()._merge(q);\n }\n _merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q> {\n const a = this.query as Record<string, unknown>;\n const b = q.query as Record<string, unknown>;\n\n for (const key in b) {\n const value = b[key];\n switch (typeof value) {\n case 'boolean':\n case 'string':\n case 'number':\n a[key] = value;\n break;\n case 'object':\n if (Array.isArray(value)) {\n a[key] = a[key] ? [...(a[key] as unknown[]), ...value] : value;\n } else if (mergableObjects[key]) {\n a[key] = a[key]\n ? { ...(a[key] as Record<string, unknown>), ...value }\n : value;\n } else {\n a[key] = value;\n }\n break;\n }\n }\n\n (a as SelectQueryData)[getValueKey] = (b as SelectQueryData)[getValueKey];\n\n if (b.returnType) a.returnType = b.returnType;\n\n return this as unknown as MergeQuery<T, Q>;\n }\n}\n","import { WithOptions } from '../sql';\nimport { ColumnsShape, ColumnTypes } from '../columns';\nimport { AddQueryWith, Query } from '../query';\nimport { Db } from '../db';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport {\n isRaw,\n RawExpression,\n ColumnShapeOutput,\n emptyObject,\n} from 'orchid-core';\n\ntype WithArgsOptions = Omit<WithOptions, 'columns'> & {\n columns?: boolean | string[];\n};\n\ntype WithArgs =\n | [string, ColumnsShape, RawExpression]\n | [string, WithArgsOptions, ColumnsShape, RawExpression]\n | [string, Query | ((qb: Db) => Query)]\n | [string, WithArgsOptions, Query | ((qb: Db) => Query)];\n\ntype WithShape<Args extends WithArgs> = Args[1] extends Query\n ? Args[1]['result']\n : Args[1] extends (qb: Db) => Query\n ? ReturnType<Args[1]>['result']\n : Args[2] extends Query\n ? Args[2]['result']\n : Args[2] extends (qb: Db) => Query\n ? ReturnType<Args[2]>['result']\n : Args[1] extends ColumnsShape\n ? Args[1]\n : Args[2] extends ColumnsShape\n ? Args[2]\n : Args[2] extends (t: ColumnTypes) => ColumnsShape\n ? ReturnType<Args[2]> extends ColumnsShape\n ? ReturnType<Args[2]>\n : never\n : never;\n\ntype WithResult<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape,\n> = AddQueryWith<\n T,\n {\n table: Args[0];\n shape: Shape;\n type: ColumnShapeOutput<Shape>;\n }\n>;\n\nexport class With {\n with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n return this.clone()._with<T, Args, Shape>(...args);\n }\n\n _with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n let options =\n (args.length === 3 && !isRaw(args[2])) || args.length === 4\n ? (args[1] as WithArgsOptions | WithOptions)\n : undefined;\n\n const last = args[args.length - 1] as\n | Query\n | ((qb: Db) => Query)\n | RawExpression;\n\n const query = typeof last === 'function' ? last(this.queryBuilder) : last;\n\n const shape =\n args.length === 4\n ? (args[2] as ColumnsShape)\n : isRaw(query)\n ? args[1]\n : query.query.shape;\n\n if (options?.columns === true) {\n options = {\n ...options,\n columns: Object.keys(shape),\n };\n }\n\n pushQueryValue(this, 'with', [args[0], options || emptyObject, query]);\n\n return setQueryObjectValue(\n this,\n 'withShapes',\n args[0],\n shape,\n ) as unknown as WithResult<T, Args, Shape>;\n }\n}\n","import { Query } from '../query';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { RawExpression } from 'orchid-core';\n\nexport type UnionArg<T extends Query> =\n | (Omit<Query, 'result'> & {\n result: { [K in keyof T['result']]: Pick<T['result'][K], 'dataType'> };\n })\n | RawExpression;\n\nexport class Union {\n union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._union(args, wrap);\n }\n\n _union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION' as const, wrap })),\n );\n }\n\n unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._unionAll(args, wrap);\n }\n\n _unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION ALL' as const, wrap })),\n );\n }\n\n intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._intersect(args, wrap);\n }\n\n _intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT' as const, wrap })),\n );\n }\n\n intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return this._intersectAll(args, wrap);\n }\n\n _intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT ALL' as const, wrap })),\n );\n }\n\n except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._except(args, wrap);\n }\n\n _except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT' as const, wrap })),\n );\n }\n\n exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._exceptAll(args, wrap);\n }\n\n _exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT ALL' as const, wrap })),\n );\n }\n}\n","import { Query, QueryReturnsAll, SetQueryReturnsRowCount } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport {\n BelongsToRelation,\n HasAndBelongsToManyRelation,\n HasManyRelation,\n HasOneRelation,\n Relation,\n} from '../relations';\nimport { WhereArg, WhereResult } from './where';\nimport { CreateData } from './create';\nimport { queryMethodByReturnType } from './then';\nimport { UpdateQueryData } from '../sql';\nimport { VirtualColumn } from '../columns';\nimport { anyShape } from '../db';\nimport {\n isRaw,\n RawExpression,\n EmptyObject,\n MaybeArray,\n StringKey,\n} from 'orchid-core';\nimport { QueryResult } from '../adapter';\n\nexport type UpdateData<T extends Query> = {\n [K in keyof T['inputType']]?: T['inputType'][K] | RawExpression;\n} & (T['relations'] extends Record<string, Relation>\n ? {\n [K in keyof T['relations']]?: T['relations'][K] extends BelongsToRelation\n ? UpdateBelongsToData<T, T['relations'][K]>\n : T['relations'][K] extends HasOneRelation\n ? UpdateHasOneData<T, T['relations'][K]>\n : T['relations'][K] extends HasManyRelation\n ? UpdateHasManyData<T, T['relations'][K]>\n : T['relations'][K] extends HasAndBelongsToManyRelation\n ? UpdateHasAndBelongsToManyData<T['relations'][K]>\n : never;\n }\n : EmptyObject) & {\n __raw?: never; // forbid RawExpression argument\n };\n\ntype UpdateBelongsToData<T extends Query, Rel extends BelongsToRelation> =\n | { disconnect: boolean }\n | { set: WhereArg<Rel['table']> }\n | { delete: boolean }\n | { update: UpdateData<Rel['table']> }\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n }\n | (QueryReturnsAll<T['returnType']> extends true\n ? never\n : {\n upsert: {\n update: UpdateData<Rel['table']>;\n create:\n | CreateData<Rel['nestedCreateQuery']>\n | (() => CreateData<Rel['nestedCreateQuery']>);\n };\n });\n\ntype UpdateHasOneData<T extends Query, Rel extends HasOneRelation> =\n | { disconnect: boolean }\n | { delete: boolean }\n | { update: UpdateData<Rel['table']> }\n | (QueryReturnsAll<T['returnType']> extends true\n ? never\n :\n | { set: WhereArg<Rel['table']> }\n | {\n upsert: {\n update: UpdateData<Rel['table']>;\n create:\n | CreateData<Rel['nestedCreateQuery']>\n | (() => CreateData<Rel['nestedCreateQuery']>);\n };\n }\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n });\n\ntype UpdateHasManyData<T extends Query, Rel extends HasManyRelation> = {\n disconnect?: MaybeArray<WhereArg<Rel['table']>>;\n delete?: MaybeArray<WhereArg<Rel['table']>>;\n update?: {\n where: MaybeArray<WhereArg<Rel['table']>>;\n data: UpdateData<Rel['table']>;\n };\n} & (QueryReturnsAll<T['returnType']> extends true\n ? EmptyObject\n : {\n set?: MaybeArray<WhereArg<Rel['table']>>;\n create?: CreateData<Rel['nestedCreateQuery']>[];\n });\n\ntype UpdateHasAndBelongsToManyData<Rel extends HasAndBelongsToManyRelation> = {\n disconnect?: MaybeArray<WhereArg<Rel['table']>>;\n set?: MaybeArray<WhereArg<Rel['table']>>;\n delete?: MaybeArray<WhereArg<Rel['table']>>;\n update?: {\n where: MaybeArray<WhereArg<Rel['table']>>;\n data: UpdateData<Rel['table']>;\n };\n create?: CreateData<Rel['nestedCreateQuery']>[];\n};\n\ntype UpdateArg<T extends Query> = T['meta']['hasWhere'] extends true\n ? UpdateData<T>\n : never;\n\ntype UpdateRawArg<T extends Query> = T['meta']['hasWhere'] extends true\n ? RawExpression\n : never;\n\ntype UpdateResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? T\n : SetQueryReturnsRowCount<T>;\n\ntype ChangeCountArg<T extends Query> =\n | keyof T['shape']\n | Partial<Record<keyof T['shape'], number>>;\n\nexport type UpdateCtx = {\n willSetKeys?: true;\n returnTypeAll?: true;\n resultAll: Record<string, unknown>[];\n queries?: ((queryResult: QueryResult) => Promise<void>)[];\n updateData?: Record<string, unknown>;\n};\n\nconst applyCountChange = <T extends Query>(\n self: T,\n op: string,\n data: ChangeCountArg<T>,\n) => {\n self.query.type = 'update';\n\n let map: Record<string, { op: string; arg: number }>;\n if (typeof data === 'object') {\n map = {};\n for (const key in data) {\n map[key] = { op, arg: data[key] as number };\n }\n } else {\n map = { [data as string]: { op, arg: 1 } };\n }\n\n pushQueryValue(self, 'updateData', map);\n return self as unknown as UpdateResult<T>;\n};\n\nconst checkIfUpdateIsEmpty = (q: UpdateQueryData) => {\n return !q.updateData?.some((item) => isRaw(item) || Object.keys(item).length);\n};\n\nconst update = <T extends Query>(q: T): UpdateResult<T> => {\n const { query } = q;\n query.type = 'update';\n\n if (!query.select) {\n query.returnType = 'rowCount';\n }\n\n return q as unknown as UpdateResult<T>;\n};\n\nexport class Update {\n update<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._update(arg);\n }\n _update<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const { query } = this;\n\n const set: Record<string, unknown> = { ...arg };\n pushQueryValue(this, 'updateData', set);\n\n const { shape } = this.query;\n\n const originalReturnType = query.returnType || 'all';\n\n const ctx: UpdateCtx = {\n resultAll: undefined as unknown as Record<string, unknown>[],\n };\n\n for (const key in arg) {\n const item = shape[key];\n if (item instanceof VirtualColumn && item.update) {\n item.update(this, ctx, set);\n delete set[key];\n } else if (!shape[key] && shape !== anyShape) {\n delete set[key];\n } else {\n const encode = shape[key].encodeFn;\n if (encode) set[key] = encode(set[key]);\n }\n }\n\n if (!ctx.willSetKeys && checkIfUpdateIsEmpty(query as UpdateQueryData)) {\n delete query.type;\n }\n\n const { queries } = ctx;\n if (queries || ctx.returnTypeAll) {\n query.returnType = 'all';\n\n if (queries) {\n if (!query.select?.includes('*')) {\n this.primaryKeys.forEach((key) => {\n if (!query.select?.includes(key)) {\n this._select(key as StringKey<keyof T['selectable']>);\n }\n });\n }\n\n query.patchResult = async (queryResult) => {\n await Promise.all(queries.map((fn) => fn(queryResult)));\n\n if (ctx.updateData) {\n const t = this.baseQuery.clone();\n const keys = this.primaryKeys;\n (\n t._whereIn as unknown as (\n keys: string[],\n values: unknown[][],\n ) => Query\n )(\n keys,\n queryResult.rows.map((item) => keys.map((key) => item[key])),\n );\n\n await (t as WhereResult<Query>)._update(ctx.updateData);\n\n for (const row of queryResult.rows) {\n Object.assign(row, ctx.updateData);\n }\n }\n };\n }\n\n const { handleResult } = query;\n query.handleResult = (q, queryResult, s) => {\n ctx.resultAll = handleResult(q, queryResult) as Record<\n string,\n unknown\n >[];\n\n if (queryMethodByReturnType[originalReturnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n q.query.returnType = originalReturnType;\n\n return handleResult(q, queryResult, s);\n };\n }\n\n return update(this);\n }\n\n updateRaw<T extends Query>(this: T, arg: UpdateRawArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._updateRaw(arg);\n }\n _updateRaw<T extends Query>(this: T, arg: UpdateRawArg<T>): UpdateResult<T> {\n pushQueryValue(this, 'updateData', arg);\n return update(this);\n }\n\n updateOrThrow<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._updateOrThrow(arg);\n }\n\n _updateOrThrow<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n this.query.throwOnNotFound = true;\n return this._update(arg);\n }\n\n increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._increment(data) as unknown as UpdateResult<T>;\n }\n\n _increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '+', data);\n }\n\n decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._decrement(data) as unknown as UpdateResult<T>;\n }\n\n _decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '-', data);\n }\n}\n","import { Query } from '../query';\nimport { emptyArray, emptyObject, Sql } from 'orchid-core';\nimport { TransactionAdapter } from '../adapter';\n\nconst commitSql = {\n text: 'COMMIT',\n values: emptyArray,\n};\n\nconst rollbackSql = {\n text: 'ROLLBACK',\n values: emptyArray,\n};\n\nexport type IsolationLevel =\n | 'SERIALIZABLE'\n | 'REPEATABLE READ'\n | 'READ COMMITTED'\n | 'READ UNCOMMITTED';\n\nexport type TransactionOptions = {\n level: IsolationLevel;\n readOnly?: boolean;\n deferrable?: boolean;\n};\n\nexport class Transaction {\n transaction<T extends Query, Result>(\n this: T,\n cb: () => Promise<Result>,\n ): Promise<Result>;\n transaction<T extends Query, Result>(\n this: T,\n options: IsolationLevel | TransactionOptions,\n cb: () => Promise<Result>,\n ): Promise<Result>;\n async transaction<T extends Query, Result>(\n this: T,\n cbOrOptions: IsolationLevel | TransactionOptions | (() => Promise<Result>),\n cb?: () => Promise<Result>,\n ): Promise<Result> {\n let options: TransactionOptions;\n let fn: () => Promise<Result>;\n if (typeof cbOrOptions === 'function') {\n options = emptyObject as TransactionOptions;\n fn = cbOrOptions;\n } else {\n options =\n typeof cbOrOptions === 'object' ? cbOrOptions : { level: cbOrOptions };\n fn = cb as () => Promise<Result>;\n }\n\n const sql = {\n values: emptyArray,\n } as unknown as Sql;\n\n const log = this.query.log;\n let logData: unknown | undefined;\n\n const trx =\n this.internal.transactionStorage.getStore() as TransactionAdapter & {\n transactionId: number;\n };\n const transactionId = trx ? trx.transactionId + 1 : 0;\n\n const callback = (adapter: TransactionAdapter) => {\n if (log) log.afterQuery(sql, logData);\n if (log) logData = log.beforeQuery(commitSql);\n\n (adapter as unknown as { transactionId: number }).transactionId =\n transactionId;\n\n return trx ? fn() : this.internal.transactionStorage.run(adapter, fn);\n };\n\n if (!trx) {\n sql.text = `BEGIN${\n options.level ? ` ISOLATION LEVEL ${options.level}` : ''\n }${\n options.readOnly !== undefined\n ? ` READ ${options.readOnly ? 'ONLY' : 'WRITE'}`\n : ''\n }${\n options.deferrable !== undefined\n ? ` ${options.deferrable ? '' : 'NOT '}DEFERRABLE`\n : ''\n }`;\n if (log) logData = log.beforeQuery(sql);\n\n const t = this.query.adapter.transaction(sql, callback);\n\n if (log) {\n t.then(\n () => log.afterQuery(commitSql, logData),\n () => log.afterQuery(rollbackSql, logData),\n );\n }\n\n return t;\n } else {\n try {\n sql.text = `SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n\n let result;\n try {\n result = await callback(trx);\n } catch (err) {\n sql.text = `ROLLBACK TO SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n if (log) log.afterQuery(sql, logData);\n throw err;\n }\n\n sql.text = `RELEASE SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n if (log) log.afterQuery(sql, logData);\n\n return result;\n } finally {\n trx.transactionId = transactionId - 1;\n }\n }\n }\n}\n","import { Query } from '../query';\nimport { ColumnType, IntegerColumn } from '../columns';\nimport { SelectAgg, WindowFunctionOptions } from './aggregate';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { addParserToQuery } from './select';\n\nconst selectWindowFunction = <\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n>(\n self: T,\n functionName: Func,\n options: WindowFunctionOptions<T, As>,\n parse?: (input: unknown) => Value['type'],\n): SelectAgg<T, Func, As, Value> => {\n pushQueryValue(self, 'select', {\n function: functionName,\n options: {\n as: options.as,\n over: options,\n },\n });\n\n if (parse) {\n addParserToQuery(self.query, options.as || functionName, parse);\n }\n\n return self as unknown as SelectAgg<T, Func, As, Value>;\n};\n\nconst toInt = (input: unknown) => parseInt(input as string);\n\nexport class Window {\n selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return this.clone()._selectRowNumber(options);\n }\n\n _selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return selectWindowFunction(this, 'row_number', options, toInt);\n }\n\n selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return this.clone()._selectRank(options);\n }\n\n _selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'rank', options, toInt);\n }\n\n selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return this.clone()._selectDenseRank(options);\n }\n\n _selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'dense_rank', options, toInt);\n }\n\n selectPercentRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return this.clone()._selectPercentRank(options);\n }\n\n _selectPercentRank<\n T extends Query,\n As extends string | undefined = undefined,\n >(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'percent_rank', options, toInt);\n }\n\n selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return this.clone()._selectCumeDist(options);\n }\n\n _selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return selectWindowFunction(this, 'cume_dist', options, toInt);\n }\n}\n","import { Query, SetQueryReturnsOne, SetQueryReturnsVoid } from '../query';\nimport { UpdateData } from './update';\nimport { CreateData } from './create';\nimport { WhereResult } from './where';\nimport { MoreThanOneRowError } from '../errors';\nimport { isObjectEmpty } from 'orchid-core';\n\nexport type UpsertCreateArg<T extends Query> =\n | CreateData<T>\n | (() => CreateData<T>);\n\nexport type UpsertData<T extends Query> = {\n update: UpdateData<T>;\n create: UpsertCreateArg<T>;\n};\n\nexport type UpsertResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? SetQueryReturnsOne<T>\n : SetQueryReturnsVoid<T>;\n\nexport type UpsertThis = WhereResult<Query> & {\n returnType: 'one' | 'oneOrThrow';\n};\n\nexport class QueryUpsertOrCreate {\n upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n return this.clone()._upsert(data);\n }\n\n _upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n if (!isObjectEmpty(data.update)) {\n this._update<WhereResult<Query>>(data.update);\n }\n return this._orCreate(data.create);\n }\n\n orCreate<T extends UpsertThis>(\n this: T,\n data: UpsertCreateArg<T>,\n ): UpsertResult<T> {\n return this.clone()._orCreate(data);\n }\n\n _orCreate<T extends UpsertThis>(\n this: T,\n data: UpsertCreateArg<T>,\n ): UpsertResult<T> {\n this.query.returnType = 'one';\n this.query.wrapInTransaction = true;\n\n const { handleResult } = this.query;\n let result: unknown;\n let created = false;\n this.query.handleResult = (q, r, s) => {\n return created ? result : handleResult(q, r, s);\n };\n\n this.query.patchResult = async (queryResult) => {\n if (queryResult.rowCount === 0) {\n if (typeof data === 'function') {\n data = data();\n }\n\n const inner = (this as Query).create(data as CreateData<Query>);\n const { handleResult } = inner.query;\n inner.query.handleResult = (q, r, s) => {\n queryResult = r;\n const res = handleResult(q, r, s);\n result = res;\n return res;\n };\n await inner;\n created = true;\n } else if (queryResult.rowCount > 1) {\n throw new MoreThanOneRowError(\n this,\n `Only one row was expected to find, found ${queryResult.rowCount} rows.`,\n );\n }\n };\n return this as unknown as UpsertResult<T>;\n }\n}\n","import { ColumnType } from '../columns';\nimport { Query } from '../query';\nimport { RawExpression, ColumnTypesBase } from 'orchid-core';\n\ntype RawArgs<CT extends ColumnTypesBase, C extends ColumnType> =\n | [column: (types: CT) => C, sql: string, values?: Record<string, unknown>]\n | [sql: string, values?: Record<string, unknown>];\n\nexport class RawMethods {\n raw<T extends Query, C extends ColumnType>(\n this: T,\n ...args: RawArgs<T['columnTypes'], C>\n ): RawExpression<C> {\n if (typeof args[0] === 'string') {\n return {\n __raw: args[0],\n __values: args[1],\n } as RawExpression<C>;\n } else {\n return {\n __column: args[0](this.columnTypes),\n __raw: args[1],\n __values: args[2],\n } as RawExpression<C>;\n }\n }\n}\n","import { Query } from '../query';\nimport { CopyOptions } from '../sql';\n\ntype CopyArg<T extends Query> = CopyOptions<keyof T['shape']>;\n\nexport class CopyMethods {\n copy<T extends Query>(this: T, arg: CopyArg<T>): T {\n return this.clone()._copy(arg);\n }\n _copy<T extends Query>(this: T, arg: CopyArg<T>) {\n Object.assign(this.query, {\n type: 'copy',\n copy: arg,\n });\n return this;\n }\n}\n","import { SetQueryTableAlias } from '../query';\nimport { QueryBase } from '../queryBase';\n\nexport abstract class AsMethods extends QueryBase {\n as<T extends AsMethods, As extends string>(\n this: T,\n as: As,\n ): SetQueryTableAlias<T, As> {\n return this.clone()._as(as) as unknown as SetQueryTableAlias<T, As>;\n }\n\n _as<T extends AsMethods, As extends string>(\n this: T,\n as: As,\n ): SetQueryTableAlias<T, As> {\n this.query.as = as;\n return this as unknown as SetQueryTableAlias<T, As>;\n }\n}\n","import {\n Query,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n SetQueryReturnsPluck,\n SetQueryReturnsRows,\n SetQueryReturnsValue,\n SetQueryReturnsVoid,\n SetQueryTableAlias,\n SetQueryWindows,\n} from '../query';\nimport { Expression } from '../utils';\nimport {\n SelectItem,\n SelectQueryData,\n SortDir,\n toSql,\n ToSqlOptions,\n TruncateQueryData,\n} from '../sql';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { Then } from './then';\nimport { BooleanColumn } from '../columns';\nimport { Aggregate } from './aggregate';\nimport { addParserForSelectItem, Select } from './select';\nimport { From } from './from';\nimport { Join, OnQueryBuilder } from './join';\nimport { With } from './with';\nimport { Union } from './union';\nimport { Json } from './json';\nimport { Create } from './create';\nimport { Update } from './update';\nimport { Delete } from './delete';\nimport { Transaction } from './transaction';\nimport { For } from './for';\nimport { ColumnInfoMethods } from './columnInfo';\nimport { addWhere, Where, WhereArg, WhereResult } from './where';\nimport { Clear } from './clear';\nimport { Having } from './having';\nimport { Window } from './window';\nimport { QueryLog } from './log';\nimport { QueryCallbacks } from './callbacks';\nimport { QueryUpsertOrCreate } from './upsertOrCreate';\nimport { QueryGet } from './get';\nimport { MergeQueryMethods } from './merge';\nimport { RawMethods } from './raw';\nimport { CopyMethods } from './copy';\nimport { RawExpression, raw, applyMixins, EmptyObject, Sql } from 'orchid-core';\nimport { AsMethods } from './as';\nimport { QueryBase } from '../queryBase';\n\nexport type WindowArg<T extends Query> = Record<\n string,\n WindowArgDeclaration<T> | RawExpression\n>;\n\nexport type WindowArgDeclaration<T extends Query = Query> = {\n partitionBy?: Expression<T> | Expression<T>[];\n order?: OrderArg<T>;\n};\n\ntype WindowResult<T extends Query, W extends WindowArg<T>> = SetQueryWindows<\n T,\n Record<keyof W, true>\n>;\n\nexport type OrderArg<\n T extends Query,\n Key extends PropertyKey =\n | keyof T['selectable']\n | {\n [K in keyof T['result']]: T['result'][K]['dataType'] extends\n | 'array'\n | 'object'\n ? never\n : K;\n }[keyof T['result']],\n> =\n | Key\n | {\n [K in Key]?: SortDir;\n }\n | RawExpression;\n\nexport interface QueryMethods\n extends Omit<AsMethods, 'result'>,\n Aggregate,\n Select,\n From,\n Join,\n With,\n Union,\n Json,\n Create,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Omit<Where, 'result'>,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsertOrCreate,\n QueryGet,\n MergeQueryMethods,\n RawMethods,\n CopyMethods {}\n\nexport class QueryMethods {\n windows!: EmptyObject;\n baseQuery!: Query;\n\n all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n return this.clone()._all();\n }\n\n _all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n this.query.returnType = 'all';\n return this as unknown as SetQueryReturnsAll<T>;\n }\n\n take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n return this.clone()._take();\n }\n\n _take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n this.query.returnType = 'oneOrThrow';\n return this as unknown as SetQueryReturnsOne<T>;\n }\n\n takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n return this.clone()._takeOptional();\n }\n\n _takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n this.query.returnType = 'one';\n return this as unknown as SetQueryReturnsOneOptional<T>;\n }\n\n rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n return this.clone()._rows();\n }\n\n _rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n this.query.returnType = 'rows';\n return this as unknown as SetQueryReturnsRows<T>;\n }\n\n pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n return this.clone()._pluck(select);\n }\n\n _pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n this.query.returnType = 'pluck';\n (this.query as SelectQueryData).select = [select as SelectItem];\n addParserForSelectItem(this, this.query.as || this.table, 'pluck', select);\n return this as unknown as SetQueryReturnsPluck<T, S>;\n }\n\n exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n return this.clone()._exec();\n }\n\n _exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n this.query.returnType = 'void';\n return this as unknown as SetQueryReturnsVoid<T>;\n }\n\n toSql(this: Query, options?: ToSqlOptions): Sql {\n return toSql(this, options);\n }\n\n distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._distinct(...columns);\n }\n\n _distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'distinct', columns as string[]);\n }\n\n find<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._find(value);\n }\n\n _find<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this._where({\n [this.singlePrimaryKey]: value,\n } as WhereArg<T>)._take();\n }\n\n findOptional<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findOptional(value);\n }\n\n _findOptional<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this._find(\n value,\n ).takeOptional() as unknown as SetQueryReturnsOneOptional<WhereResult<T>>;\n }\n\n findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._findBy(...args);\n }\n\n _findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return addWhere(this, args).take();\n }\n\n findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findByOptional(...args);\n }\n\n _findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return addWhere(this, args).takeOptional();\n }\n\n withSchema<T extends Query>(this: T, schema: string): T {\n return this.clone()._withSchema(schema);\n }\n\n _withSchema<T extends Query>(this: T, schema: string): T {\n this.query.schema = schema;\n return this;\n }\n\n group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._group(...columns);\n }\n\n _group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'group', columns);\n }\n\n window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return this.clone()._window(arg);\n }\n\n _window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return pushQueryValue(this, 'window', arg) as unknown as WindowResult<T, W>;\n }\n\n wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as?: As,\n ): SetQueryTableAlias<Q, As> {\n return this.clone()._wrap(query, as);\n }\n\n _wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as: As = 't' as As,\n ): SetQueryTableAlias<Q, As> {\n return (query._from(this) as Query)._as(\n as,\n ) as unknown as SetQueryTableAlias<Q, As>;\n }\n\n order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return this.clone()._order(...args);\n }\n\n _order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return pushQueryArray(this, 'order', args);\n }\n\n limit<T extends Query>(this: T, arg: number | undefined): T {\n return this.clone()._limit(arg);\n }\n\n _limit<T extends Query>(this: T, arg: number | undefined): T {\n (this.query as SelectQueryData).limit = arg;\n return this;\n }\n\n offset<T extends Query>(this: T, arg: number | undefined): T {\n return this.clone()._offset(arg);\n }\n\n _offset<T extends Query>(this: T, arg: number | undefined): T {\n (this.query as SelectQueryData).offset = arg;\n return this;\n }\n\n exists<T extends Query>(this: T): SetQueryReturnsValue<T, BooleanColumn> {\n return this.clone()._exists();\n }\n\n _exists<T extends Query>(this: T): SetQueryReturnsValue<T, BooleanColumn> {\n const q = this._getOptional(this.raw<Query, BooleanColumn>('true'));\n q.query.notFoundDefault = false;\n q.query.coalesceValue = raw('false');\n return q as unknown as SetQueryReturnsValue<T, BooleanColumn>;\n }\n\n truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n return this.clone()._truncate(options);\n }\n\n _truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n const q = this.query as TruncateQueryData;\n q.type = 'truncate';\n if (options?.restartIdentity) {\n q.restartIdentity = true;\n }\n if (options?.cascade) {\n q.cascade = true;\n }\n return this._exec();\n }\n}\n\napplyMixins(QueryMethods, [\n QueryBase,\n AsMethods,\n Aggregate,\n Select,\n From,\n Join,\n OnQueryBuilder,\n With,\n Union,\n Json,\n Create,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Where,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsertOrCreate,\n QueryGet,\n MergeQueryMethods,\n RawMethods,\n CopyMethods,\n]);\n","import { ColumnsParsers, Query, SelectableFromShape } from './query';\nimport {\n QueryMethods,\n handleResult,\n WhereQueryBuilder,\n OnQueryBuilder,\n logParamToLogObject,\n QueryLogOptions,\n} from './queryMethods';\nimport { QueryData, SelectQueryData, ToSqlOptions } from './sql';\nimport { AdapterOptions, Adapter } from './adapter';\nimport {\n ColumnsShape,\n getColumnTypes,\n ColumnType,\n getTableData,\n DefaultColumnTypes,\n columnTypes,\n} from './columns';\nimport { QueryError, QueryErrorName } from './errors';\nimport {\n DbBase,\n ColumnsShapeBase,\n DefaultSelectColumns,\n applyMixins,\n pushOrNewArray,\n ThenResult,\n ColumnShapeOutput,\n ColumnTypesBase,\n SinglePrimaryKey,\n snakeCaseKey,\n toSnakeCase,\n AdapterBase,\n Sql,\n} from 'orchid-core';\nimport { q } from './sql/common';\nimport { inspect } from 'util';\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nexport type NoPrimaryKeyOption = 'error' | 'warning' | 'ignore';\n\nexport type DbOptions<CT extends ColumnTypesBase> = (\n | { adapter: Adapter }\n | Omit<AdapterOptions, 'log'>\n) &\n QueryLogOptions & {\n // concrete column types or a callback for overriding standard column types\n // this types will be used in tables to define their columns\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n // when set to true, all columns will be translated to `snake_case` when querying database\n snakeCase?: boolean;\n // if `now()` for some reason doesn't suite your timestamps, provide a custom SQL for it\n nowSQL?: string;\n };\n\nexport type DbTableOptions = {\n schema?: string;\n // prepare all SQL queries before executing\n // true by default\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n snakeCase?: boolean;\n} & QueryLogOptions;\n\nexport interface Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n CT extends ColumnTypesBase = DefaultColumnTypes,\n> extends DbBase<Adapter, Table, Shape, CT>,\n QueryMethods {\n new (\n adapter: Adapter,\n queryBuilder: Db<Table, Shape, Relations, CT>,\n table?: Table,\n shape?: Shape,\n options?: DbTableOptions,\n ): this;\n queryBuilder: Db;\n whereQueryBuilder: Query['whereQueryBuilder'];\n onQueryBuilder: Query['onQueryBuilder'];\n primaryKeys: Query['primaryKeys'];\n query: QueryData;\n selectable: SelectableFromShape<Shape, Table>;\n returnType: Query['returnType'];\n then: ThenResult<\n Pick<ColumnShapeOutput<Shape>, DefaultSelectColumns<Shape>[number]>[]\n >;\n windows: Query['windows'];\n defaultSelectColumns: DefaultSelectColumns<Shape>;\n relations: Relations;\n relationsQueries: Record<string, Query>;\n withData: Query['withData'];\n error: new (\n message: string,\n length: number,\n name: QueryErrorName,\n ) => QueryError<this>;\n isSubQuery: false;\n meta: {\n defaults: Record<\n {\n [K in keyof Shape]: undefined extends Shape[K]['data']['default']\n ? never\n : K;\n }[keyof Shape],\n true\n >;\n };\n}\n\nexport const anyShape = {} as Record<string, ColumnType>;\n\nexport class Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n CT extends ColumnTypesBase = DefaultColumnTypes,\n> implements Query\n{\n whereQueryBuilder = WhereQueryBuilder;\n onQueryBuilder = OnQueryBuilder;\n\n constructor(\n public adapter: Adapter,\n public queryBuilder: Db,\n public table: Table = undefined as Table,\n public shape: Shape = anyShape as Shape,\n public columnTypes: CT,\n transactionStorage: AsyncLocalStorage<AdapterBase>,\n options: DbTableOptions,\n ) {\n const tableData = getTableData();\n this.internal = { ...tableData, transactionStorage };\n this.baseQuery = this as Query;\n\n const logger = options.logger || console;\n\n const parsers = {} as ColumnsParsers;\n let hasParsers = false;\n let modifyQuery: ((q: Query) => void)[] | undefined = undefined;\n let hasCustomName = false;\n const { snakeCase } = options;\n for (const key in shape) {\n const column = shape[key];\n if (column.parseFn) {\n hasParsers = true;\n parsers[key] = column.parseFn;\n }\n\n if (column.data.modifyQuery) {\n modifyQuery = pushOrNewArray(modifyQuery, column.data.modifyQuery);\n }\n\n if (column.data.name) {\n hasCustomName = true;\n } else if (snakeCase) {\n const snakeName = toSnakeCase(key);\n if (snakeName !== key) {\n hasCustomName = true;\n column.data.name = snakeName;\n }\n }\n\n if (typeof column.data.default === 'function') {\n const arr = this.internal.runtimeDefaultColumns;\n if (!arr) this.internal.runtimeDefaultColumns = [key];\n else arr.push(key);\n }\n }\n\n if (hasCustomName) {\n const list: string[] = [];\n for (const key in shape) {\n const column = shape[key];\n list.push(\n column.data.name ? `${q(column.data.name)} AS ${q(key)}` : q(key),\n );\n }\n this.internal.columnsForSelectAll = list;\n }\n\n this.query = {\n adapter,\n shape: shape as ColumnsShapeBase,\n handleResult,\n logger,\n log: logParamToLogObject(logger, options.log),\n autoPreparedStatements: options.autoPreparedStatements ?? false,\n parsers: hasParsers ? parsers : undefined,\n } as QueryData;\n\n if (options?.schema) {\n this.query.schema = options.schema;\n }\n\n this.primaryKeys = Object.keys(shape).filter(\n (key) => shape[key].data.isPrimaryKey,\n );\n const primaryKeysFromData = getTableData().primaryKey?.columns;\n if (primaryKeysFromData) this.primaryKeys.push(...primaryKeysFromData);\n\n if (this.primaryKeys.length === 1) {\n this.singlePrimaryKey = this\n .primaryKeys[0] as unknown as SinglePrimaryKey<Shape>;\n } else if (\n this.primaryKeys.length === 0 &&\n shape !== anyShape &&\n options.noPrimaryKey !== 'ignore'\n ) {\n const message = `Table ${table} has no primary key`;\n if (options.noPrimaryKey === 'error') throw new Error(message);\n else logger.warn(message);\n }\n\n const columns = Object.keys(\n shape,\n ) as unknown as (keyof ColumnShapeOutput<Shape>)[];\n const { toSql } = this;\n\n this.columns = columns as (keyof ColumnShapeOutput<Shape>)[];\n this.defaultSelectColumns = columns.filter(\n (column) => !shape[column as keyof typeof shape].data.isHidden,\n ) as DefaultSelectColumns<Shape>;\n\n const defaultSelect =\n this.defaultSelectColumns.length === columns.length\n ? undefined\n : this.defaultSelectColumns;\n\n this.toSql = defaultSelect\n ? function <T extends Query>(this: T, options?: ToSqlOptions): Sql {\n const q = this.clone();\n if (!(q.query as SelectQueryData).select) {\n (q.query as SelectQueryData).select = defaultSelect as string[];\n }\n return toSql.call(q, options);\n }\n : toSql;\n\n this.relations = {} as Relations;\n this.relationsQueries = {};\n\n modifyQuery?.forEach((cb) => cb(this));\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.error = class extends QueryError {\n constructor(message?: string) {\n super(self, message);\n }\n };\n }\n\n [inspect.custom]() {\n return `QueryObject<${this.table}>`;\n }\n}\n\napplyMixins(Db, [QueryMethods]);\nDb.prototype.constructor = Db;\n\nexport type DbResult<CT extends ColumnTypesBase> = Db<\n string,\n Record<string, never>,\n Query['relations'],\n ColumnTypesBase extends CT ? DefaultColumnTypes : CT\n> & {\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?:\n | ((t: ColumnTypesBase extends CT ? DefaultColumnTypes : CT) => Shape)\n | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape>;\n\n adapter: Adapter;\n close: Adapter['close'];\n};\n\nexport const createDb = <CT extends ColumnTypesBase>({\n log,\n logger,\n columnTypes: ctOrFn = columnTypes as unknown as CT,\n snakeCase,\n nowSQL,\n ...options\n}: DbOptions<CT>): DbResult<CT> => {\n const adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements: options.autoPreparedStatements ?? false,\n noPrimaryKey: options.noPrimaryKey ?? 'error',\n snakeCase,\n };\n\n const ct = typeof ctOrFn === 'function' ? ctOrFn(columnTypes) : ctOrFn;\n\n if (snakeCase) {\n (ct as { [snakeCaseKey]?: boolean })[snakeCaseKey] = true;\n }\n\n const transactionStorage = new AsyncLocalStorage<AdapterBase>();\n\n const qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n ct,\n transactionStorage,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n\n const db = Object.assign(\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?: ((t: CT) => Shape) | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape, Query['relations'], CT> => {\n return new Db<Table, Shape, Query['relations'], CT>(\n adapter,\n qb as unknown as Db,\n table as Table,\n typeof shape === 'function' ? getColumnTypes(ct, shape, nowSQL) : shape,\n ct,\n transactionStorage,\n { ...commonOptions, ...options },\n );\n },\n qb,\n { adapter, close: () => adapter.close() },\n );\n\n // Set all methods from prototype to the db instance (needed for transaction at least):\n Object.getOwnPropertyNames(Db.prototype).forEach((name) => {\n (db as unknown as Record<string, unknown>)[name] =\n Db.prototype[name as keyof typeof Db.prototype];\n });\n\n return db as unknown as DbResult<CT>;\n};\n","import { Query, QueryWithTable } from './query';\nimport { CreateMethodsNames, DeleteMethodsNames } from './queryMethods';\nimport { EmptyObject } from 'orchid-core';\nimport { QueryBase } from './queryBase';\n\nexport type BaseRelation = {\n type: string;\n key: string;\n table: QueryWithTable;\n query: QueryWithTable;\n joinQuery(fromQuery: QueryBase, toQuery: Query): Query;\n nestedCreateQuery: Query;\n primaryKey: string;\n options: {\n scope?(q: QueryWithTable): QueryWithTable;\n required?: boolean;\n };\n};\n\nexport interface BelongsToRelation extends BaseRelation {\n type: 'belongsTo';\n returns: 'one';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n };\n}\n\nexport interface HasOneRelation extends BaseRelation {\n type: 'hasOne';\n returns: 'one';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasManyRelation extends BaseRelation {\n type: 'hasMany';\n returns: 'many';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasAndBelongsToManyRelation extends BaseRelation {\n type: 'hasAndBelongsToMany';\n returns: 'many';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n associationPrimaryKey: string;\n associationForeignKey: string;\n joinTable: string;\n };\n}\n\nexport type Relation =\n | BelongsToRelation\n | HasOneRelation\n | HasManyRelation\n | HasAndBelongsToManyRelation;\n\nexport type RelationsBase = Record<never, Relation>;\n\nexport type relationQueryKey = typeof relationQueryKey;\nexport const relationQueryKey = Symbol('relationQuery');\n\nexport type isRequiredRelationKey = typeof isRequiredRelationKey;\nexport const isRequiredRelationKey = Symbol('isRequiredRelation');\n\nexport type RelationQueryData = {\n relationName: string;\n sourceQuery: Query;\n relationQuery: Query;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n};\n\nexport type RelationQueryBase = Query & {\n [relationQueryKey]: RelationQueryData;\n [isRequiredRelationKey]: boolean;\n};\n\ntype PrepareRelationQuery<\n T extends Query,\n RelationName extends PropertyKey,\n Required extends boolean,\n Populate extends string,\n> = Omit<T, 'meta'> & {\n meta: Omit<T['meta'], 'as'> & {\n as: RelationName extends string ? RelationName : never;\n defaults: Record<Populate, true>;\n };\n [isRequiredRelationKey]: Required;\n [relationQueryKey]: RelationQueryData;\n};\n\nexport type RelationQuery<\n Name extends PropertyKey = string,\n Params extends Record<string, unknown> = never,\n Populate extends string = never,\n T extends Query = Query,\n Required extends boolean = boolean,\n ChainedCreate extends boolean = false,\n ChainedDelete extends boolean = false,\n Q extends RelationQueryBase = (ChainedCreate extends true\n ? PrepareRelationQuery<T, Name, Required, Populate>\n : PrepareRelationQuery<T, Name, Required, Populate> & {\n [K in CreateMethodsNames]: never;\n }) &\n (ChainedDelete extends true\n ? EmptyObject\n : {\n [K in DeleteMethodsNames]: never;\n }),\n> = ((params: Params) => Q) &\n Q & {\n // INNER JOIN the current relation instead of the default OUTER behavior\n join<T extends Query>(this: T): T;\n };\n","import { Query } from './query';\n\nclass Rollback extends Error {}\n\nconst trxForTest: unique symbol = Symbol('trxForTest');\n\ntype TrxData = {\n promise?: Promise<void>;\n reject?(err: unknown): void;\n adapter: {\n query: unknown;\n arrays: unknown;\n transaction: unknown;\n };\n};\n\ntype Internal = {\n [trxForTest]?: TrxData[];\n};\n\ntype Arg = { $queryBuilder: Query } | Query;\n\nconst argToDb = (arg: Arg): Query =>\n '$queryBuilder' in arg ? arg.$queryBuilder : arg;\n\nexport const testTransaction = {\n start(arg: Arg) {\n const db = argToDb(arg);\n const { transactionStorage } = db.internal;\n const { getStore } = transactionStorage;\n const adapter = db.baseQuery.query as Record<string, unknown>;\n const data: TrxData = {\n adapter: {\n query: adapter.query,\n arrays: adapter.arrays,\n transaction: adapter.transaction,\n },\n };\n ((db.internal as unknown as Internal)[trxForTest] ??= []).push(data);\n\n return new Promise<void>((resolve) => {\n data.promise = db\n .transaction(() => {\n resolve();\n return new Promise<void>((_, rej) => {\n const trx = transactionStorage.getStore();\n db.internal.transactionStorage.getStore = () => trx;\n if (trx) {\n adapter.query = trx.query.bind(trx);\n adapter.arrays = trx.arrays.bind(trx);\n adapter.transaction = trx.transaction.bind(trx);\n }\n data.reject = rej;\n });\n })\n .catch((err) => {\n if (!(err instanceof Rollback)) {\n throw err;\n }\n })\n .finally(() => {\n db.internal.transactionStorage.getStore = getStore;\n });\n });\n },\n rollback(arg: Arg) {\n const db = argToDb(arg);\n const data = (db.internal as unknown as Internal)[trxForTest]?.pop();\n if (data) {\n data.reject?.(new Rollback());\n Object.assign(db.baseQuery.query.adapter, data.adapter);\n return data.promise;\n }\n return;\n },\n async close(arg: Arg) {\n const db = argToDb(arg);\n await this.rollback(db);\n if ((db.internal as unknown as Internal)[trxForTest]?.length === 0) {\n return db.query.adapter.close();\n }\n },\n};\n"],"names":["__spreadProps","__spreadValues","quoteValue","text","hasOptions","q","query","value","item","raw","_a","_b","quotedAs","name","types","__objRest","require","key","resolve","reject","adapter","handleResult","columnTypes","options"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/columns/columnType.ts","../src/raw.ts","../src/sql/common.ts","../src/columns/operators.ts","../src/columns/utils.ts","../src/columns/code.ts","../src/columns/number.ts","../src/columns/string.ts","../src/columns/dateTime.ts","../src/columns/boolean.ts","../src/columns/enum.ts","../src/columns/json.ts","../src/columns/array.ts","../src/query.ts","../src/sql/distinct.ts","../src/sql/orderBy.ts","../src/sql/window.ts","../src/queryDataUtils.ts","../src/sql/join.ts","../src/sql/where.ts","../src/sql/aggregate.ts","../src/errors.ts","../src/sql/select.ts","../src/sql/having.ts","../src/sql/with.ts","../src/sql/types.ts","../src/sql/fromAndAs.ts","../src/sql/insert.ts","../src/sql/update.ts","../src/sql/delete.ts","../src/sql/truncate.ts","../src/sql/columnInfo.ts","../src/quote.ts","../src/sql/copy.ts","../src/sql/toSql.ts","../src/sql/data.ts","../src/utils.ts","../src/columns/customType.ts","../src/columns/columnTypes.ts","../src/columns/columnsSchema.ts","../src/columns/virtual.ts","../src/columns/unknown.ts","../src/columns/columnsByType.ts","../src/adapter.ts","../src/queryMethods/get.ts","../src/queryMethods/_join.ts","../src/queryMethods/select.ts","../src/queryMethods/aggregate.ts","../src/queryMethods/callbacks.ts","../src/queryMethods/clear.ts","../src/queryMethods/columnInfo.ts","../src/queryMethods/delete.ts","../src/queryMethods/for.ts","../src/queryMethods/from.ts","../src/queryMethods/having.ts","../src/queryMethods/then.ts","../src/queryMethods/create.ts","../src/queryBase.ts","../src/queryMethods/where.ts","../src/queryMethods/join.ts","../src/queryMethods/json.ts","../src/queryMethods/log.ts","../src/queryMethods/merge.ts","../src/queryMethods/with.ts","../src/queryMethods/union.ts","../src/queryMethods/update.ts","../src/queryMethods/transaction.ts","../src/queryMethods/window.ts","../src/queryMethods/upsertOrCreate.ts","../src/queryMethods/raw.ts","../src/queryMethods/copy.ts","../src/queryMethods/as.ts","../src/queryMethods/queryMethods.ts","../src/db.ts","../src/relations.ts","../src/testTransaction.ts"],"sourcesContent":["import { ColumnsShape } from './columnsSchema';\nimport { Query } from '../query';\nimport {\n BaseOperators,\n ColumnDataBase,\n ColumnTypeBase,\n HiddenColumn,\n PrimaryKeyColumn,\n pushColumnData,\n setColumnData,\n ValidationContext,\n MaybeArray,\n StringKey,\n QueryCommon,\n MessageParam,\n raw,\n EncodeColumn,\n ParseColumn,\n} from 'orchid-core';\nimport { TableData } from './columnTypes';\n\nexport type ColumnData = ColumnDataBase & {\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n validationDefault?: unknown;\n indexes?: Omit<SingleColumnIndexOptions, 'column'>[];\n comment?: string;\n collate?: string;\n compression?: string;\n foreignKeys?: ForeignKey<string, string[]>[];\n identity?: TableData.Identity;\n};\n\nexport type ForeignKeyMatch = 'FULL' | 'PARTIAL' | 'SIMPLE';\n\nexport type ForeignKeyAction =\n | 'NO ACTION'\n | 'RESTRICT'\n | 'CASCADE'\n | 'SET NULL'\n | 'SET DEFAULT';\n\nexport type ForeignKey<Table extends string, Columns extends string[]> = (\n | {\n fn(): new () => { table: Table; columns: { shape: ColumnsShape } };\n }\n | {\n table: Table;\n }\n) & {\n columns: Columns;\n name?: string;\n dropMode?: DropMode;\n} & ForeignKeyOptions;\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type ForeignKeyOptions = {\n name?: string;\n match?: ForeignKeyMatch;\n onUpdate?: ForeignKeyAction;\n onDelete?: ForeignKeyAction;\n dropMode?: DropMode;\n};\n\nexport type IndexColumnOptions = (\n | { column: string }\n | { expression: string }\n) & {\n collate?: string;\n opclass?: string;\n order?: string;\n};\n\nexport type IndexOptions = {\n name?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n using?: string;\n include?: MaybeArray<string>;\n with?: string;\n tablespace?: string;\n where?: string;\n dropMode?: 'CASCADE' | 'RESTRICT';\n};\n\nexport type SingleColumnIndexOptions = IndexColumnOptions & IndexOptions;\n\nexport type ForeignKeyTable = new () => {\n schema?: string;\n table: string;\n columns: { shape: ColumnsShape };\n};\n\nexport type ColumnNameOfTable<Table extends ForeignKeyTable> = StringKey<\n keyof InstanceType<Table>['columns']['shape']\n>;\n\nexport type ColumnFromDbParams = {\n isNullable?: boolean;\n default?: string;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n};\n\nconst knownDefaults: Record<string, string> = {\n current_timestamp: 'now()',\n 'transaction_timestamp()': 'now()',\n};\n\nexport const simplifyColumnDefault = (value?: string) => {\n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n return raw(knownDefaults[lower] || value);\n }\n return;\n};\n\nexport const instantiateColumn = (\n klass: new (...args: never[]) => ColumnType,\n params: ColumnFromDbParams,\n): ColumnType => {\n const column = new (klass as unknown as new () => ColumnType)();\n\n Object.assign(column.data, {\n ...params,\n default: simplifyColumnDefault(params.default),\n });\n return column as unknown as ColumnType;\n};\n\nexport abstract class ColumnType<\n Type = unknown,\n Ops extends BaseOperators = BaseOperators,\n InputType = Type,\n> extends ColumnTypeBase<Type, Ops, InputType, ColumnData> {\n primaryKey<T extends ColumnType>(this: T): PrimaryKeyColumn<T> {\n return setColumnData(\n this,\n 'isPrimaryKey',\n true,\n ) as unknown as PrimaryKeyColumn<T>;\n }\n\n foreignKey<\n T extends ColumnType,\n Table extends ForeignKeyTable,\n Column extends ColumnNameOfTable<Table>,\n >(\n this: T,\n fn: () => Table,\n column: Column,\n options?: ForeignKeyOptions,\n ): Omit<T, 'foreignKeyData'> & {\n foreignKeyData: ForeignKey<InstanceType<Table>['table'], [Column]>;\n };\n foreignKey<T extends ColumnType, Table extends string, Column extends string>(\n this: T,\n table: Table,\n column: Column,\n options?: ForeignKeyOptions,\n ): Omit<T, 'foreignKeyData'> & {\n foreignKeyData: ForeignKey<Table, [Column]>;\n };\n foreignKey(\n fnOrTable: (() => ForeignKeyTable) | string,\n column: string,\n options: ForeignKeyOptions = {},\n ) {\n const item =\n typeof fnOrTable === 'string'\n ? { table: fnOrTable, columns: [column], ...options }\n : { fn: fnOrTable, columns: [column], ...options };\n return pushColumnData(this, 'foreignKeys', item);\n }\n\n hidden<T extends ColumnType>(this: T): HiddenColumn<T> {\n return setColumnData(this, 'isHidden', true) as HiddenColumn<T>;\n }\n\n encode<T extends ColumnType, Input>(\n this: T,\n fn: (input: Input) => unknown,\n ): EncodeColumn<T, Input> {\n return Object.assign(Object.create(this), {\n encodeFn: fn,\n }) as unknown as EncodeColumn<T, Input>;\n }\n\n parse<T extends ColumnType, Output>(\n this: T,\n fn: (input: T['type']) => Output,\n ): ParseColumn<T, Output> {\n return Object.assign(Object.create(this), {\n parseFn: fn,\n parseItem: fn,\n }) as unknown as ParseColumn<T, Output>;\n }\n\n as<\n T extends ColumnType,\n C extends ColumnType<T['type'], BaseOperators, T['inputType']>,\n >(this: T, column: C): C {\n return setColumnData(this, 'as', column) as unknown as C;\n }\n\n toSQL() {\n return this.dataType;\n }\n\n index<T extends ColumnType>(\n this: T,\n options: Omit<SingleColumnIndexOptions, 'column'> = {},\n ): T {\n return pushColumnData(this, 'indexes', options);\n }\n\n unique<T extends ColumnType>(\n this: T,\n options: Omit<SingleColumnIndexOptions, 'column' | 'unique'> = {},\n ): T {\n return pushColumnData(this, 'indexes', { ...options, unique: true });\n }\n\n comment<T extends ColumnType>(this: T, comment: string): T {\n return setColumnData(this, 'comment', comment);\n }\n\n validationDefault<T extends ColumnType>(this: T, value: T['type']): T {\n return setColumnData(this, 'validationDefault', value as unknown);\n }\n\n compression<T extends ColumnType>(this: T, compression: string): T {\n return setColumnData(this, 'compression', compression);\n }\n\n collate<T extends ColumnType>(this: T, collate: string): T {\n return setColumnData(this, 'collate', collate);\n }\n\n modifyQuery<T extends ColumnType>(this: T, cb: (q: Query) => void): T {\n return setColumnData(this, 'modifyQuery', cb as (q: QueryCommon) => void);\n }\n\n transform<T extends ColumnType, Transformed>(\n this: T,\n fn: (input: T['type'], ctx: ValidationContext) => Transformed,\n ): Omit<T, 'type'> & { type: Transformed } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['transform', fn]];\n return cloned as Omit<T, 'type'> & { type: Transformed };\n }\n\n to<T extends ColumnType, ToType extends ColumnType>(\n this: T,\n fn: (input: T['type']) => ToType['type'] | undefined,\n type: ToType,\n ): ToType {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['to', fn, type], ...cloned.chain];\n return cloned as ToType;\n }\n\n refine<T extends ColumnType, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type']) => unknown,\n params?: MessageParam,\n ): T & { type: RefinedOutput } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['refine', check, cloned]];\n\n if (typeof params === 'string' || params?.message) {\n cloned.data = {\n ...this.data,\n errors: {\n ...this.data.errors,\n refine: typeof params === 'string' ? params : params.message,\n },\n };\n }\n\n return cloned as T & { type: RefinedOutput };\n }\n\n superRefine<T extends ColumnType, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type'], ctx: ValidationContext) => unknown,\n ): T & { type: RefinedOutput } {\n const cloned = Object.create(this);\n cloned.chain = [...this.chain, ['superRefine', check]];\n return cloned as T & { type: RefinedOutput };\n }\n}\n","import { RawExpression } from 'orchid-core';\n\nconst keys: string[] = [];\nexport const getRaw = (raw: RawExpression, valuesArray: unknown[]) => {\n if (!raw.__values) {\n return raw.__raw;\n }\n\n const arr = raw.__raw.split(\"'\");\n const values = raw.__values as Record<string, unknown>;\n const len = arr.length;\n keys.length = 0;\n for (let i = 0; i < len; i += 2) {\n arr[i] = arr[i].replace(/\\$(\\w+)/g, (_, key) => {\n const value = values[key];\n if (value === undefined) {\n throw new Error(`Query variable \\`${key}\\` is not provided`);\n }\n\n keys.push(key);\n valuesArray.push(value);\n return `$${valuesArray.length}`;\n });\n }\n\n if (keys.length > 0 && keys.length < Object.keys(values).length) {\n for (const key in values) {\n if (!keys.includes(key)) {\n throw new Error(`Query variable \\`${key}\\` is unused`);\n }\n }\n }\n\n return arr.join(\"'\");\n};\n","import { getRaw } from '../raw';\nimport { Expression } from '../utils';\nimport { QueryData } from './data';\n\nexport type ColumnNamesShape = Record<string, { data: { name?: string } }>;\n\nexport const q = (sql: string) => `\"${sql}\"`;\n\n// quote column with table or as\nexport const qc = (column: string, quotedAs?: string) =>\n quotedAs ? `${quotedAs}.${q(column)}` : column;\n\nconst getJoinedColumnName = (\n data: Pick<QueryData, 'joinedShapes'>,\n shape: ColumnNamesShape,\n table: string,\n key: string,\n isOwnColumn: boolean,\n) =>\n ((isOwnColumn ? shape[key] : undefined) || data.joinedShapes?.[table]?.[key])\n ?.data.name;\n\nexport const revealColumnToSql = (\n data: Pick<QueryData, 'joinedShapes'>,\n shape: ColumnNamesShape,\n column: string,\n quotedAs?: string,\n select?: true,\n) => {\n const index = column.indexOf('.');\n if (index !== -1) {\n const table = column.slice(0, index);\n const key = column.slice(index + 1);\n const quoted = q(table);\n return `${quoted}.${q(\n getJoinedColumnName(data, shape, table, key, quoted === quotedAs) || key,\n )}`;\n } else if (data.joinedShapes?.[column]) {\n return select ? `row_to_json(\"${column}\".*)` : `\"${column}\".r`;\n } else if (quotedAs && shape[column]) {\n return `${quotedAs}.${q(shape[column].data.name || column)}`;\n } else {\n return q(shape[column]?.data.name || column);\n }\n};\n\nexport const revealColumnToSqlWithAs = (\n data: QueryData,\n column: string,\n quotedAs?: string,\n select?: true,\n) => {\n const index = column.indexOf('.');\n if (index !== -1) {\n const table = column.slice(0, index);\n const key = column.slice(index + 1);\n const quoted = q(table);\n const name = getJoinedColumnName(\n data,\n data.shape,\n table,\n key,\n quoted === quotedAs,\n );\n return `${quoted}.${q(name || key)}${\n name && name !== key ? ` AS ${q(key)}` : ''\n }`;\n } else if (data.joinedShapes?.[column]) {\n return select\n ? `row_to_json(\"${column}\".*) \"${column}\"`\n : `\"${column}\".r \"${column}\"`;\n } else {\n const name = data.shape[column]?.data.name;\n return `${quotedAs ? `${quotedAs}.` : ''}${q(name || column)}${\n name && name !== column ? ` AS ${q(column)}` : ''\n }`;\n }\n};\n\nexport const rawOrRevealColumnToSql = (\n data: Pick<QueryData, 'shape' | 'joinedShapes'>,\n expr: Expression,\n values: unknown[],\n quotedAs: string | undefined,\n shape: ColumnNamesShape = data.shape,\n select?: true,\n) => {\n return typeof expr === 'string'\n ? revealColumnToSql(data, shape, expr, quotedAs, select)\n : getRaw(expr, values);\n};\n\nexport const quoteSchemaAndTable = (\n schema: string | undefined,\n table: string,\n) => {\n return schema ? `${q(schema)}.${q(table)}` : q(table);\n};\n\nexport const addValue = (values: unknown[], value: unknown) => {\n values.push(value);\n return `$${values.length}`;\n};\n","import { Query } from '../query';\nimport { addValue } from '../sql/common';\nimport { getRaw } from '../raw';\nimport { createOperator, isRaw, RawExpression } from 'orchid-core';\n\nconst quoteValue = (\n arg: unknown,\n values: unknown[],\n jsonArray?: boolean,\n): string => {\n if (arg && typeof arg === 'object') {\n if (!jsonArray && Array.isArray(arg)) {\n return `(${arg.map((value) => addValue(values, value)).join(', ')})`;\n }\n\n if ('toSql' in arg) {\n return `(${(arg as Query).toSql({ values }).text})`;\n }\n\n if (isRaw(arg)) {\n return getRaw(arg, values);\n }\n }\n\n return addValue(values, arg);\n};\n\nconst all = {\n equals: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NULL`\n : `${key} = ${quoteValue(value, values)}`,\n ),\n not: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NOT NULL`\n : `${key} <> ${quoteValue(value, values)}`,\n ),\n in: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `${key} IN ${quoteValue(value, values)}`,\n ),\n notIn: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `NOT ${key} IN ${quoteValue(value, values)}`,\n ),\n lt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} < ${quoteValue(value, values)}`,\n ),\n lte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <= ${quoteValue(value, values)}`,\n ),\n gt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} > ${quoteValue(value, values)}`,\n ),\n gte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} >= ${quoteValue(value, values)}`,\n ),\n contains: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n containsSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} LIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n startsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE ${quoteValue(value, values)} || '%'`,\n ),\n startsWithSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE ${quoteValue(value, values)} || '%'`,\n ),\n endsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)}`,\n ),\n endsWithSensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE '%' || ${quoteValue(value, values)}`,\n ),\n between: <T>() =>\n createOperator<[T | Query | RawExpression, T | Query | RawExpression]>(\n (key, [from, to], values) =>\n `${key} BETWEEN ${quoteValue(from, values)} AND ${quoteValue(\n to,\n values,\n )}`,\n ),\n jsonPath: <T>() =>\n createOperator<\n [path: string, op: string, value: T | Query | RawExpression]\n >(\n (key, [path, op, value], values) =>\n `jsonb_path_query_first(${key}, '${path}') #>> '{}' ${op} ${quoteValue(\n value,\n values,\n true,\n )}`,\n ),\n jsonSupersetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} @> ${quoteValue(value, values, true)}`,\n ),\n jsonSubsetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <@ ${quoteValue(value, values, true)}`,\n ),\n};\n\nconst base = <T>() => ({\n equals: all.equals<T>(),\n not: all.not<T>(),\n in: all.in<T>(),\n notIn: all.notIn<T>(),\n});\n\nconst numeric = <T>() => ({\n ...base<T>(),\n lt: all.lt<T>(),\n lte: all.lte<T>(),\n gt: all.gt<T>(),\n gte: all.gte<T>(),\n between: all.between<T>(),\n});\n\nconst text = <T>() => ({\n ...base<T>(),\n contains: all.contains<T>(),\n containsSensitive: all.containsSensitive<T>(),\n startsWith: all.startsWith<T>(),\n startsWithSensitive: all.startsWithSensitive<T>(),\n endsWith: all.endsWith<T>(),\n endsWithSensitive: all.endsWithSensitive<T>(),\n});\n\nconst json = <T>() => ({\n ...base<T>(),\n jsonPath: all.jsonPath<T>(),\n jsonSupersetOf: all.jsonSupersetOf<T>(),\n jsonSubsetOf: all.jsonSubsetOf<T>(),\n});\n\nexport const Operators = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any: base<any>(),\n boolean: base<boolean>(),\n number: numeric<number>(),\n date: numeric<Date>(),\n time: numeric<Date>(),\n text: text<string>(),\n json: json<unknown>(),\n // TODO: array operators\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n array: base<any>(),\n};\n","export const cloneInstance = <T>(instance: T): T => {\n return Object.assign(\n Object.create(Object.getPrototypeOf(instance)),\n instance,\n );\n};\n\nexport const assignMethodsToClass = <Methods extends Record<string, unknown>>(\n klass: { prototype: unknown },\n methods: Methods,\n) => {\n for (const name in methods) {\n Object.defineProperty(klass.prototype, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value(...args: unknown[]) {\n const cloned = cloneInstance(this);\n return (\n methods as unknown as Record<string, (...args: unknown[]) => unknown>\n )[name].apply(cloned, args);\n },\n });\n }\n};\n","import { ColumnData, ColumnType, ForeignKey } from './columnType';\nimport { getConstraintKind, TableData } from './columnTypes';\nimport {\n addCode,\n Code,\n columnChainToCode,\n columnDefaultArgumentToCode,\n columnErrorMessagesToCode,\n ColumnsShapeBase,\n ColumnTypeBase,\n isRaw,\n objectHasValues,\n quoteObjectKey,\n RawExpression,\n rawToCode,\n singleQuote,\n singleQuoteArray,\n toArray,\n} from 'orchid-core';\n\nconst isDefaultTimeStamp = (item: ColumnTypeBase) => {\n if (item.dataType !== 'timestamptz') return false;\n\n const def = item.data.default;\n return def && isRaw(def) && def.__raw.startsWith('now()');\n};\n\nconst combineCodeElements = (input: Code): Code => {\n if (typeof input === 'string') return input;\n\n const output: Code = [];\n let i = -1;\n\n for (const item of input) {\n if (typeof item === 'string') {\n if (typeof output[i] === 'string') {\n output[i] += item;\n } else {\n output[++i] = item;\n }\n } else {\n output[++i] = combineCodeElements(item);\n }\n }\n\n return output;\n};\n\nexport const columnsShapeToCode = (\n shape: ColumnsShapeBase,\n tableData: TableData,\n t: string,\n): Code[] => {\n const hasTimestamps =\n 'createdAt' in shape &&\n isDefaultTimeStamp(shape.createdAt) &&\n 'updatedAt' in shape &&\n isDefaultTimeStamp(shape.updatedAt);\n\n const code: Code = [];\n\n for (const key in shape) {\n if (hasTimestamps && (key === 'createdAt' || key === 'updatedAt')) continue;\n\n code.push(\n ...combineCodeElements([\n `${quoteObjectKey(key)}: `,\n ...toArray(shape[key].toCode(t)),\n ',',\n ]),\n );\n }\n\n if (hasTimestamps) {\n code.push(`...${t}.timestamps(),`);\n }\n\n const { primaryKey, indexes, constraints } = tableData;\n if (primaryKey) {\n code.push(primaryKeyToCode(primaryKey, t));\n }\n\n if (indexes) {\n for (const index of indexes) {\n code.push(...indexToCode(index, t));\n }\n }\n\n if (constraints) {\n for (const item of constraints) {\n code.push(...constraintToCode(item, t));\n }\n }\n\n return code;\n};\n\nexport const primaryKeyToCode = (\n primaryKey: TableData.PrimaryKey,\n t: string,\n): string => {\n const name = primaryKey.options?.name;\n\n return `...${t}.primaryKey([${primaryKey.columns\n .map(singleQuote)\n .join(', ')}]${name ? `, { name: ${singleQuote(name)} }` : ''}),`;\n};\n\nexport const indexToCode = (index: TableData.Index, t: string): Code[] => {\n const code: Code[] = [];\n\n code.push(`...${t}.index(`);\n\n const columnsMultiline = index.columns.some((column) => {\n for (const key in column) {\n if (key !== 'column' && column[key as keyof typeof column] !== undefined)\n return true;\n }\n return false;\n });\n if (columnsMultiline) {\n const objects: Code[] = [];\n\n for (const column of index.columns) {\n const expr = 'column' in column ? column.column : column.expression;\n\n let hasOptions = false;\n for (const key in column) {\n if (key !== 'column' && key !== 'expression') {\n hasOptions = true;\n }\n }\n\n if (!hasOptions) {\n objects.push(`${singleQuote(expr)},`);\n } else {\n const props: Code[] = [\n `${'column' in column ? 'column' : 'expression'}: ${singleQuote(\n expr,\n )},`,\n ];\n if (column.collate !== undefined) {\n props.push(`collate: ${singleQuote(column.collate)},`);\n }\n if (column.opclass !== undefined) {\n props.push(`opclass: ${singleQuote(column.opclass)},`);\n }\n if (column.order !== undefined) {\n props.push(`order: ${singleQuote(column.order)},`);\n }\n\n objects.push('{', props, '},');\n }\n }\n\n code.push(['[', objects, ']']);\n } else {\n addCode(\n code,\n `[${index.columns\n .map((it) => singleQuote((it as { column: string }).column))\n .join(', ')}]`,\n );\n }\n\n const hasOptions = objectHasValues(index.options);\n if (hasOptions) {\n if (columnsMultiline) {\n const columns = code[code.length - 1] as string[];\n columns[columns.length - 1] += ',';\n code.push(['{']);\n } else {\n addCode(code, ', {');\n }\n\n const options: string[] = [];\n for (const key in index.options) {\n const value = index.options[key as keyof typeof index.options];\n if (value === null || value === undefined) continue;\n\n options.push(\n `${key}: ${\n typeof value === 'object'\n ? singleQuoteArray(value)\n : typeof value === 'string'\n ? singleQuote(value)\n : value\n },`,\n );\n }\n\n if (columnsMultiline) {\n code.push([options, '},']);\n } else {\n code.push(options);\n addCode(code, '}');\n }\n }\n\n if (columnsMultiline) {\n code.push('),');\n } else {\n addCode(code, '),');\n }\n\n return code;\n};\n\nexport const constraintToCode = (\n item: TableData.Constraint,\n t: string,\n): Code => {\n const kind = getConstraintKind(item);\n\n if (kind === 'foreignKey' && item.references) {\n return [\n `...${t}.foreignKey(`,\n referencesArgsToCode(item.references, item.name),\n '),',\n ];\n } else if (kind === 'check' && item.check) {\n return [`...${t}.check(${rawToCode(t, item.check)}),`];\n } else {\n return [`...${t}.constraint({`, constraintPropsToCode(t, item), '}),'];\n }\n};\n\nexport const constraintPropsToCode = (\n t: string,\n item: TableData.Constraint,\n): Code[] => {\n const props: Code[] = [];\n\n if (item.name) {\n props.push(`name: ${singleQuote(item.name)},`);\n }\n\n if (item.references) {\n props.push(\n `references: [`,\n referencesArgsToCode(item.references, false),\n '],',\n );\n }\n\n if (item.check) {\n props.push(`check: ${rawToCode(t, item.check)},`);\n }\n\n return props;\n};\n\nexport const referencesArgsToCode = (\n {\n columns,\n fnOrTable,\n foreignColumns,\n options,\n }: Exclude<TableData.Constraint['references'], undefined>,\n name: string | false = options?.name || false,\n): Code[] => {\n const args: Code[] = [];\n\n args.push(`${singleQuoteArray(columns)},`);\n\n args.push(\n `${\n typeof fnOrTable === 'string'\n ? singleQuote(fnOrTable)\n : fnOrTable.toString()\n },`,\n );\n\n args.push(`${singleQuoteArray(foreignColumns)},`);\n\n if (objectHasValues(options) || name) {\n const lines: string[] = [];\n if (name) lines.push(`name: ${singleQuote(name)},`);\n for (const key in options) {\n if (key === 'name') continue;\n const value = options[key as keyof typeof options];\n if (value) lines.push(`${key}: ${singleQuote(value)},`);\n }\n args.push('{', lines, '},');\n }\n\n return args;\n};\n\nexport const columnForeignKeysToCode = (\n foreignKeys: ForeignKey<string, string[]>[],\n): Code[] => {\n const code: Code[] = [];\n for (const foreignKey of foreignKeys) {\n addCode(code, `.foreignKey(`);\n for (const part of foreignKeyArgumentToCode(foreignKey)) {\n addCode(code, part);\n }\n addCode(code, ')');\n }\n return code;\n};\n\nexport const foreignKeyArgumentToCode = (\n foreignKey: ForeignKey<string, string[]>,\n): Code[] => {\n const code: Code = [];\n\n if ('fn' in foreignKey) {\n code.push(foreignKey.fn.toString());\n } else {\n code.push(singleQuote(foreignKey.table));\n }\n addCode(code, `, ${singleQuote(foreignKey.columns[0])}`);\n\n const hasOptions =\n foreignKey.name ||\n foreignKey.match ||\n foreignKey.onUpdate ||\n foreignKey.onDelete;\n\n if (hasOptions) {\n const arr: string[] = [];\n\n if (foreignKey.name) arr.push(`name: ${singleQuote(foreignKey.name)},`);\n if (foreignKey.match) arr.push(`match: ${singleQuote(foreignKey.match)},`);\n if (foreignKey.onUpdate)\n arr.push(`onUpdate: ${singleQuote(foreignKey.onUpdate)},`);\n if (foreignKey.onDelete)\n arr.push(`onDelete: ${singleQuote(foreignKey.onDelete)},`);\n\n addCode(code, ', {');\n code.push(arr);\n addCode(code, '}');\n }\n\n return code;\n};\n\nexport const columnIndexesToCode = (\n indexes: Exclude<ColumnData['indexes'], undefined>,\n): Code[] => {\n const code: Code[] = [];\n for (const index of indexes) {\n addCode(code, `.${index.unique ? 'unique' : 'index'}(`);\n\n const arr: string[] = [];\n\n if (index.collate) arr.push(`collate: ${singleQuote(index.collate)},`);\n if (index.opclass) arr.push(`opclass: ${singleQuote(index.opclass)},`);\n if (index.order) arr.push(`order: ${singleQuote(index.order)},`);\n if (index.name) arr.push(`name: ${singleQuote(index.name)},`);\n if (index.using) arr.push(`using: ${singleQuote(index.using)},`);\n if (index.include)\n arr.push(\n `include: ${\n typeof index.include === 'string'\n ? singleQuote(index.include)\n : `[${index.include.map(singleQuote).join(', ')}]`\n },`,\n );\n if (index.nullsNotDistinct) arr.push(`nullsNotDistinct: true,`);\n if (index.with) arr.push(`with: ${singleQuote(index.with)},`);\n if (index.tablespace)\n arr.push(`tablespace: ${singleQuote(index.tablespace)},`);\n if (index.where) arr.push(`where: ${singleQuote(index.where)},`);\n\n if (arr.length) {\n addCode(code, '{');\n addCode(code, arr);\n addCode(code, '}');\n }\n\n addCode(code, ')');\n }\n return code;\n};\n\nexport const columnCheckToCode = (t: string, check: RawExpression): string => {\n return `.check(${rawToCode(t, check)})`;\n};\n\nexport const identityToCode = (\n identity: TableData.Identity,\n dataType?: string,\n) => {\n const code: Code[] = [];\n\n if (dataType === 'integer') {\n code.push(`identity(`);\n } else {\n code.push(`${dataType}().identity(`);\n }\n\n const props: string[] = [];\n if (identity.always) props.push(`always: true,`);\n if (identity.incrementBy) props.push(`incrementBy: ${identity.incrementBy},`);\n if (identity.startWith) props.push(`startWith: ${identity.startWith},`);\n if (identity.min) props.push(`min: ${identity.min},`);\n if (identity.max) props.push(`max: ${identity.max},`);\n if (identity.cache) props.push(`cache: ${identity.cache},`);\n\n if (props.length) {\n addCode(code, '{');\n code.push(props, '}');\n }\n\n addCode(code, ')');\n\n return code;\n};\n\nexport const columnCode = (\n type: ColumnType,\n t: string,\n code: Code,\n data = type.data,\n skip?: Record<'encodeFn', unknown>,\n): Code => {\n code = toArray(code);\n\n let prepend = `${t}.`;\n if (data.name) {\n prepend += `name(${singleQuote(data.name)}).`;\n }\n\n if (typeof code[0] === 'string') {\n code[0] = `${prepend}${code[0]}`;\n } else {\n code[0].unshift(prepend);\n }\n\n if (data.isPrimaryKey) addCode(code, '.primaryKey()');\n\n if (data.foreignKeys) {\n for (const part of columnForeignKeysToCode(data.foreignKeys)) {\n addCode(code, part);\n }\n }\n\n if (data.isHidden) addCode(code, '.hidden()');\n\n if (data.isNullable) addCode(code, '.nullable()');\n\n if (type.encodeFn && type.encodeFn !== skip?.encodeFn)\n addCode(code, `.encode(${type.encodeFn.toString()})`);\n\n if (type.parseFn && !('hideFromCode' in type.parseFn))\n addCode(code, `.parse(${type.parseFn.toString()})`);\n\n if (data.as) addCode(code, `.as(${data.as.toCode(t)})`);\n\n if (data.default !== undefined && data.default !== null) {\n addCode(code, `.default(${columnDefaultArgumentToCode(t, data.default)})`);\n }\n\n if (data.indexes) {\n for (const part of columnIndexesToCode(data.indexes)) {\n addCode(code, part);\n }\n }\n\n if (data.comment) addCode(code, `.comment(${singleQuote(data.comment)})`);\n\n if (data.check) {\n addCode(code, columnCheckToCode(t, data.check));\n }\n\n if (data.errors) {\n for (const part of columnErrorMessagesToCode(data.errors)) {\n addCode(code, part);\n }\n }\n\n const { validationDefault } = data;\n if (validationDefault) {\n addCode(\n code,\n `.validationDefault(${\n typeof validationDefault === 'function'\n ? validationDefault.toString()\n : typeof validationDefault === 'string'\n ? singleQuote(validationDefault)\n : JSON.stringify(validationDefault)\n })`,\n );\n }\n\n if (data.compression)\n addCode(code, `.compression(${singleQuote(data.compression)})`);\n\n if (data.collate) addCode(code, `.collate(${singleQuote(data.collate)})`);\n\n if (data.modifyQuery)\n addCode(code, `.modifyQuery(${data.modifyQuery.toString()})`);\n\n return columnChainToCode(type.chain, t, code);\n};\n","import { Operators } from './operators';\nimport { ColumnData, ColumnType } from './columnType';\nimport { assignMethodsToClass } from './utils';\nimport {\n numberTypeMethods,\n Code,\n RawExpression,\n joinTruthy,\n BaseNumberData,\n numberDataToCode,\n setColumnData,\n addCode,\n ColumnWithDefault,\n ColumnTypeBase,\n} from 'orchid-core';\nimport { columnCode, identityToCode } from './code';\nimport type { TableData } from './columnTypes';\n\nexport type NumberColumn = ColumnType<number, typeof Operators.number>;\n\nexport type NumberColumnData = BaseNumberData & {\n identity: TableData.Identity;\n};\n\nexport type SerialColumnData = NumberColumnData & {\n default: RawExpression;\n};\n\ntype NumberMethods = typeof numberTypeMethods;\n\nexport interface NumberBaseColumn\n extends ColumnType<number, typeof Operators.number>,\n NumberMethods {}\n\nexport abstract class NumberBaseColumn extends ColumnType<\n number,\n typeof Operators.number\n> {\n declare data: NumberColumnData;\n operators = Operators.number;\n}\n\nassignMethodsToClass(NumberBaseColumn, numberTypeMethods);\n\nexport abstract class IntegerBaseColumn extends NumberBaseColumn {\n declare data: NumberColumnData;\n constructor() {\n super();\n this.data.int = true;\n }\n}\n\nexport abstract class NumberAsStringBaseColumn extends ColumnType<\n string,\n typeof Operators.number\n> {\n operators = Operators.number;\n declare data: ColumnData;\n}\n\nexport class DecimalBaseColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.number> {\n declare data: ColumnData & {\n numericPrecision: Precision;\n numericScale: Scale;\n };\n operators = Operators.number;\n dataType = 'decimal' as const;\n\n constructor(numericPrecision?: Precision, numericScale?: Scale) {\n super();\n this.data.numericPrecision = numericPrecision as Precision;\n this.data.numericScale = numericScale as Scale;\n }\n\n toCode(t: string): Code {\n const { numericPrecision, numericScale } = this.data;\n return columnCode(\n this,\n t,\n `decimal(${numericPrecision || ''}${\n numericScale ? `, ${numericScale}` : ''\n })`,\n );\n }\n\n toSQL() {\n const { numericPrecision, numericScale } = this.data;\n\n return joinTruthy(\n this.dataType,\n numericPrecision\n ? numericScale\n ? `(${numericPrecision}, ${numericScale})`\n : `(${numericPrecision})`\n : undefined,\n );\n }\n}\n\nconst intToCode = (column: ColumnType, t: string): Code => {\n let code: Code[];\n\n if (column.data.identity) {\n code = identityToCode(column.data.identity, column.dataType);\n } else {\n code = [`${column.dataType}()`];\n }\n\n addCode(code, numberDataToCode(column.data));\n\n return columnCode(column, t, code);\n};\n\nexport type IdentityColumn<T extends ColumnTypeBase> = ColumnWithDefault<\n T,\n RawExpression\n>;\n\n// signed two-byte integer\nexport class SmallIntColumn extends IntegerBaseColumn {\n dataType = 'smallint' as const;\n parseItem = parseInt;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// signed four-byte integer\nexport class IntegerColumn extends IntegerBaseColumn {\n dataType = 'integer' as const;\n parseItem = parseInt;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// signed eight-byte integer\nexport class BigIntColumn extends NumberAsStringBaseColumn {\n dataType = 'bigint' as const;\n toCode(t: string): Code {\n return intToCode(this, t);\n }\n\n identity<T extends ColumnType>(\n this: T,\n options: TableData.Identity = {},\n ): IdentityColumn<T> {\n return setColumnData(this, 'identity', options) as IdentityColumn<T>;\n }\n}\n\n// exact numeric of selectable precision\nexport class DecimalColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends DecimalBaseColumn<Precision, Scale> {}\n\n// single precision floating-point number (4 bytes)\nexport class RealColumn extends NumberBaseColumn {\n dataType = 'real' as const;\n parseItem = parseFloat;\n toCode(t: string): Code {\n return columnCode(this, t, `real()${numberDataToCode(this.data)}`);\n }\n}\n\n// double precision floating-point number (8 bytes)\nexport class DoublePrecisionColumn extends NumberAsStringBaseColumn {\n dataType = 'double precision' as const;\n toCode(t: string): Code {\n return columnCode(this, t, `doublePrecision()`);\n }\n}\n\n// autoincrementing two-byte integer\nexport class SmallSerialColumn extends IntegerBaseColumn {\n dataType = 'smallint' as const;\n parseItem = parseInt;\n declare data: SerialColumnData;\n\n constructor() {\n super();\n this.data.int = true;\n }\n\n toSQL() {\n return 'smallserial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `smallSerial()${numberDataToCode(this.data)}`);\n }\n}\n\n// autoincrementing four-byte integer\nexport class SerialColumn extends IntegerBaseColumn {\n dataType = 'integer' as const;\n parseItem = parseInt;\n declare data: SerialColumnData;\n\n constructor() {\n super();\n this.data.int = true;\n }\n\n toSQL() {\n return 'serial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `serial()${numberDataToCode(this.data)}`);\n }\n}\n\n// autoincrementing eight-byte integer\nexport class BigSerialColumn extends NumberAsStringBaseColumn {\n dataType = 'bigint' as const;\n declare data: SerialColumnData;\n\n toSql() {\n return 'bigserial';\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `bigSerial()`);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { NumberBaseColumn } from './number';\nimport { assignMethodsToClass } from './utils';\nimport {\n stringTypeMethods,\n Code,\n joinTruthy,\n BaseStringData,\n stringDataToCode,\n PrimaryKeyColumn,\n raw,\n RawExpression,\n} from 'orchid-core';\nimport { columnCode } from './code';\n\nexport type StringColumn = ColumnType<string, typeof Operators.text>;\n\nexport type TextColumnData = BaseStringData;\n\ntype TextMethods = typeof textMethods;\nconst textMethods = stringTypeMethods();\n\nexport interface TextBaseColumn\n extends ColumnType<string, typeof Operators.text>,\n TextMethods {}\n\nexport abstract class TextBaseColumn extends ColumnType<\n string,\n typeof Operators.text\n> {\n declare data: TextColumnData;\n operators = Operators.text;\n}\n\nassignMethodsToClass(TextBaseColumn, textMethods);\n\nexport abstract class LimitedTextBaseColumn<\n Limit extends number | undefined = undefined,\n> extends TextBaseColumn {\n declare data: TextColumnData & { maxChars: Limit };\n\n constructor(limit?: Limit) {\n super();\n this.data.maxChars = limit as Limit;\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.maxChars !== undefined && `(${this.data.maxChars})`,\n );\n }\n}\n\n// character varying(n), varchar(n) variable-length with limit\nexport class VarCharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'varchar' as const;\n toCode(t: string): Code {\n const { maxChars } = this.data;\n return columnCode(\n this,\n t,\n `varchar(${maxChars ?? ''})${stringDataToCode(this.data)}`,\n );\n }\n}\n\n// character(n), char(n) fixed-length, blank padded\nexport class CharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'char' as const;\n toCode(t: string): Code {\n const { maxChars } = this.data;\n return columnCode(\n this,\n t,\n `char(${maxChars ?? ''})${stringDataToCode(this.data)}`,\n );\n }\n}\n\nconst setTextColumnData = (\n column: { data: TextColumnData & { minArg?: number; maxArg?: number } },\n minArg?: number,\n maxArg?: number,\n) => {\n if (minArg !== undefined) {\n column.data.min = column.data.minArg = minArg;\n if (maxArg !== undefined) {\n column.data.max = column.data.maxArg = maxArg;\n }\n }\n};\n\nconst textColumnToCode = (\n column: TextBaseColumn & {\n data: TextColumnData & { minArg?: number; maxArg?: number };\n },\n t: string,\n) => {\n const data = { ...column.data };\n let args = '';\n if (data.minArg !== undefined && data.min === data.minArg) {\n args += data.minArg;\n delete data.min;\n if (data.maxArg !== undefined && data.max === data.maxArg) {\n args += `, ${data.maxArg}`;\n delete data.max;\n }\n }\n return columnCode(\n column,\n t,\n `${column.dataType}(${args})${stringDataToCode(data)}`,\n );\n};\n\n// text\tvariable unlimited length\nexport class TextColumn extends TextBaseColumn {\n dataType = 'text' as const;\n declare data: TextColumnData & { minArg?: number; maxArg?: number };\n\n constructor(minArg?: number, maxArg?: number) {\n super();\n setTextColumnData(this, minArg, maxArg);\n }\n\n toCode(t: string): Code {\n return textColumnToCode(this, t);\n }\n}\n\n// To store binary strings\nexport class ByteaColumn extends ColumnType<Buffer, typeof Operators.text> {\n dataType = 'bytea' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `bytea()`);\n }\n}\n\n// point\t16 bytes\tPoint on a plane\t(x,y)\nexport class PointColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `point()`);\n }\n}\n\n// line\t32 bytes\tInfinite line\t{A,B,C}\nexport class LineColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'line' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `line()`);\n }\n}\n\n// lseg\t32 bytes\tFinite line segment\t((x1,y1),(x2,y2))\nexport class LsegColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'lseg' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `lseg()`);\n }\n}\n\n// box\t32 bytes\tRectangular box\t((x1,y1),(x2,y2))\nexport class BoxColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'box' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `box()`);\n }\n}\n\n// path\t16+16n bytes\tClosed path (similar to polygon)\t((x1,y1),...)\n// path\t16+16n bytes\tOpen path\t[(x1,y1),...]\nexport class PathColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'path' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `path()`);\n }\n}\n\n// polygon\t40+16n bytes\tPolygon (similar to closed path)\t((x1,y1),...)\nexport class PolygonColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'polygon' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `polygon()`);\n }\n}\n\n// circle\t24 bytes\tCircle\t<(x,y),r> (center point and radius)\nexport class CircleColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'circle' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `circle()`);\n }\n}\n\nexport class MoneyColumn extends NumberBaseColumn {\n dataType = 'money' as const;\n\n toCode(t: string): Code {\n return columnCode(this, t, `money()`);\n }\n\n parseFn = Object.assign(\n function (input: unknown) {\n return parseFloat((input as string).replace(/,/g, '').replace(/\\$/g, ''));\n },\n {\n hideFromCode: true,\n },\n );\n}\n\n// cidr\t7 or 19 bytes\tIPv4 and IPv6 networks\nexport class CidrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'cidr' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `cidr()`);\n }\n}\n\n// inet\t7 or 19 bytes\tIPv4 and IPv6 hosts and networks\nexport class InetColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'inet' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `inet()`);\n }\n}\n\n// macaddr\t6 bytes\tMAC addresses\nexport class MacAddrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `macaddr()`);\n }\n}\n\n// macaddr8\t8 bytes\tMAC addresses (EUI-64 format)\nexport class MacAddr8Column extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr8' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `macaddr8()`);\n }\n}\n\n// Bit strings are strings of 1's and 0's.\n// They can be used to store or visualize bit masks.\n// There are two SQL bit types: bit(n) and bit varying(n), where n is a positive integer.\nexport class BitColumn<Length extends number> extends ColumnType<\n string,\n typeof Operators.text\n> {\n dataType = 'bit' as const;\n operators = Operators.text;\n declare data: ColumnData & { length: Length };\n\n constructor(length: Length) {\n super();\n this.data.length = length;\n }\n\n toCode(t: string): Code {\n const { length } = this.data;\n return columnCode(this, t, `bit(${length})`);\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\nexport class BitVaryingColumn<\n Length extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.text> {\n dataType = 'bit varying' as const;\n operators = Operators.text;\n declare data: ColumnData & { length: Length };\n\n constructor(length?: Length) {\n super();\n this.data.length = length as Length;\n }\n\n toCode(t: string): Code {\n const { length } = this.data;\n return columnCode(this, t, `bitVarying(${length ?? ''})`);\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\n// A tsvector value is a sorted list of distinct lexemes\nexport class TsVectorColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsvector' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `tsvector()`);\n }\n}\n\n// A tsquery value stores lexemes that are to be searched for\nexport class TsQueryColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsquery' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `tsquery()`);\n }\n}\n\nconst uuidDefault = raw('gen_random_uuid()');\n\n// uuid stores Universally Unique Identifiers (UUID)\nexport class UUIDColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'uuid' as const;\n operators = Operators.text;\n\n primaryKey<T extends ColumnType>(this: T): PrimaryKeyColumn<T> {\n const column = super.primaryKey();\n if (!column.data.default) column.data.default = uuidDefault;\n return column as unknown as PrimaryKeyColumn<T>;\n }\n\n toCode(t: string): Code {\n const { data } = this;\n return columnCode(\n this,\n t,\n `uuid()`,\n typeof data.default === 'object' &&\n (data.default as RawExpression).__raw === uuidDefault.__raw\n ? { ...data, default: undefined }\n : data,\n );\n }\n}\n\n// xml data type can be used to store XML data\nexport class XMLColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'xml' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `xml()`);\n }\n}\n\n// citext is a postgres extension\nexport class CitextColumn extends TextBaseColumn {\n dataType = 'citext' as const;\n declare data: TextColumnData & { minArg?: number; maxArg?: number };\n\n constructor(minArg?: number, maxArg?: number) {\n super();\n setTextColumnData(this, minArg, maxArg);\n }\n\n toCode(t: string): Code {\n return textColumnToCode(this, t);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport {\n dateTypeMethods,\n Code,\n joinTruthy,\n DateColumnData,\n dateDataToCode,\n EncodeColumn,\n ParseColumn,\n} from 'orchid-core';\nimport { assignMethodsToClass } from './utils';\nimport { IntegerColumn } from './number';\nimport { columnCode } from './code';\n\ntype DateMethods = typeof dateTypeMethods;\n\nexport interface DateBaseColumn\n extends ColumnType<string, typeof Operators.date, string | number | Date>,\n DateMethods {}\n\nconst dateTimeEncode = (input: string | number | Date) => {\n return typeof input === 'object' ? input : new Date(input);\n};\n\nconst skip = { encodeFn: dateTimeEncode };\n\nexport abstract class DateBaseColumn extends ColumnType<\n string,\n typeof Operators.date,\n string | number | Date\n> {\n declare data: DateColumnData;\n operators = Operators.date;\n encodeFn = dateTimeEncode;\n\n asNumber() {\n return this.parse(Date.parse).as(\n new IntegerColumn() as never,\n ) as unknown as EncodeColumn<IntegerColumn, string | number | Date>;\n }\n\n asDate<T extends ColumnType>(this: T): ParseColumn<T, Date> {\n return this.parse((input) => new Date(input as string));\n }\n}\n\nassignMethodsToClass(DateBaseColumn, dateTypeMethods);\n\n// date\t4 bytes\tdate (no time of day)\t4713 BC\t5874897 AD 1 day\nexport class DateColumn extends DateBaseColumn {\n dataType = 'date' as const;\n toCode(t: string): Code {\n return columnCode(\n this,\n t,\n `date()${dateDataToCode(this.data)}`,\n this.data,\n skip,\n );\n }\n}\n\nexport abstract class DateTimeBaseClass<\n Precision extends number | undefined = undefined,\n> extends DateBaseColumn {\n declare data: DateColumnData & { dateTimePrecision: Precision };\n\n constructor(dateTimePrecision?: Precision) {\n super();\n this.data.dateTimePrecision = dateTimePrecision as Precision;\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.dateTimePrecision !== undefined &&\n `(${this.data.dateTimePrecision})`,\n );\n }\n}\n\nexport abstract class DateTimeTzBaseClass<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n abstract baseDataType: string;\n\n toSQL() {\n return joinTruthy(\n this.baseDataType,\n this.data.dateTimePrecision !== undefined &&\n `(${this.data.dateTimePrecision})`,\n ' with time zone',\n );\n }\n}\n\nconst timestampToCode = <P extends number>(\n self: TimestampColumn<P> | TimestampTZColumn<P>,\n t: string,\n) => {\n const { dateTimePrecision: p } = self.data;\n return columnCode(\n self,\n t,\n `${self instanceof TimestampColumn ? 'timestampNoTZ' : 'timestamp'}(${\n p && p !== 6 ? p : ''\n })${dateDataToCode(self.data)}`,\n self.data,\n skip,\n );\n};\n\n// timestamp [ (p) ] [ without time zone ]\t8 bytes\tboth date and time (no time zone)\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampColumn<\n Precision extends number,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'timestamp' as const;\n toCode(t: string): Code {\n return timestampToCode(this, t);\n }\n}\n\n// timestamp [ (p) ] with time zone\t8 bytes\tboth date and time, with time zone\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampTZColumn<\n Precision extends number,\n> extends DateTimeTzBaseClass<Precision> {\n dataType = 'timestamptz' as const;\n baseDataType = 'timestamp' as const;\n toCode(t: string): Code {\n return timestampToCode(this, t);\n }\n}\n\n// time [ (p) ] [ without time zone ]\t8 bytes\ttime of day (no date)\t00:00:00\t24:00:00\t1 microsecond\nexport class TimeColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'time' as const;\n toCode(t: string): Code {\n const { dateTimePrecision } = this.data;\n return columnCode(\n this,\n t,\n `time(${dateTimePrecision || ''})${dateDataToCode(this.data)}`,\n this.data,\n skip,\n );\n }\n}\n\nexport type TimeInterval = {\n years?: number;\n months?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\n// interval [ fields ] [ (p) ]\t16 bytes\ttime interval\t-178000000 years\t178000000 years\t1 microsecond\nexport class IntervalColumn<\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n> extends ColumnType<TimeInterval, typeof Operators.date> {\n dataType = 'interval' as const;\n declare data: ColumnData & { fields: Fields; precision: Precision };\n operators = Operators.date;\n\n constructor(fields?: Fields, precision?: Precision) {\n super();\n this.data.fields = fields as Fields;\n this.data.precision = precision as Precision;\n }\n\n toCode(t: string): Code {\n const { fields, precision } = this.data;\n return columnCode(\n this,\n t,\n `interval(${[fields && `'${fields}'`, precision && String(precision)]\n .filter((part) => part)\n .join(', ')})`,\n this.data,\n skip,\n );\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.fields && ` ${this.data.fields}`,\n this.data.precision !== undefined && ` (${this.data.precision})`,\n );\n }\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport { Code } from 'orchid-core';\n\n// 1 byte, true or false\nexport class BooleanColumn extends ColumnType<\n boolean,\n typeof Operators.boolean\n> {\n dataType = 'boolean' as const;\n operators = Operators.boolean;\n\n toCode(t: string): Code {\n return columnCode(this, t, 'boolean()');\n }\n\n parseItem = (input: string) => input[0] === 't';\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport { Code } from 'orchid-core';\n\nexport class EnumColumn<\n U extends string = string,\n T extends [U, ...U[]] = [U],\n> extends ColumnType<T[number], typeof Operators.any> {\n operators = Operators.any;\n dataType = 'enum';\n\n constructor(public enumName: string, public options: T) {\n super();\n }\n\n toCode(t: string, migration?: boolean): Code {\n const options = migration\n ? ''\n : `, [${this.options.map((option) => `'${option}'`).join(', ')}]`;\n return columnCode(this, t, `enum('${this.enumName}'${options})`);\n }\n\n toSQL() {\n const name = this.enumName;\n const index = name.indexOf('.');\n return `\"${\n index === -1 ? name : `${name.slice(0, index)}\".\"${name.slice(index + 1)}`\n }\"`;\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { columnCode } from './code';\nimport {\n scalarTypes,\n array,\n discriminatedUnion,\n enumType,\n instanceOf,\n intersection,\n lazy,\n literal,\n map,\n nativeEnum,\n nullable,\n nullish,\n object,\n optional,\n record,\n set,\n tuple,\n union,\n JSONTypeAny,\n Code,\n} from 'orchid-core';\n\nexport type JSONTypes = typeof jsonTypes;\nexport const jsonTypes = {\n array,\n discriminatedUnion,\n enum: enumType,\n instanceOf,\n intersection,\n lazy,\n literal,\n map,\n nativeEnum,\n nullable,\n nullish,\n object,\n optional,\n record,\n ...scalarTypes,\n set,\n tuple,\n union,\n};\n\nexport class JSONColumn<\n Type extends JSONTypeAny = JSONTypeAny,\n> extends ColumnType<Type['type'], typeof Operators.json> {\n dataType = 'jsonb' as const;\n operators = Operators.json;\n declare data: ColumnData & { schema: Type };\n\n constructor(\n schemaOrFn: Type | ((j: JSONTypes) => Type) = scalarTypes.unknown() as Type,\n ) {\n super();\n\n this.data.schema =\n typeof schemaOrFn === 'function' ? schemaOrFn(jsonTypes) : schemaOrFn;\n }\n\n toCode(t: string): Code {\n const { schema } = this.data;\n return columnCode(this, t, `json((t) => ${schema.toCode('t')})`);\n }\n}\n\nexport class JSONTextColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'json' as const;\n operators = Operators.text;\n toCode(t: string): Code {\n return columnCode(this, t, `jsonText()`);\n }\n}\n","import { ColumnData, ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { assignMethodsToClass } from './utils';\nimport {\n arrayMethods,\n addCode,\n Code,\n ColumnTypeBase,\n ArrayMethodsData,\n arrayDataToCode,\n} from 'orchid-core';\nimport { columnCode } from './code';\n\nexport type ArrayData<Item extends ColumnTypeBase> = ColumnData &\n ArrayMethodsData & {\n item: Item;\n };\n\ntype ArrayMethods = typeof arrayMethods;\n\nexport interface ArrayColumn<Item extends ColumnType>\n extends ColumnType<Item['type'][], typeof Operators.array>,\n ArrayMethods {}\n\nexport class ArrayColumn<Item extends ColumnType> extends ColumnType<\n Item['type'][],\n typeof Operators.array\n> {\n dataType = 'array' as const;\n operators = Operators.array;\n declare data: ArrayData<Item>;\n\n constructor(item: Item) {\n super();\n this.data.item = item;\n }\n\n toSQL() {\n return `${this.data.item.toSQL()}[]`;\n }\n\n toCode(this: ArrayColumn<Item>, t: string): Code {\n const code: Code[] = ['array('];\n addCode(code, this.data.item.toCode(t));\n addCode(code, `)${arrayDataToCode(this.data)}`);\n return columnCode(this, t, code);\n }\n\n parseFn = Object.assign(\n (input: unknown) => {\n const entries: unknown[] = [];\n parseArray(\n input as string,\n 0,\n (input as string).length,\n entries,\n false,\n this.data.item,\n );\n return entries;\n },\n {\n hideFromCode: true,\n },\n );\n}\n\nconst parseArray = (\n input: string,\n pos: number,\n len: number,\n entries: unknown[],\n nested: boolean,\n item: ColumnType,\n): number => {\n if (input[0] === '[') {\n while (pos < len) {\n let char = input[pos++];\n if (char === '\\\\') {\n char = input[pos++];\n }\n if (char === '=') break;\n }\n }\n\n let quote = false;\n let start = pos;\n while (pos < len) {\n let char = input[pos++];\n const escaped = char === '\\\\';\n if (escaped) {\n char = input[pos++];\n }\n\n if (char === '\"' && !escaped) {\n if (quote) {\n pushEntry(input, start, pos, entries, item);\n } else {\n start = pos;\n }\n quote = !quote;\n } else if (char === ',' && !quote) {\n if (start !== pos) {\n pushEntry(input, start, pos, entries, item);\n }\n start = pos;\n } else if (char === '{' && !quote) {\n let array: unknown[];\n let nestedItem = item;\n if (nested) {\n array = [];\n entries.push(array);\n if ('item' in item.data) {\n nestedItem = (item as ArrayColumn<ColumnType>).data\n .item as ColumnType;\n }\n } else {\n array = entries;\n }\n pos = parseArray(input, pos, len, array, true, nestedItem);\n start = pos + 1;\n } else if (char === '}' && !quote) {\n if (start !== pos) {\n pushEntry(input, start, pos, entries, item);\n }\n start = pos + 1;\n break;\n }\n }\n\n return pos;\n};\n\nassignMethodsToClass(ArrayColumn, arrayMethods);\n\nconst pushEntry = (\n input: string,\n start: number,\n pos: number,\n entries: unknown[],\n item: ColumnType,\n) => {\n let entry: unknown = input.slice(start, pos - 1);\n if (entry === 'NULL') {\n entry = null;\n } else if (item.parseItem) {\n entry = item.parseItem(entry as string);\n }\n entries.push(entry);\n};\n","import {\n ColumnInfo,\n GetArg,\n getValueKey,\n OnQueryBuilder,\n QueryMethods,\n WhereQueryBuilder,\n} from './queryMethods';\nimport { QueryData } from './sql';\nimport { ColumnsShape, ColumnType } from './columns';\nimport { AliasOrTable } from './utils';\nimport { Db } from './db';\nimport { RelationQueryBase, RelationsBase } from './relations';\nimport { QueryError, QueryErrorName } from './errors';\nimport {\n ColumnShapeOutput,\n ColumnsShapeBase,\n ColumnTypeBase,\n ColumnTypesBase,\n EmptyObject,\n QueryCommon,\n RawExpression,\n Spread,\n StringKey,\n ThenResult,\n} from 'orchid-core';\nimport { QueryBase } from './queryBase';\n\nexport type ColumnParser = (input: unknown) => unknown;\nexport type ColumnsParsers = Record<string | getValueKey, ColumnParser>;\n\nexport type SelectableBase = Record<\n PropertyKey,\n { as: string; column: ColumnType }\n>;\n\nexport type SelectableFromShape<\n Shape extends ColumnsShapeBase,\n Table extends string | undefined,\n> = { [K in keyof Shape]: { as: K; column: Shape[K] } } & {\n [K in keyof Shape as `${Table}.${StringKey<K>}`]: {\n as: K;\n column: Shape[K];\n };\n};\n\nexport type WithDataItem = { table: string; shape: ColumnsShape };\nexport type WithDataBase = Record<never, WithDataItem>;\n\nexport type Query = QueryCommon &\n QueryMethods & {\n queryBuilder: Db;\n columnTypes: ColumnTypesBase;\n whereQueryBuilder: typeof WhereQueryBuilder;\n onQueryBuilder: typeof OnQueryBuilder;\n table?: string;\n shape: ColumnsShape;\n singlePrimaryKey: string;\n primaryKeys: string[];\n type: Record<string, unknown>;\n inputType: Record<string, unknown>;\n query: QueryData;\n result: ColumnsShape;\n selectable: SelectableBase;\n returnType: QueryReturnType;\n then: ThenResult<unknown>;\n windows: EmptyObject;\n defaultSelectColumns: string[];\n relations: RelationsBase;\n relationsQueries: Record<string, Query>;\n withData: WithDataBase;\n error: new (\n message: string,\n length: number,\n name: QueryErrorName,\n ) => QueryError;\n isSubQuery: boolean;\n };\n\nexport type Selectable<T extends QueryBase> = StringKey<keyof T['selectable']>;\n\nexport type QueryWithTable = Query & { table: string };\n\nexport type QueryReturnType =\n | 'all'\n | 'one'\n | 'oneOrThrow'\n | 'rows'\n | 'pluck'\n | 'value'\n | 'valueOrThrow'\n | 'rowCount'\n | 'void';\n\nexport const queryTypeWithLimitOne = {\n one: true,\n oneOrThrow: true,\n} as Record<QueryReturnType, true | undefined>;\n\nexport const isQueryReturnsAll = (q: Query) =>\n !q.query.returnType || q.query.returnType === 'all';\n\nexport type QueryReturnsAll<T extends QueryReturnType> = (\n QueryReturnType extends T ? 'all' : T\n) extends 'all'\n ? true\n : false;\n\nexport type QueryThen<\n ReturnType extends QueryReturnType,\n Result extends ColumnsShapeBase,\n> = QueryReturnsAll<ReturnType> extends true\n ? ThenResult<ColumnShapeOutput<Result>[]>\n : ReturnType extends 'one'\n ? ThenResult<ColumnShapeOutput<Result> | undefined>\n : ReturnType extends 'oneOrThrow'\n ? ThenResult<ColumnShapeOutput<Result>>\n : ReturnType extends 'value'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type'] | undefined>\n : never\n : ReturnType extends 'valueOrThrow'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type']>\n : never\n : ReturnType extends 'rows'\n ? ThenResult<ColumnShapeOutput<Result>[keyof Result][][]>\n : ReturnType extends 'pluck'\n ? Result extends { pluck: ColumnType }\n ? ThenResult<Result['pluck']['type'][]>\n : never\n : ReturnType extends 'rowCount'\n ? ThenResult<number>\n : ReturnType extends 'void'\n ? ThenResult<void>\n : never;\n\nexport type AddQuerySelect<\n T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>,\n Result extends ColumnsShapeBase,\n> = T['meta']['hasSelect'] extends true\n ? MergeSelect<T, Result>\n : {\n [K in keyof T]: K extends 'meta'\n ? T['meta'] & { hasSelect: true }\n : K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : T[K];\n };\n\ntype MergeSelect<\n T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>,\n Result extends ColumnsShapeBase,\n Merged extends ColumnsShapeBase = {\n [K in keyof T['result']]: K extends keyof Result ? unknown : T['result'][K];\n } & Result,\n> = {\n [K in keyof T]: K extends 'result'\n ? Merged\n : K extends 'then'\n ? QueryThen<T['returnType'], Merged>\n : T[K];\n};\n\nexport type SetQueryReturns<T extends Query, R extends QueryReturnType> = Omit<\n T,\n 'returnType' | 'then'\n> & { returnType: R; then: QueryThen<R, T['result']> };\n\nexport type SetQueryReturnsAll<T extends Query> = SetQueryReturns<T, 'all'>;\n\nexport type SetQueryReturnsOneOptional<T extends Query> = SetQueryReturns<\n T,\n 'one'\n>;\n\nexport type SetQueryReturnsOne<T extends Query> = SetQueryReturns<\n T,\n 'oneOrThrow'\n>;\n\nexport type SetQueryReturnsRows<T extends Query> = SetQueryReturns<T, 'rows'>;\n\nexport type SetQueryReturnsPluck<\n T extends Query,\n S extends keyof T['selectable'] | RawExpression,\n C extends ColumnTypeBase = S extends keyof T['selectable']\n ? T['selectable'][S]['column']\n : S extends RawExpression\n ? S['__column']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { pluck: C };\n returnType: 'pluck';\n then: ThenResult<C['type'][]>;\n};\n\nexport type SetQueryReturnsValueOptional<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnTypeBase,\n Column extends ColumnTypeBase = Arg extends ColumnTypeBase\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { value: Column };\n returnType: 'value';\n then: ThenResult<Column['type'] | undefined>;\n};\n\nexport type SetQueryReturnsValue<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnTypeBase,\n Column extends ColumnTypeBase = Arg extends ColumnTypeBase\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n meta: {\n hasSelect: true;\n };\n result: { value: Column };\n returnType: 'valueOrThrow';\n then: ThenResult<Column['type']>;\n};\n\nexport type SetQueryReturnsRowCount<T extends Query> = SetQueryReturns<\n T,\n 'rowCount'\n>;\n\nexport type SetQueryReturnsVoid<T extends Query> = SetQueryReturns<T, 'void'>;\n\nexport type SetQueryReturnsColumnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined,\n Result = Column extends keyof T['shape']\n ? ColumnInfo\n : Record<keyof T['shape'], ColumnInfo>,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n result: { value: ColumnType<Result> };\n returnType: 'value';\n then: ThenResult<Result>;\n};\n\nexport type SetQueryTableAlias<\n T extends Pick<Query, 'selectable' | 'table' | 'meta'> & {\n shape: ColumnsShapeBase;\n },\n As extends string,\n> = {\n [K in keyof T]: K extends 'selectable'\n ? Omit<\n T['selectable'],\n `${AliasOrTable<T>}.${StringKey<keyof T['shape']>}`\n > & {\n [K in keyof T['shape'] as `${As}.${StringKey<keyof T['shape']>}`]: {\n as: K;\n column: T['shape'][K];\n };\n }\n : K extends 'meta'\n ? Omit<T['meta'], 'as'> & {\n as: As;\n }\n : T[K];\n};\n\nexport type SetQueryWith<\n T extends Query,\n WithData extends Record<string, WithDataItem>,\n> = Omit<T, 'withData'> & { withData: WithData };\n\nexport type AddQueryWith<\n T extends Query,\n With extends WithDataItem,\n> = SetQueryWith<T, Spread<[T['withData'], { [K in With['table']]: With }]>>;\n","import { rawOrRevealColumnToSql } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { QueryBase } from '../queryBase';\n\nexport const pushDistinctSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n distinct: Exclude<SelectQueryData['distinct'], undefined>,\n quotedAs?: string,\n) => {\n ctx.sql.push('DISTINCT');\n\n if (distinct.length) {\n const columns = distinct?.map((item) =>\n rawOrRevealColumnToSql(table.query, item, ctx.values, quotedAs),\n );\n ctx.sql.push(`ON (${columns?.join(', ') || ''})`);\n }\n};\n","import { OrderItem } from './types';\nimport { revealColumnToSql } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { QueryData, SelectQueryData } from './data';\nimport { isRaw } from 'orchid-core';\n\nexport const pushOrderBySql = (\n ctx: ToSqlCtx,\n data: QueryData,\n quotedAs: string | undefined,\n order: Exclude<SelectQueryData['order'], undefined>,\n) => {\n ctx.sql.push(\n `ORDER BY ${order\n .map((item) => orderByToSql(data, item, ctx.values, quotedAs))\n .join(', ')}`,\n );\n};\n\nexport const orderByToSql = (\n data: QueryData,\n order: OrderItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof order === 'string') {\n return `${revealColumnToSql(data, data.shape, order, quotedAs)} ASC`;\n }\n\n if (isRaw(order)) {\n return getRaw(order, values);\n }\n\n const sql: string[] = [];\n for (const key in order) {\n const value = order[key];\n sql.push(`${revealColumnToSql(data, data.shape, key, quotedAs)} ${value}`);\n }\n return sql.join(', ');\n};\n","import { WindowDeclaration } from './types';\nimport { q, rawOrRevealColumnToSql } from './common';\nimport { orderByToSql } from './orderBy';\nimport { getRaw } from '../raw';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { QueryData } from './data';\n\nexport const windowToSql = (\n data: QueryData,\n window: string | WindowDeclaration | RawExpression,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof window === 'object') {\n if (isRaw(window)) {\n return `(${getRaw(window, values)})`;\n } else {\n const sql: string[] = [];\n if (window.partitionBy) {\n sql.push(\n `PARTITION BY ${\n Array.isArray(window.partitionBy)\n ? window.partitionBy\n .map((partitionBy) =>\n rawOrRevealColumnToSql(data, partitionBy, values, quotedAs),\n )\n .join(', ')\n : rawOrRevealColumnToSql(\n data,\n window.partitionBy,\n values,\n quotedAs,\n )\n }`,\n );\n }\n if (window.order) {\n sql.push(\n `ORDER BY ${orderByToSql(data, window.order, values, quotedAs)}`,\n );\n }\n return `(${sql.join(' ')})`;\n }\n } else {\n return q(window as string);\n }\n};\n","import { QueryData } from './sql';\nimport { pushOrNewArrayToObject } from 'orchid-core';\n\nexport const pushQueryArray = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[key as keyof typeof q.query])\n (q.query as Record<string, unknown>)[key] = value;\n else\n (q.query[key as keyof typeof q.query] as unknown[]).push(\n ...(value as unknown[]),\n );\n return q as T;\n};\n\nexport const pushQueryValue = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n pushOrNewArrayToObject(\n q.query as unknown as Record<string, unknown[]>,\n key,\n value,\n );\n return q;\n};\n\nexport const setQueryObjectValue = <T extends { query: QueryData }>(\n q: T,\n object: string,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[object as keyof typeof q.query])\n (q.query as unknown as Record<string, Record<string, unknown>>)[object] = {\n [key]: value,\n };\n else\n (q.query as unknown as Record<string, Record<string, unknown>>)[object][\n key\n ] = value;\n return q as unknown as T;\n};\n","import {\n ColumnNamesShape,\n q,\n quoteSchemaAndTable,\n rawOrRevealColumnToSql,\n revealColumnToSql,\n} from './common';\nimport { JoinItem, SimpleJoinItem } from './types';\nimport { Query, QueryWithTable } from '../query';\nimport { whereToSql } from './where';\nimport { Relation } from '../relations';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { JoinedShapes, QueryData, SelectQueryData } from './data';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { getQueryAs } from '../utils';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { QueryBase } from '../queryBase';\n\ntype ItemOf3Or4Length =\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn?: string | RawExpression,\n ];\n\nexport const processJoinItem = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n item: Pick<SimpleJoinItem, 'args' | 'isSubQuery'>,\n quotedAs: string | undefined,\n): { target: string; conditions?: string } => {\n let target: string;\n let conditions: string | undefined;\n\n const { args } = item;\n const [first] = args;\n if (typeof first === 'string') {\n if (first in table.relations) {\n const {\n key,\n query: toQuery,\n joinQuery,\n } = (table.relations as Record<string, Relation>)[first];\n\n const jq = joinQuery(table, toQuery);\n const { query: j } = jq;\n\n const tableName = (\n typeof j.from === 'string' ? j.from : jq.table\n ) as string;\n\n target = quoteSchemaAndTable(j.schema, tableName);\n\n const as = j.as || key;\n const joinAs = q(as as string);\n if (as !== tableName) {\n target += ` AS ${joinAs}`;\n }\n\n const queryData = {\n shape: j.shape,\n joinedShapes: {\n ...query.joinedShapes,\n ...j.joinedShapes,\n [(table.query.as || table.table) as string]: table.shape,\n },\n and: j.and ? [...j.and] : [],\n or: j.or ? [...j.or] : [],\n };\n\n if (args[1]) {\n const arg = (args[1] as (q: unknown) => QueryBase)(\n new ctx.onQueryBuilder(jq, j, table),\n ).query;\n\n if (arg.and) queryData.and.push(...arg.and);\n if (arg.or) queryData.or.push(...arg.or);\n }\n\n conditions = whereToSql(ctx, jq, queryData, joinAs);\n } else {\n target = q(first);\n const joinShape = (query.joinedShapes as JoinedShapes)[first];\n conditions = processArgs(\n args,\n ctx,\n table,\n query,\n first,\n target,\n joinShape,\n quotedAs,\n );\n }\n } else {\n const joinQuery = first.query;\n\n const quotedFrom =\n typeof joinQuery.from === 'string' ? q(joinQuery.from) : undefined;\n\n target = quotedFrom || quoteSchemaAndTable(joinQuery.schema, first.table);\n\n let joinAs = quotedFrom || q(first.table);\n\n const qAs = joinQuery.as ? q(joinQuery.as) : undefined;\n const addAs = qAs && qAs !== joinAs;\n\n const joinedShape = first.shape;\n if (item.isSubQuery) {\n const subQuery = first.toSql({\n values: ctx.values,\n });\n\n target = `(${subQuery.text}) ${qAs || joinAs}`;\n if (addAs) joinAs = qAs;\n } else {\n if (addAs) {\n joinAs = qAs;\n target += ` AS ${qAs}`;\n }\n }\n\n conditions = processArgs(\n args,\n ctx,\n table,\n query,\n first,\n joinAs,\n joinedShape,\n quotedAs,\n );\n\n // if it's a sub query, WHERE conditions are already in the sub query\n if (!item.isSubQuery) {\n const whereSql = whereToSql(\n ctx,\n first,\n {\n ...joinQuery,\n joinedShapes: {\n ...query.joinedShapes,\n ...joinQuery.joinedShapes,\n [(table.query.as || table.table) as string]: table.query.shape,\n },\n },\n joinAs,\n );\n if (whereSql) {\n if (conditions) conditions += ` AND ${whereSql}`;\n else conditions = whereSql;\n }\n }\n }\n\n return { target, conditions };\n};\n\nconst processArgs = (\n args: SimpleJoinItem['args'],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n first:\n | string\n | (QueryWithTable & {\n joinQueryAfterCallback?(fromQuery: Query, toQuery: Query): Query;\n }),\n joinAs: string,\n joinShape: ColumnNamesShape,\n quotedAs?: string,\n) => {\n if (args.length === 2) {\n const arg = args[1];\n if (typeof arg === 'function') {\n const joinedShapes = {\n ...query.joinedShapes,\n [(table.query.as || table.table) as string]: table.shape,\n };\n\n let q: QueryBase;\n let data;\n if (typeof first === 'string') {\n const name = first;\n const query = table.query;\n const shape = query.withShapes?.[name];\n if (!shape) {\n throw new Error('Cannot get shape of `with` statement');\n }\n q = Object.create(table);\n q.query = {\n type: undefined,\n shape,\n adapter: query.adapter,\n handleResult: query.handleResult,\n returnType: 'all',\n logger: query.logger,\n } as SelectQueryData;\n data = { shape, joinedShapes };\n } else {\n q = first;\n\n if (first.joinQueryAfterCallback) {\n let base = q.baseQuery;\n if (q.query.as) {\n base = base.as(q.query.as);\n }\n\n const { query } = first.joinQueryAfterCallback(table as Query, base);\n if (query.and) {\n pushQueryArray(q, 'and', query.and);\n }\n if (query.or) {\n pushQueryArray(q, 'or', query.or);\n }\n }\n\n data = {\n ...first.query,\n joinedShapes: { ...first.query.joinedShapes, ...joinedShapes },\n };\n }\n\n const jq = arg(new ctx.onQueryBuilder(q, data, table));\n\n if (jq.query.joinedShapes !== joinedShapes) {\n jq.query.joinedShapes = {\n ...jq.query.joinedShapes,\n ...joinedShapes,\n };\n }\n\n return whereToSql(ctx, jq, jq.query, joinAs);\n } else {\n return getObjectOrRawConditions(\n query,\n arg,\n ctx.values,\n quotedAs,\n joinAs,\n joinShape,\n );\n }\n } else if (args.length >= 3) {\n return getConditionsFor3Or4LengthItem(\n query,\n joinAs,\n ctx.values,\n quotedAs,\n args as ItemOf3Or4Length,\n joinShape,\n );\n }\n\n return undefined;\n};\n\nconst getConditionsFor3Or4LengthItem = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n target: string,\n values: unknown[],\n quotedAs: string | undefined,\n args: ItemOf3Or4Length,\n joinShape: ColumnNamesShape,\n): string => {\n const [, leftColumn, opOrRightColumn, maybeRightColumn] = args;\n\n const op = maybeRightColumn ? opOrRightColumn : '=';\n const rightColumn = maybeRightColumn ? maybeRightColumn : opOrRightColumn;\n\n return `${rawOrRevealColumnToSql(\n query,\n leftColumn,\n values,\n target,\n joinShape,\n )} ${op} ${rawOrRevealColumnToSql(\n query,\n rightColumn,\n values,\n quotedAs,\n query.shape,\n )}`;\n};\n\nconst getObjectOrRawConditions = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n data: Record<string, string | RawExpression> | RawExpression | true,\n values: unknown[],\n quotedAs: string | undefined,\n joinAs: string,\n joinShape: ColumnNamesShape,\n): string => {\n if (data === true) {\n return 'true';\n } else if (isRaw(data)) {\n return getRaw(data, values);\n } else {\n const pairs: string[] = [];\n const shape = query.shape;\n\n for (const key in data) {\n const value = data[key];\n\n pairs.push(\n `${revealColumnToSql(\n query,\n joinShape,\n key,\n joinAs,\n )} = ${rawOrRevealColumnToSql(query, value, values, quotedAs, shape)}`,\n );\n }\n\n return pairs.join(', ');\n }\n};\n\nexport const pushJoinSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: QueryData & {\n join: JoinItem[];\n },\n quotedAs?: string,\n) => {\n query.join.forEach((item) => {\n if (Array.isArray(item)) {\n const q = item[1];\n const { aliasValue } = ctx;\n ctx.aliasValue = true;\n ctx.sql.push(\n `${item[0]} LATERAL (${q.toSql(ctx).text}) \"${\n item[2] || getQueryAs(q)\n }\" ON true`,\n );\n ctx.aliasValue = aliasValue;\n } else {\n const { target, conditions } = processJoinItem(\n ctx,\n table,\n query,\n item,\n quotedAs,\n );\n\n ctx.sql.push(item.type, target);\n if (conditions) ctx.sql.push('ON', conditions);\n }\n });\n};\n\nconst skipQueryKeysForSubQuery: Record<string, boolean> = {\n adapter: true,\n updateData: true,\n parsers: true,\n as: true,\n and: true,\n or: true,\n returnType: true,\n joinedShapes: true,\n returnsOne: true,\n};\n\nexport const getIsJoinSubQuery = (query: QueryData, baseQuery: QueryData) => {\n for (const key in query) {\n if (\n !skipQueryKeysForSubQuery[key] &&\n (query as Record<string, unknown>)[key] !==\n (baseQuery as Record<string, unknown>)[key]\n ) {\n return true;\n }\n }\n return false;\n};\n","import { Query } from '../query';\nimport {\n SimpleJoinItem,\n WhereInItem,\n WhereItem,\n WhereJsonPathEqualsItem,\n WhereOnItem,\n WhereOnJoinItem,\n} from './types';\nimport { addValue, q, qc, revealColumnToSql } from './common';\nimport { getQueryAs } from '../utils';\nimport { processJoinItem } from './join';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { JoinedShapes, QueryData } from './data';\nimport { isRaw, RawExpression, MaybeArray, toArray } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const pushWhereStatementSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n) => {\n const res = whereToSql(ctx, table, query, quotedAs, false);\n if (res) {\n ctx.sql.push('WHERE', res);\n }\n};\n\nexport const pushWhereToSql = (\n sql: string[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n) => {\n const res = whereToSql(ctx, table, query, quotedAs, not);\n if (res) {\n sql.push(res);\n }\n};\n\nexport const whereToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n): string | undefined => {\n if (query.or) {\n const ors = query.and ? [query.and, ...query.or] : query.or;\n return ors\n .map((and) => processAnds(and, ctx, table, query, quotedAs, not))\n .join(' OR ');\n } else if (query.and) {\n return processAnds(query.and, ctx, table, query, quotedAs, not);\n } else {\n return undefined;\n }\n};\n\nconst processAnds = (\n and: WhereItem[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n quotedAs?: string,\n not?: boolean,\n): string => {\n const ands: string[] = [];\n and.forEach((data) =>\n processWhere(ands, ctx, table, query, data, quotedAs, not),\n );\n return ands.join(' AND ');\n};\n\nconst processWhere = (\n ands: string[],\n ctx: ToSqlCtx,\n table: QueryBase,\n query: Pick<QueryData, 'and' | 'or' | 'shape' | 'joinedShapes'>,\n data: WhereItem,\n quotedAs?: string,\n not?: boolean,\n) => {\n const prefix = not ? 'NOT ' : '';\n\n if (typeof data === 'function') {\n const qb = data(new ctx.whereQueryBuilder(table, query));\n pushWhereToSql(ands, ctx, qb, qb.query, quotedAs, not);\n return;\n }\n\n if ('prototype' in data || 'baseQuery' in data) {\n const query = data as Query;\n const sql = whereToSql(\n ctx,\n query,\n query.query,\n query.table && q(query.table),\n );\n if (sql) {\n ands.push(`${prefix}(${sql})`);\n }\n return;\n }\n\n if (isRaw(data)) {\n ands.push(`${prefix}(${getRaw(data, ctx.values)})`);\n return;\n }\n\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (value === undefined) continue;\n\n if (key === 'AND') {\n const arr = toArray(value as MaybeArray<WhereItem>);\n ands.push(processAnds(arr, ctx, table, query, quotedAs, not));\n } else if (key === 'OR') {\n const arr = (value as MaybeArray<WhereItem>[]).map(toArray);\n ands.push(\n arr\n .map((and) => processAnds(and, ctx, table, query, quotedAs, not))\n .join(' OR '),\n );\n } else if (key === 'NOT') {\n const arr = toArray(value as MaybeArray<WhereItem>);\n ands.push(processAnds(arr, ctx, table, query, quotedAs, !not));\n } else if (key === 'ON') {\n if (Array.isArray(value)) {\n const item = value as WhereJsonPathEqualsItem;\n const leftColumn = revealColumnToSql(\n query,\n query.shape,\n item[0],\n quotedAs,\n );\n\n const leftPath = item[1];\n const rightColumn = revealColumnToSql(\n query,\n query.shape,\n item[2],\n quotedAs,\n );\n\n const rightPath = item[3];\n\n ands.push(\n `${prefix}jsonb_path_query_first(${leftColumn}, ${addValue(\n ctx.values,\n leftPath,\n )}) = jsonb_path_query_first(${rightColumn}, ${addValue(\n ctx.values,\n rightPath,\n )})`,\n );\n } else {\n const item = value as WhereOnItem;\n const leftColumn = revealColumnToSql(\n query,\n query.shape,\n item.on[0],\n q(getJoinItemSource(item.joinFrom)),\n );\n\n const joinTo = getJoinItemSource(item.joinTo);\n const joinedShape = (query.joinedShapes as JoinedShapes)[joinTo];\n\n const [op, rightColumn] =\n item.on.length === 2\n ? [\n '=',\n revealColumnToSql(query, joinedShape, item.on[1], q(joinTo)),\n ]\n : [\n item.on[1],\n revealColumnToSql(query, joinedShape, item.on[2], q(joinTo)),\n ];\n\n ands.push(`${prefix}${leftColumn} ${op} ${rightColumn}`);\n }\n } else if (key === 'IN') {\n toArray(value as MaybeArray<WhereInItem>).forEach((item) => {\n pushIn(query, ands, prefix, quotedAs, ctx.values, item);\n });\n } else if (key === 'EXISTS') {\n const joinItems = Array.isArray((value as unknown[])[0])\n ? value\n : [value];\n\n (\n joinItems as { args: SimpleJoinItem['args']; isSubQuery: boolean }[]\n ).forEach((args) => {\n const { target, conditions } = processJoinItem(\n ctx,\n table,\n query,\n args,\n quotedAs,\n );\n\n ands.push(\n `${prefix}EXISTS (SELECT 1 FROM ${target} WHERE ${conditions} LIMIT 1)`,\n );\n });\n } else if (\n typeof value === 'object' &&\n value &&\n value.constructor === Object\n ) {\n if (isRaw(value)) {\n ands.push(\n `${prefix}${revealColumnToSql(\n query,\n query.shape,\n key,\n quotedAs,\n )} = ${getRaw(value, ctx.values)}`,\n );\n } else {\n let column = query.shape[key];\n let quotedColumn: string | undefined;\n if (column) {\n quotedColumn = qc(column.data.name || key, quotedAs);\n } else if (!column) {\n const index = key.indexOf('.');\n if (index !== -1) {\n const joinedTable = key.slice(0, index);\n const joinedColumn = key.slice(index + 1);\n column = query.joinedShapes?.[joinedTable]?.[\n joinedColumn\n ] as typeof column;\n quotedColumn = qc(\n column?.data.name || joinedColumn,\n q(joinedTable),\n );\n } else {\n quotedColumn = undefined;\n }\n\n if (!column || !quotedColumn) {\n // TODO: custom error classes\n throw new Error(`Unknown column ${key} provided to condition`);\n }\n }\n\n for (const op in value) {\n const operator = column.operators[op];\n if (!operator) {\n // TODO: custom error classes\n throw new Error(`Unknown operator ${op} provided to condition`);\n }\n\n if (value[op as keyof typeof value] === undefined) continue;\n\n ands.push(\n `${prefix}${operator(\n quotedColumn as string,\n value[op as keyof typeof value],\n ctx.values,\n )}`,\n );\n }\n }\n } else {\n ands.push(\n `${prefix}${revealColumnToSql(query, query.shape, key, quotedAs)} ${\n value === null ? 'IS NULL' : `= ${addValue(ctx.values, value)}`\n }`,\n );\n }\n }\n};\n\nconst getJoinItemSource = (joinItem: WhereOnJoinItem) => {\n return typeof joinItem === 'string' ? joinItem : getQueryAs(joinItem);\n};\n\nconst pushIn = (\n query: Pick<QueryData, 'shape' | 'joinedShapes'>,\n ands: string[],\n prefix: string,\n quotedAs: string | undefined,\n values: unknown[],\n arg: {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n },\n) => {\n let value: string;\n\n if (Array.isArray(arg.values)) {\n value = `${arg.values\n .map(\n (arr) => `(${arr.map((value) => addValue(values, value)).join(', ')})`,\n )\n .join(', ')}`;\n\n if (arg.columns.length > 1) value = `(${value})`;\n } else if (isRaw(arg.values)) {\n value = getRaw(arg.values, values);\n } else {\n const sql = makeSql(arg.values, { values });\n value = `(${sql.text})`;\n }\n\n const columnsSql = arg.columns\n .map((column) => revealColumnToSql(query, query.shape, column, quotedAs))\n .join(', ');\n\n ands.push(\n `${prefix}${\n arg.columns.length > 1 ? `(${columnsSql})` : columnsSql\n } IN ${value}`,\n );\n};\n","import { AggregateItem } from './types';\nimport { addValue, rawOrRevealColumnToSql, q } from './common';\nimport { getRaw } from '../raw';\nimport { windowToSql } from './window';\nimport { pushOrderBySql } from './orderBy';\nimport { whereToSql } from './where';\nimport { ToSqlCtx } from './toSql';\nimport { Expression } from '../utils';\nimport { isRaw, emptyObject } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const aggregateToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n item: AggregateItem,\n quotedAs?: string,\n) => {\n const sql: string[] = [`${item.function}(`];\n ctx = { ...ctx, sql };\n\n const options = item.options || emptyObject;\n\n if (options.distinct && !options.withinGroup) sql.push('DISTINCT ');\n\n if (typeof item.arg === 'object') {\n if (Array.isArray(item.arg)) {\n sql.push(\n `${rawOrRevealColumnToSql(\n table.query,\n item.arg[0],\n ctx.values,\n quotedAs,\n )}, ${addValue(ctx.values, item.arg[1])}`,\n );\n } else if (isRaw(item.arg)) {\n sql.push(getRaw(item.arg, ctx.values));\n } else {\n const args: string[] = [];\n for (const key in item.arg) {\n args.push(\n // ::text is needed to bypass \"could not determine data type of parameter\" postgres error\n `${addValue(ctx.values, key)}::text, ${rawOrRevealColumnToSql(\n table.query,\n item.arg[key as keyof typeof item.arg] as unknown as Expression,\n ctx.values,\n quotedAs,\n )}`,\n );\n }\n sql.push(args.join(', '));\n }\n } else if (item.arg) {\n sql.push(\n rawOrRevealColumnToSql(table.query, item.arg, ctx.values, quotedAs),\n );\n }\n\n if (options.withinGroup) sql.push(') WITHIN GROUP (');\n else if (options.order) sql.push(' ');\n\n if (options.order) pushOrderBySql(ctx, table.query, quotedAs, options.order);\n\n sql.push(')');\n\n if (options.filter || options.filterOr) {\n const whereSql = whereToSql(\n ctx,\n table,\n {\n and: options.filter ? [options.filter] : undefined,\n or: options.filterOr?.map((item) => [item]),\n shape: table.query.shape,\n joinedShapes: table.query.joinedShapes,\n },\n quotedAs,\n );\n if (whereSql) {\n sql.push(` FILTER (WHERE ${whereSql})`);\n }\n }\n\n if (options.over) {\n sql.push(\n ` OVER ${windowToSql(table.query, options.over, ctx.values, quotedAs)}`,\n );\n }\n\n if (options.as) sql.push(` AS ${q(options.as)}`);\n\n return sql.join('');\n};\n","import { ColumnsShape } from './columns';\nimport { Query } from './query';\n\nexport abstract class OrchidOrmError extends Error {\n abstract query: Query;\n}\n\nexport class NotFoundError extends OrchidOrmError {\n constructor(public query: Query, message = 'Record is not found') {\n super(message);\n }\n}\n\nexport class OrchidOrmInternalError extends Error {\n constructor(public query: Query, message?: string) {\n super(message);\n }\n}\n\nexport type QueryErrorName =\n | 'parseComplete'\n | 'bindComplete'\n | 'closeComplete'\n | 'noData'\n | 'portalSuspended'\n | 'replicationStart'\n | 'emptyQuery'\n | 'copyDone'\n | 'copyData'\n | 'rowDescription'\n | 'parameterDescription'\n | 'parameterStatus'\n | 'backendKeyData'\n | 'notification'\n | 'readyForQuery'\n | 'commandComplete'\n | 'dataRow'\n | 'copyInResponse'\n | 'copyOutResponse'\n | 'authenticationOk'\n | 'authenticationMD5Password'\n | 'authenticationCleartextPassword'\n | 'authenticationSASL'\n | 'authenticationSASLContinue'\n | 'authenticationSASLFinal'\n | 'error'\n | 'notice';\n\nexport abstract class QueryError<\n T extends { shape: ColumnsShape } = { shape: ColumnsShape },\n> extends OrchidOrmInternalError {\n message!: string;\n name!: QueryErrorName;\n stack: string | undefined;\n code: string | undefined;\n detail: string | undefined;\n severity: string | undefined;\n hint: string | undefined;\n position: string | undefined;\n internalPosition: string | undefined;\n internalQuery: string | undefined;\n where: string | undefined;\n schema: string | undefined;\n table: string | undefined;\n column: string | undefined;\n dataType: string | undefined;\n constraint: string | undefined;\n file: string | undefined;\n line: string | undefined;\n routine: string | undefined;\n\n get isUnique() {\n return this.code === '23505';\n }\n\n columnsCache?: { [K in keyof T['shape']]?: true };\n get columns() {\n if (this.columnsCache) return this.columnsCache;\n\n const columns: { [K in keyof T['shape']]?: true } = {};\n\n if (this.detail) {\n const list = this.detail.match(/\\((.*)\\)=/)?.[1];\n if (list) {\n list.split(', ').forEach((item) => {\n const column = (\n item.startsWith('\"') ? item.slice(1, -1) : item\n ) as keyof T['shape'];\n\n columns[column] = true;\n });\n }\n }\n\n return (this.columnsCache = columns);\n }\n}\n\nexport class MoreThanOneRowError extends OrchidOrmInternalError {\n constructor(query: Query, message?: string) {\n super(query, message);\n }\n}\n\nexport class UnhandledTypeError extends OrchidOrmInternalError {\n constructor(public query: Query, value: never) {\n super(query, `Unhandled type: ${JSON.stringify(value)} received`);\n }\n}\n","import { JsonItem, SelectFunctionItem, SelectItem } from './types';\nimport { getRaw } from '../raw';\nimport { Query } from '../query';\nimport {\n addValue,\n q,\n revealColumnToSql,\n revealColumnToSqlWithAs,\n} from './common';\nimport { aggregateToSql } from './aggregate';\nimport { OrchidOrmInternalError, UnhandledTypeError } from '../errors';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { Expression } from '../utils';\nimport { isRaw, raw } from 'orchid-core';\n\nconst jsonColumnOrMethodToSql = (\n table: Query,\n column: string | JsonItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n return typeof column === 'string'\n ? revealColumnToSql(table.query, table.query.shape, column, quotedAs)\n : jsonToSql(table, column, values, quotedAs);\n};\n\nconst jsonToSql = (\n table: Query,\n item: JsonItem,\n values: unknown[],\n quotedAs?: string,\n): string => {\n const json = item.__json;\n if (json[0] === 'pathQuery') {\n const [, , , column, path, options] = json;\n return `jsonb_path_query(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, ${addValue(values, path)}${\n options?.vars ? `, ${addValue(values, options.vars)}` : ''\n }${options?.silent ? ', true' : ''})`;\n } else if (json[0] === 'set') {\n const [, , , column, path, value, options] = json;\n return `jsonb_set(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.createIfMissing ? ', true' : ''\n })`;\n } else if (json[0] === 'insert') {\n const [, , , column, path, value, options] = json;\n return `jsonb_insert(${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.insertAfter ? ', true' : ''\n })`;\n } else if (json[0] === 'remove') {\n const [, , , column, path] = json;\n return `${jsonColumnOrMethodToSql(\n table,\n column,\n values,\n quotedAs,\n )} #- '{${path.join(', ')}}'`;\n }\n return '';\n};\n\nexport const pushSelectSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n quotedAs?: string,\n) => {\n ctx.sql.push(selectToSql(ctx, table, query, quotedAs));\n};\n\nexport const selectToSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n quotedAs?: string,\n): string => {\n if (query.select) {\n const list: string[] = [];\n for (const item of query.select) {\n if (typeof item === 'string') {\n list.push(\n item === '*'\n ? selectAllSql(table, query, quotedAs)\n : revealColumnToSqlWithAs(table.query, item, quotedAs, true),\n );\n } else {\n if ('selectAs' in item) {\n const obj = item.selectAs as Record<string, Expression | Query>;\n for (const as in obj) {\n const value = obj[as];\n if (typeof value === 'object' || typeof value === 'function') {\n if (isRaw(value)) {\n list.push(`${getRaw(value, ctx.values)} AS ${q(as)}`);\n } else {\n pushSubQuerySql(value as Query, as, ctx.values, list);\n }\n } else {\n list.push(\n `${revealColumnToSql(\n table.query,\n table.query.shape,\n value as string,\n quotedAs,\n true,\n )} AS ${q(as)}`,\n );\n }\n }\n } else if ('__json' in item) {\n list.push(\n `${jsonToSql(table, item, ctx.values, quotedAs)} AS ${q(\n item.__json[1],\n )}`,\n );\n } else if (isRaw(item)) {\n const sql = getRaw(item, ctx.values);\n list.push(ctx.aliasValue ? `${sql} r` : sql);\n } else if ('arguments' in item) {\n list.push(\n `${(item as SelectFunctionItem).function}(${selectToSql(\n ctx,\n table,\n { select: item.arguments },\n quotedAs,\n )})${item.as ? ` AS ${q((item as { as: string }).as)}` : ''}`,\n );\n } else {\n const sql = aggregateToSql(ctx, table, item, quotedAs);\n list.push(ctx.aliasValue ? `${sql} r` : sql);\n }\n }\n }\n return list.join(', ');\n }\n\n return selectAllSql(table, query, quotedAs);\n};\n\nexport const selectAllSql = (\n table: Query,\n query: Pick<SelectQueryData, 'join'>,\n quotedAs?: string,\n) => {\n return query.join?.length\n ? table.internal.columnsForSelectAll\n ?.map((item) => `${quotedAs}.${item}`)\n .join(', ') || `${quotedAs}.*`\n : table.internal.columnsForSelectAll?.join(', ') || '*';\n};\n\nconst pushSubQuerySql = (\n query: Query,\n as: string,\n values: unknown[],\n list: string[],\n) => {\n const { returnType = 'all' } = query.query;\n\n if (query.query.joinedForSelect) {\n let sql;\n switch (returnType) {\n case 'one':\n case 'oneOrThrow':\n sql = `row_to_json(\"${query.query.joinedForSelect}\".*)`;\n break;\n case 'all':\n case 'pluck':\n case 'value':\n case 'valueOrThrow':\n case 'rows':\n sql = `\"${query.query.joinedForSelect}\".r`;\n break;\n case 'rowCount':\n case 'void':\n return;\n default:\n throw new UnhandledTypeError(query, returnType);\n }\n if (sql) list.push(`${coalesce(query, values, sql)} ${q(as)}`);\n return;\n }\n\n switch (returnType) {\n case 'all':\n case 'one':\n case 'oneOrThrow':\n query = query._json() as unknown as typeof query;\n break;\n case 'pluck': {\n const { select } = query.query;\n const first = select?.[0];\n if (!select || !first) {\n throw new OrchidOrmInternalError(\n query,\n `Nothing was selected for pluck`,\n );\n }\n\n const cloned = query.clone();\n cloned.query.select = [{ selectAs: { c: first } }] as SelectItem[];\n query = cloned._wrap(cloned.baseQuery.clone()) as unknown as typeof query;\n query._getOptional(raw(`COALESCE(json_agg(\"c\"), '[]')`));\n break;\n }\n case 'value':\n case 'valueOrThrow':\n case 'rows':\n case 'rowCount':\n case 'void':\n break;\n default:\n throw new UnhandledTypeError(query, returnType);\n }\n\n list.push(\n `${coalesce(query, values, `(${makeSql(query, { values }).text})`)} AS ${q(\n as,\n )}`,\n );\n};\n\nconst coalesce = (query: Query, values: unknown[], sql: string) => {\n const { coalesceValue } = query.query;\n if (coalesceValue !== undefined) {\n let value;\n if (\n typeof coalesceValue === 'object' &&\n coalesceValue &&\n isRaw(coalesceValue)\n ) {\n value = getRaw(coalesceValue, values);\n } else {\n values.push(coalesceValue);\n value = `$${values.length}`;\n }\n return `COALESCE(${sql}, ${value})`;\n }\n\n return sql;\n};\n","import { AggregateItemOptions, HavingItem } from './types';\nimport { getRaw } from '../raw';\nimport { aggregateToSql } from './aggregate';\nimport { addValue, q } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { SelectQueryData } from './data';\nimport { Operator, isRaw, RawExpression, emptyObject } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nconst aggregateOptionNames: (keyof AggregateItemOptions)[] = [\n 'distinct',\n 'order',\n 'filter',\n 'filterOr',\n 'withinGroup',\n];\n\nexport const pushHavingSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n) => {\n const conditions = havingToSql(ctx, table, query, quotedAs);\n if (conditions.length) ctx.sql.push('HAVING', conditions);\n};\n\nexport const havingToSql = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n): string => {\n const or =\n query.having && query.havingOr\n ? [query.having, ...query.havingOr]\n : query.having\n ? [query.having]\n : query.havingOr;\n if (!or?.length) return '';\n\n const ors: string[] = [];\n or.forEach((and) => {\n const ands: string[] = [];\n and.forEach((item) => {\n if ('prototype' in item || 'baseQuery' in item) {\n const query = item as QueryBase;\n const sql = havingToSql(\n ctx,\n query,\n query.query as SelectQueryData,\n query.table && q(query.table),\n );\n if (sql.length) ands.push(`(${sql})`);\n return;\n }\n\n if (isRaw(item)) {\n ands.push(getRaw(item, ctx.values));\n return;\n }\n\n for (const key in item) {\n const columns = item[key as keyof Exclude<HavingItem, RawExpression>];\n if (typeof columns === 'object') {\n for (const column in columns) {\n const valueOrOptions = columns[column as keyof typeof columns];\n if (\n typeof valueOrOptions === 'object' &&\n valueOrOptions !== null &&\n valueOrOptions !== undefined\n ) {\n for (const op in valueOrOptions) {\n if (\n !aggregateOptionNames.includes(\n op as keyof AggregateItemOptions,\n )\n ) {\n const operator = table.query.shape[column].operators[\n op\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as Operator<any>;\n if (!operator) {\n // TODO: custom error classes\n throw new Error(\n `Unknown operator ${op} provided to condition`,\n );\n }\n\n const expression = aggregateToSql(\n ctx,\n table,\n {\n function: key,\n arg: column,\n options: valueOrOptions as AggregateItemOptions,\n },\n quotedAs,\n );\n\n ands.push(\n operator(\n expression,\n valueOrOptions[op as keyof typeof valueOrOptions],\n ctx.values,\n ),\n );\n }\n }\n } else {\n ands.push(\n `${aggregateToSql(\n ctx,\n table,\n {\n function: key,\n arg: column,\n options: emptyObject,\n },\n quotedAs,\n )} = ${addValue(ctx.values, valueOrOptions)}`,\n );\n }\n }\n } else {\n ands.push(`${key}(*) = ${columns}`);\n }\n }\n });\n\n ors.push(ands.join(' AND '));\n });\n\n return ors.join(' OR ');\n};\n","import { q } from './common';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { QueryData } from './data';\nimport { isRaw } from 'orchid-core';\n\nexport const pushWithSql = (\n ctx: ToSqlCtx,\n withData: Exclude<QueryData['with'], undefined>,\n) => {\n if (!withData.length) return;\n\n ctx.sql.push(\n 'WITH',\n withData\n .map((withItem) => {\n const [name, options, query] = withItem;\n\n let inner: string;\n if (isRaw(query)) {\n inner = getRaw(query, ctx.values);\n } else {\n inner = makeSql(query, { values: ctx.values }).text;\n }\n\n return `${options.recursive ? 'RECURSIVE ' : ''}${q(name)}${\n options.columns ? `(${options.columns.map(q).join(', ')})` : ''\n } AS ${\n options.materialized\n ? 'MATERIALIZED '\n : options.notMaterialized\n ? 'NOT MATERIALIZED '\n : ''\n }(${inner})`;\n })\n .join(', '),\n );\n};\n","import { Query, QueryWithTable, SelectableBase } from '../query';\nimport { RelationQuery } from '../relations';\nimport { Expression } from '../utils';\nimport { SelectQueryData } from './data';\nimport { ColumnTypeBase, MaybeArray, RawExpression } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\n// used in `from` logic to decide if convert query to sql or just write table name\nexport const checkIfASimpleQuery = (q: Query) => {\n if (\n (q.query.returnType && q.query.returnType !== 'all') ||\n q.internal.columnsForSelectAll\n )\n return false;\n const keys = Object.keys(q.query) as (keyof SelectQueryData)[];\n return !keys.some((key) => queryKeysOfNotSimpleQuery.includes(key));\n};\n\nconst queryKeysOfNotSimpleQuery: (keyof SelectQueryData)[] = [\n 'with',\n 'as',\n 'from',\n 'and',\n 'or',\n 'select',\n 'distinct',\n 'fromOnly',\n 'join',\n 'group',\n 'having',\n 'havingOr',\n 'window',\n 'union',\n 'order',\n 'limit',\n 'offset',\n 'for',\n];\n\nexport type WithItem = [\n as: string,\n options: WithOptions,\n query: Query | RawExpression,\n];\n\nexport type WithOptions = {\n columns?: string[];\n recursive?: true;\n materialized?: true;\n notMaterialized?: true;\n};\n\nexport type JsonItem<\n As extends string = string,\n Type extends ColumnTypeBase = ColumnTypeBase,\n> = {\n __json:\n | [\n kind: 'set',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n createIfMissing?: boolean;\n },\n ]\n | [\n kind: 'insert',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n insertAfter?: boolean;\n },\n ]\n | [\n kind: 'remove',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n ]\n | [\n kind: 'pathQuery',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: string,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ];\n};\n\nexport type SelectItem =\n | string\n | RelationQuery\n | AggregateItem\n | { selectAs: Record<string, string | Query | RawExpression> }\n | SelectFunctionItem\n | JsonItem\n | RawExpression;\n\nexport type SelectFunctionItem = {\n function: string;\n arguments: SelectItem[];\n as?: string;\n};\n\nexport type JoinItem = SimpleJoinItem | JoinLateralItem;\n\nexport type SimpleJoinItem = {\n type: string;\n args:\n | [relation: string]\n | [\n arg: string | QueryWithTable,\n conditions:\n | Record<string, string | RawExpression>\n | RawExpression\n | ((q: unknown) => QueryBase)\n | true,\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn: string | RawExpression,\n ];\n // available only for QueryWithTable as first argument\n isSubQuery: boolean;\n};\n\nexport type JoinLateralItem = [type: string, joined: Query, as?: string];\n\nexport type WhereItem =\n | (Omit<\n Record<\n string,\n | unknown\n | Record<string, unknown | Query | RawExpression>\n | RawExpression\n >,\n 'NOT' | 'AND' | 'OR' | 'IN' | 'EXISTS' | 'ON' | 'ON_JSON_PATH_EQUALS'\n > & {\n NOT?: MaybeArray<WhereItem>;\n AND?: MaybeArray<WhereItem>;\n OR?: MaybeArray<WhereItem>[];\n IN?: MaybeArray<WhereInItem>;\n EXISTS?: MaybeArray<SimpleJoinItem['args']>;\n ON?: WhereOnItem | WhereJsonPathEqualsItem;\n })\n | ((q: unknown) => QueryBase)\n | Query\n | RawExpression;\n\nexport type WhereInItem = {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n};\n\nexport type WhereJsonPathEqualsItem = [\n leftColumn: string,\n leftPath: string,\n rightColumn: string,\n rightPath: string,\n];\n\nexport type WhereOnItem = {\n joinFrom: WhereOnJoinItem;\n joinTo: WhereOnJoinItem;\n on:\n | [leftFullColumn: string, rightFullColumn: string]\n | [leftFullColumn: string, op: string, rightFullColumn: string];\n};\n\nexport type WhereOnJoinItem =\n | { table?: string; query: { as?: string } }\n | string;\n\nexport type AggregateItemOptions = {\n as?: string;\n distinct?: boolean;\n order?: OrderItem[];\n filter?: WhereItem;\n filterOr?: WhereItem[];\n withinGroup?: boolean;\n over?: string;\n window?: WindowItem;\n};\n\nexport type SortDir = 'ASC' | 'DESC' | 'ASC NULLS FIRST' | 'DESC NULLS LAST';\n\nexport type OrderItem = string | Record<string, SortDir> | RawExpression;\n\nexport type AggregateItemArg =\n | Expression\n | Record<string, Expression>\n | [Expression, string];\n\nexport type AggregateItem = {\n function: string;\n arg?: AggregateItemArg;\n options: AggregateItemOptions;\n};\n\nexport type ColumnOperators<\n S extends SelectableBase,\n Column extends keyof S,\n> = {\n [O in keyof S[Column]['column']['operators']]?:\n | S[Column]['column']['operators'][O]['type'];\n};\n\ntype HavingItemObject = Record<string, unknown>;\n\nexport type HavingItem =\n | Record<string, HavingItemObject>\n | { count?: number | HavingItemObject }\n | Query\n | RawExpression;\n\nexport type WindowItem = Record<string, WindowDeclaration | RawExpression>;\n\nexport type WindowDeclaration = {\n partitionBy?: Expression | Expression[];\n order?: OrderItem;\n};\n\nexport type UnionItem = Query | RawExpression;\n\nexport type UnionKind =\n | 'UNION'\n | 'UNION ALL'\n | 'INTERSECT'\n | 'INTERSECT ALL'\n | 'EXCEPT'\n | 'EXCEPT ALL';\n\nexport type OnConflictItem = string | string[] | RawExpression;\n\nexport type OnConflictMergeUpdate =\n | string\n | string[]\n | Record<string, unknown>\n | RawExpression;\n","import { quoteSchemaAndTable } from './common';\nimport { checkIfASimpleQuery } from './types';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport { SelectQueryData } from './data';\nimport { isRaw } from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport const pushFromAndAs = (\n ctx: ToSqlCtx,\n table: QueryBase,\n query: SelectQueryData,\n quotedAs?: string,\n) => {\n ctx.sql.push('FROM');\n if (query.fromOnly) ctx.sql.push('ONLY');\n\n const from = getFrom(table, query, ctx.values);\n ctx.sql.push(from);\n\n if (query.as && quotedAs && quotedAs !== from) {\n ctx.sql.push('AS', quotedAs);\n }\n};\n\nconst getFrom = (\n table: QueryBase,\n query: SelectQueryData,\n values: unknown[],\n) => {\n if (query.from) {\n const { from } = query;\n if (typeof from === 'object') {\n if (isRaw(from)) {\n return getRaw(from, values);\n }\n\n if (!from.table) {\n const sql = makeSql(from, { values });\n return `(${sql.text})`;\n }\n\n // if query contains more than just schema return (SELECT ...)\n if (!checkIfASimpleQuery(from)) {\n const sql = makeSql(from, { values });\n return `(${sql.text})`;\n }\n\n return quoteSchemaAndTable(from.query.schema, from.table);\n }\n\n return quoteSchemaAndTable(query.schema, from);\n }\n\n return quoteSchemaAndTable(query.schema, table.table as string);\n};\n","import { addValue, q } from './common';\nimport { pushWhereStatementSql } from './where';\nimport { Query } from '../query';\nimport { selectToSql } from './select';\nimport { makeSql, ToSqlCtx } from './toSql';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { getRaw } from '../raw';\nimport { InsertQueryData, QueryData } from './data';\nimport { isRaw, raw, RawExpression } from 'orchid-core';\nimport { ColumnData } from '../columns';\n\n// reuse array for the columns list\nconst quotedColumns: string[] = [];\n\nexport const pushInsertSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: InsertQueryData,\n quotedAs: string,\n) => {\n const { shape } = table.query;\n\n const { columns } = query;\n quotedColumns.length = columns.length;\n for (let i = 0, len = columns.length; i < len; i++) {\n quotedColumns[i] = q(shape[columns[i]]?.data.name || columns[i]);\n }\n\n let runtimeDefaults: (() => unknown)[] | undefined;\n if (table.internal.runtimeDefaultColumns) {\n runtimeDefaults = [];\n for (const key of table.internal.runtimeDefaultColumns) {\n if (!columns.includes(key)) {\n const column = shape[key];\n quotedColumns.push(q(column.data.name || key));\n runtimeDefaults.push(column.data.default as () => unknown);\n }\n }\n }\n\n let values = query.values;\n if (quotedColumns.length === 0) {\n const key = Object.keys(table.shape)[0];\n const column = table.shape[key];\n quotedColumns[0] = q(column?.data.name || key);\n\n if (Array.isArray(values) && Array.isArray(values[0])) {\n values = [[undefined]];\n }\n }\n\n ctx.sql.push(`INSERT INTO ${quotedAs}(${quotedColumns.join(', ')})`);\n\n if ('from' in values) {\n const { from, values: v } = values;\n const q = from.clone();\n\n if (v) {\n pushQueryValue(\n q,\n 'select',\n raw(encodeRow(ctx, v[0], runtimeDefaults), false),\n );\n }\n\n ctx.sql.push(makeSql(q, { values: ctx.values }).text);\n } else if (isRaw(values)) {\n let valuesSql = getRaw(values, ctx.values);\n\n if (runtimeDefaults) {\n valuesSql += `, ${runtimeDefaults\n .map((fn) => addValue(ctx.values, fn()))\n .join(', ')}`;\n }\n\n ctx.sql.push(`VALUES (${valuesSql})`);\n } else if (isRaw(values[0])) {\n let sql;\n\n if (runtimeDefaults) {\n const { values: v } = ctx;\n sql = (values as RawExpression[])\n .map(\n (raw) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n `(${getRaw(raw, v)}, ${runtimeDefaults!\n .map((fn) => addValue(v, fn()))\n .join(', ')})`,\n )\n .join(', ');\n } else {\n const { values: v } = ctx;\n sql = (values as RawExpression[])\n .map((raw) => `(${getRaw(raw, v)})`)\n .join(', ');\n }\n\n ctx.sql.push(`VALUES ${sql}`);\n } else {\n ctx.sql.push(\n `VALUES ${(values as unknown[][])\n .map((row) => `(${encodeRow(ctx, row, runtimeDefaults)})`)\n .join(', ')}`,\n );\n }\n\n if (query.onConflict) {\n ctx.sql.push('ON CONFLICT');\n\n const { expr, type } = query.onConflict;\n if (expr) {\n if (typeof expr === 'string') {\n ctx.sql.push(`(${q(shape[expr]?.data.name || expr)})`);\n } else if (Array.isArray(expr)) {\n ctx.sql.push(\n `(${expr\n .map((item) => q(shape[item]?.data.name || item))\n .join(', ')})`,\n );\n } else {\n ctx.sql.push(getRaw(expr, ctx.values));\n }\n } else if (type === 'merge') {\n // TODO: optimize, unique columns could be stored in Query.internal\n // consider saving a cache of columns for this case into Query.internal\n\n const { indexes } = table.internal;\n\n const quotedUniques = columns.reduce((arr: string[], key, i) => {\n const unique =\n // check column index\n (shape[key]?.data as ColumnData).indexes?.some(\n (index) => index.unique,\n ) ||\n // check table composite indexes\n indexes?.some((index) =>\n index.columns.some(\n (item) => 'column' in item && item.column === key,\n ),\n );\n\n if (unique) arr.push(quotedColumns[i]);\n return arr;\n }, []);\n\n ctx.sql.push(`(${quotedUniques.join(', ')})`);\n }\n\n if (type === 'ignore') {\n ctx.sql.push('DO NOTHING');\n } else if (type === 'merge') {\n let set: string;\n\n const { update } = query.onConflict;\n if (update) {\n if (typeof update === 'string') {\n const name = q(shape[update]?.data.name || update);\n set = `${name} = excluded.${name}`;\n } else if (Array.isArray(update)) {\n set = update\n .map((item) => {\n const name = q(shape[item]?.data.name || item);\n return `${name} = excluded.${name}`;\n })\n .join(', ');\n } else if (isRaw(update)) {\n set = getRaw(update, ctx.values);\n } else {\n const arr: string[] = [];\n for (const key in update) {\n arr.push(\n `${q(shape[key]?.data.name || key)} = ${addValue(\n ctx.values,\n update[key],\n )}`,\n );\n }\n set = arr.join(', ');\n }\n } else {\n set = quotedColumns\n .map((column) => `${column} = excluded.${column}`)\n .join(', ');\n }\n\n ctx.sql.push('DO UPDATE SET', set);\n }\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n pushReturningSql(ctx, table, query, quotedAs);\n};\n\nconst encodeRow = (\n ctx: ToSqlCtx,\n row: unknown[],\n runtimeDefaults?: (() => unknown)[],\n) => {\n const arr = row.map((value) =>\n value === undefined ? 'DEFAULT' : addValue(ctx.values, value),\n );\n\n if (runtimeDefaults) {\n for (const fn of runtimeDefaults) {\n arr.push(addValue(ctx.values, fn()));\n }\n }\n\n return arr.join(', ');\n};\n\nexport const pushReturningSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: QueryData,\n quotedAs: string,\n) => {\n if (query.select) {\n ctx.sql.push(`RETURNING ${selectToSql(ctx, table, query, quotedAs)}`);\n }\n};\n","import { Query } from '../query';\nimport { addValue, q, quoteSchemaAndTable } from './common';\nimport { pushReturningSql } from './insert';\nimport { pushWhereStatementSql } from './where';\nimport { ToSqlCtx } from './toSql';\nimport { getRaw } from '../raw';\nimport {\n UpdateQueryData,\n UpdateQueryDataItem,\n UpdateQueryDataObject,\n} from './data';\nimport { isRaw, pushOrNewArray } from 'orchid-core';\n\nexport const pushUpdateSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: UpdateQueryData,\n quotedAs: string,\n) => {\n const quotedTable = quoteSchemaAndTable(query.schema, table.table as string);\n ctx.sql.push(`UPDATE ${quotedTable}`);\n\n if (quotedTable !== quotedAs) {\n ctx.sql.push(`AS ${quotedAs}`);\n }\n\n ctx.sql.push('SET');\n\n const set: string[] = [];\n processData(ctx, table, set, query.updateData);\n ctx.sql.push(set.join(', '));\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n pushReturningSql(ctx, table, query, quotedAs);\n};\n\nconst processData = (\n ctx: ToSqlCtx,\n table: Query,\n set: string[],\n data: UpdateQueryDataItem[],\n) => {\n let append: UpdateQueryDataItem[] | undefined;\n data.forEach((item) => {\n if (typeof item === 'function') {\n const result = item(data);\n if (result) append = pushOrNewArray(append, result);\n } else if (isRaw(item)) {\n set.push(getRaw(item, ctx.values));\n } else {\n const shape = table.query.shape;\n for (const key in item) {\n const value = item[key];\n if (value !== undefined) {\n set.push(\n `${q(shape[key].data.name || key)} = ${processValue(\n table,\n ctx.values,\n key,\n value,\n )}`,\n );\n }\n }\n }\n });\n\n if (append) processData(ctx, table, set, append);\n};\n\nconst processValue = (\n table: Query,\n values: unknown[],\n key: string,\n value: UpdateQueryDataObject[string],\n) => {\n if (value && typeof value === 'object') {\n if (isRaw(value)) {\n return getRaw(value, values);\n } else if ('op' in value && 'arg' in value) {\n return `${q(table.query.shape[key].data.name || key)} ${\n (value as { op: string }).op\n } ${addValue(values, (value as { arg: unknown }).arg)}`;\n }\n }\n\n return addValue(values, value);\n};\n","import { Query } from '../query';\nimport { pushWhereStatementSql } from './where';\nimport { pushReturningSql } from './insert';\nimport { processJoinItem } from './join';\nimport { ToSqlCtx } from './toSql';\nimport { q } from './common';\nimport { DeleteQueryData } from './data';\n\nexport const pushDeleteSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: DeleteQueryData,\n quotedAs: string,\n) => {\n const from = q(table.table as string);\n ctx.sql.push(`DELETE FROM ${from}`);\n\n if (from !== quotedAs) {\n ctx.sql.push(`AS ${quotedAs}`);\n }\n\n let conditions: string | undefined;\n if (query.join?.length) {\n const items: { target: string; conditions?: string }[] = [];\n for (const item of query.join) {\n // skip join lateral: it's not supported here, and it's not clean if it's supported in DELETE by the db\n if (!Array.isArray(item)) {\n items.push(processJoinItem(ctx, table, query, item, quotedAs));\n }\n }\n\n if (items.length) {\n ctx.sql.push(`USING ${items.map((item) => item.target).join(', ')}`);\n\n conditions = items\n .map((item) => item.conditions)\n .filter(Boolean)\n .join(' AND ');\n }\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n\n if (conditions?.length) {\n if (query.and?.length || query.or?.length) {\n ctx.sql.push('AND', conditions);\n } else {\n ctx.sql.push('WHERE', conditions);\n }\n }\n\n pushReturningSql(ctx, table, query, quotedAs);\n};\n","import { quoteSchemaAndTable } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { TruncateQueryData } from './data';\n\nexport const pushTruncateSql = (\n ctx: ToSqlCtx,\n table: string,\n query: TruncateQueryData,\n) => {\n ctx.sql.push('TRUNCATE', quoteSchemaAndTable(query.schema, table));\n\n if (query.restartIdentity) ctx.sql.push('RESTART IDENTITY');\n if (query.cascade) ctx.sql.push('CASCADE');\n};\n","import { addValue } from './common';\nimport { ToSqlCtx } from './toSql';\nimport { ColumnInfoQueryData } from './data';\nimport { Query } from '../query';\n\nexport const pushColumnInfoSql = (\n ctx: ToSqlCtx,\n table: Query,\n query: ColumnInfoQueryData,\n) => {\n ctx.sql.push(\n `SELECT * FROM information_schema.columns WHERE table_name = ${addValue(\n ctx.values,\n table.table,\n )} AND table_catalog = current_database() AND table_schema = ${\n query.schema || 'current_schema()'\n }`,\n );\n\n if (query.column) {\n ctx.sql.push(\n `AND column_name = ${addValue(\n ctx.values,\n table.query.shape[query.column]?.data.name || query.column,\n )}`,\n );\n }\n};\n","const singleQuoteRegex = /'/g;\nconst doubleQuoteRegex = /\"/g;\n\n// eslint-disable-next-line\ntype Value = any\n\nconst quoteValue = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return String(value);\n else if (type === 'string')\n return `\"${(value as string)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `\"${value.toISOString()}\"`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (value === null || value === undefined) return 'NULL';\n else\n return `\"${JSON.stringify(value)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n};\n\nconst quoteArray = (array: Value[]) => `'{${array.map(quoteValue).join(',')}}'`;\n\nexport const quote = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return `${value}`;\n else if (type === 'string') return quoteString(value);\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `'${value.toISOString()}'`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (value === null || value === undefined) return 'NULL';\n else return `'${JSON.stringify(value).replace(singleQuoteRegex, \"''\")}'`;\n};\n\nexport const quoteString = (value: string) => {\n return `'${(value as string).replace(singleQuoteRegex, \"''\")}'`;\n};\n","import { ToSqlCtx } from './toSql';\nimport { CopyQueryData } from './data';\nimport { Query } from '../query';\nimport { q } from './common';\nimport { quoteString } from '../quote';\nimport { pushWhereStatementSql } from './where';\n\nexport const pushCopySql = (\n ctx: ToSqlCtx,\n table: Query,\n query: CopyQueryData,\n quotedAs?: string,\n) => {\n const { sql } = ctx;\n const { copy } = query;\n\n const columns = copy.columns\n ? `(${copy.columns\n .map((item) => q(query.shape[item]?.data.name || item))\n .join(', ')})`\n : '';\n\n const target = 'from' in copy ? copy.from : copy.to;\n\n sql.push(\n `COPY ${q(table.table as string)}${columns} ${\n 'from' in copy ? 'FROM' : 'TO'\n } ${\n typeof target === 'string'\n ? quoteString(target)\n : `PROGRAM ${quoteString(target.program)}`\n }`,\n );\n\n if (Object.keys(copy).length > (copy.columns ? 2 : 1)) {\n const options: string[] = [];\n\n if (copy.format) options.push(`FORMAT ${copy.format}`);\n if (copy.freeze) options.push(`FREEZE ${copy.freeze}`);\n if (copy.delimiter)\n options.push(`DELIMITER ${quoteString(copy.delimiter)}`);\n if (copy.null) options.push(`NULL ${quoteString(copy.null)}`);\n if (copy.header) options.push(`HEADER ${copy.header}`);\n if (copy.quote) options.push(`QUOTE ${quoteString(copy.quote)}`);\n if (copy.escape) options.push(`ESCAPE ${quoteString(copy.escape)}`);\n if (copy.forceQuote)\n options.push(\n `FORCE_QUOTE ${\n copy.forceQuote === '*'\n ? '*'\n : `(${copy.forceQuote.map(q).join(', ')})`\n }`,\n );\n if (copy.forceNotNull)\n options.push(`FORCE_NOT_NULL (${copy.forceNotNull.map(q).join(', ')})`);\n if (copy.forceNull)\n options.push(`FORCE_NULL (${copy.forceNull.map(q).join(', ')})`);\n if (copy.encoding) options.push(`ENCODING ${quoteString(copy.encoding)}`);\n\n sql.push(`WITH (${options.join(', ')})`);\n }\n\n pushWhereStatementSql(ctx, table, query, quotedAs);\n};\n","import { Query, queryTypeWithLimitOne } from '../query';\nimport { addValue, q, revealColumnToSql } from './common';\nimport { JoinItem } from './types';\nimport { pushDistinctSql } from './distinct';\nimport { pushSelectSql } from './select';\nimport { windowToSql } from './window';\nimport { pushJoinSql } from './join';\nimport { pushWhereStatementSql } from './where';\nimport { pushHavingSql } from './having';\nimport { pushWithSql } from './with';\nimport { pushFromAndAs } from './fromAndAs';\nimport { pushInsertSql } from './insert';\nimport { pushUpdateSql } from './update';\nimport { pushDeleteSql } from './delete';\nimport { pushTruncateSql } from './truncate';\nimport { pushColumnInfoSql } from './columnInfo';\nimport { pushOrderBySql } from './orderBy';\nimport { OnQueryBuilder, WhereQueryBuilder } from '../queryMethods';\nimport { getRaw } from '../raw';\nimport { QueryData } from './data';\nimport { pushCopySql } from './copy';\nimport { isRaw, Sql } from 'orchid-core';\n\nexport type ToSqlCtx = {\n whereQueryBuilder: typeof WhereQueryBuilder;\n onQueryBuilder: typeof OnQueryBuilder;\n sql: string[];\n values: unknown[];\n // selected value in JOIN LATERAL will have an alias to reference it from SELECT\n aliasValue?: true;\n};\n\nexport type toSqlCacheKey = typeof toSqlCacheKey;\nexport const toSqlCacheKey = Symbol('toSqlCache');\n\nexport type ToSqlOptions = {\n clearCache?: boolean;\n values?: unknown[];\n};\n\ntype ToSqlOptionsInternal = ToSqlOptions & {\n aliasValue?: true;\n};\n\nexport const toSql = (table: Query, options?: ToSqlOptions): Sql => {\n return (\n (!options?.clearCache && table.query[toSqlCacheKey]) ||\n (table.query[toSqlCacheKey] = makeSql(table, options))\n );\n};\n\nexport const makeSql = (table: Query, options?: ToSqlOptionsInternal): Sql => {\n const query = table.query;\n const sql: string[] = [];\n const values = options?.values || [];\n const ctx: ToSqlCtx = {\n whereQueryBuilder: table.whereQueryBuilder,\n onQueryBuilder: table.onQueryBuilder,\n sql,\n values,\n aliasValue: options?.aliasValue,\n };\n\n if (query.with) {\n pushWithSql(ctx, query.with);\n }\n\n if (query.type) {\n if (query.type === 'truncate') {\n if (!table.table) throw new Error('Table is missing for truncate');\n\n pushTruncateSql(ctx, table.table, query);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'columnInfo') {\n if (!table.table) throw new Error('Table is missing for truncate');\n\n pushColumnInfoSql(ctx, table, query);\n return { text: sql.join(' '), values };\n }\n\n if (!table.table) throw new Error(`Table is missing for ${query.type}`);\n\n const quotedAs = q(query.as || table.table);\n\n if (query.type === 'insert') {\n pushInsertSql(ctx, table, query, q(table.table));\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'update') {\n pushUpdateSql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'delete') {\n pushDeleteSql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'copy') {\n pushCopySql(ctx, table, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n }\n\n const quotedAs =\n (query.as || table.table) && q((query.as || table.table) as string);\n\n sql.push('SELECT');\n\n if (query.distinct) {\n pushDistinctSql(ctx, table, query.distinct, quotedAs);\n }\n\n pushSelectSql(ctx, table, query, quotedAs);\n\n if (table.table || query.from) {\n pushFromAndAs(ctx, table, query, quotedAs);\n }\n\n if (query.join) {\n pushJoinSql(\n ctx,\n table,\n query as QueryData & { join: JoinItem[] },\n quotedAs,\n );\n }\n\n if (query.and || query.or) {\n pushWhereStatementSql(ctx, table, query, quotedAs);\n }\n\n if (query.group) {\n const group = query.group.map((item) =>\n typeof item === 'object' && isRaw(item)\n ? getRaw(item, values)\n : revealColumnToSql(\n table.query,\n table.query.shape,\n item as string,\n quotedAs,\n ),\n );\n sql.push(`GROUP BY ${group.join(', ')}`);\n }\n\n if (query.having || query.havingOr) {\n pushHavingSql(ctx, table, query, quotedAs);\n }\n\n if (query.window) {\n const window: string[] = [];\n query.window.forEach((item) => {\n for (const key in item) {\n window.push(\n `${q(key)} AS ${windowToSql(query, item[key], values, quotedAs)}`,\n );\n }\n });\n sql.push(`WINDOW ${window.join(', ')}`);\n }\n\n if (query.union) {\n query.union.forEach((item) => {\n let itemSql: string;\n if (isRaw(item.arg)) {\n itemSql = getRaw(item.arg, values);\n } else {\n const argSql = makeSql(item.arg, { values });\n itemSql = argSql.text;\n }\n sql.push(`${item.kind} ${item.wrap ? `(${itemSql})` : itemSql}`);\n });\n }\n\n if (query.order) {\n pushOrderBySql(ctx, query, quotedAs, query.order);\n }\n\n if (!query.returnsOne) {\n const limit = queryTypeWithLimitOne[query.returnType] ? 1 : query.limit;\n if (limit) {\n sql.push(`LIMIT ${addValue(values, limit)}`);\n }\n }\n\n if (query.offset) {\n sql.push(`OFFSET ${addValue(values, query.offset)}`);\n }\n\n if (query.for) {\n sql.push('FOR', query.for.type);\n const { tableNames } = query.for;\n if (tableNames) {\n if (isRaw(tableNames)) {\n sql.push('OF', getRaw(tableNames, values));\n } else {\n sql.push('OF', tableNames.map(q).join(', '));\n }\n }\n if (query.for.mode) sql.push(query.for.mode);\n }\n\n return { text: sql.join(' '), values };\n};\n","import { ColumnsParsers, Query, QueryReturnType } from '../query';\nimport {\n AfterCallback,\n BeforeCallback,\n getValueKey,\n QueryLogger,\n QueryLogObject,\n} from '../queryMethods';\nimport { Adapter, QueryResult } from '../adapter';\nimport { RelationQueryData, relationQueryKey } from '../relations';\nimport { ColumnsShape } from '../columns';\nimport { toSqlCacheKey } from './toSql';\nimport {\n HavingItem,\n JoinItem,\n OnConflictItem,\n OnConflictMergeUpdate,\n OrderItem,\n SelectItem,\n UnionItem,\n UnionKind,\n WhereItem,\n WindowItem,\n WithItem,\n} from './types';\nimport { Expression } from '../utils';\nimport {\n RawExpression,\n ColumnsShapeBase,\n ColumnTypeBase,\n MaybeArray,\n Sql,\n} from 'orchid-core';\nimport { QueryBase } from '../queryBase';\n\nexport type JoinedShapes = Record<string, ColumnsShapeBase>;\nexport type JoinedParsers = Record<string, ColumnsParsers>;\n\nexport type CommonQueryData = {\n adapter: Adapter;\n shape: ColumnsShapeBase;\n patchResult?(queryResult: QueryResult): Promise<void>;\n handleResult(q: Query, result: QueryResult, isSubQuery?: true): unknown;\n returnType: QueryReturnType;\n [relationQueryKey]?: RelationQueryData;\n wrapInTransaction?: boolean;\n throwOnNotFound?: boolean;\n with?: WithItem[];\n withShapes?: Record<string, ColumnsShape>;\n joinTo?: QueryBase;\n joinedShapes?: JoinedShapes;\n joinedParsers?: JoinedParsers;\n joinedForSelect?: string;\n innerJoinLateral?: true;\n schema?: string;\n select?: SelectItem[];\n as?: string;\n from?: string | Query | RawExpression;\n and?: WhereItem[];\n or?: WhereItem[][];\n coalesceValue?: unknown | RawExpression;\n parsers?: ColumnsParsers;\n notFoundDefault?: unknown;\n defaults?: Record<string, unknown>;\n beforeQuery?: BeforeCallback[];\n afterQuery?: AfterCallback[];\n log?: QueryLogObject;\n logger: QueryLogger;\n autoPreparedStatements?: boolean;\n [toSqlCacheKey]?: Sql;\n};\n\nexport type SelectQueryData = CommonQueryData & {\n type: undefined;\n distinct?: Expression[];\n fromOnly?: boolean;\n join?: JoinItem[];\n group?: (string | RawExpression)[];\n having?: HavingItem[];\n havingOr?: HavingItem[][];\n window?: WindowItem[];\n union?: { arg: UnionItem; kind: UnionKind; wrap?: boolean }[];\n order?: OrderItem[];\n returnsOne?: true;\n limit?: number;\n offset?: number;\n for?: {\n type: 'UPDATE' | 'NO KEY UPDATE' | 'SHARE' | 'KEY SHARE';\n tableNames?: string[] | RawExpression;\n mode?: 'NO WAIT' | 'SKIP LOCKED';\n };\n // column type for query with 'value' or 'valueOrThrow' return type\n [getValueKey]?: ColumnTypeBase;\n};\n\nexport type InsertQueryData = CommonQueryData & {\n type: 'insert';\n columns: string[];\n values:\n | unknown[][]\n | MaybeArray<RawExpression>\n | {\n from: Query;\n values?: unknown[][];\n };\n using?: JoinItem[];\n join?: JoinItem[];\n onConflict?:\n | {\n type: 'ignore';\n expr?: OnConflictItem;\n }\n | {\n type: 'merge';\n expr?: OnConflictItem;\n update?: OnConflictMergeUpdate;\n };\n beforeCreate?: BeforeCallback[];\n afterCreate?: AfterCallback[];\n};\n\nexport type UpdateQueryDataObject = Record<\n string,\n RawExpression | { op: string; arg: unknown } | unknown\n>;\n\nexport type UpdatedAtDataInjector = (\n data: UpdateQueryDataItem[],\n) => UpdateQueryDataItem | void;\n\nexport type UpdateQueryDataItem =\n | UpdateQueryDataObject\n | RawExpression\n | UpdatedAtDataInjector;\n\nexport type UpdateQueryData = CommonQueryData & {\n type: 'update';\n updateData: UpdateQueryDataItem[];\n beforeUpdate?: BeforeCallback[];\n afterUpdate?: AfterCallback[];\n};\n\nexport type DeleteQueryData = CommonQueryData & {\n type: 'delete';\n join?: JoinItem[];\n beforeDelete?: BeforeCallback[];\n afterDelete?: AfterCallback[];\n};\n\nexport type TruncateQueryData = CommonQueryData & {\n type: 'truncate';\n restartIdentity?: boolean;\n cascade?: boolean;\n};\n\nexport type ColumnInfoQueryData = CommonQueryData & {\n type: 'columnInfo';\n column?: string;\n};\n\nexport type CopyQueryData = CommonQueryData & {\n type: 'copy';\n copy: CopyOptions;\n};\n\nexport type CopyOptions<Column = string> = {\n columns?: Column[];\n format?: 'text' | 'csv' | 'binary';\n freeze?: boolean;\n delimiter?: string;\n null?: string;\n header?: boolean | 'match';\n quote?: string;\n escape?: string;\n forceQuote?: Column[] | '*';\n forceNotNull?: Column[];\n forceNull?: Column[];\n encoding?: string;\n} & (\n | {\n from: string | { program: string };\n }\n | {\n to: string | { program: string };\n }\n);\n\nexport type QueryData =\n | SelectQueryData\n | InsertQueryData\n | UpdateQueryData\n | DeleteQueryData\n | TruncateQueryData\n | ColumnInfoQueryData\n | CopyQueryData;\n\nexport const cloneQueryArrays = (q: QueryData) => {\n if (q.with) q.with = q.with?.slice(0);\n if (q.select) q.select = q.select?.slice(0);\n if (q.and) q.and = q.and?.slice(0);\n if (q.or) q.or = q.or?.slice(0);\n if (q.beforeQuery) q.beforeQuery = q.beforeQuery?.slice(0);\n if (q.afterQuery) q.afterQuery = q.afterQuery?.slice(0);\n\n // may have data for updating timestamps on any kind of query\n (q as UpdateQueryData).updateData = (q as UpdateQueryData).updateData?.slice(\n 0,\n );\n\n if (q.type === undefined) {\n if (q.distinct) q.distinct = q.distinct?.slice(0);\n if (q.join) q.join = q.join?.slice(0);\n if (q.group) q.group = q.group?.slice(0);\n if (q.having) q.having = q.having?.slice(0);\n if (q.havingOr) q.havingOr = q.havingOr?.slice(0);\n if (q.window) q.window = q.window?.slice(0);\n if (q.union) q.union = q.union?.slice(0);\n if (q.order) q.order = q.order?.slice(0);\n } else if (q.type === 'insert') {\n q.columns = q.columns?.slice(0);\n q.values = Array.isArray(q.values) ? q.values.slice(0) : q.values;\n if (q.using) q.using = q.using?.slice(0);\n if (q.join) q.join = q.join?.slice(0);\n if (q.beforeCreate) q.beforeCreate = q.beforeCreate?.slice(0);\n if (q.afterCreate) q.afterCreate = q.afterCreate?.slice(0);\n } else if (q.type === 'update') {\n if (q.beforeUpdate) q.beforeUpdate = q.beforeUpdate?.slice(0);\n if (q.afterUpdate) q.afterUpdate = q.afterUpdate?.slice(0);\n } else if (q.type === 'delete') {\n if (q.beforeDelete) q.beforeDelete = q.beforeDelete?.slice(0);\n if (q.afterDelete) q.afterDelete = q.afterDelete?.slice(0);\n }\n};\n","import { cloneQueryArrays, QueryData, toSqlCacheKey } from './sql';\nimport type { Query, Selectable } from './query';\nimport type { ColumnType } from './columns';\nimport type {\n RawExpression,\n ColumnOutput,\n ColumnTypeBase,\n StringKey,\n} from 'orchid-core';\n\nexport const getClonedQueryData = (query: QueryData): QueryData => {\n const cloned = { ...query };\n delete cloned[toSqlCacheKey];\n if (cloned.parsers) cloned.parsers = { ...cloned.parsers };\n cloneQueryArrays(cloned);\n return cloned as QueryData;\n};\n\nexport const getQueryAs = (q: { table?: string; query: { as?: string } }) => {\n return q.query.as || (q.table as string);\n};\n\nexport const makeRegexToFindInSql = (value: string) => {\n return new RegExp(`${value}(?=(?:[^']*'[^']*')*[^']*$)`, 'g');\n};\n\nexport type AliasOrTable<T extends Pick<Query, 'table' | 'meta'>> =\n T['meta']['as'] extends string\n ? T['meta']['as']\n : T['table'] extends string\n ? T['table']\n : never;\n\nexport type Expression<\n T extends Query = Query,\n C extends ColumnTypeBase = ColumnTypeBase,\n> = StringKey<keyof T['selectable']> | RawExpression<C>;\n\nexport type ExpressionOfType<T extends Query, C extends ColumnTypeBase, Type> =\n | {\n [K in keyof T['selectable']]: ColumnOutput<\n T['selectable'][K]['column']\n > extends Type | null\n ? K\n : never;\n }[Selectable<T>]\n | RawExpression<C>;\n\nexport type NumberExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, number>;\n\nexport type StringExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, string>;\n\nexport type BooleanExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, boolean>;\n\nexport type ExpressionOutput<\n T extends Query,\n Expr extends Expression<T>,\n> = Expr extends keyof T['selectable']\n ? T['selectable'][Expr]['column']\n : Expr extends RawExpression<infer ColumnType>\n ? ColumnType\n : never;\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { Code, singleQuote } from 'orchid-core';\nimport { columnCode } from './code';\n\n// for a user-defined type, or for unsupported yet type from some module\nexport class CustomTypeColumn extends ColumnType<\n unknown,\n typeof Operators.any\n> {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n this.data.isOfCustomType = true;\n }\n\n toCode(t: string): Code {\n return columnCode(this, t, `type(${singleQuote(this.dataType)})`);\n }\n}\n\n// domain column type: https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-user-defined-data-types/\nexport class DomainColumn extends CustomTypeColumn {\n toCode(t: string): Code {\n return columnCode(this, t, `domain(${singleQuote(this.dataType)})`);\n }\n}\n","import {\n BigIntColumn,\n BigSerialColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n IntegerColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n} from './number';\nimport {\n BitColumn,\n BitVaryingColumn,\n BoxColumn,\n ByteaColumn,\n CharColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n InetColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n TextColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n XMLColumn,\n} from './string';\nimport {\n DateColumn,\n IntervalColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n} from './dateTime';\nimport { BooleanColumn } from './boolean';\nimport { EnumColumn } from './enum';\nimport { JSONColumn, JSONTextColumn, JSONTypes } from './json';\nimport {\n ColumnTypesBase,\n EmptyObject,\n emptyObject,\n JSONTypeAny,\n makeTimestampsHelpers,\n MaybeArray,\n name,\n raw,\n RawExpression,\n setDefaultNowFn,\n toArray,\n} from 'orchid-core';\nimport { ArrayColumn } from './array';\nimport {\n ColumnNameOfTable,\n ColumnType,\n DropMode,\n ForeignKeyTable,\n IndexColumnOptions,\n IndexOptions,\n ForeignKeyOptions,\n} from './columnType';\nimport { makeRegexToFindInSql } from '../utils';\nimport { ColumnsShape } from './columnsSchema';\nimport { CustomTypeColumn, DomainColumn } from './customType';\n\nexport type ColumnTypes = typeof columnTypes;\n\nexport type TableData = {\n primaryKey?: TableData.PrimaryKey;\n indexes?: TableData.Index[];\n constraints?: TableData.Constraint[];\n};\n\nexport namespace TableData {\n export type PrimaryKey = {\n columns: string[];\n options?: { name?: string };\n };\n\n export type Index = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\n };\n\n export type Constraint = {\n name?: string;\n check?: Check;\n identity?: Identity;\n references?: References;\n dropMode?: DropMode;\n };\n\n export type Check = RawExpression;\n\n export type References = {\n columns: string[];\n fnOrTable: (() => ForeignKeyTable) | string;\n foreignColumns: string[];\n options?: ForeignKeyOptions;\n };\n\n export type Identity = {\n always?: boolean;\n } & Omit<SequenceOptions, 'dataType' | 'ownedBy'>;\n\n export type SequenceOptions = {\n dataType?: 'smallint' | 'integer' | 'bigint';\n incrementBy?: number;\n startWith?: number;\n min?: number;\n max?: number;\n cache?: number;\n cycle?: boolean;\n ownedBy?: string;\n };\n}\n\nexport const getConstraintKind = (\n it: TableData.Constraint,\n): 'constraint' | 'foreignKey' | 'check' => {\n let num = 0;\n for (const key in it) {\n if (\n (key === 'references' || key === 'check') &&\n it[key as keyof typeof it] !== undefined\n ) {\n num++;\n }\n }\n return num === 1 ? (it.references ? 'foreignKey' : 'check') : 'constraint';\n};\n\nexport const newTableData = (): TableData => ({});\n\nlet tableData: TableData = newTableData();\n\nexport const getTableData = () => tableData;\n\nexport const resetTableData = (data: TableData = newTableData()) => {\n tableData = data;\n};\n\nexport const getColumnTypes = <\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape,\n>(\n types: CT,\n fn: (t: CT) => Shape,\n nowSQL: string | undefined,\n data: TableData = newTableData(),\n) => {\n if (nowSQL) setDefaultNowFn(nowSQL);\n\n resetTableData(data);\n return fn(types);\n};\n\nfunction text(min: number, max: number) {\n return new TextColumn(min, max);\n}\n\nexport type DefaultColumnTypes = typeof columnTypes;\nexport const columnTypes = {\n name,\n raw,\n smallint() {\n return new SmallIntColumn();\n },\n integer() {\n return new IntegerColumn();\n },\n bigint() {\n return new BigIntColumn();\n },\n numeric<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(precision?: Precision, scale?: Scale) {\n return new DecimalColumn(precision, scale);\n },\n decimal<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(precision?: Precision, scale?: Scale) {\n return new DecimalColumn(precision, scale);\n },\n real() {\n return new RealColumn();\n },\n doublePrecision() {\n return new DoublePrecisionColumn();\n },\n identity(options?: TableData.Identity) {\n return new IntegerColumn().identity(options);\n },\n smallSerial() {\n return new SmallSerialColumn();\n },\n serial() {\n return new SerialColumn();\n },\n bigSerial() {\n return new BigSerialColumn();\n },\n money() {\n return new MoneyColumn();\n },\n varchar<Limit extends number | undefined = undefined>(limit?: Limit) {\n return new VarCharColumn(limit);\n },\n char<Limit extends number | undefined = undefined>(limit?: Limit) {\n return new CharColumn(limit);\n },\n text,\n string: text,\n citext(min: number, max: number) {\n return new CitextColumn(min, max);\n },\n bytea() {\n return new ByteaColumn();\n },\n date() {\n return new DateColumn();\n },\n timestampNoTZ<Precision extends number>(precision?: Precision) {\n return new TimestampColumn(precision);\n },\n timestamp<Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) {\n return new TimestampTZColumn(precision);\n },\n time<Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) {\n return new TimeColumn(precision);\n },\n interval<\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n >(fields?: Fields, precision?: Precision) {\n return new IntervalColumn(fields, precision);\n },\n boolean() {\n return new BooleanColumn();\n },\n enum<U extends string, T extends [U, ...U[]]>(dataType: string, type: T) {\n return new EnumColumn<U, T>(dataType, type);\n },\n point() {\n return new PointColumn();\n },\n line() {\n return new LineColumn();\n },\n lseg() {\n return new LsegColumn();\n },\n box() {\n return new BoxColumn();\n },\n path() {\n return new PathColumn();\n },\n polygon() {\n return new PolygonColumn();\n },\n circle() {\n return new CircleColumn();\n },\n cidr() {\n return new CidrColumn();\n },\n inet() {\n return new InetColumn();\n },\n macaddr() {\n return new MacAddrColumn();\n },\n macaddr8() {\n return new MacAddr8Column();\n },\n bit<Length extends number>(length: Length) {\n return new BitColumn(length);\n },\n bitVarying<Length extends number | undefined = undefined>(length?: Length) {\n return new BitVaryingColumn(length);\n },\n tsvector() {\n return new TsVectorColumn();\n },\n tsquery() {\n return new TsQueryColumn();\n },\n uuid() {\n return new UUIDColumn();\n },\n xml() {\n return new XMLColumn();\n },\n json<Type extends JSONTypeAny>(schemaOrFn: Type | ((j: JSONTypes) => Type)) {\n return new JSONColumn(schemaOrFn);\n },\n jsonText() {\n return new JSONTextColumn();\n },\n array<Item extends ColumnType>(item: Item) {\n return new ArrayColumn(item);\n },\n type(dataType: string) {\n return new CustomTypeColumn(dataType);\n },\n domain(dataType: string) {\n return new DomainColumn(dataType);\n },\n\n primaryKey(columns: string[], options?: { name?: string }) {\n tableData.primaryKey = { columns, options };\n return emptyObject;\n },\n\n index(\n columns: MaybeArray<string | IndexColumnOptions>,\n options: IndexOptions = {},\n ) {\n const index = {\n columns: toArray(columns).map((column) =>\n typeof column === 'string' ? { column } : column,\n ),\n options,\n };\n\n (tableData.indexes ??= []).push(index);\n return emptyObject;\n },\n\n unique(\n columns: MaybeArray<string | IndexColumnOptions>,\n options: IndexOptions = {},\n ) {\n const index = {\n columns: toArray(columns).map((column) =>\n typeof column === 'string' ? { column } : column,\n ),\n options: { ...options, unique: true },\n };\n\n (tableData.indexes ??= []).push(index);\n\n return emptyObject;\n },\n\n constraint<\n Table extends (() => ForeignKeyTable) | string,\n Columns extends Table extends () => ForeignKeyTable\n ? [\n ColumnNameOfTable<ReturnType<Table>>,\n ...ColumnNameOfTable<ReturnType<Table>>[],\n ]\n : [string, ...string[]],\n >({\n name,\n references,\n check,\n dropMode,\n }: {\n name?: string;\n references?: [\n columns: string[],\n fnOrTable: Table,\n foreignColumns: Columns,\n options?: ForeignKeyOptions,\n ];\n check?: RawExpression;\n dropMode?: DropMode;\n }): EmptyObject {\n (tableData.constraints ??= []).push({\n name,\n references: references\n ? {\n columns: references[0],\n fnOrTable: references[1],\n foreignColumns: references[2],\n options: references[3],\n }\n : undefined,\n check,\n dropMode,\n });\n return emptyObject;\n },\n\n foreignKey<\n Table extends (() => ForeignKeyTable) | string,\n Columns extends Table extends () => ForeignKeyTable\n ? [\n ColumnNameOfTable<ReturnType<Table>>,\n ...ColumnNameOfTable<ReturnType<Table>>[],\n ]\n : [string, ...string[]],\n >(\n columns: string[],\n fnOrTable: Table,\n foreignColumns: Columns,\n options?: ForeignKeyOptions & { name?: string; dropMode?: DropMode },\n ): EmptyObject {\n (tableData.constraints ??= []).push({\n name: options?.name,\n references: {\n columns,\n fnOrTable,\n foreignColumns,\n options,\n },\n dropMode: options?.dropMode,\n });\n return emptyObject;\n },\n\n check(check: RawExpression): EmptyObject {\n (tableData.constraints ??= []).push({\n check,\n });\n return emptyObject;\n },\n\n ...makeTimestampsHelpers(\n makeRegexToFindInSql('\\\\bupdatedAt\\\\b\"?\\\\s*='),\n '\"updatedAt\"',\n makeRegexToFindInSql('\\\\bupdated_at\\\\b\"?\\\\s*='),\n '\"updated_at\"',\n ),\n};\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\n\nexport type ColumnsShape = Record<string, ColumnType>;\n\nexport abstract class ColumnsObject<\n Shape extends ColumnsShape,\n> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] },\n typeof Operators.any\n> {\n dataType = 'object' as const;\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\nexport abstract class ArrayOfColumnsObjects<\n Shape extends ColumnsShape,\n> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] }[],\n typeof Operators.any\n> {\n dataType = 'array' as const;\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\nexport abstract class PluckResultColumnType<\n C extends ColumnType,\n> extends ColumnType<C['type'][], typeof Operators.any> {}\n","import { ColumnType } from './columnType';\nimport { Operators } from './operators';\nimport { Query } from '../query';\nimport { CreateCtx, UpdateCtx } from '../queryMethods';\n\nexport abstract class VirtualColumn extends ColumnType<\n unknown,\n typeof Operators.any\n> {\n dataType = '';\n operators = Operators.any;\n\n toCode(): never {\n throw new Error(`toCode is not implemented for virtual column`);\n }\n\n create?(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ): void;\n\n update?(q: Query, ctx: UpdateCtx, set: Record<string, unknown>): void;\n}\n","import { VirtualColumn } from './virtual';\n\n// unknown column is used for the case of raw SQL when user doesn't specify a column\nexport class UnknownColumn extends VirtualColumn {}\n","import { ColumnType } from './columnType';\nimport { BooleanColumn } from './boolean';\nimport {\n BitColumn,\n BitVaryingColumn,\n BoxColumn,\n ByteaColumn,\n CharColumn,\n CidrColumn,\n CircleColumn,\n InetColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n TextColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n XMLColumn,\n} from './string';\nimport {\n BigIntColumn,\n BigSerialColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n IntegerColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n} from './number';\nimport { JSONColumn, JSONTextColumn } from './json';\nimport {\n DateColumn,\n IntervalColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n} from './dateTime';\n\nexport const columnsByType: Record<\n string,\n new (...args: never[]) => ColumnType\n> = {\n bool: BooleanColumn,\n boolean: BooleanColumn,\n bytea: ByteaColumn,\n char: CharColumn,\n int8: BigIntColumn,\n bigint: BigIntColumn,\n int2: SmallIntColumn,\n smallint: SmallIntColumn,\n int4: IntegerColumn,\n integer: IntegerColumn,\n text: TextColumn,\n json: JSONTextColumn,\n xml: XMLColumn,\n point: PointColumn,\n lseg: LsegColumn,\n path: PathColumn,\n box: BoxColumn,\n polygon: PolygonColumn,\n line: LineColumn,\n cidr: CidrColumn,\n float4: RealColumn,\n real: RealColumn,\n float8: DoublePrecisionColumn,\n 'double precision': DoublePrecisionColumn,\n circle: CircleColumn,\n macaddr8: MacAddr8Column,\n money: MoneyColumn,\n macaddr: MacAddrColumn,\n inet: InetColumn,\n bpchar: CharColumn,\n character: CharColumn,\n varchar: VarCharColumn,\n 'character varying': VarCharColumn,\n date: DateColumn,\n time: TimeColumn,\n 'time without time zone': TimeColumn,\n timestamp: TimestampColumn,\n 'timestamp without time zone': TimestampColumn,\n timestamptz: TimestampTZColumn,\n 'timestamp with time zone': TimestampTZColumn,\n interval: IntervalColumn,\n bit: BitColumn,\n varbit: BitVaryingColumn,\n 'bit varying': BitVaryingColumn,\n numeric: DecimalColumn,\n decimal: DecimalColumn,\n uuid: UUIDColumn,\n tsvector: TsVectorColumn,\n tsquery: TsQueryColumn,\n jsonb: JSONColumn,\n smallserial: SmallSerialColumn,\n serial: SerialColumn,\n bigserial: BigSerialColumn,\n};\n","import pg, { Pool, PoolClient, PoolConfig } from 'pg';\nimport { AdapterBase, QueryInput, QueryResultRow, Sql } from 'orchid-core';\nconst { types } = pg;\n\nexport type TypeParsers = Record<number, (input: string) => unknown>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryResult<T extends QueryResultRow = any> = {\n rowCount: number;\n rows: T[];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryArraysResult<R extends any[] = any[]> = {\n rowCount: number;\n rows: R[];\n fields: { name: string }[];\n};\n\nconst defaultTypeParsers: TypeParsers = {};\n\nfor (const key in types.builtins) {\n const id = types.builtins[key as keyof typeof types.builtins];\n defaultTypeParsers[id] = types.getTypeParser(id);\n}\n\n[\n types.builtins.DATE,\n types.builtins.TIMESTAMP,\n types.builtins.TIMESTAMPTZ,\n types.builtins.TIME,\n types.builtins.CIRCLE,\n].forEach((id) => {\n delete defaultTypeParsers[id];\n});\n\nconst returnArg = (arg: unknown) => arg;\n\nexport type AdapterConfig = Omit<PoolConfig, 'types' | 'connectionString'> & {\n schema?: string;\n databaseURL?: string;\n};\n\nexport type AdapterOptions = AdapterConfig & {\n types?: TypeParsers;\n};\n\nexport class Adapter implements AdapterBase {\n types: TypeParsers;\n pool: Pool;\n config: PoolConfig;\n schema?: string;\n\n constructor({ types = defaultTypeParsers, ...config }: AdapterOptions) {\n this.types = types;\n\n let schema = config.schema;\n if (config.databaseURL) {\n const url = new URL(config.databaseURL);\n\n const ssl = url.searchParams.get('ssl');\n\n if (ssl === 'false') {\n url.searchParams.delete('ssl');\n } else if (!config.ssl && ssl === 'true') {\n config.ssl = true;\n }\n\n if (!schema) {\n schema = url.searchParams.get('schema') || undefined;\n }\n\n config.databaseURL = url.toString();\n (config as PoolConfig).connectionString = config.databaseURL;\n }\n\n if (schema) this.schema = schema === 'public' ? undefined : schema;\n\n this.config = config;\n this.pool = new pg.Pool(config);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query<T extends QueryResultRow = any>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryResult<T>> {\n return performQuery(this.pool, query, types, this.schema) as Promise<\n QueryResult<T>\n >;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arrays<R extends any[] = any[]>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryArraysResult<R>> {\n return performQuery(this.pool, query, types, this.schema, 'array');\n }\n\n async transaction<Result>(\n begin: Sql,\n cb: (adapter: TransactionAdapter) => Promise<Result>,\n ): Promise<Result> {\n const client = await this.pool.connect();\n try {\n await setSearchPath(client, this.schema);\n await performQueryOnClient(client, begin, this.types);\n let result;\n try {\n result = await cb(new TransactionAdapter(this, client, this.types));\n } catch (err) {\n await performQueryOnClient(client, { text: 'ROLLBACK' }, this.types);\n throw err;\n }\n await performQueryOnClient(client, { text: 'COMMIT' }, this.types);\n return result;\n } finally {\n client.release();\n }\n }\n\n close(): Promise<void> {\n const { pool } = this;\n this.pool = new pg.Pool(this.config);\n return pool.end();\n }\n}\n\nconst defaultTypesConfig = {\n getTypeParser(id: number) {\n return defaultTypeParsers[id] || returnArg;\n },\n};\n\ntype ConnectionSchema = { connection: { schema?: string } };\n\nconst setSearchPath = (client: PoolClient, schema?: string) => {\n if ((client as unknown as ConnectionSchema).connection.schema !== schema) {\n (client as unknown as ConnectionSchema).connection.schema = schema;\n return client.query(`SET search_path = ${schema || 'public'}`);\n }\n return;\n};\n\nconst performQuery = async (\n pool: Pool,\n query: QueryInput,\n types?: TypeParsers,\n schema?: string,\n rowMode?: 'array',\n) => {\n const client = await pool.connect();\n try {\n await setSearchPath(client, schema);\n return await performQueryOnClient(client, query, types, rowMode);\n } finally {\n client.release();\n }\n};\n\nconst performQueryOnClient = (\n client: PoolClient,\n query: QueryInput,\n types?: TypeParsers,\n rowMode?: 'array',\n) => {\n const params = {\n text: typeof query === 'string' ? query : query.text,\n values: typeof query === 'string' ? undefined : query.values,\n rowMode,\n types: types\n ? {\n getTypeParser(id: number) {\n return types[id] || returnArg;\n },\n }\n : defaultTypesConfig,\n };\n\n return client.query(params);\n};\n\nexport class TransactionAdapter implements Adapter {\n pool: Pool;\n config: PoolConfig;\n\n constructor(\n public adapter: Adapter,\n public client: PoolClient,\n public types: TypeParsers,\n ) {\n this.pool = adapter.pool;\n this.config = adapter.config;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryResult<T>> {\n return await performQueryOnClient(this.client, query, types);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types?: TypeParsers,\n ): Promise<QueryArraysResult<R>> {\n return await performQueryOnClient(this.client, query, types, 'array');\n }\n\n async transaction<Result>(\n _: Sql,\n cb: (adapter: TransactionAdapter) => Promise<Result>,\n ): Promise<Result> {\n return await cb(this);\n }\n\n close() {\n return this.adapter.close();\n }\n}\n","import {\n Query,\n SetQueryReturnsValue,\n SetQueryReturnsValueOptional,\n} from '../query';\nimport { addParserForRawExpression, processSelectArg } from './select';\nimport { RawExpression, ColumnTypeBase, StringKey } from 'orchid-core';\nimport { SelectQueryData } from '../sql';\nimport { QueryBase } from '../queryBase';\n\nexport type GetArg<T extends QueryBase> =\n | StringKey<keyof T['selectable']>\n | RawExpression;\n\ntype UnwrapRaw<\n T extends Query,\n Arg extends GetArg<T>,\n> = Arg extends RawExpression ? Arg['__column'] : Exclude<Arg, RawExpression>;\n\ntype GetResult<T extends Query, Arg extends GetArg<T>> = SetQueryReturnsValue<\n T,\n UnwrapRaw<T, Arg>\n>;\n\ntype GetOptionalResult<\n T extends Query,\n Arg extends GetArg<T>,\n> = SetQueryReturnsValueOptional<T, UnwrapRaw<T, Arg>>;\n\nexport type getValueKey = typeof getValueKey;\nexport const getValueKey = Symbol('get');\n\nconst _get = <\n T extends Query,\n R extends 'value' | 'valueOrThrow',\n Arg extends GetArg<T>,\n>(\n q: T,\n returnType: R,\n arg: Arg,\n): R extends 'value' ? GetOptionalResult<T, Arg> : GetResult<T, Arg> => {\n q.query.returnType = returnType;\n\n if (typeof arg === 'string') {\n let type = q.query.shape[arg] as ColumnTypeBase | undefined;\n if (type) {\n } else {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === (q.query.as || q.table)) {\n type = q.query.shape[column];\n } else {\n type = q.query.joinedShapes?.[table]?.[column];\n }\n }\n }\n\n (q.query as SelectQueryData)[getValueKey] = type;\n\n q.query.select = [\n processSelectArg(\n q,\n q.query.as || q.table,\n arg as unknown as Exclude<GetArg<T>, RawExpression>,\n getValueKey,\n ),\n ];\n } else {\n (q.query as SelectQueryData)[getValueKey] = arg.__column;\n addParserForRawExpression(q, getValueKey, arg);\n q.query.select = [arg];\n }\n\n return q as unknown as GetResult<T, Arg> & GetOptionalResult<T, Arg>;\n};\n\nexport class QueryGet {\n get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return this.clone()._get(arg);\n }\n\n _get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return _get(this, 'valueOrThrow', arg);\n }\n\n getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return this.clone()._getOptional(arg);\n }\n\n _getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return _get(this, 'value', arg);\n }\n}\n","import { ColumnsParsers, Query } from '../query';\nimport { ColumnsShapeBase } from 'orchid-core';\nimport { getIsJoinSubQuery } from '../sql/join';\nimport { getShapeFromSelect } from './select';\nimport { Relation } from '../relations';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport {\n JoinArgs,\n JoinCallback,\n JoinFirstArg,\n JoinLateralCallback,\n JoinLateralResult,\n JoinResult,\n} from './join';\nimport { ColumnsShape } from '../columns';\nimport { getQueryAs } from '../utils';\nimport { QueryBase } from '../queryBase';\n\nexport const _join = <\n T extends Query,\n Arg extends JoinFirstArg<T>,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Args extends JoinArgs<T, Arg>,\n>(\n q: T,\n require: RequireJoined,\n type: string,\n args: [arg: Arg, ...args: Args] | [arg: Arg, cb: JoinCallback<T, Arg>],\n): JoinResult<T, Arg, RequireJoined, RequireMain> => {\n let joinKey: string | undefined;\n let shape: ColumnsShapeBase | undefined;\n let parsers: ColumnsParsers | undefined;\n let isSubQuery = false;\n\n if (typeof args[0] === 'function') {\n args[0] = (args[0] as (q: Record<string, Query>) => Arg)(\n q.relationsQueries,\n );\n (\n args[0] as unknown as { joinQueryAfterCallback: unknown }\n ).joinQueryAfterCallback = (\n args[0] as unknown as { joinQuery: unknown }\n ).joinQuery;\n }\n\n const first = args[0];\n\n if (typeof first === 'object') {\n isSubQuery = getIsJoinSubQuery(first.query, first.baseQuery.query);\n\n joinKey = first.query.as || first.table;\n if (joinKey) {\n shape = getShapeFromSelect(first, isSubQuery);\n parsers = first.query.parsers;\n\n if (isSubQuery) {\n args[0] = first.clone() as Arg;\n (args[0] as Query).shape = shape as ColumnsShape;\n }\n }\n } else {\n joinKey = first as string;\n\n const relation = (q.relations as Record<string, Relation>)[joinKey];\n if (relation) {\n shape = getShapeFromSelect(relation.query);\n parsers = relation.query.query.parsers;\n } else {\n shape = q.query.withShapes?.[joinKey];\n if (shape) {\n // clone the shape to mutate it below, in other cases the shape is newly created\n if (!require) shape = { ...shape };\n\n parsers = {} as ColumnsParsers;\n for (const key in shape) {\n const parser = shape[key].parseFn;\n if (parser) {\n parsers[key] = parser;\n }\n }\n }\n }\n }\n\n if (joinKey) {\n setQueryObjectValue(q, 'joinedShapes', joinKey, shape);\n setQueryObjectValue(q, 'joinedParsers', joinKey, parsers);\n }\n\n return pushQueryValue(q, 'join', {\n type,\n args,\n isSubQuery,\n }) as unknown as JoinResult<T, Arg, RequireJoined, RequireMain>;\n};\n\nexport const _joinLateral = <\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n>(\n q: T,\n type: string,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n as?: string,\n): JoinLateralResult<T, R, RequireJoined, RequireMain> => {\n let relation: Relation | undefined;\n if (typeof arg === 'string') {\n relation = (q.relations as Record<string, Relation>)[arg];\n if (relation) {\n arg = relation.query as Arg;\n } else {\n const shape = q.query.withShapes?.[arg];\n if (shape) {\n const t = Object.create(q.queryBuilder);\n t.table = arg;\n t.shape = shape;\n t.query = {\n ...t.query,\n shape,\n };\n t.baseQuery = t;\n arg = t as Arg;\n }\n }\n }\n\n const query = arg as Query;\n query.query.joinTo = q;\n (query.query.joinedShapes ??= {})[getQueryAs(q)] = q.query.shape;\n let result = cb(query as never);\n\n if (relation) {\n result = relation.joinQuery(q, result as unknown as Query) as unknown as R;\n }\n\n const joinKey = as || result.query.as || result.table;\n if (joinKey) {\n const shape = getShapeFromSelect(result, true);\n setQueryObjectValue(q, 'joinedShapes', joinKey, shape);\n setQueryObjectValue(q, 'joinedParsers', joinKey, result.query.parsers);\n }\n\n return pushQueryValue(q, 'join', [type, result, as]) as JoinLateralResult<\n T,\n R,\n RequireJoined,\n RequireMain\n >;\n};\n","import {\n ColumnParser,\n ColumnsParsers,\n Query,\n QueryReturnsAll,\n QueryThen,\n SelectableBase,\n} from '../query';\nimport {\n ArrayOfColumnsObjects,\n ColumnsObject,\n JSONTextColumn,\n PluckResultColumnType,\n} from '../columns';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { JoinedParsers, QueryData, SelectItem, SelectQueryData } from '../sql';\nimport { isRequiredRelationKey, Relation } from '../relations';\nimport { getValueKey } from './get';\nimport { QueryResult } from '../adapter';\nimport { UnknownColumn } from '../columns/unknown';\nimport {\n StringKey,\n isRaw,\n RawExpression,\n ColumnsShapeBase,\n NullableColumn,\n ColumnTypeBase,\n EmptyObject,\n raw,\n setColumnData,\n} from 'orchid-core';\nimport { QueryBase } from '../queryBase';\nimport { _joinLateral } from './_join';\n\n// .select method argument\nexport type SelectArg<T extends QueryBase> =\n | '*'\n | StringKey<keyof T['selectable']>\n | SelectAsArg<T>;\n\n// .select method object argument\n// key is alias for selected item,\n// value can be a column, raw, or a function returning query or raw\ntype SelectAsArg<T extends QueryBase> = Record<string, SelectAsValue<T>>;\n\n// .select method object argument value\n// can be column, raw, or a function returning query or raw\ntype SelectAsValue<T extends QueryBase> =\n | StringKey<keyof T['selectable']>\n | RawExpression\n | ((q: T) => Query)\n | ((q: T) => RawExpression)\n | ((q: T) => Query | RawExpression);\n\n// tuple for the result of selected by objects args\n// the first element is shape of selected data\n// the second is 'selectable', it allows to order and filter by the records\n// that were implicitly joined when selecting belongsTo or hasOne relation\n// ```ts\n// db.book.select({ author: (q) => q.author }).order('author.name')\n// ```\ntype SelectObjectResultTuple = [ColumnsShapeBase, SelectableBase];\n\n// query type after select\ntype SelectResult<\n T extends Query,\n Args extends SelectArg<T>[],\n // shape of the columns selected by string args\n SelectStringsResult extends ColumnsShapeBase = SelectStringArgsResult<\n T,\n Args\n >,\n // keys of selected columns by string args\n StringsKeys extends keyof SelectStringsResult = keyof SelectStringsResult,\n // tuple for the result of selected by objects args\n SelectAsResult extends SelectObjectResultTuple = SpreadSelectObjectArgs<\n T,\n Args,\n [EmptyObject, T['selectable']]\n >,\n // keys of combined object args\n AsKeys extends keyof SelectAsResult[0] = keyof SelectAsResult[0],\n // previous result keys to preserve, if the query has select\n ResultKeys extends keyof T['result'] = T['meta']['hasSelect'] extends true\n ? keyof T['result']\n : never,\n // to include all columns when * arg is provided\n ShapeKeys extends keyof T['shape'] = '*' extends Args[number]\n ? keyof T['shape']\n : never,\n // combine previously selected items, all columns if * was provided,\n // and the selected by string and object arguments\n Result extends ColumnsShapeBase = {\n [K in StringsKeys | AsKeys | ResultKeys | ShapeKeys]: K extends StringsKeys\n ? SelectStringsResult[K]\n : K extends AsKeys\n ? SelectAsResult[0][K]\n : K extends ResultKeys\n ? T['result'][K]\n : K extends ShapeKeys\n ? T['shape'][K]\n : never;\n },\n> = (T['meta']['hasSelect'] extends true\n ? unknown\n : { meta: { hasSelect: true } }) & {\n [K in keyof T]: K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : K extends 'selectable'\n ? SelectAsResult[1]\n : T[K];\n};\n\n// map string args of the select into a resulting object\ntype SelectStringArgsResult<T extends Query, Args extends SelectArg<T>[]> = {\n [Arg in Args[number] as Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['as']\n : never]: Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : never;\n};\n\n// combine multiple object args of the select into a tuple\ntype SpreadSelectObjectArgs<\n T extends Query,\n Args extends [...unknown[]],\n Result extends SelectObjectResultTuple,\n> = Args extends [infer L, ...infer R]\n ? SpreadSelectObjectArgs<T, R, SelectAsResult<T, L, Result>>\n : Result;\n\n// map a single object arg of the select into the tuple of selected data and selectable columns\ntype SelectAsResult<\n T extends Query,\n Arg,\n Result extends SelectObjectResultTuple,\n Shape = Result[0],\n AddSelectable extends SelectableBase = {\n [K in keyof Arg]: Arg[K] extends ((q: T) => infer R extends Query)\n ? // turn union of objects into intersection\n // https://stackoverflow.com/questions/66445084/intersection-of-an-objects-value-types-in-typescript\n (x: {\n [C in keyof R['result'] as `${StringKey<K>}.${StringKey<C>}`]: {\n as: C;\n column: R['result'][C];\n };\n }) => void\n : never;\n }[keyof Arg] extends (x: infer I) => void\n ? { [K in keyof I]: I[K] }\n : never,\n> = Arg extends SelectAsArg<T>\n ? [\n {\n [K in keyof Shape | keyof Arg]: K extends keyof Arg\n ? SelectAsValueResult<T, Arg[K]>\n : K extends keyof Shape\n ? Shape[K]\n : never;\n },\n Result[1] & AddSelectable,\n ]\n : Result;\n\n// map a single value of select object arg into a column\ntype SelectAsValueResult<\n T extends Query,\n Arg extends SelectAsValue<T>,\n> = Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RawExpression\n ? Arg['__column']\n : Arg extends (q: T) => infer R\n ? R extends Query\n ? SelectSubQueryResult<R>\n : R extends RawExpression\n ? R['__column']\n : R extends Query | RawExpression\n ?\n | SelectSubQueryResult<Exclude<R, RawExpression>>\n | Exclude<R, Query>['__column']\n : never\n : never;\n\n// map a sub query result into a column\n// query that returns many becomes an array column\n// query that returns a single value becomes a column of that value\n// query that returns 'pluck' becomes a column with array type of specific value type\n// query that returns a single record becomes an object column, possibly nullable\ntype SelectSubQueryResult<\n Arg extends Query & { [isRequiredRelationKey]?: boolean },\n> = QueryReturnsAll<Arg['returnType']> extends true\n ? ArrayOfColumnsObjects<Arg['result']>\n : Arg['returnType'] extends 'valueOrThrow'\n ? Arg['result']['value']\n : Arg['returnType'] extends 'pluck'\n ? PluckResultColumnType<Arg['result']['pluck']>\n : Arg[isRequiredRelationKey] extends true\n ? ColumnsObject<Arg['result']>\n : NullableColumn<ColumnsObject<Arg['result']>>;\n\n// add a parser for a raw expression column\n// is used by .select and .get methods\nexport const addParserForRawExpression = (\n q: Query,\n key: string | getValueKey,\n raw: RawExpression,\n) => {\n const parser = raw.__column?.parseFn;\n if (parser) addParserToQuery(q.query, key, parser);\n};\n\n// these are used as a wrapper to pass sub query result to `parseRecord`\nconst subQueryResult: QueryResult = {\n // sub query can't return a rowCount, use -1 as for impossible case\n rowCount: -1,\n rows: [],\n};\n\n// add parsers when selecting a full joined table by name or alias\nconst addParsersForSelectJoined = (q: Query, arg: string, as = arg) => {\n const parsers = (q.query.joinedParsers as JoinedParsers)[arg];\n if (parsers) {\n addParserToQuery(q.query, as, (item) => {\n subQueryResult.rows = [item];\n const type = q.query.returnType;\n q.query.returnType = 'one';\n const res = q.query.handleResult(q, subQueryResult, true);\n q.query.returnType = type;\n return res;\n });\n }\n};\n\n// add parser for a single key-value pair of selected object\nexport const addParserForSelectItem = <T extends Query>(\n q: T,\n as: string | getValueKey | undefined,\n key: string,\n arg: StringKey<keyof T['selectable']> | RawExpression | Query,\n): string | RawExpression | Query => {\n if (typeof arg === 'object') {\n if (isRaw(arg)) {\n addParserForRawExpression(q, key, arg);\n } else {\n const { parsers } = arg.query;\n if (parsers) {\n addParserToQuery(q.query, key, (item) => {\n const t = arg.query.returnType || 'all';\n subQueryResult.rows =\n t === 'value' || t === 'valueOrThrow'\n ? [[item]]\n : t === 'one' || t === 'oneOrThrow'\n ? [item]\n : (item as unknown[]);\n\n return arg.query.handleResult(arg, subQueryResult, true);\n });\n }\n }\n return arg;\n } else {\n if (q.query.joinedShapes?.[arg]) {\n addParsersForSelectJoined(q, arg, key);\n } else {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === as) {\n const parser = q.query.parsers?.[column];\n if (parser) addParserToQuery(q.query, key, parser);\n } else {\n const parser = q.query.joinedParsers?.[table]?.[column];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n } else {\n const parser = q.query.parsers?.[arg];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n }\n\n return arg;\n }\n};\n\n// generic utility to add a parser to the query object\nexport const addParserToQuery = (\n query: QueryData,\n key: string | getValueKey,\n parser: ColumnParser,\n) => {\n if (query.parsers) query.parsers[key] = parser;\n else query.parsers = { [key]: parser } as ColumnsParsers;\n};\n\n// process select argument: add parsers, join relations when needed\nexport const processSelectArg = <T extends Query>(\n q: T,\n as: string | undefined,\n arg: SelectArg<T>,\n columnAs?: string | getValueKey,\n): SelectItem => {\n if (typeof arg === 'string') {\n if (q.query.joinedShapes?.[arg]) {\n addParsersForSelectJoined(q, arg);\n return arg;\n } else {\n return processSelectColumnArg(q, arg, as, columnAs);\n }\n }\n\n const selectAs: Record<string, string | Query | RawExpression> = {};\n\n for (const key in arg as SelectAsArg<T>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let value = (arg as SelectAsArg<T>)[key] as any;\n\n if (typeof value === 'function') {\n const { isSubQuery } = q;\n q.isSubQuery = true;\n value = value(q);\n q.isSubQuery = isSubQuery;\n\n if (!isRaw(value) && value.joinQuery) {\n value = value.joinQuery(q, value);\n value.query.joinedForSelect = key;\n\n let query;\n const returnType = value.query.returnType;\n if (!returnType || returnType === 'all') {\n query = value.json(false);\n value.query.coalesceValue = raw(\"'[]'\");\n } else if (returnType === 'pluck') {\n query = value\n .wrap(value.baseQuery.clone())\n ._jsonAgg(value.query.select[0]);\n value.query.coalesceValue = raw(\"'[]'\");\n } else {\n if (\n (returnType === 'value' || returnType === 'valueOrThrow') &&\n value.query.select\n ) {\n if (typeof value.query.select[0] === 'string') {\n value.query.select[0] = {\n selectAs: { r: value.query.select[0] },\n };\n }\n }\n\n query = value;\n }\n\n _joinLateral(\n q,\n value.query.innerJoinLateral ? 'JOIN' : 'LEFT JOIN',\n query,\n (q) => q,\n key,\n );\n }\n }\n\n selectAs[key] = addParserForSelectItem(q, as, key, value);\n }\n\n return { selectAs };\n};\n\n// process string select arg\n// adds a column parser for a column\nconst processSelectColumnArg = <T extends Query>(\n q: T,\n arg: string,\n as?: string,\n columnAs?: string | getValueKey,\n): SelectItem => {\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n\n if (table === as) {\n const parser = q.query.parsers?.[column];\n if (parser) addParserToQuery(q.query, columnAs || column, parser);\n } else {\n const parser = q.query.joinedParsers?.[table]?.[column];\n if (parser) addParserToQuery(q.query, columnAs || column, parser);\n }\n } else {\n const parser = q.query.parsers?.[arg];\n if (parser) addParserToQuery(q.query, columnAs || arg, parser);\n }\n return arg;\n};\n\n// is mapping result of a query into a columns shape\n// in this way, result of a sub query becomes available outside of it for using in WHERE and other methods\n//\n// when isSubQuery is true, it will remove data.name of columns,\n// so that outside of the sub-query the columns are named with app-side names,\n// while db column names are encapsulated inside the sub-query\nexport const getShapeFromSelect = (q: QueryBase, isSubQuery?: boolean) => {\n const query = q.query as SelectQueryData;\n const { select, shape } = query;\n let result: ColumnsShapeBase;\n if (!select) {\n // when no select, and it is a sub-query, return the table shape with unnamed columns\n if (isSubQuery) {\n result = {};\n for (const key in shape) {\n const column = shape[key];\n result[key] = column.data.name\n ? setColumnData(column, 'name', undefined)\n : column;\n }\n } else {\n result = shape;\n }\n } else {\n result = {};\n for (const item of select) {\n if (typeof item === 'string') {\n addColumnToShapeFromSelect(q, item, shape, query, result, isSubQuery);\n } else if ('selectAs' in item) {\n for (const key in item.selectAs) {\n const it = item.selectAs[key];\n if (typeof it === 'string') {\n addColumnToShapeFromSelect(\n q,\n it,\n shape,\n query,\n result,\n isSubQuery,\n key,\n );\n } else if (isRaw(it)) {\n result[key] = it.__column || new UnknownColumn();\n } else {\n const { returnType } = it.query;\n if (returnType === 'value' || returnType === 'valueOrThrow') {\n const type = (it.query as SelectQueryData)[getValueKey];\n if (type) result[key] = type;\n } else {\n result[key] = new JSONTextColumn();\n }\n }\n }\n }\n }\n }\n\n return result;\n};\n\n// converts selected items into a shape of columns\n// when `isSubQuery` is true, it un-names named columns\nconst addColumnToShapeFromSelect = (\n q: QueryBase,\n arg: string,\n shape: ColumnsShapeBase,\n query: SelectQueryData,\n result: ColumnsShapeBase,\n isSubQuery?: boolean,\n key?: string,\n) => {\n if ((q.relations as Record<string, Relation>)[arg]) {\n result[key || arg] = new JSONTextColumn();\n return;\n }\n\n const index = arg.indexOf('.');\n if (index !== -1) {\n const table = arg.slice(0, index);\n const column = arg.slice(index + 1);\n if (table === (q.query.as || q.table)) {\n result[key || column] = shape[column];\n } else {\n const it = query.joinedShapes?.[table]?.[column];\n if (it) result[key || column] = maybeUnNameColumn(it, isSubQuery);\n }\n } else if (arg === '*') {\n for (const key in shape) {\n result[key] = maybeUnNameColumn(shape[key], isSubQuery);\n }\n } else {\n result[key || arg] = maybeUnNameColumn(shape[arg], isSubQuery);\n }\n};\n\n// un-name a column if `isSubQuery` is true\nconst maybeUnNameColumn = (column: ColumnTypeBase, isSubQuery?: boolean) => {\n return isSubQuery && column.data.name\n ? setColumnData(column, 'name', undefined)\n : column;\n};\n\nexport class Select {\n select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n return this.clone()._select(...args) as unknown as SelectResult<T, K>;\n }\n\n _select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n if (!args.length) {\n return this as unknown as SelectResult<T, K>;\n }\n\n const as = this.query.as || this.table;\n const selectArgs = args.map((item) => processSelectArg(this, as, item));\n\n return pushQueryArray(\n this,\n 'select',\n selectArgs,\n ) as unknown as SelectResult<T, K>;\n }\n\n selectAll<T extends Query>(this: T): SelectResult<T, ['*']> {\n return this.clone()._selectAll();\n }\n\n _selectAll<T extends Query>(this: T): SelectResult<T, ['*']> {\n this.query.select = ['*'];\n return this as unknown as SelectResult<T, ['*']>;\n }\n}\n","import { AddQuerySelect, Query, SetQueryReturnsValue } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport {\n ArrayColumn,\n BooleanColumn,\n ColumnType,\n IntegerColumn,\n NumberColumn,\n StringColumn,\n} from '../columns';\nimport {\n BooleanExpression,\n Expression,\n ExpressionOutput,\n NumberExpression,\n StringExpression,\n} from '../utils';\nimport { OrderArg, WindowArgDeclaration } from './queryMethods';\nimport { WhereArg } from './where';\nimport { addParserToQuery } from './select';\nimport { SelectItem, SelectQueryData } from '../sql';\nimport { getValueKey } from './get';\nimport {\n raw,\n CoalesceString,\n ColumnTypeBase,\n NullableColumn,\n} from 'orchid-core';\n\nconst allColumns = raw('*');\n\nexport type AggregateArg<T extends Query> =\n | Expression<T>\n | Record<string, Expression<T>>\n | [Expression<T>, string];\n\nexport type AggregateOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = {\n as?: As;\n distinct?: boolean;\n order?: OrderArg<T> | OrderArg<T>[];\n filter?: WhereArg<T>;\n filterOr?: WhereArg<T>[];\n withinGroup?: boolean;\n over?: keyof T['windows'] | WindowArgDeclaration<T>;\n};\n\n// 1 in the name means only methods which takes 1 argument are listed here\n// only such one argument methods are available in .having method\nexport type Aggregate1ArgumentTypes<\n T extends Query = Query,\n C extends ColumnType = ColumnType,\n> = {\n count: Expression<T, C>;\n avg: NumberExpression<T, C>;\n min: Expression<T, C>;\n max: Expression<T, C>;\n sum: NumberExpression<T, C>;\n bitAnd: NumberExpression<T, C>;\n bitOr: NumberExpression<T, C>;\n boolAnd: BooleanExpression<T, C>;\n boolOr: BooleanExpression<T, C>;\n every: BooleanExpression<T, C>;\n jsonAgg: Expression<T, C>;\n jsonbAgg: Expression<T, C>;\n xmlAgg: Expression<T, C>;\n};\n\nexport const aggregate1FunctionNames = {\n count: 'count',\n avg: 'avg',\n min: 'min',\n max: 'max',\n sum: 'sum',\n bitAnd: 'bit_and',\n bitOr: 'bit_or',\n boolAnd: 'bool_and',\n boolOr: 'bool_or',\n every: 'every',\n jsonAgg: 'json_agg',\n jsonbAgg: 'jsonb_agg',\n xmlAgg: 'xmlagg',\n} as const;\n\nexport type SelectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnTypeBase,\n> = AddQuerySelect<T, Record<CoalesceString<As, Func>, Value>>;\n\ntype AT1<T extends Query> = Aggregate1ArgumentTypes<T>;\n\nexport type WindowFunctionOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = { as?: As } & WindowArgDeclaration<T>;\n\nconst buildAggregateSelectItem = <T extends Query>(\n functionName: string,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T>,\n) => {\n return {\n function: functionName,\n arg,\n options: {\n ...options,\n order: options?.order\n ? Array.isArray(options.order)\n ? options.order\n : [options.order]\n : undefined,\n filter: options?.filter,\n filterOr: options?.filterOr,\n },\n };\n};\n\nconst parseIntColumn = new IntegerColumn().parse((input) =>\n parseInt(input as unknown as string),\n);\n\nconst parseIntOrNullColumn = new IntegerColumn().parse((input) =>\n input === null ? null : parseInt(input as unknown as string),\n);\n\nconst get = <T extends Query, Column extends ColumnType>(\n q: Query,\n): SetQueryReturnsValue<T, Column> => {\n q.query.returnType = 'valueOrThrow';\n\n const select = q.query.select as SelectItem[];\n if (select.length > 1) {\n select[0] = select[select.length - 1];\n select.length = 1;\n }\n\n return q as unknown as SetQueryReturnsValue<T, Column>;\n};\n\nexport class Aggregate {\n selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, Func, As, Value> {\n return this.clone()._selectAgg(functionName, arg, options) as SelectAgg<\n T,\n Func,\n As,\n Value\n >;\n }\n\n _selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnTypeBase,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n columnType?: ColumnTypeBase,\n ): SelectAgg<T, Func, As, Value> {\n pushQueryValue(\n this,\n 'select',\n buildAggregateSelectItem<T>(functionName, arg, options),\n );\n\n if (columnType?.parseFn) {\n (this.query as SelectQueryData)[getValueKey] = columnType;\n\n addParserToQuery(this.query, getValueKey, columnType.parseFn);\n\n addParserToQuery(\n this.query,\n options?.as || functionName,\n columnType.parseFn,\n );\n }\n\n return this as unknown as SelectAgg<T, Func, As, Value>;\n }\n\n count<T extends Query>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> & { isCount: true } {\n return this.clone()._count(arg, options);\n }\n\n _count<T extends Query>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> & { isCount: true } {\n return get<T, NumberColumn>(\n this._selectCount(arg, options),\n ) as unknown as SetQueryReturnsValue<T, NumberColumn> & { isCount: true };\n }\n\n selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this.clone()._selectCount(arg, options);\n }\n\n _selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this._selectAgg(\n aggregate1FunctionNames.count,\n arg === '*' ? allColumns : arg,\n options,\n parseIntColumn,\n );\n }\n\n avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._avg(arg, options);\n }\n\n _avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectAvg(arg, options));\n }\n\n selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectAvg(arg, options);\n }\n\n _selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.avg,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._min(arg, options);\n }\n\n _min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMin(arg, options));\n }\n\n selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMin(arg, options);\n }\n\n _selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.min,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._max(arg, options);\n }\n\n _max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMax(arg, options));\n }\n\n selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMax(arg, options);\n }\n\n _selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.max,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._sum(arg, options);\n }\n\n _sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectSum(arg, options));\n }\n\n selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectSum(arg, options);\n }\n\n _selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.sum,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitAnd(arg, options);\n }\n\n _bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitAnd(arg, options),\n );\n }\n\n selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitAnd(arg, options);\n }\n\n _selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitAnd, arg, options);\n }\n\n bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitOr(arg, options);\n }\n\n _bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitOr(arg, options),\n );\n }\n\n selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitOr(arg, options);\n }\n\n _selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitOr, arg, options);\n }\n\n boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolAnd(arg, options);\n }\n\n _boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolAnd(arg, options),\n );\n }\n\n selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolAnd(arg, options);\n }\n\n _selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolAnd, arg, options);\n }\n\n boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolOr(arg, options);\n }\n\n _boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolOr(arg, options),\n );\n }\n\n selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolOr(arg, options);\n }\n\n _selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolOr, arg, options);\n }\n\n every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._every(arg, options);\n }\n\n _every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectEvery(arg, options),\n );\n }\n\n selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectEvery(arg, options);\n }\n\n _selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.every, arg, options);\n }\n\n jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonAgg(arg, options);\n }\n\n _jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonAgg(arg, options),\n );\n }\n\n selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonAgg(arg, options);\n }\n\n _selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonAgg, arg, options);\n }\n\n jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonbAgg(arg, options);\n }\n\n _jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonbAgg(arg, options),\n );\n }\n\n selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonbAgg(arg, options);\n }\n\n _selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonbAgg, arg, options);\n }\n\n xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._xmlAgg(arg, options);\n }\n\n _xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectXmlAgg(arg, options),\n );\n }\n\n selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectXmlAgg(arg, options);\n }\n\n _selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this._selectAgg(aggregate1FunctionNames.xmlAgg, arg, options);\n }\n\n jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonObjectAgg(obj, options);\n }\n\n _jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonObjectAgg(obj, options));\n }\n\n selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonObjectAgg(obj, options);\n }\n\n _selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('json_object_agg', obj, options);\n }\n\n jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonbObjectAgg(obj, options);\n }\n\n _jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonbObjectAgg(obj, options));\n }\n\n selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonbObjectAgg(obj, options);\n }\n\n _selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('jsonb_object_agg', obj, options);\n }\n\n stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._stringAgg(arg, delimiter, options);\n }\n\n _stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectStringAgg(arg, delimiter, options),\n );\n }\n\n selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectStringAgg(arg, delimiter, options);\n }\n\n _selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this._selectAgg('string_agg', [arg, delimiter], options);\n }\n}\n","import { Query } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\n\nexport type BeforeCallback<T extends Query = Query> = (\n query: T,\n) => void | Promise<void>;\n\nexport type AfterCallback<T extends Query = Query> = (\n query: T,\n data: unknown,\n) => void | Promise<void>;\n\nexport class QueryCallbacks {\n beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeQuery(cb);\n }\n _beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeQuery', cb);\n }\n\n afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterQuery(cb);\n }\n _afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterQuery', cb);\n }\n\n beforeCreate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeCreate(cb);\n }\n _beforeCreate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeCreate', cb);\n }\n\n afterCreate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterCreate(cb);\n }\n _afterCreate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterCreate', cb);\n }\n\n beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeUpdate(cb);\n }\n _beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeUpdate', cb);\n }\n\n afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterUpdate(cb);\n }\n _afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterUpdate', cb);\n }\n\n beforeDelete<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeDelete(cb);\n }\n _beforeDelete<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeDelete', cb);\n }\n\n afterDelete<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterDelete(cb);\n }\n _afterDelete<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterDelete', cb);\n }\n}\n","import { Query } from '../query';\nimport { isRaw } from 'orchid-core';\n\nexport type ClearStatement =\n | 'with'\n | 'select'\n | 'where'\n | 'union'\n | 'using'\n | 'join'\n | 'group'\n | 'order'\n | 'having'\n | 'limit'\n | 'offset'\n | 'counters';\n\nexport class Clear {\n clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n return this.clone()._clear(...clears);\n }\n\n _clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n clears.forEach((clear) => {\n if (clear === 'where') {\n delete this.query.and;\n delete this.query.or;\n } else if (clear === 'counters') {\n if ('type' in this.query && this.query.type === 'update') {\n this.query.updateData = this.query.updateData.filter((item) => {\n if (!isRaw(item) && typeof item !== 'function') {\n let removed = false;\n for (const key in item) {\n const value = item[key] as Record<string, unknown>;\n if (\n typeof value === 'object' &&\n (value.op === '+' || value.op === '-')\n ) {\n delete item[key];\n removed = true;\n }\n }\n if (removed && !Object.keys(item).length) {\n return false;\n }\n }\n\n return true;\n });\n }\n } else {\n delete (this.query as Record<string, unknown>)[clear];\n }\n });\n return this;\n }\n}\n","import { Query, SetQueryReturnsColumnInfo } from '../query';\nimport { ColumnInfoQueryData } from '../sql';\n\nexport type ColumnInfo = {\n defaultValue: unknown;\n type: string;\n maxLength: number | null;\n nullable: boolean;\n};\n\nconst rowToColumnInfo = (row: unknown): ColumnInfo => {\n const typed = row as {\n column_default: string | null;\n is_nullable: 'YES' | 'NO';\n data_type: string;\n character_maximum_length: number | null;\n };\n\n return {\n defaultValue: typed.column_default,\n type: typed.data_type,\n maxLength: typed.character_maximum_length,\n nullable: typed.is_nullable === 'YES',\n };\n};\n\nexport class ColumnInfoMethods {\n columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n return this.clone()._columnInfo(column);\n }\n\n _columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n this.query.type = 'columnInfo';\n this.query.returnType = 'all';\n\n if (column) {\n (this.query as ColumnInfoQueryData).column = column as string;\n }\n\n this.query.handleResult = (_, result) => {\n if (column) {\n return rowToColumnInfo(result.rows[0]);\n } else {\n const info: Record<string, ColumnInfo> = {};\n result.rows.forEach((row) => {\n info[(row as { column_name: string }).column_name] =\n rowToColumnInfo(row);\n });\n return info;\n }\n };\n\n return this as unknown as SetQueryReturnsColumnInfo<T, Column>;\n }\n}\n","import { Query, SetQueryReturnsRowCount } from '../query';\n\nexport type DeleteMethodsNames = 'del' | '_del' | 'delete' | '_delete';\n\ntype DeleteArgs<T extends Query> = T['meta']['hasWhere'] extends true\n ? []\n : [never];\n\ntype DeleteResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? T\n : SetQueryReturnsRowCount<T>;\n\nconst del = <T extends Query>(self: T): DeleteResult<T> => {\n return _del(self.clone()) as unknown as DeleteResult<T>;\n};\n\nconst _del = <T extends Query>(q: T): DeleteResult<T> => {\n if (!q.query.select) {\n q.query.returnType = 'rowCount';\n }\n\n q.query.type = 'delete';\n return q as unknown as DeleteResult<T>;\n};\n\nexport class Delete {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n del<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _del<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n delete<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return del(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _delete<T extends Query>(this: T, ..._args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this);\n }\n}\n","import { Query } from '../query';\nimport { SelectQueryData } from '../sql';\nimport { RawExpression } from 'orchid-core';\n\ntype ForQueryBuilder<Q extends Query> = Q & {\n noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n _noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n _skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n};\n\nconst forQueryBuilder = <T extends Query>(\n q: T,\n type: Exclude<SelectQueryData['for'], undefined>['type'],\n tableNames?: string[] | RawExpression,\n) => {\n (q.query as SelectQueryData).for = { type, tableNames };\n q.baseQuery = Object.create(q.baseQuery);\n q.baseQuery.baseQuery = q.baseQuery;\n\n Object.assign(q.baseQuery, {\n noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._noWait();\n },\n _noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'NO WAIT';\n return this;\n },\n skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._skipLocked();\n },\n _skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'SKIP LOCKED';\n return this;\n },\n });\n\n return q.clone() as ForQueryBuilder<T>;\n};\n\nexport class For {\n forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forUpdate(tableNames);\n }\n\n _forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'UPDATE', tableNames);\n }\n\n forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forNoKeyUpdate(tableNames);\n }\n\n _forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'NO KEY UPDATE', tableNames);\n }\n\n forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forShare(tableNames);\n }\n\n _forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'SHARE', tableNames);\n }\n\n forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forKeyShare(tableNames);\n }\n\n _forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'KEY SHARE', tableNames);\n }\n}\n","import {\n Query,\n QueryThen,\n SelectableBase,\n SelectableFromShape,\n SetQueryTableAlias,\n WithDataItem,\n} from '../query';\nimport { SelectQueryData } from '../sql';\nimport { AliasOrTable } from '../utils';\nimport { isRaw, RawExpression } from 'orchid-core';\nimport { getShapeFromSelect } from './select';\n\nexport type FromArgs<T extends Query> = [\n first: Query | RawExpression | Exclude<keyof T['withData'], symbol | number>,\n second?: { only?: boolean },\n];\n\nexport type FromResult<\n T extends Query,\n Args extends FromArgs<T>,\n Arg = Args[0],\n> = Arg extends string\n ? T['withData'] extends Record<string, WithDataItem>\n ? Arg extends keyof T['withData']\n ? Omit<T, 'meta' | 'selectable'> & {\n meta: Omit<T['meta'], 'as'> & {\n as?: string;\n };\n selectable: SelectableFromShape<T['withData'][Arg]['shape'], Arg>;\n }\n : SetQueryTableAlias<T, Arg>\n : SetQueryTableAlias<T, Arg>\n : Arg extends Query\n ? FromQueryResult<T, Arg>\n : T;\n\ntype FromQueryResult<\n T extends Query,\n Q extends Query,\n Selectable extends SelectableBase = {\n [K in keyof Q['result']]: K extends string\n ? {\n as: K;\n column: Q['result'][K];\n }\n : never;\n },\n> = {\n [K in keyof T]: K extends 'meta'\n ? Omit<T['meta'], 'hasSelect' | 'as'> & { as: AliasOrTable<Q> }\n : K extends 'selectable'\n ? Selectable\n : K extends 'result' | 'shape'\n ? Q['result']\n : K extends 'then'\n ? QueryThen<T['returnType'], Q['result']>\n : T[K];\n};\n\nexport class From {\n from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n return this.clone()._from(...args) as FromResult<T, Args>;\n }\n\n _from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n if (typeof args[0] === 'string') {\n this.query.as ||= args[0];\n } else if (!isRaw(args[0] as RawExpression)) {\n const q = args[0] as Query;\n this.query.as ||= q.query.as || q.table || 't';\n this.query.shape = getShapeFromSelect(args[0] as Query, true);\n this.query.parsers = q.query.parsers;\n } else {\n this.query.as ||= 't';\n }\n\n if (args[1]?.only) {\n (this.query as SelectQueryData).fromOnly = args[1].only;\n }\n\n this.query.from = args[0];\n\n return this as unknown as FromResult<T, Args>;\n }\n}\n","import { Query } from '../query';\nimport {\n AggregateItemOptions,\n ColumnOperators,\n HavingItem,\n OrderItem,\n WhereItem,\n} from '../sql';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { Aggregate1ArgumentTypes, AggregateOptions } from './aggregate';\nimport { isRaw, RawExpression } from 'orchid-core';\n\ntype HavingArgObject<\n T extends Query,\n Agg extends keyof Aggregate1ArgumentTypes<T>,\n> = {\n [Column in Exclude<Aggregate1ArgumentTypes<T>[Agg], RawExpression>]?:\n | T['selectable'][Column]['column']['type']\n | (ColumnOperators<T['selectable'], Column> & AggregateOptions<T>);\n};\n\nexport type HavingArg<T extends Query = Query> =\n | ({\n [Agg in keyof Aggregate1ArgumentTypes<T>]?: HavingArgObject<T, Agg>;\n } & {\n count?: number | HavingArgObject<T, 'count'>;\n })\n | Query\n | RawExpression;\n\nconst processHavingArg = <T extends Query>(arg: HavingArg<T>): HavingItem => {\n if ('baseQuery' in arg || isRaw(arg)) {\n return arg;\n } else {\n const processed = { ...arg } as Record<\n string,\n Record<string, AggregateItemOptions>\n >;\n\n for (const fn in arg) {\n const data = arg[fn as keyof typeof arg];\n if (typeof data === 'object') {\n processed[fn] = { ...data } as typeof processed[string];\n for (const column in data) {\n const value = data[column as keyof typeof data];\n\n if (typeof value === 'object') {\n processed[fn][column] = { ...(value as object) };\n\n const options = value as AggregateOptions<T>;\n\n if (\n 'order' in options &&\n options.order &&\n !Array.isArray(options.order)\n ) {\n processed[fn][column].order = [options.order as OrderItem];\n }\n\n if ('filter' in options && options.filter) {\n processed[fn][column].filter = options.filter as WhereItem;\n }\n\n if ('filterOr' in options && options.filterOr) {\n processed[fn][column].filterOr = options.filterOr as WhereItem[];\n }\n }\n }\n }\n }\n return processed;\n }\n};\n\nexport class Having {\n having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._having(...args);\n }\n\n _having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'having',\n args.map((arg) => processHavingArg(arg)),\n );\n }\n\n havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._havingOr(...args);\n }\n\n _havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'havingOr',\n args.map((arg) => [processHavingArg(arg)]),\n );\n }\n}\n","import { ColumnsParsers, Query, QueryReturnType } from '../query';\nimport { NotFoundError, QueryError } from '../errors';\nimport { QueryArraysResult, QueryResult } from '../adapter';\nimport { CommonQueryData } from '../sql';\nimport { AfterCallback, BeforeCallback } from './callbacks';\nimport { getValueKey } from './get';\nimport pg from 'pg';\nimport { AdapterBase, Sql } from 'orchid-core';\n\nexport const queryMethodByReturnType: Record<\n QueryReturnType,\n 'query' | 'arrays'\n> = {\n all: 'query',\n rows: 'arrays',\n pluck: 'arrays',\n one: 'query',\n oneOrThrow: 'query',\n value: 'arrays',\n valueOrThrow: 'arrays',\n rowCount: 'arrays',\n void: 'arrays',\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Resolve = (result: any) => any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Reject = (error: any) => any;\n\nlet queryError: Error = undefined as unknown as Error;\n\nexport class Then {\n get then() {\n queryError = new Error();\n return maybeWrappedThen;\n }\n\n async catch<T extends Query, Result>(\n this: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fn: (reason: any) => Result | PromiseLike<Result>,\n ): Promise<ReturnType<T['then']> | Result> {\n return this.then(undefined, fn);\n }\n}\n\nexport const handleResult: CommonQueryData['handleResult'] = (\n q,\n result: QueryResult,\n isSubQuery?: true,\n) => {\n return parseResult(\n q,\n q.query.parsers,\n q.query.returnType || 'all',\n result,\n isSubQuery,\n );\n};\n\nfunction maybeWrappedThen(this: Query, resolve?: Resolve, reject?: Reject) {\n const adapter = this.internal.transactionStorage.getStore();\n if (this.query.wrapInTransaction && !adapter) {\n return this.transaction(\n () =>\n new Promise((resolve, reject) => {\n const adapter =\n this.internal.transactionStorage.getStore() as AdapterBase;\n return then(this, adapter, resolve, reject);\n }),\n ).then(resolve, reject);\n } else {\n return then(this, adapter || this.query.adapter, resolve, reject);\n }\n}\n\nconst queriesNames: Record<string, string> = {};\nlet nameI = 0;\n\nconst then = async (\n q: Query,\n adapter: AdapterBase,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve?: (result: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject?: (error: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> => {\n let sql: (Sql & { name?: string }) | undefined;\n let logData: unknown | undefined;\n\n // save error to a local variable before async operations\n const localError = queryError;\n\n try {\n let beforeCallbacks: BeforeCallback[] | undefined;\n let afterCallbacks: AfterCallback[] | undefined;\n if (q.query.type === 'insert') {\n beforeCallbacks = q.query.beforeCreate;\n afterCallbacks = q.query.afterCreate;\n } else if (q.query.type === 'update') {\n beforeCallbacks = q.query.beforeUpdate;\n afterCallbacks = q.query.afterUpdate;\n } else if (q.query.type === 'delete') {\n beforeCallbacks = q.query.beforeDelete;\n afterCallbacks = q.query.afterDelete;\n }\n\n if (beforeCallbacks || q.query.beforeQuery) {\n await Promise.all(\n getCallbacks(beforeCallbacks, q.query.beforeQuery).map((cb) => cb(q)),\n );\n }\n\n sql = q.toSql();\n\n if (q.query.autoPreparedStatements) {\n sql.name =\n queriesNames[sql.text] ||\n (queriesNames[sql.text] = (nameI++).toString(36));\n }\n\n if (q.query.log) {\n logData = q.query.log.beforeQuery(sql);\n }\n\n const queryResult = (await adapter[\n queryMethodByReturnType[q.query.returnType || 'all'] as 'query'\n ](sql)) as QueryResult;\n\n if (q.query.patchResult) {\n await q.query.patchResult(queryResult);\n }\n\n if (q.query.log) {\n q.query.log.afterQuery(sql, logData);\n // set sql to be undefined to prevent logging on error in case if afterCallbacks throws\n sql = undefined;\n }\n\n const result = q.query.handleResult(q, queryResult);\n\n if (afterCallbacks || q.query.afterQuery) {\n await Promise.all(\n getCallbacks(q.query.afterQuery, afterCallbacks).map((query) =>\n query(q, result),\n ),\n );\n }\n\n resolve?.(result);\n } catch (err) {\n let error;\n if (err instanceof pg.DatabaseError) {\n error = new (q.error as unknown as new () => QueryError)();\n assignError(error, err);\n error.cause = localError;\n } else {\n error = err;\n if (error instanceof Error) {\n error.cause = localError;\n }\n }\n\n if (q.query.log && sql && logData) {\n q.query.log.onError(error as Error, sql, logData);\n }\n reject?.(error);\n }\n};\n\nconst assignError = (to: QueryError, from: pg.DatabaseError) => {\n to.message = from.message;\n (to as { length?: number }).length = from.length;\n (to as { name?: string }).name = from.name;\n to.severity = from.severity;\n to.code = from.code;\n to.detail = from.detail;\n to.hint = from.hint;\n to.position = from.position;\n to.internalPosition = from.internalPosition;\n to.internalQuery = from.internalQuery;\n to.where = from.where;\n to.schema = from.schema;\n to.table = from.table;\n to.column = from.column;\n to.dataType = from.dataType;\n to.constraint = from.constraint;\n to.file = from.file;\n to.line = from.line;\n to.routine = from.routine;\n\n return to;\n};\n\nexport const parseResult = (\n q: Query,\n parsers: ColumnsParsers | undefined,\n returnType: QueryReturnType | undefined = 'all',\n result: QueryResult,\n isSubQuery?: boolean,\n): unknown => {\n switch (returnType) {\n case 'all': {\n if (q.query.throwOnNotFound && result.rows.length === 0)\n throw new NotFoundError(q);\n\n return parsers\n ? result.rows.map((row) => parseRecord(parsers, row))\n : result.rows;\n }\n case 'one': {\n const row = result.rows[0];\n if (!row) return;\n\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'oneOrThrow': {\n const row = result.rows[0];\n if (!row) throw new NotFoundError(q);\n\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'rows': {\n return parsers\n ? parseRows(\n parsers,\n (result as unknown as QueryArraysResult).fields,\n result.rows,\n )\n : result.rows;\n }\n case 'pluck': {\n if (parsers?.pluck) {\n if (isSubQuery) {\n return result.rows.map((row) => parsers.pluck(row));\n }\n return result.rows.map((row) => parsers.pluck(row[0]));\n } else if (isSubQuery) {\n return result.rows;\n }\n return result.rows.map((row) => row[0]);\n }\n case 'value': {\n const value = result.rows[0]?.[0];\n return value !== undefined\n ? parseValue(value, parsers)\n : q.query.notFoundDefault;\n }\n case 'valueOrThrow': {\n const value = result.rows[0]?.[0];\n if (value === undefined) throw new NotFoundError(q);\n return parseValue(value, parsers);\n }\n case 'rowCount': {\n if (q.query.throwOnNotFound && result.rowCount === 0) {\n throw new NotFoundError(q);\n }\n return result.rowCount;\n }\n case 'void': {\n return;\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const parseRecord = (parsers: ColumnsParsers, row: any) => {\n for (const key in parsers) {\n if (row[key] !== null && row[key] !== undefined) {\n row[key] = parsers[key](row[key]);\n }\n }\n return row;\n};\n\nconst parseRows = (\n parsers: ColumnsParsers,\n fields: { name: string }[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: any[],\n) => {\n fields.forEach((field, i) => {\n const parser = parsers[field.name];\n if (parser) {\n rows.forEach((row) => {\n row[i] = parser(row[i]);\n });\n }\n });\n return rows;\n};\n\nconst parseValue = (value: unknown, parsers?: ColumnsParsers) => {\n if (value !== null) {\n const parser = parsers?.[getValueKey];\n if (parser) {\n return parser(value);\n }\n }\n return value;\n};\n\nconst getCallbacks = <T extends BeforeCallback[] | AfterCallback[]>(\n first?: T,\n second?: T,\n): T => {\n return (\n first && second ? [...first, ...second] : first ? first : second\n ) as T;\n};\n","import {\n Query,\n QueryReturnsAll,\n QueryReturnType,\n queryTypeWithLimitOne,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n} from '../query';\nimport {\n BelongsToRelation,\n HasAndBelongsToManyRelation,\n HasManyRelation,\n HasOneRelation,\n RelationsBase,\n} from '../relations';\nimport { InsertQueryData, OnConflictItem, OnConflictMergeUpdate } from '../sql';\nimport { WhereArg } from './where';\nimport { queryMethodByReturnType } from './then';\nimport { NotFoundError } from '../errors';\nimport { VirtualColumn } from '../columns';\nimport { anyShape } from '../db';\nimport {\n RawExpression,\n EmptyObject,\n SetOptional,\n StringKey,\n} from 'orchid-core';\n\nexport type CreateData<\n T extends Query,\n Data = SetOptional<T['inputType'], keyof T['meta']['defaults']>,\n> = [keyof T['relations']] extends [never]\n ? Data\n : OmitBelongsToForeignKeys<T['relations'], Data> & CreateRelationData<T>;\n\ntype OmitBelongsToForeignKeys<R extends RelationsBase, Data> = Omit<\n Data,\n {\n [K in keyof R]: R[K] extends BelongsToRelation\n ? R[K]['options']['foreignKey']\n : never;\n }[keyof R]\n>;\n\ntype CreateRelationData<T extends Query> = {\n [K in keyof T['relations']]: T['relations'][K] extends BelongsToRelation\n ? CreateBelongsToData<T, K, T['relations'][K]>\n : T['relations'][K] extends HasOneRelation\n ? CreateHasOneData<T, K, T['relations'][K]>\n : T['relations'][K] extends HasManyRelation | HasAndBelongsToManyRelation\n ? CreateHasManyData<T, K, T['relations'][K]>\n : EmptyObject;\n}[keyof T['relations']];\n\ntype CreateBelongsToData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends BelongsToRelation,\n FKeys = {\n [K in Rel['options']['foreignKey']]: Rel['options']['foreignKey'] extends keyof T['inputType']\n ? T['inputType'][Rel['options']['foreignKey']]\n : never;\n },\n> =\n | {\n [K in keyof FKeys]: K extends keyof T['meta']['defaults']\n ? { [L in K]?: FKeys[L] }\n : { [L in K]: FKeys[L] };\n }[keyof FKeys]\n | {\n [K in Key]:\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n connect?: never;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect: WhereArg<Rel['table']>;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect?: never;\n connectOrCreate: {\n where: WhereArg<Rel['table']>;\n create: CreateData<Rel['nestedCreateQuery']>;\n };\n };\n };\n\ntype CreateHasOneData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends HasOneRelation,\n> = 'through' extends Rel['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?:\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n connect?: never;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect: WhereArg<Rel['table']>;\n connectOrCreate?: never;\n }\n | {\n create?: never;\n connect?: never;\n connectOrCreate: {\n where?: WhereArg<Rel['table']>;\n create?: CreateData<Rel['nestedCreateQuery']>;\n };\n };\n };\n\ntype CreateHasManyData<\n T extends Query,\n Key extends keyof T['relations'],\n Rel extends HasManyRelation | HasAndBelongsToManyRelation,\n> = 'through' extends Rel['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?: {\n create?: CreateData<Rel['nestedCreateQuery']>[];\n connect?: WhereArg<Rel['table']>[];\n connectOrCreate?: {\n where: WhereArg<Rel['table']>;\n create: CreateData<Rel['nestedCreateQuery']>;\n }[];\n };\n };\n\ntype CreateResult<T extends Query> = T extends { isCount: true }\n ? T\n : QueryReturnsAll<T['returnType']> extends true\n ? SetQueryReturnsOne<T>\n : T;\n\ntype CreateManyResult<T extends Query> = T extends { isCount: true }\n ? T\n : T['returnType'] extends 'one' | 'oneOrThrow'\n ? SetQueryReturnsAll<T>\n : T;\n\ntype CreateRawData<T extends Query> = {\n columns: (keyof T['shape'])[];\n values: RawExpression;\n};\n\ntype CreateManyRawData<T extends Query> = {\n columns: (keyof T['shape'])[];\n values: RawExpression[];\n};\n\ntype RawRequiredColumns<T extends Query> = {\n [K in keyof T['inputType'] as K extends keyof T['meta']['defaults']\n ? never\n : null extends T['inputType'][K]\n ? never\n : undefined extends T['inputType'][K]\n ? never\n : K]: true;\n};\n\ntype CreateRawArgs<\n T extends Query,\n Arg extends { columns: (keyof T['shape'])[] },\n> = keyof RawRequiredColumns<T> extends Arg['columns'][number]\n ? [data: Arg]\n : [\n `Missing required columns: ${Exclude<\n StringKey<keyof RawRequiredColumns<T>>,\n Arg['columns'][number]\n >}`,\n ];\n\ntype OnConflictArg<T extends Query> =\n | keyof T['shape']\n | (keyof T['shape'])[]\n | RawExpression;\n\nexport type CreateCtx = {\n requiredReturning: Record<string, boolean>;\n columns: Map<string, number>;\n returnTypeAll?: true;\n resultAll: Record<string, unknown>[];\n};\n\ntype Encoder = (input: unknown) => unknown;\n\nconst handleSelect = (q: Query) => {\n const select = q.query.select?.[0];\n const isCount =\n typeof select === 'object' &&\n 'function' in select &&\n select.function === 'count';\n\n if (isCount) {\n q.query.select = undefined;\n } else if (!q.query.select) {\n q.query.select = ['*'];\n }\n};\n\nconst processCreateItem = (\n q: Query,\n item: Record<string, unknown>,\n rowIndex: number,\n ctx: CreateCtx,\n encoders: Record<string, Encoder>,\n) => {\n const { shape } = q.query;\n Object.keys(item).forEach((key) => {\n if (shape[key] instanceof VirtualColumn) {\n (shape[key] as VirtualColumn).create?.(q, ctx, item, rowIndex);\n } else if (!ctx.columns.has(key) && (shape[key] || shape === anyShape)) {\n ctx.columns.set(key, ctx.columns.size);\n encoders[key] = shape[key]?.encodeFn as Encoder;\n }\n });\n};\n\nconst createCtx = (): CreateCtx => ({\n requiredReturning: {},\n columns: new Map(),\n resultAll: undefined as unknown as Record<string, unknown>[],\n});\n\nconst getSingleReturnType = (q: Query) => {\n const { select, returnType = 'all' } = q.query;\n if (select) {\n return returnType === 'all' ? 'one' : returnType;\n } else {\n return 'rowCount';\n }\n};\n\nconst getManyReturnType = (q: Query) => {\n const { select, returnType } = q.query;\n if (select) {\n return returnType === 'one' || returnType === 'oneOrThrow'\n ? 'all'\n : returnType;\n } else {\n return 'rowCount';\n }\n};\n\nconst mapColumnValues = (\n columns: string[],\n encoders: Record<string, Encoder>,\n data: Record<string, unknown>,\n) => {\n return columns.map((key) =>\n encoders[key] ? encoders[key](data[key]) : data[key],\n );\n};\n\nconst handleOneData = (q: Query, data: CreateData<Query>, ctx: CreateCtx) => {\n const encoders: Record<string, Encoder> = {};\n const defaults = q.query.defaults;\n\n if (defaults) {\n data = { ...defaults, ...data };\n }\n\n processCreateItem(q, data, 0, ctx, encoders);\n\n const columns = Array.from(ctx.columns.keys());\n const values = [mapColumnValues(columns, encoders, data)];\n\n return { columns, values };\n};\n\nconst handleManyData = (\n q: Query,\n data: CreateData<Query>[],\n ctx: CreateCtx,\n) => {\n const encoders: Record<string, Encoder> = {};\n const defaults = q.query.defaults;\n\n if (defaults) {\n data = data.map((item) => ({ ...defaults, ...item }));\n }\n\n data.forEach((item, i) => {\n processCreateItem(q, item, i, ctx, encoders);\n });\n\n const values = Array(data.length);\n const columns = Array.from(ctx.columns.keys());\n\n data.forEach((item, i) => {\n (values as unknown[][])[i] = mapColumnValues(columns, encoders, item);\n });\n\n return { columns, values };\n};\n\nconst insert = (\n self: Query,\n {\n columns,\n values,\n }: {\n columns: string[];\n values: InsertQueryData['values'];\n },\n returnType: QueryReturnType,\n ctx?: CreateCtx,\n) => {\n const q = self as Query & { query: InsertQueryData };\n const returning = q.query.select;\n\n delete q.query.and;\n delete q.query.or;\n\n q.query.type = 'insert';\n q.query.columns = columns;\n q.query.values = values;\n\n if (!ctx) {\n q.query.returnType = returnType;\n return q;\n }\n\n if (\n returnType === 'oneOrThrow' ||\n (values as { from?: Query }).from?.query.returnType === 'oneOrThrow'\n ) {\n const { handleResult } = q.query;\n q.query.handleResult = (q, r, s) => {\n if (r.rowCount === 0) {\n throw new NotFoundError(q);\n }\n return handleResult(q, r, s);\n };\n }\n\n const requiredColumns = Object.keys(ctx.requiredReturning);\n if (requiredColumns.length && !returning?.includes('*')) {\n if (!returning) {\n q.query.select = requiredColumns;\n } else {\n q.query.select = [\n ...new Set([...(returning as string[]), ...requiredColumns]),\n ];\n }\n }\n\n if (ctx.returnTypeAll) {\n q.query.returnType = 'all';\n const { handleResult } = q.query;\n q.query.handleResult = (q, queryResult, s) => {\n ctx.resultAll = handleResult(q, queryResult, s) as Record<\n string,\n unknown\n >[];\n\n if (queryMethodByReturnType[returnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n q.query.returnType = returnType;\n return handleResult(q, queryResult, s);\n };\n } else {\n q.query.returnType = returnType;\n }\n\n return q;\n};\n\nconst getFromSelectColumns = (\n from: Query,\n obj?: { columns: string[] },\n many?: boolean,\n) => {\n if (!many && !queryTypeWithLimitOne[from.query.returnType]) {\n throw new Error(\n 'Cannot create based on a query which returns multiple records',\n );\n }\n\n const queryColumns: string[] = [];\n from.query.select?.forEach((item) => {\n if (typeof item === 'string') {\n const index = item.indexOf('.');\n queryColumns.push(index === -1 ? item : item.slice(index + 1));\n } else if ('selectAs' in item) {\n queryColumns.push(...Object.keys(item.selectAs));\n }\n });\n\n if (obj?.columns) {\n queryColumns.push(...obj.columns);\n }\n\n return queryColumns;\n};\n\nconst createFromQuery = <\n T extends Query,\n Q extends Query,\n Many extends boolean,\n>(\n q: T,\n from: Q,\n many: Many,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n): Many extends true ? CreateManyResult<T> : CreateResult<T> => {\n handleSelect(q);\n\n const ctx = createCtx();\n\n const obj = data && handleOneData(q, data, ctx);\n\n const columns = getFromSelectColumns(from, obj, many);\n\n return insert(\n q,\n { columns, values: { from, values: obj?.values } },\n getSingleReturnType(q),\n ctx,\n ) as Many extends true ? CreateManyResult<T> : CreateResult<T>;\n};\n\nexport type CreateMethodsNames =\n | 'create'\n | '_create'\n | 'createMany'\n | '_createMany'\n | 'createRaw'\n | '_createRaw'\n | 'createFrom'\n | '_createFrom';\n\nexport class Create {\n create<T extends Query>(this: T, data: CreateData<T>): CreateResult<T> {\n return this.clone()._create(data);\n }\n _create<T extends Query>(this: T, data: CreateData<T>): CreateResult<T> {\n handleSelect(this);\n const ctx = createCtx();\n const obj = handleOneData(this, data, ctx) as {\n columns: string[];\n values: InsertQueryData['values'];\n };\n\n const values = (this.query as InsertQueryData).values;\n if (values && 'from' in values) {\n obj.columns = getFromSelectColumns(values.from, obj);\n values.values = obj.values as unknown[][];\n obj.values = values;\n }\n\n return insert(this, obj, getSingleReturnType(this), ctx) as CreateResult<T>;\n }\n\n createMany<T extends Query>(\n this: T,\n data: CreateData<T>[],\n ): CreateManyResult<T> {\n return this.clone()._createMany(data);\n }\n _createMany<T extends Query>(\n this: T,\n data: CreateData<T>[],\n ): CreateManyResult<T> {\n handleSelect(this);\n const ctx = createCtx();\n return insert(\n this,\n handleManyData(this, data, ctx),\n getManyReturnType(this),\n ctx,\n ) as CreateManyResult<T>;\n }\n\n createRaw<T extends Query, Arg extends CreateRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._createRaw(args[0] as any);\n }\n _createRaw<T extends Query, Arg extends CreateRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateResult<T> {\n handleSelect(this);\n return insert(\n this,\n args[0] as { columns: string[]; values: RawExpression },\n getSingleReturnType(this),\n ) as CreateResult<T>;\n }\n\n createManyRaw<T extends Query, Arg extends CreateManyRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateManyResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._createManyRaw(args[0] as any);\n }\n _createManyRaw<T extends Query, Arg extends CreateManyRawData<T>>(\n this: T,\n ...args: CreateRawArgs<T, Arg>\n ): CreateManyResult<T> {\n handleSelect(this);\n return insert(\n this,\n args[0] as { columns: string[]; values: RawExpression[] },\n getSingleReturnType(this),\n ) as CreateManyResult<T>;\n }\n\n createFrom<\n T extends Query,\n Q extends Query & { returnType: 'one' | 'oneOrThrow' },\n >(\n this: T,\n query: Q,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n ): CreateResult<T> {\n return this.clone()._createFrom(query, data);\n }\n _createFrom<\n T extends Query,\n Q extends Query & { returnType: 'one' | 'oneOrThrow' },\n >(\n this: T,\n query: Q,\n data?: Omit<CreateData<T>, keyof Q['result']>,\n ): CreateResult<T> {\n return createFromQuery(this, query, false, data);\n }\n\n createManyFrom<T extends Query, Q extends Query>(\n this: T,\n query: Q,\n ): CreateManyResult<T> {\n return this.clone()._createManyFrom(query);\n }\n _createManyFrom<T extends Query, Q extends Query>(\n this: T,\n query: Q,\n ): CreateManyResult<T> {\n return createFromQuery(this, query, true);\n }\n\n defaults<T extends Query, Data extends Partial<CreateData<T>>>(\n this: T,\n data: Data,\n ): T & {\n meta: {\n defaults: Record<keyof Data, true>;\n };\n } {\n return (this.clone() as T)._defaults(data);\n }\n _defaults<T extends Query, Data extends Partial<CreateData<T>>>(\n this: T,\n data: Data,\n ): T & { meta: { defaults: Record<keyof Data, true> } } {\n this.query.defaults = data;\n return this as T & { meta: { defaults: Record<keyof Data, true> } };\n }\n\n onConflict<T extends Query, Arg extends OnConflictArg<T>>(\n this: T,\n arg?: Arg,\n ): OnConflictQueryBuilder<T, Arg> {\n return this.clone()._onConflict(arg);\n }\n _onConflict<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined = undefined,\n >(this: T, arg?: Arg): OnConflictQueryBuilder<T, Arg> {\n return new OnConflictQueryBuilder(this, arg as Arg);\n }\n}\n\nexport class OnConflictQueryBuilder<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined,\n> {\n constructor(private query: T, private onConflict: Arg) {}\n\n ignore(): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'ignore',\n expr: this.onConflict as OnConflictItem,\n };\n return this.query;\n }\n\n merge(\n update?:\n | keyof T['shape']\n | (keyof T['shape'])[]\n | Partial<T['inputType']>\n | RawExpression,\n ): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'merge',\n expr: this.onConflict as OnConflictItem,\n update: update as OnConflictMergeUpdate,\n };\n return this.query;\n }\n}\n","import { Query, SelectableBase, WithDataBase } from './query';\nimport { QueryData } from './sql';\nimport {\n ColumnsShapeBase,\n QueryBaseCommon,\n QueryInternal,\n QueryMetaBase,\n} from 'orchid-core';\nimport { RelationsBase } from './relations';\nimport { getClonedQueryData } from './utils';\nimport { ColumnsShape } from './columns';\n\nexport abstract class QueryBase implements QueryBaseCommon {\n clone<T extends QueryBase>(this: T): T {\n const cloned = Object.create(this.baseQuery);\n cloned.query = getClonedQueryData(this.query);\n return cloned;\n }\n abstract result: ColumnsShape;\n query = {} as QueryData;\n table?: string;\n selectable!: SelectableBase;\n shape!: ColumnsShapeBase;\n relations!: RelationsBase;\n withData!: WithDataBase;\n baseQuery!: Query;\n internal!: QueryInternal;\n meta!: QueryMetaBase;\n}\n","import { Query } from '../query';\nimport { ColumnOperators, QueryData } from '../sql';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { JoinArgs, JoinCallback, JoinFirstArg } from './join';\nimport {\n RawExpression,\n ColumnsShapeBase,\n MaybeArray,\n emptyObject,\n} from 'orchid-core';\nimport { getIsJoinSubQuery } from '../sql/join';\nimport { getShapeFromSelect } from './select';\nimport { ColumnsShape } from '../columns';\nimport { QueryBase } from '../queryBase';\n\nexport type WhereArg<T extends QueryBase> =\n | (Omit<\n {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type']\n | null\n | ColumnOperators<T['selectable'], K>\n | RawExpression;\n },\n 'NOT' | 'OR' | 'IN' | 'EXISTS'\n > & {\n NOT?: MaybeArray<WhereArg<T>>;\n OR?: MaybeArray<WhereArg<T>>[];\n IN?: MaybeArray<{\n columns: (keyof T['selectable'])[];\n values: unknown[][] | Query | RawExpression;\n }>;\n })\n | QueryBase\n | RawExpression\n | ((q: WhereQueryBuilder<T>) => WhereQueryBuilder);\n\nexport type WhereInColumn<T extends QueryBase> =\n | keyof T['selectable']\n | [keyof T['selectable'], ...(keyof T['selectable'])[]];\n\nexport type WhereInValues<\n T extends QueryBase,\n Column extends WhereInColumn<T>,\n> = Column extends keyof T['selectable']\n ? T['selectable'][Column]['column']['type'][] | Query | RawExpression\n :\n | ({\n [I in keyof Column]: Column[I] extends keyof T['selectable']\n ? T['selectable'][Column[I]]['column']['type']\n : never;\n } & {\n length: Column extends { length: number } ? Column['length'] : never;\n })[]\n | Query\n | RawExpression;\n\nexport type WhereResult<T extends QueryBase> = T & {\n meta: {\n hasWhere: true;\n };\n};\n\nexport type WhereInArg<T extends Pick<Query, 'selectable'>> = {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type'][]\n | Query\n | RawExpression;\n};\n\nexport const addWhere = <T extends Where>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(q, 'and', args) as unknown as WhereResult<T>;\n};\n\nexport const addWhereNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryValue(q, 'and', {\n NOT: args,\n }) as unknown as WhereResult<T>;\n};\n\nexport const addOr = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [item]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addOrNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [{ NOT: item }]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addWhereIn = <T extends QueryBase>(\n q: T,\n and: boolean,\n arg: unknown,\n values: unknown[] | unknown[][] | Query | RawExpression | undefined,\n not?: boolean,\n): WhereResult<T> => {\n const op = not ? 'notIn' : 'in';\n\n let item;\n if (values) {\n if (Array.isArray(arg)) {\n item = {\n IN: {\n columns: arg,\n values,\n },\n };\n if (not) item = { NOT: item };\n } else {\n item = { [arg as string]: { [op]: values } };\n }\n } else {\n item = {} as Record<string, { in: unknown[] }>;\n for (const key in arg as Record<string, unknown[]>) {\n item[key] = { [op as 'in']: (arg as Record<string, unknown[]>)[key] };\n }\n }\n\n if (and) {\n pushQueryValue(q, 'and', item);\n } else {\n pushQueryValue(q, 'or', [item]);\n }\n\n return q as unknown as WhereResult<T>;\n};\n\nconst existsArgs = (args: [JoinFirstArg<Query>, ...JoinArgs<Query, Query>]) => {\n const q = args[0];\n\n let isSubQuery;\n if (typeof q === 'object') {\n isSubQuery = getIsJoinSubQuery(q.query, q.baseQuery.query);\n if (isSubQuery) {\n args[0] = q.clone();\n args[0].shape = getShapeFromSelect(q, true) as ColumnsShape;\n }\n } else {\n isSubQuery = false;\n }\n\n return {\n EXISTS: {\n args,\n isSubQuery,\n },\n } as never;\n};\n\nexport abstract class Where extends QueryBase {\n where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._where(...args);\n }\n\n _where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhere(this, args);\n }\n\n whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._whereNot(...args);\n }\n\n _whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhereNot(this, args);\n }\n\n and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.where(...args);\n }\n\n _and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._where(...args);\n }\n\n andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.whereNot(...args);\n }\n\n _andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._whereNot(...args);\n }\n\n or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._or(...args);\n }\n\n _or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOr(this, args);\n }\n\n orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._orNot(...args);\n }\n\n _orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOrNot(this, args);\n }\n\n whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): T;\n whereIn<T extends Where>(this: T, arg: WhereInArg<T>): T;\n whereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereIn(\n arg as any,\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values);\n }\n\n orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return this.clone()._orWhereIn(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arg as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values);\n }\n\n whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n whereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereNotIn(arg as any, values as any);\n }\n\n _whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values, true);\n }\n\n orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._orWhereNotIn(arg as any, values as any);\n }\n\n _orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values, true);\n }\n\n whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n ...args: JoinArgs<T, Arg>\n ): WhereResult<T>;\n whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereExists(arg: any, ...args: any) {\n return this.clone()._whereExists(arg, ...args);\n }\n _whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n ...args: JoinArgs<T, Arg>\n ): WhereResult<T>;\n _whereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereExists(this: Where, ...args: any) {\n return this._where(existsArgs(args));\n }\n\n orWhereExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n orWhereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereExists(arg: any, ...args: any) {\n return this.clone()._orWhereExists(arg, ...args);\n }\n _orWhereExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _orWhereExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereExists(this: Where, ...args: any) {\n return this._or(existsArgs(args));\n }\n\n whereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n whereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereNotExists(arg: any, ...args: any) {\n return this.clone()._whereNotExists(arg, ...args);\n }\n _whereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _whereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereNotExists(this: Where, ...args: any) {\n return this._whereNot(existsArgs(args));\n }\n\n orWhereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n orWhereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereNotExists(arg: any, ...args: any) {\n return this.clone()._orWhereNotExists(arg, ...args);\n }\n _orWhereNotExists<\n T extends Where,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): WhereResult<T>;\n _orWhereNotExists<T extends Where, Arg extends JoinFirstArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereNotExists(this: Where, ...args: any) {\n return this._orNot(existsArgs(args));\n }\n}\n\nexport class WhereQueryBuilder<Q extends QueryBase = QueryBase>\n extends Where\n implements QueryBase\n{\n declare selectable: Q['selectable'];\n declare relations: Q['relations'];\n declare result: Q['result'];\n shape: Q['shape'];\n baseQuery: Query;\n withData = emptyObject;\n internal: Q['internal'];\n\n constructor(\n q: QueryBase,\n { shape, joinedShapes }: Pick<QueryData, 'shape' | 'joinedShapes'>,\n ) {\n super();\n this.internal = q.internal;\n this.table = typeof q === 'object' ? q.table : q;\n this.shape = shape;\n this.query = {\n shape: shape as ColumnsShapeBase,\n joinedShapes,\n } as QueryData;\n this.baseQuery = this as unknown as Query;\n if (typeof q === 'object' && q.query.as) {\n this.query.as = q.query.as;\n }\n }\n}\n","import {\n Query,\n QueryThen,\n Selectable,\n SelectableBase,\n WithDataBase,\n WithDataItem,\n} from '../query';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport { WhereQueryBuilder } from './where';\nimport { Relation, RelationsBase } from '../relations';\nimport { QueryData } from '../sql';\nimport {\n RawExpression,\n StringKey,\n QueryInternal,\n EmptyTuple,\n NullableColumn,\n QueryMetaBase,\n} from 'orchid-core';\nimport { _join, _joinLateral } from './_join';\nimport { AliasOrTable } from '../utils';\nimport { ColumnsObject, ColumnsShape } from '../columns';\nimport { QueryBase } from '../queryBase';\n\ntype WithSelectable<\n T extends QueryBase,\n W extends keyof T['withData'],\n> = T['withData'][W] extends WithDataItem\n ?\n | StringKey<keyof T['withData'][W]['shape']>\n | `${T['withData'][W]['table']}.${StringKey<\n keyof T['withData'][W]['shape']\n >}`\n : never;\n\nexport type JoinFirstArg<T extends QueryBase> =\n | Query\n | keyof T['relations']\n | keyof T['withData']\n | ((q: Pick<T, keyof T['relations']>) => Query);\n\nexport type JoinArgs<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n> = Arg extends Query\n ? JoinQueryArgs<T, Arg>\n : Arg extends keyof T['relations']\n ? EmptyTuple\n : Arg extends keyof T['withData']\n ? JoinWithArgs<T, Arg>\n : never;\n\ntype JoinSelectable<Q extends Query> =\n | keyof Q['result']\n | `${AliasOrTable<Q>}.${StringKey<keyof Q['result']>}`;\n\ntype JoinQueryArgs<T extends QueryBase, Q extends Query> =\n | [\n conditions:\n | Record<JoinSelectable<Q>, Selectable<T> | RawExpression>\n | RawExpression\n | true,\n ]\n | [\n leftColumn: JoinSelectable<Q> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n leftColumn: JoinSelectable<Q> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ];\n\ntype JoinWithArgs<T extends QueryBase, W extends keyof T['withData']> =\n | [\n conditions:\n | Record<WithSelectable<T, W>, Selectable<T> | RawExpression>\n | RawExpression,\n ]\n | [\n leftColumn: WithSelectable<T, W> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n leftColumn: WithSelectable<T, W> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ];\n\nexport type JoinResult<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Cb extends (q: never) => { meta: QueryMetaBase } = () => {\n meta: QueryMetaBase;\n },\n J extends Pick<Query, 'result' | 'table' | 'meta'> = Arg extends Query\n ? Arg\n : T['relations'] extends Record<string, Relation>\n ? Arg extends keyof T['relations']\n ? T['relations'][Arg]['table']\n : Arg extends (q: never) => Query\n ? ReturnType<Arg>\n : Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? {\n table: T['withData'][Arg]['table'];\n result: T['withData'][Arg]['shape'];\n meta: QueryMetaBase;\n }\n : never\n : never\n : never,\n Selectable extends SelectableBase = JoinResultSelectable<\n J,\n RequireJoined,\n ReturnType<Cb>\n >,\n> = RequireMain extends true\n ? JoinAddSelectable<T, Selectable>\n : JoinOptionalMain<T, Selectable>;\n\nexport type JoinLateralResult<\n T extends Query,\n R extends QueryBase,\n RequireJoined extends boolean,\n RequireMain extends boolean,\n Selectable extends SelectableBase = JoinResultSelectable<\n R,\n RequireJoined,\n { meta: QueryMetaBase }\n >,\n> = RequireMain extends true\n ? JoinAddSelectable<T, Selectable>\n : JoinOptionalMain<T, Selectable>;\n\ntype JoinResultSelectable<\n J extends Pick<Query, 'result' | 'table' | 'meta'>,\n RequireJoined extends boolean,\n CbResult extends { meta: QueryMetaBase },\n Result extends ColumnsShape = RequireJoined extends true\n ? J['result']\n : { [K in keyof J['result']]: NullableColumn<J['result'][K]> },\n As extends string = CbResult extends { meta: QueryMetaBase & { as: string } }\n ? CbResult['meta']['as']\n : AliasOrTable<J>,\n> = {\n [K in keyof Result as `${As}.${StringKey<K>}`]: {\n as: K;\n column: Result[K];\n };\n} & {\n [K in As]: {\n as: K;\n column: RequireJoined extends true\n ? ColumnsObject<J['result']>\n : NullableColumn<ColumnsObject<J['result']>>;\n };\n};\n\ntype JoinAddSelectable<T extends Query, Selectable extends SelectableBase> = {\n [K in keyof T]: K extends 'selectable' ? T['selectable'] & Selectable : T[K];\n};\n\ntype JoinOptionalMain<\n T extends Query,\n Selectable extends SelectableBase,\n Result extends ColumnsShape = {\n [K in keyof T['result']]: NullableColumn<T['result'][K]>;\n },\n> = {\n [K in keyof T]: K extends 'selectable'\n ? {\n [K in keyof T['selectable']]: {\n as: T['selectable'][K]['as'];\n column: NullableColumn<T['selectable'][K]['column']>;\n };\n } & Selectable\n : K extends 'result'\n ? Result\n : K extends 'then'\n ? QueryThen<T['returnType'], Result>\n : T[K];\n};\n\ntype JoinWithArgToQuery<\n With extends WithDataItem,\n Selectable extends SelectableBase = {\n [K in keyof With['shape']]: {\n as: StringKey<K>;\n column: With['shape'][K];\n };\n },\n> = {\n query: QueryData;\n table: With['table'];\n clone<T extends QueryBase>(this: T): T;\n selectable: Selectable & {\n [K in keyof Selectable as `${With['table']}.${StringKey<K>}`]: Selectable[K];\n };\n shape: With['shape'];\n result: With['shape'];\n baseQuery: Query;\n relations: RelationsBase;\n withData: WithDataBase;\n meta: QueryMetaBase;\n internal: QueryInternal;\n};\n\ntype JoinArgToQuery<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n> = Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? JoinWithArgToQuery<T['withData'][Arg]>\n : never\n : Arg extends Query\n ? Arg\n : Arg extends keyof T['relations']\n ? T['relations'][Arg] extends Relation\n ? T['relations'][Arg]['table']\n : never\n : never;\n\nexport type JoinCallback<T extends QueryBase, Arg extends JoinFirstArg<T>> = (\n q: OnQueryBuilder<T, JoinArgToQuery<T, Arg>>,\n) => OnQueryBuilder;\n\nexport type JoinLateralCallback<\n T extends QueryBase,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n Q extends QueryBase = JoinArgToQuery<T, Arg>,\n> = (q: Q & OnQueryBuilder<T, Q>) => R;\n\nexport class Join {\n join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, true>;\n join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n join(this: Query, ...args: any) {\n return _join(this.clone(), true, 'JOIN', args);\n }\n _join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, true>;\n _join<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _join(this: Query, ...args: any) {\n return _join(this, true, 'JOIN', args);\n }\n\n leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, true>;\n leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n leftJoin(this: Query, ...args: any) {\n return _join(this.clone(), false, 'LEFT JOIN', args);\n }\n _leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, true>;\n _leftJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, true, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _leftJoin(this: Query, ...args: any) {\n return _join(this, false, 'LEFT JOIN', args);\n }\n\n rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, false>;\n rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rightJoin(this: Query, ...args: any) {\n return _join(this.clone(), true, 'RIGHT JOIN', args);\n }\n _rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, true, false>;\n _rightJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, true, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _rightJoin(this: Query, ...args: any) {\n return _join(this, true, 'RIGHT JOIN', args);\n }\n\n fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, false>;\n fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fullJoin(this: Query, ...args: any) {\n return _join(this.clone(), false, 'FULL JOIN', args);\n }\n _fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Args extends JoinArgs<T, Arg>,\n >(this: T, arg: Arg, ...args: Args): JoinResult<T, Arg, false, false>;\n _fullJoin<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n Cb extends JoinCallback<T, Arg>,\n >(this: T, arg: Arg, cb: Cb): JoinResult<T, Arg, false, false, Cb>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _fullJoin(this: Query, ...args: any) {\n return _join(this, false, 'FULL JOIN', args);\n }\n\n joinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, true, true> {\n return _joinLateral<T, Arg, R, true, true>(this.clone(), 'JOIN', arg, cb);\n }\n _joinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, true, true> {\n return _joinLateral<T, Arg, R, true, true>(this, 'JOIN', arg, cb);\n }\n\n leftJoinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, false, true> {\n return _joinLateral<T, Arg, R, false, true>(\n this.clone(),\n 'LEFT JOIN',\n arg,\n cb,\n );\n }\n _leftJoinLateral<\n T extends Query,\n Arg extends JoinFirstArg<T>,\n R extends QueryBase,\n >(\n this: T,\n arg: Arg,\n cb: JoinLateralCallback<T, Arg, R>,\n ): JoinLateralResult<T, R, false, true> {\n return _joinLateral<T, Arg, R, false, true>(this, 'LEFT JOIN', arg, cb);\n }\n}\n\ntype OnArgs<Q extends { selectable: SelectableBase }> =\n | [leftColumn: keyof Q['selectable'], rightColumn: keyof Q['selectable']]\n | [\n leftColumn: keyof Q['selectable'],\n op: string,\n rightColumn: keyof Q['selectable'],\n ];\n\nconst makeOnItem = (\n joinTo: QueryBase,\n joinFrom: QueryBase,\n args: OnArgs<QueryBase>,\n) => {\n return {\n ON: {\n joinTo,\n joinFrom,\n on: args,\n },\n };\n};\n\nexport const pushQueryOn = <T extends QueryBase>(\n q: T,\n joinFrom: QueryBase,\n joinTo: QueryBase,\n ...on: OnArgs<QueryBase>\n): T => {\n return pushQueryValue(q, 'and', makeOnItem(joinFrom, joinTo, on));\n};\n\nexport const pushQueryOrOn: typeof pushQueryOn = (\n q,\n joinFrom,\n joinTo,\n ...on\n) => {\n return pushQueryValue(q, 'or', [makeOnItem(joinFrom, joinTo, on)]);\n};\n\nexport const addQueryOn = <T extends QueryBase>(\n q: T,\n joinFrom: QueryBase,\n joinTo: QueryBase,\n ...args: OnArgs<QueryBase>\n): T => {\n const cloned = q.clone() as typeof q;\n setQueryObjectValue(\n cloned,\n 'joinedShapes',\n (joinFrom.query.as || joinFrom.table) as string,\n joinFrom.query.shape,\n );\n return pushQueryOn(cloned, joinFrom, joinTo, ...args);\n};\n\nexport const addQueryOrOn: typeof pushQueryOrOn = (\n q,\n joinFrom,\n joinTo,\n ...args\n) => {\n return pushQueryOrOn(q.clone() as typeof q, joinFrom, joinTo, ...args);\n};\n\ntype OnJsonPathEqualsArgs<T extends QueryBase> = [\n leftColumn: keyof T['selectable'],\n leftPath: string,\n rightColumn: keyof T['selectable'],\n rightPath: string,\n];\n\nexport class OnQueryBuilder<\n S extends QueryBase = QueryBase,\n J extends QueryBase = QueryBase,\n >\n extends WhereQueryBuilder<\n J & {\n selectable: Omit<S['selectable'], keyof S['shape']>;\n }\n >\n implements QueryBase\n{\n constructor(\n q: QueryBase,\n data: Pick<QueryData, 'shape' | 'joinedShapes'>,\n joinTo: QueryBase,\n ) {\n super(q, data);\n this.query.joinTo = joinTo;\n }\n\n on<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._on(...args);\n }\n _on<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOn(this, this.query.joinTo as QueryBase, this, ...args);\n }\n\n orOn<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._orOn(...args);\n }\n _orOn<T extends OnQueryBuilder>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOrOn(this, this.query.joinTo as QueryBase, this, ...args);\n }\n\n onJsonPathEquals<T extends OnQueryBuilder>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return this.clone()._onJsonPathEquals(...args);\n }\n _onJsonPathEquals<T extends OnQueryBuilder>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return pushQueryValue(this, 'and', { ON: args });\n }\n}\n","import {\n AddQuerySelect,\n Query,\n queryTypeWithLimitOne,\n SetQueryReturnsValueOptional,\n} from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { ColumnType, StringColumn } from '../columns';\nimport { JsonItem } from '../sql';\nimport { raw, StringKey, ColumnTypeBase } from 'orchid-core';\n\ntype JsonColumnName<T extends Pick<Query, 'selectable'>> = StringKey<\n {\n [K in keyof T['selectable']]: T['selectable'][K]['column']['dataType'] extends 'jsonb'\n ? K\n : never;\n }[keyof T['selectable']]\n>;\n\ntype ColumnOrJsonMethod<T extends Query> = JsonColumnName<T> | JsonItem;\n\ntype JsonSetResult<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string,\n Type extends ColumnTypeBase = Column extends keyof T['shape']\n ? T['shape'][Column]\n : Column extends JsonItem\n ? Column['__json'][2]\n : ColumnType,\n> = JsonItem<As, Type> &\n (Type extends ColumnTypeBase ? AddQuerySelect<T, Record<As, Type>> : T);\n\ntype JsonPathQueryResult<\n T extends Query,\n As extends string,\n Type extends ColumnType,\n> = JsonItem &\n AddQuerySelect<\n T,\n {\n [K in As]: Type;\n }\n >;\n\nexport class Json {\n json<T extends Query>(\n this: T,\n coalesce?: boolean,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n return this.clone()._json(coalesce);\n }\n\n _json<T extends Query>(\n this: T,\n coalesce?: boolean,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n const q = this._wrap(this.baseQuery.clone()) as T;\n // json_agg is used instead of jsonb_agg because it is 2x faster, according to my benchmarks\n q._getOptional(\n raw(\n queryTypeWithLimitOne[this.query.returnType]\n ? `row_to_json(\"t\".*)`\n : coalesce !== false\n ? `COALESCE(json_agg(row_to_json(\"t\".*)), '[]')`\n : 'json_agg(row_to_json(\"t\".*))',\n ),\n );\n return q as unknown as SetQueryReturnsValueOptional<T, StringColumn>;\n }\n\n jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonSet(column, path, value, options);\n }\n\n _jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'set',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonInsert(...args);\n }\n\n _jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'insert',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonRemove(...args);\n }\n\n _jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'remove',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.query.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n ...args: [\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ]\n ): JsonPathQueryResult<T, As, Type> {\n const q = this.clone() as T;\n return q._jsonPathQuery(...args);\n }\n\n _jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ): JsonPathQueryResult<T, As, Type> {\n const json: JsonItem = {\n __json: ['pathQuery', as, type, column, path, options],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonPathQueryResult<T, As, Type>;\n }\n}\n","import { Query } from '../query';\nimport { quote } from '../quote';\nimport { Sql } from 'orchid-core';\n\nexport type QueryLogObject = {\n colors: boolean;\n beforeQuery(sql: Sql): unknown;\n afterQuery(sql: Sql, logData: unknown): void;\n onError(error: Error, sql: Sql, logData: unknown): void;\n};\n\nexport type QueryLogger = {\n log(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport type QueryLogOptions = {\n log?: boolean | Partial<QueryLogObject>;\n logger?: QueryLogger;\n};\n\nexport const logColors = {\n boldCyanBright: (message: string) =>\n `\\u001b[1m\\u001b[96m${message}\\u001b[39m\\u001b[22m`,\n\n boldBlue: (message: string) =>\n `\\u001b[1m\\u001b[34m${message}\\u001b[39m\\u001b[22m`,\n\n boldYellow: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldMagenta: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldRed: (message: string) =>\n `\\u001b[1m\\u001b[31m${message}\\u001b[39m\\u001b[22m`,\n};\n\nconst makeMessage = (\n colors: boolean,\n timeColor: (message: string) => string,\n time: [number, number],\n sqlColor: (message: string) => string,\n sql: string,\n valuesColor: (message: string) => string,\n values: unknown[],\n): string => {\n const elapsed = process.hrtime(time);\n const formattedTime = `(${elapsed[0] ? `${elapsed[0]}s ` : ''}${(\n elapsed[1] / 1000000\n ).toFixed(1)}ms)`;\n\n const result = `${colors ? timeColor(formattedTime) : formattedTime} ${\n colors ? sqlColor(sql) : sql\n }`;\n\n if (!values.length) {\n return result;\n }\n\n const formattedValues = `[${values.map(quote).join(', ')}]`;\n\n return `${result} ${colors ? valuesColor(formattedValues) : formattedValues}`;\n};\n\nexport const logParamToLogObject = (\n logger: QueryLogger,\n log: QueryLogOptions['log'],\n): QueryLogObject | undefined => {\n if (!log) return;\n const logObject = Object.assign(\n {\n colors: true,\n beforeQuery() {\n return process.hrtime();\n },\n afterQuery(sql, time: [number, number]) {\n logger.log(\n makeMessage(\n colors,\n logColors.boldCyanBright,\n time,\n logColors.boldBlue,\n sql.text,\n logColors.boldYellow,\n sql.values,\n ),\n );\n },\n onError(error, sql, time: [number, number]) {\n const message = `Error: ${error.message}`;\n\n logger.error(\n `${makeMessage(\n colors,\n logColors.boldMagenta,\n time,\n logColors.boldRed,\n sql.text,\n logColors.boldYellow,\n sql.values,\n )} ${colors ? logColors.boldRed(message) : message}`,\n );\n },\n } as QueryLogObject,\n log === true ? {} : log,\n );\n\n const colors = logObject.colors;\n\n return logObject;\n};\n\nexport class QueryLog {\n log<T extends Query>(this: T, log = true): T {\n return this.clone()._log(log);\n }\n\n _log<T extends Query>(this: T, log = true): T {\n this.query.log = logParamToLogObject(this.query.logger, log);\n return this;\n }\n}\n","import { Query, QueryReturnType, QueryThen } from '../query';\nimport { getValueKey } from './get';\nimport { SelectQueryData } from '../sql';\nimport { Spread } from 'orchid-core';\n\nexport type MergeQuery<\n T extends Query,\n Q extends Query,\n ReturnType extends QueryReturnType = QueryReturnType extends Q['returnType']\n ? T['returnType']\n : Q['returnType'],\n> = Omit<\n T,\n 'result' | 'returnType' | 'then' | 'selectable' | 'windows' | 'withData'\n> & {\n meta: Q['meta'];\n result: T['meta']['hasSelect'] extends true\n ? Spread<[T['result'], Q['result']]>\n : Q['result'];\n returnType: ReturnType;\n then: T['meta']['hasSelect'] extends true\n ? QueryThen<ReturnType, Spread<[T['result'], Q['result']]>>\n : QueryThen<ReturnType, Q['result']>;\n selectable: T['selectable'] & Q['selectable'];\n windows: T['windows'] & Q['windows'];\n withData: T['withData'] & Q['withData'];\n};\n\nconst mergableObjects: Record<string, boolean> = {\n shape: true,\n withShapes: true,\n parsers: true,\n defaults: true,\n joinedShapes: true,\n joinedParsers: true,\n};\n\nexport class MergeQueryMethods {\n merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q> {\n return this.clone()._merge(q);\n }\n _merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q> {\n const a = this.query as Record<string, unknown>;\n const b = q.query as Record<string, unknown>;\n\n for (const key in b) {\n const value = b[key];\n switch (typeof value) {\n case 'boolean':\n case 'string':\n case 'number':\n a[key] = value;\n break;\n case 'object':\n if (Array.isArray(value)) {\n a[key] = a[key] ? [...(a[key] as unknown[]), ...value] : value;\n } else if (mergableObjects[key]) {\n a[key] = a[key]\n ? { ...(a[key] as Record<string, unknown>), ...value }\n : value;\n } else {\n a[key] = value;\n }\n break;\n }\n }\n\n (a as SelectQueryData)[getValueKey] = (b as SelectQueryData)[getValueKey];\n\n if (b.returnType) a.returnType = b.returnType;\n\n return this as unknown as MergeQuery<T, Q>;\n }\n}\n","import { WithOptions } from '../sql';\nimport { ColumnsShape, ColumnTypes } from '../columns';\nimport { AddQueryWith, Query } from '../query';\nimport { Db } from '../db';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport {\n isRaw,\n RawExpression,\n ColumnShapeOutput,\n emptyObject,\n} from 'orchid-core';\n\ntype WithArgsOptions = Omit<WithOptions, 'columns'> & {\n columns?: boolean | string[];\n};\n\ntype WithArgs =\n | [string, ColumnsShape, RawExpression]\n | [string, WithArgsOptions, ColumnsShape, RawExpression]\n | [string, Query | ((qb: Db) => Query)]\n | [string, WithArgsOptions, Query | ((qb: Db) => Query)];\n\ntype WithShape<Args extends WithArgs> = Args[1] extends Query\n ? Args[1]['result']\n : Args[1] extends (qb: Db) => Query\n ? ReturnType<Args[1]>['result']\n : Args[2] extends Query\n ? Args[2]['result']\n : Args[2] extends (qb: Db) => Query\n ? ReturnType<Args[2]>['result']\n : Args[1] extends ColumnsShape\n ? Args[1]\n : Args[2] extends ColumnsShape\n ? Args[2]\n : Args[2] extends (t: ColumnTypes) => ColumnsShape\n ? ReturnType<Args[2]> extends ColumnsShape\n ? ReturnType<Args[2]>\n : never\n : never;\n\ntype WithResult<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape,\n> = AddQueryWith<\n T,\n {\n table: Args[0];\n shape: Shape;\n type: ColumnShapeOutput<Shape>;\n }\n>;\n\nexport class With {\n with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n return this.clone()._with<T, Args, Shape>(...args);\n }\n\n _with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n let options =\n (args.length === 3 && !isRaw(args[2])) || args.length === 4\n ? (args[1] as WithArgsOptions | WithOptions)\n : undefined;\n\n const last = args[args.length - 1] as\n | Query\n | ((qb: Db) => Query)\n | RawExpression;\n\n const query = typeof last === 'function' ? last(this.queryBuilder) : last;\n\n const shape =\n args.length === 4\n ? (args[2] as ColumnsShape)\n : isRaw(query)\n ? args[1]\n : query.query.shape;\n\n if (options?.columns === true) {\n options = {\n ...options,\n columns: Object.keys(shape),\n };\n }\n\n pushQueryValue(this, 'with', [args[0], options || emptyObject, query]);\n\n return setQueryObjectValue(\n this,\n 'withShapes',\n args[0],\n shape,\n ) as unknown as WithResult<T, Args, Shape>;\n }\n}\n","import { Query } from '../query';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { RawExpression } from 'orchid-core';\n\nexport type UnionArg<T extends Query> =\n | (Omit<Query, 'result'> & {\n result: { [K in keyof T['result']]: Pick<T['result'][K], 'dataType'> };\n })\n | RawExpression;\n\nexport class Union {\n union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._union(args, wrap);\n }\n\n _union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION' as const, wrap })),\n );\n }\n\n unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._unionAll(args, wrap);\n }\n\n _unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION ALL' as const, wrap })),\n );\n }\n\n intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._intersect(args, wrap);\n }\n\n _intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT' as const, wrap })),\n );\n }\n\n intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return this._intersectAll(args, wrap);\n }\n\n _intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT ALL' as const, wrap })),\n );\n }\n\n except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._except(args, wrap);\n }\n\n _except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT' as const, wrap })),\n );\n }\n\n exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._exceptAll(args, wrap);\n }\n\n _exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT ALL' as const, wrap })),\n );\n }\n}\n","import { Query, QueryReturnsAll, SetQueryReturnsRowCount } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport {\n BelongsToRelation,\n HasAndBelongsToManyRelation,\n HasManyRelation,\n HasOneRelation,\n Relation,\n} from '../relations';\nimport { WhereArg, WhereResult } from './where';\nimport { CreateData } from './create';\nimport { queryMethodByReturnType } from './then';\nimport { UpdateQueryData } from '../sql';\nimport { VirtualColumn } from '../columns';\nimport { anyShape } from '../db';\nimport {\n isRaw,\n RawExpression,\n EmptyObject,\n MaybeArray,\n StringKey,\n} from 'orchid-core';\nimport { QueryResult } from '../adapter';\n\nexport type UpdateData<T extends Query> = {\n [K in keyof T['inputType']]?: T['inputType'][K] | RawExpression;\n} & (T['relations'] extends Record<string, Relation>\n ? {\n [K in keyof T['relations']]?: T['relations'][K] extends BelongsToRelation\n ? UpdateBelongsToData<T, T['relations'][K]>\n : T['relations'][K] extends HasOneRelation\n ? UpdateHasOneData<T, T['relations'][K]>\n : T['relations'][K] extends HasManyRelation\n ? UpdateHasManyData<T, T['relations'][K]>\n : T['relations'][K] extends HasAndBelongsToManyRelation\n ? UpdateHasAndBelongsToManyData<T['relations'][K]>\n : never;\n }\n : EmptyObject) & {\n __raw?: never; // forbid RawExpression argument\n };\n\ntype UpdateBelongsToData<T extends Query, Rel extends BelongsToRelation> =\n | { disconnect: boolean }\n | { set: WhereArg<Rel['table']> }\n | { delete: boolean }\n | { update: UpdateData<Rel['table']> }\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n }\n | (QueryReturnsAll<T['returnType']> extends true\n ? never\n : {\n upsert: {\n update: UpdateData<Rel['table']>;\n create:\n | CreateData<Rel['nestedCreateQuery']>\n | (() => CreateData<Rel['nestedCreateQuery']>);\n };\n });\n\ntype UpdateHasOneData<T extends Query, Rel extends HasOneRelation> =\n | { disconnect: boolean }\n | { delete: boolean }\n | { update: UpdateData<Rel['table']> }\n | (QueryReturnsAll<T['returnType']> extends true\n ? never\n :\n | { set: WhereArg<Rel['table']> }\n | {\n upsert: {\n update: UpdateData<Rel['table']>;\n create:\n | CreateData<Rel['nestedCreateQuery']>\n | (() => CreateData<Rel['nestedCreateQuery']>);\n };\n }\n | {\n create: CreateData<Rel['nestedCreateQuery']>;\n });\n\ntype UpdateHasManyData<T extends Query, Rel extends HasManyRelation> = {\n disconnect?: MaybeArray<WhereArg<Rel['table']>>;\n delete?: MaybeArray<WhereArg<Rel['table']>>;\n update?: {\n where: MaybeArray<WhereArg<Rel['table']>>;\n data: UpdateData<Rel['table']>;\n };\n} & (QueryReturnsAll<T['returnType']> extends true\n ? EmptyObject\n : {\n set?: MaybeArray<WhereArg<Rel['table']>>;\n create?: CreateData<Rel['nestedCreateQuery']>[];\n });\n\ntype UpdateHasAndBelongsToManyData<Rel extends HasAndBelongsToManyRelation> = {\n disconnect?: MaybeArray<WhereArg<Rel['table']>>;\n set?: MaybeArray<WhereArg<Rel['table']>>;\n delete?: MaybeArray<WhereArg<Rel['table']>>;\n update?: {\n where: MaybeArray<WhereArg<Rel['table']>>;\n data: UpdateData<Rel['table']>;\n };\n create?: CreateData<Rel['nestedCreateQuery']>[];\n};\n\ntype UpdateArg<T extends Query> = T['meta']['hasWhere'] extends true\n ? UpdateData<T>\n : never;\n\ntype UpdateRawArg<T extends Query> = T['meta']['hasWhere'] extends true\n ? RawExpression\n : never;\n\ntype UpdateResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? T\n : SetQueryReturnsRowCount<T>;\n\ntype ChangeCountArg<T extends Query> =\n | keyof T['shape']\n | Partial<Record<keyof T['shape'], number>>;\n\nexport type UpdateCtx = {\n willSetKeys?: true;\n returnTypeAll?: true;\n resultAll: Record<string, unknown>[];\n queries?: ((queryResult: QueryResult) => Promise<void>)[];\n updateData?: Record<string, unknown>;\n};\n\nconst applyCountChange = <T extends Query>(\n self: T,\n op: string,\n data: ChangeCountArg<T>,\n) => {\n self.query.type = 'update';\n\n let map: Record<string, { op: string; arg: number }>;\n if (typeof data === 'object') {\n map = {};\n for (const key in data) {\n map[key] = { op, arg: data[key] as number };\n }\n } else {\n map = { [data as string]: { op, arg: 1 } };\n }\n\n pushQueryValue(self, 'updateData', map);\n return self as unknown as UpdateResult<T>;\n};\n\nconst checkIfUpdateIsEmpty = (q: UpdateQueryData) => {\n return !q.updateData?.some((item) => isRaw(item) || Object.keys(item).length);\n};\n\nconst update = <T extends Query>(q: T): UpdateResult<T> => {\n const { query } = q;\n query.type = 'update';\n\n if (!query.select) {\n query.returnType = 'rowCount';\n }\n\n return q as unknown as UpdateResult<T>;\n};\n\nexport class Update {\n update<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._update(arg);\n }\n _update<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const { query } = this;\n\n const set: Record<string, unknown> = { ...arg };\n pushQueryValue(this, 'updateData', set);\n\n const { shape } = this.query;\n\n const originalReturnType = query.returnType || 'all';\n\n const ctx: UpdateCtx = {\n resultAll: undefined as unknown as Record<string, unknown>[],\n };\n\n for (const key in arg) {\n const item = shape[key];\n if (item instanceof VirtualColumn && item.update) {\n item.update(this, ctx, set);\n delete set[key];\n } else if (!shape[key] && shape !== anyShape) {\n delete set[key];\n } else {\n const encode = shape[key].encodeFn;\n if (encode) set[key] = encode(set[key]);\n }\n }\n\n if (!ctx.willSetKeys && checkIfUpdateIsEmpty(query as UpdateQueryData)) {\n delete query.type;\n }\n\n const { queries } = ctx;\n if (queries || ctx.returnTypeAll) {\n query.returnType = 'all';\n\n if (queries) {\n if (!query.select?.includes('*')) {\n this.primaryKeys.forEach((key) => {\n if (!query.select?.includes(key)) {\n this._select(key as StringKey<keyof T['selectable']>);\n }\n });\n }\n\n query.patchResult = async (queryResult) => {\n await Promise.all(queries.map((fn) => fn(queryResult)));\n\n if (ctx.updateData) {\n const t = this.baseQuery.clone();\n const keys = this.primaryKeys;\n (\n t._whereIn as unknown as (\n keys: string[],\n values: unknown[][],\n ) => Query\n )(\n keys,\n queryResult.rows.map((item) => keys.map((key) => item[key])),\n );\n\n await (t as WhereResult<Query>)._update(ctx.updateData);\n\n for (const row of queryResult.rows) {\n Object.assign(row, ctx.updateData);\n }\n }\n };\n }\n\n const { handleResult } = query;\n query.handleResult = (q, queryResult, s) => {\n ctx.resultAll = handleResult(q, queryResult) as Record<\n string,\n unknown\n >[];\n\n if (queryMethodByReturnType[originalReturnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n q.query.returnType = originalReturnType;\n\n return handleResult(q, queryResult, s);\n };\n }\n\n return update(this);\n }\n\n updateRaw<T extends Query>(this: T, arg: UpdateRawArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._updateRaw(arg);\n }\n _updateRaw<T extends Query>(this: T, arg: UpdateRawArg<T>): UpdateResult<T> {\n pushQueryValue(this, 'updateData', arg);\n return update(this);\n }\n\n updateOrThrow<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n const q = this.clone() as T;\n return q._updateOrThrow(arg);\n }\n\n _updateOrThrow<T extends Query>(this: T, arg: UpdateArg<T>): UpdateResult<T> {\n this.query.throwOnNotFound = true;\n return this._update(arg);\n }\n\n increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._increment(data) as unknown as UpdateResult<T>;\n }\n\n _increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '+', data);\n }\n\n decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._decrement(data) as unknown as UpdateResult<T>;\n }\n\n _decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '-', data);\n }\n}\n","import { Query } from '../query';\nimport { emptyArray, emptyObject, Sql } from 'orchid-core';\nimport { TransactionAdapter } from '../adapter';\n\nconst commitSql = {\n text: 'COMMIT',\n values: emptyArray,\n};\n\nconst rollbackSql = {\n text: 'ROLLBACK',\n values: emptyArray,\n};\n\nexport type IsolationLevel =\n | 'SERIALIZABLE'\n | 'REPEATABLE READ'\n | 'READ COMMITTED'\n | 'READ UNCOMMITTED';\n\nexport type TransactionOptions = {\n level: IsolationLevel;\n readOnly?: boolean;\n deferrable?: boolean;\n};\n\nexport class Transaction {\n transaction<T extends Query, Result>(\n this: T,\n cb: () => Promise<Result>,\n ): Promise<Result>;\n transaction<T extends Query, Result>(\n this: T,\n options: IsolationLevel | TransactionOptions,\n cb: () => Promise<Result>,\n ): Promise<Result>;\n async transaction<T extends Query, Result>(\n this: T,\n cbOrOptions: IsolationLevel | TransactionOptions | (() => Promise<Result>),\n cb?: () => Promise<Result>,\n ): Promise<Result> {\n let options: TransactionOptions;\n let fn: () => Promise<Result>;\n if (typeof cbOrOptions === 'function') {\n options = emptyObject as TransactionOptions;\n fn = cbOrOptions;\n } else {\n options =\n typeof cbOrOptions === 'object' ? cbOrOptions : { level: cbOrOptions };\n fn = cb as () => Promise<Result>;\n }\n\n const sql = {\n values: emptyArray,\n } as unknown as Sql;\n\n const log = this.query.log;\n let logData: unknown | undefined;\n\n const trx =\n this.internal.transactionStorage.getStore() as TransactionAdapter & {\n transactionId: number;\n };\n const transactionId = trx ? trx.transactionId + 1 : 0;\n\n const callback = (adapter: TransactionAdapter) => {\n if (log) log.afterQuery(sql, logData);\n if (log) logData = log.beforeQuery(commitSql);\n\n (adapter as unknown as { transactionId: number }).transactionId =\n transactionId;\n\n return trx ? fn() : this.internal.transactionStorage.run(adapter, fn);\n };\n\n if (!trx) {\n sql.text = `BEGIN${\n options.level ? ` ISOLATION LEVEL ${options.level}` : ''\n }${\n options.readOnly !== undefined\n ? ` READ ${options.readOnly ? 'ONLY' : 'WRITE'}`\n : ''\n }${\n options.deferrable !== undefined\n ? ` ${options.deferrable ? '' : 'NOT '}DEFERRABLE`\n : ''\n }`;\n if (log) logData = log.beforeQuery(sql);\n\n const t = this.query.adapter.transaction(sql, callback);\n\n if (log) {\n t.then(\n () => log.afterQuery(commitSql, logData),\n () => log.afterQuery(rollbackSql, logData),\n );\n }\n\n return t;\n } else {\n try {\n sql.text = `SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n\n let result;\n try {\n result = await callback(trx);\n } catch (err) {\n sql.text = `ROLLBACK TO SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n if (log) log.afterQuery(sql, logData);\n throw err;\n }\n\n sql.text = `RELEASE SAVEPOINT \"${transactionId}\"`;\n if (log) logData = log.beforeQuery(sql);\n await trx.query(sql);\n if (log) log.afterQuery(sql, logData);\n\n return result;\n } finally {\n trx.transactionId = transactionId - 1;\n }\n }\n }\n}\n","import { Query } from '../query';\nimport { ColumnType, IntegerColumn } from '../columns';\nimport { SelectAgg, WindowFunctionOptions } from './aggregate';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { addParserToQuery } from './select';\n\nconst selectWindowFunction = <\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n>(\n self: T,\n functionName: Func,\n options: WindowFunctionOptions<T, As>,\n parse?: (input: unknown) => Value['type'],\n): SelectAgg<T, Func, As, Value> => {\n pushQueryValue(self, 'select', {\n function: functionName,\n options: {\n as: options.as,\n over: options,\n },\n });\n\n if (parse) {\n addParserToQuery(self.query, options.as || functionName, parse);\n }\n\n return self as unknown as SelectAgg<T, Func, As, Value>;\n};\n\nconst toInt = (input: unknown) => parseInt(input as string);\n\nexport class Window {\n selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return this.clone()._selectRowNumber(options);\n }\n\n _selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return selectWindowFunction(this, 'row_number', options, toInt);\n }\n\n selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return this.clone()._selectRank(options);\n }\n\n _selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'rank', options, toInt);\n }\n\n selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return this.clone()._selectDenseRank(options);\n }\n\n _selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'dense_rank', options, toInt);\n }\n\n selectPercentRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return this.clone()._selectPercentRank(options);\n }\n\n _selectPercentRank<\n T extends Query,\n As extends string | undefined = undefined,\n >(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'percent_rank', options, toInt);\n }\n\n selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return this.clone()._selectCumeDist(options);\n }\n\n _selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return selectWindowFunction(this, 'cume_dist', options, toInt);\n }\n}\n","import { Query, SetQueryReturnsOne, SetQueryReturnsVoid } from '../query';\nimport { UpdateData } from './update';\nimport { CreateData } from './create';\nimport { WhereResult } from './where';\nimport { MoreThanOneRowError } from '../errors';\nimport { isObjectEmpty } from 'orchid-core';\n\nexport type UpsertCreateArg<T extends Query> =\n | CreateData<T>\n | (() => CreateData<T>);\n\nexport type UpsertData<T extends Query> = {\n update: UpdateData<T>;\n create: UpsertCreateArg<T>;\n};\n\nexport type UpsertResult<T extends Query> = T['meta']['hasSelect'] extends true\n ? SetQueryReturnsOne<T>\n : SetQueryReturnsVoid<T>;\n\nexport type UpsertThis = WhereResult<Query> & {\n returnType: 'one' | 'oneOrThrow';\n};\n\nexport class QueryUpsertOrCreate {\n upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n return this.clone()._upsert(data);\n }\n\n _upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n if (!isObjectEmpty(data.update)) {\n this._update<WhereResult<Query>>(data.update);\n }\n return this._orCreate(data.create);\n }\n\n orCreate<T extends UpsertThis>(\n this: T,\n data: UpsertCreateArg<T>,\n ): UpsertResult<T> {\n return this.clone()._orCreate(data);\n }\n\n _orCreate<T extends UpsertThis>(\n this: T,\n data: UpsertCreateArg<T>,\n ): UpsertResult<T> {\n this.query.returnType = 'one';\n this.query.wrapInTransaction = true;\n\n const { handleResult } = this.query;\n let result: unknown;\n let created = false;\n this.query.handleResult = (q, r, s) => {\n return created ? result : handleResult(q, r, s);\n };\n\n this.query.patchResult = async (queryResult) => {\n if (queryResult.rowCount === 0) {\n if (typeof data === 'function') {\n data = data();\n }\n\n const inner = (this as Query).create(data as CreateData<Query>);\n const { handleResult } = inner.query;\n inner.query.handleResult = (q, r, s) => {\n queryResult = r;\n const res = handleResult(q, r, s);\n result = res;\n return res;\n };\n await inner;\n created = true;\n } else if (queryResult.rowCount > 1) {\n throw new MoreThanOneRowError(\n this,\n `Only one row was expected to find, found ${queryResult.rowCount} rows.`,\n );\n }\n };\n return this as unknown as UpsertResult<T>;\n }\n}\n","import { ColumnType } from '../columns';\nimport { Query } from '../query';\nimport { RawExpression, ColumnTypesBase } from 'orchid-core';\n\ntype RawArgs<CT extends ColumnTypesBase, C extends ColumnType> =\n | [column: (types: CT) => C, sql: string, values?: Record<string, unknown>]\n | [sql: string, values?: Record<string, unknown>];\n\nexport class RawMethods {\n raw<T extends Query, C extends ColumnType>(\n this: T,\n ...args: RawArgs<T['columnTypes'], C>\n ): RawExpression<C> {\n if (typeof args[0] === 'string') {\n return {\n __raw: args[0],\n __values: args[1],\n } as RawExpression<C>;\n } else {\n return {\n __column: args[0](this.columnTypes),\n __raw: args[1],\n __values: args[2],\n } as RawExpression<C>;\n }\n }\n}\n","import { Query } from '../query';\nimport { CopyOptions } from '../sql';\n\ntype CopyArg<T extends Query> = CopyOptions<keyof T['shape']>;\n\nexport class CopyMethods {\n copy<T extends Query>(this: T, arg: CopyArg<T>): T {\n return this.clone()._copy(arg);\n }\n _copy<T extends Query>(this: T, arg: CopyArg<T>) {\n Object.assign(this.query, {\n type: 'copy',\n copy: arg,\n });\n return this;\n }\n}\n","import { SetQueryTableAlias } from '../query';\nimport { QueryBase } from '../queryBase';\n\nexport abstract class AsMethods extends QueryBase {\n as<T extends AsMethods, As extends string>(\n this: T,\n as: As,\n ): SetQueryTableAlias<T, As> {\n return this.clone()._as(as) as unknown as SetQueryTableAlias<T, As>;\n }\n\n _as<T extends AsMethods, As extends string>(\n this: T,\n as: As,\n ): SetQueryTableAlias<T, As> {\n this.query.as = as;\n return this as unknown as SetQueryTableAlias<T, As>;\n }\n}\n","import {\n Query,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n SetQueryReturnsPluck,\n SetQueryReturnsRows,\n SetQueryReturnsValue,\n SetQueryReturnsVoid,\n SetQueryTableAlias,\n} from '../query';\nimport { Expression } from '../utils';\nimport {\n SelectItem,\n SelectQueryData,\n SortDir,\n toSql,\n ToSqlOptions,\n TruncateQueryData,\n} from '../sql';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { Then } from './then';\nimport { BooleanColumn } from '../columns';\nimport { Aggregate } from './aggregate';\nimport { addParserForSelectItem, Select } from './select';\nimport { From } from './from';\nimport { Join, OnQueryBuilder } from './join';\nimport { With } from './with';\nimport { Union } from './union';\nimport { Json } from './json';\nimport { Create } from './create';\nimport { Update } from './update';\nimport { Delete } from './delete';\nimport { Transaction } from './transaction';\nimport { For } from './for';\nimport { ColumnInfoMethods } from './columnInfo';\nimport { addWhere, Where, WhereArg, WhereResult } from './where';\nimport { Clear } from './clear';\nimport { Having } from './having';\nimport { Window } from './window';\nimport { QueryLog } from './log';\nimport { QueryCallbacks } from './callbacks';\nimport { QueryUpsertOrCreate } from './upsertOrCreate';\nimport { QueryGet } from './get';\nimport { MergeQueryMethods } from './merge';\nimport { RawMethods } from './raw';\nimport { CopyMethods } from './copy';\nimport { RawExpression, raw, applyMixins, EmptyObject, Sql } from 'orchid-core';\nimport { AsMethods } from './as';\nimport { QueryBase } from '../queryBase';\nimport { OrchidOrmInternalError } from '../errors';\n\n// argument of the window method\n// it is an object where keys are name of windows\n// and values can be a window options or a raw SQL\nexport type WindowArg<T extends Query> = Record<\n string,\n WindowArgDeclaration<T> | RawExpression\n>;\n\n// SQL window options to specify partitionBy and order of the window\nexport type WindowArgDeclaration<T extends Query = Query> = {\n partitionBy?: Expression<T> | Expression<T>[];\n order?: OrderArg<T>;\n};\n\n// add new windows to a query\ntype WindowResult<T extends Query, W extends WindowArg<T>> = T & {\n windows: Record<keyof W, true>;\n};\n\nexport type OrderArg<\n T extends Query,\n Key extends PropertyKey =\n | keyof T['selectable']\n | {\n [K in keyof T['result']]: T['result'][K]['dataType'] extends\n | 'array'\n | 'object'\n ? never\n : K;\n }[keyof T['result']],\n> =\n | Key\n | {\n [K in Key]?: SortDir;\n }\n | RawExpression;\n\nexport interface QueryMethods\n extends Omit<AsMethods, 'result'>,\n Aggregate,\n Select,\n From,\n Join,\n With,\n Union,\n Json,\n Create,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Omit<Where, 'result'>,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsertOrCreate,\n QueryGet,\n MergeQueryMethods,\n RawMethods,\n CopyMethods {}\n\nexport class QueryMethods {\n windows!: EmptyObject;\n baseQuery!: Query;\n\n all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n return this.clone()._all();\n }\n\n _all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n this.query.returnType = 'all';\n return this as unknown as SetQueryReturnsAll<T>;\n }\n\n take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n return this.clone()._take();\n }\n\n _take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n this.query.returnType = 'oneOrThrow';\n return this as unknown as SetQueryReturnsOne<T>;\n }\n\n takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n return this.clone()._takeOptional();\n }\n\n _takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n this.query.returnType = 'one';\n return this as unknown as SetQueryReturnsOneOptional<T>;\n }\n\n rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n return this.clone()._rows();\n }\n\n _rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n this.query.returnType = 'rows';\n return this as unknown as SetQueryReturnsRows<T>;\n }\n\n pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n return this.clone()._pluck(select);\n }\n\n _pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n this.query.returnType = 'pluck';\n (this.query as SelectQueryData).select = [select as SelectItem];\n addParserForSelectItem(this, this.query.as || this.table, 'pluck', select);\n return this as unknown as SetQueryReturnsPluck<T, S>;\n }\n\n exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n return this.clone()._exec();\n }\n\n _exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n this.query.returnType = 'void';\n return this as unknown as SetQueryReturnsVoid<T>;\n }\n\n toSql(this: Query, options?: ToSqlOptions): Sql {\n return toSql(this, options);\n }\n\n distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._distinct(...columns);\n }\n\n _distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'distinct', columns as string[]);\n }\n\n find<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._find(value);\n }\n\n _find<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOne<WhereResult<T>> {\n if (value === null || value === undefined) {\n throw new OrchidOrmInternalError(\n this,\n `${value} is not allowed in the find method`,\n );\n }\n\n return this._where({\n [this.singlePrimaryKey]: value,\n } as WhereArg<T>)._take();\n }\n\n findOptional<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findOptional(value);\n }\n\n _findOptional<T extends Query>(\n this: T,\n value: T['shape'][T['singlePrimaryKey']]['type'] | RawExpression,\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this._find(\n value,\n ).takeOptional() as unknown as SetQueryReturnsOneOptional<WhereResult<T>>;\n }\n\n findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._findBy(...args);\n }\n\n _findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return addWhere(this, args).take();\n }\n\n findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findByOptional(...args);\n }\n\n _findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return addWhere(this, args).takeOptional();\n }\n\n withSchema<T extends Query>(this: T, schema: string): T {\n return this.clone()._withSchema(schema);\n }\n\n _withSchema<T extends Query>(this: T, schema: string): T {\n this.query.schema = schema;\n return this;\n }\n\n group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._group(...columns);\n }\n\n _group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'group', columns);\n }\n\n window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return this.clone()._window(arg);\n }\n\n _window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return pushQueryValue(this, 'window', arg) as unknown as WindowResult<T, W>;\n }\n\n wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as?: As,\n ): SetQueryTableAlias<Q, As> {\n return this.clone()._wrap(query, as);\n }\n\n _wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as: As = 't' as As,\n ): SetQueryTableAlias<Q, As> {\n return (query._from(this) as Query)._as(\n as,\n ) as unknown as SetQueryTableAlias<Q, As>;\n }\n\n order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return this.clone()._order(...args);\n }\n\n _order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return pushQueryArray(this, 'order', args);\n }\n\n limit<T extends Query>(this: T, arg: number | undefined): T {\n return this.clone()._limit(arg);\n }\n\n _limit<T extends Query>(this: T, arg: number | undefined): T {\n (this.query as SelectQueryData).limit = arg;\n return this;\n }\n\n offset<T extends Query>(this: T, arg: number | undefined): T {\n return this.clone()._offset(arg);\n }\n\n _offset<T extends Query>(this: T, arg: number | undefined): T {\n (this.query as SelectQueryData).offset = arg;\n return this;\n }\n\n exists<T extends Query>(this: T): SetQueryReturnsValue<T, BooleanColumn> {\n return this.clone()._exists();\n }\n\n _exists<T extends Query>(this: T): SetQueryReturnsValue<T, BooleanColumn> {\n const q = this._getOptional(this.raw<Query, BooleanColumn>('true'));\n q.query.notFoundDefault = false;\n q.query.coalesceValue = raw('false');\n return q as unknown as SetQueryReturnsValue<T, BooleanColumn>;\n }\n\n truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n return this.clone()._truncate(options);\n }\n\n _truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n const q = this.query as TruncateQueryData;\n q.type = 'truncate';\n if (options?.restartIdentity) {\n q.restartIdentity = true;\n }\n if (options?.cascade) {\n q.cascade = true;\n }\n return this._exec();\n }\n}\n\napplyMixins(QueryMethods, [\n QueryBase,\n AsMethods,\n Aggregate,\n Select,\n From,\n Join,\n OnQueryBuilder,\n With,\n Union,\n Json,\n Create,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Where,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsertOrCreate,\n QueryGet,\n MergeQueryMethods,\n RawMethods,\n CopyMethods,\n]);\n","import { ColumnsParsers, Query, SelectableFromShape } from './query';\nimport {\n QueryMethods,\n handleResult,\n WhereQueryBuilder,\n OnQueryBuilder,\n logParamToLogObject,\n QueryLogOptions,\n} from './queryMethods';\nimport { QueryData, SelectQueryData, ToSqlOptions } from './sql';\nimport { AdapterOptions, Adapter } from './adapter';\nimport {\n ColumnsShape,\n getColumnTypes,\n ColumnType,\n getTableData,\n DefaultColumnTypes,\n columnTypes,\n} from './columns';\nimport { QueryError, QueryErrorName } from './errors';\nimport {\n DbBase,\n ColumnsShapeBase,\n DefaultSelectColumns,\n applyMixins,\n pushOrNewArray,\n ThenResult,\n ColumnShapeOutput,\n ColumnTypesBase,\n SinglePrimaryKey,\n snakeCaseKey,\n toSnakeCase,\n AdapterBase,\n Sql,\n} from 'orchid-core';\nimport { q } from './sql/common';\nimport { inspect } from 'util';\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nexport type NoPrimaryKeyOption = 'error' | 'warning' | 'ignore';\n\nexport type DbOptions<CT extends ColumnTypesBase> = (\n | { adapter: Adapter }\n | Omit<AdapterOptions, 'log'>\n) &\n QueryLogOptions & {\n // concrete column types or a callback for overriding standard column types\n // this types will be used in tables to define their columns\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n // when set to true, all columns will be translated to `snake_case` when querying database\n snakeCase?: boolean;\n // if `now()` for some reason doesn't suite your timestamps, provide a custom SQL for it\n nowSQL?: string;\n };\n\nexport type DbTableOptions = {\n schema?: string;\n // prepare all SQL queries before executing\n // true by default\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n snakeCase?: boolean;\n} & QueryLogOptions;\n\nexport interface Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n CT extends ColumnTypesBase = DefaultColumnTypes,\n> extends DbBase<Adapter, Table, Shape, CT>,\n QueryMethods {\n new (\n adapter: Adapter,\n queryBuilder: Db<Table, Shape, Relations, CT>,\n table?: Table,\n shape?: Shape,\n options?: DbTableOptions,\n ): this;\n queryBuilder: Db;\n whereQueryBuilder: Query['whereQueryBuilder'];\n onQueryBuilder: Query['onQueryBuilder'];\n primaryKeys: Query['primaryKeys'];\n query: QueryData;\n selectable: SelectableFromShape<Shape, Table>;\n returnType: Query['returnType'];\n then: ThenResult<\n Pick<ColumnShapeOutput<Shape>, DefaultSelectColumns<Shape>[number]>[]\n >;\n windows: Query['windows'];\n defaultSelectColumns: DefaultSelectColumns<Shape>;\n relations: Relations;\n relationsQueries: Record<string, Query>;\n withData: Query['withData'];\n error: new (\n message: string,\n length: number,\n name: QueryErrorName,\n ) => QueryError<this>;\n isSubQuery: false;\n meta: {\n defaults: Record<\n {\n [K in keyof Shape]: undefined extends Shape[K]['data']['default']\n ? never\n : K;\n }[keyof Shape],\n true\n >;\n };\n}\n\nexport const anyShape = {} as Record<string, ColumnType>;\n\nexport class Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n CT extends ColumnTypesBase = DefaultColumnTypes,\n> implements Query\n{\n whereQueryBuilder = WhereQueryBuilder;\n onQueryBuilder = OnQueryBuilder;\n\n constructor(\n public adapter: Adapter,\n public queryBuilder: Db,\n public table: Table = undefined as Table,\n public shape: Shape = anyShape as Shape,\n public columnTypes: CT,\n transactionStorage: AsyncLocalStorage<AdapterBase>,\n options: DbTableOptions,\n ) {\n const tableData = getTableData();\n this.internal = { ...tableData, transactionStorage };\n this.baseQuery = this as Query;\n\n const logger = options.logger || console;\n\n const parsers = {} as ColumnsParsers;\n let hasParsers = false;\n let modifyQuery: ((q: Query) => void)[] | undefined = undefined;\n let hasCustomName = false;\n const { snakeCase } = options;\n for (const key in shape) {\n const column = shape[key];\n if (column.parseFn) {\n hasParsers = true;\n parsers[key] = column.parseFn;\n }\n\n if (column.data.modifyQuery) {\n modifyQuery = pushOrNewArray(modifyQuery, column.data.modifyQuery);\n }\n\n if (column.data.name) {\n hasCustomName = true;\n } else if (snakeCase) {\n const snakeName = toSnakeCase(key);\n if (snakeName !== key) {\n hasCustomName = true;\n column.data.name = snakeName;\n }\n }\n\n if (typeof column.data.default === 'function') {\n const arr = this.internal.runtimeDefaultColumns;\n if (!arr) this.internal.runtimeDefaultColumns = [key];\n else arr.push(key);\n }\n }\n\n if (hasCustomName) {\n const list: string[] = [];\n for (const key in shape) {\n const column = shape[key];\n list.push(\n column.data.name ? `${q(column.data.name)} AS ${q(key)}` : q(key),\n );\n }\n this.internal.columnsForSelectAll = list;\n }\n\n this.query = {\n adapter,\n shape: shape as ColumnsShapeBase,\n handleResult,\n logger,\n log: logParamToLogObject(logger, options.log),\n autoPreparedStatements: options.autoPreparedStatements ?? false,\n parsers: hasParsers ? parsers : undefined,\n } as QueryData;\n\n if (options?.schema) {\n this.query.schema = options.schema;\n }\n\n this.primaryKeys = Object.keys(shape).filter(\n (key) => shape[key].data.isPrimaryKey,\n );\n const primaryKeysFromData = getTableData().primaryKey?.columns;\n if (primaryKeysFromData) this.primaryKeys.push(...primaryKeysFromData);\n\n if (this.primaryKeys.length === 1) {\n this.singlePrimaryKey = this\n .primaryKeys[0] as unknown as SinglePrimaryKey<Shape>;\n } else if (\n this.primaryKeys.length === 0 &&\n shape !== anyShape &&\n options.noPrimaryKey !== 'ignore'\n ) {\n const message = `Table ${table} has no primary key`;\n if (options.noPrimaryKey === 'error') throw new Error(message);\n else logger.warn(message);\n }\n\n const columns = Object.keys(\n shape,\n ) as unknown as (keyof ColumnShapeOutput<Shape>)[];\n const { toSql } = this;\n\n this.columns = columns as (keyof ColumnShapeOutput<Shape>)[];\n this.defaultSelectColumns = columns.filter(\n (column) => !shape[column as keyof typeof shape].data.isHidden,\n ) as DefaultSelectColumns<Shape>;\n\n const defaultSelect =\n this.defaultSelectColumns.length === columns.length\n ? undefined\n : this.defaultSelectColumns;\n\n this.toSql = defaultSelect\n ? function <T extends Query>(this: T, options?: ToSqlOptions): Sql {\n const q = this.clone();\n if (!(q.query as SelectQueryData).select) {\n (q.query as SelectQueryData).select = defaultSelect as string[];\n }\n return toSql.call(q, options);\n }\n : toSql;\n\n this.relations = {} as Relations;\n this.relationsQueries = {};\n\n modifyQuery?.forEach((cb) => cb(this));\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.error = class extends QueryError {\n constructor(message?: string) {\n super(self, message);\n }\n };\n }\n\n [inspect.custom]() {\n return `QueryObject<${this.table}>`;\n }\n}\n\napplyMixins(Db, [QueryMethods]);\nDb.prototype.constructor = Db;\n\nexport type DbResult<CT extends ColumnTypesBase> = Db<\n string,\n Record<string, never>,\n Query['relations'],\n ColumnTypesBase extends CT ? DefaultColumnTypes : CT\n> & {\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?:\n | ((t: ColumnTypesBase extends CT ? DefaultColumnTypes : CT) => Shape)\n | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape>;\n\n adapter: Adapter;\n close: Adapter['close'];\n};\n\nexport const createDb = <CT extends ColumnTypesBase>({\n log,\n logger,\n columnTypes: ctOrFn = columnTypes as unknown as CT,\n snakeCase,\n nowSQL,\n ...options\n}: DbOptions<CT>): DbResult<CT> => {\n const adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements: options.autoPreparedStatements ?? false,\n noPrimaryKey: options.noPrimaryKey ?? 'error',\n snakeCase,\n };\n\n const ct = typeof ctOrFn === 'function' ? ctOrFn(columnTypes) : ctOrFn;\n\n if (snakeCase) {\n (ct as { [snakeCaseKey]?: boolean })[snakeCaseKey] = true;\n }\n\n const transactionStorage = new AsyncLocalStorage<AdapterBase>();\n\n const qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n ct,\n transactionStorage,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n\n const db = Object.assign(\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?: ((t: CT) => Shape) | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape, Query['relations'], CT> => {\n return new Db<Table, Shape, Query['relations'], CT>(\n adapter,\n qb as unknown as Db,\n table as Table,\n typeof shape === 'function' ? getColumnTypes(ct, shape, nowSQL) : shape,\n ct,\n transactionStorage,\n { ...commonOptions, ...options },\n );\n },\n qb,\n { adapter, close: () => adapter.close() },\n );\n\n // Set all methods from prototype to the db instance (needed for transaction at least):\n Object.getOwnPropertyNames(Db.prototype).forEach((name) => {\n (db as unknown as Record<string, unknown>)[name] =\n Db.prototype[name as keyof typeof Db.prototype];\n });\n\n return db as unknown as DbResult<CT>;\n};\n","import { Query, QueryWithTable } from './query';\nimport { CreateMethodsNames, DeleteMethodsNames } from './queryMethods';\nimport { EmptyObject } from 'orchid-core';\nimport { QueryBase } from './queryBase';\n\nexport type BaseRelation = {\n type: string;\n key: string;\n table: QueryWithTable;\n query: QueryWithTable;\n joinQuery(fromQuery: QueryBase, toQuery: Query): Query;\n nestedCreateQuery: Query;\n primaryKey: string;\n options: {\n scope?(q: QueryWithTable): QueryWithTable;\n required?: boolean;\n };\n};\n\nexport interface BelongsToRelation extends BaseRelation {\n type: 'belongsTo';\n returns: 'one';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n };\n}\n\nexport interface HasOneRelation extends BaseRelation {\n type: 'hasOne';\n returns: 'one';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasManyRelation extends BaseRelation {\n type: 'hasMany';\n returns: 'many';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasAndBelongsToManyRelation extends BaseRelation {\n type: 'hasAndBelongsToMany';\n returns: 'many';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n associationPrimaryKey: string;\n associationForeignKey: string;\n joinTable: string;\n };\n}\n\nexport type Relation =\n | BelongsToRelation\n | HasOneRelation\n | HasManyRelation\n | HasAndBelongsToManyRelation;\n\nexport type RelationsBase = Record<never, Relation>;\n\nexport type relationQueryKey = typeof relationQueryKey;\nexport const relationQueryKey = Symbol('relationQuery');\n\nexport type isRequiredRelationKey = typeof isRequiredRelationKey;\nexport const isRequiredRelationKey = Symbol('isRequiredRelation');\n\nexport type RelationQueryData = {\n relationName: string;\n sourceQuery: Query;\n relationQuery: Query;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n};\n\nexport type RelationQueryBase = Query & {\n [relationQueryKey]: RelationQueryData;\n [isRequiredRelationKey]: boolean;\n};\n\ntype PrepareRelationQuery<\n T extends Query,\n RelationName extends PropertyKey,\n Required extends boolean,\n Populate extends string,\n> = Omit<T, 'meta'> & {\n meta: Omit<T['meta'], 'as'> & {\n as: RelationName extends string ? RelationName : never;\n defaults: Record<Populate, true>;\n };\n [isRequiredRelationKey]: Required;\n [relationQueryKey]: RelationQueryData;\n};\n\nexport type RelationQuery<\n Name extends PropertyKey = string,\n Params extends Record<string, unknown> = never,\n Populate extends string = never,\n T extends Query = Query,\n Required extends boolean = boolean,\n ChainedCreate extends boolean = false,\n ChainedDelete extends boolean = false,\n Q extends RelationQueryBase = (ChainedCreate extends true\n ? PrepareRelationQuery<T, Name, Required, Populate>\n : PrepareRelationQuery<T, Name, Required, Populate> & {\n [K in CreateMethodsNames]: never;\n }) &\n (ChainedDelete extends true\n ? EmptyObject\n : {\n [K in DeleteMethodsNames]: never;\n }),\n> = ((params: Params) => Q) &\n Q & {\n // INNER JOIN the current relation instead of the default OUTER behavior\n join<T extends Query>(this: T): T;\n };\n","import { Query } from './query';\n\nclass Rollback extends Error {}\n\nconst trxForTest: unique symbol = Symbol('trxForTest');\n\ntype TrxData = {\n promise?: Promise<void>;\n reject?(err: unknown): void;\n adapter: {\n query: unknown;\n arrays: unknown;\n transaction: unknown;\n };\n};\n\ntype Internal = {\n [trxForTest]?: TrxData[];\n};\n\ntype Arg = { $queryBuilder: Query } | Query;\n\nconst argToDb = (arg: Arg): Query =>\n '$queryBuilder' in arg ? arg.$queryBuilder : arg;\n\nexport const testTransaction = {\n start(arg: Arg) {\n const db = argToDb(arg);\n const { transactionStorage } = db.internal;\n const { getStore } = transactionStorage;\n const adapter = db.baseQuery.query as Record<string, unknown>;\n const data: TrxData = {\n adapter: {\n query: adapter.query,\n arrays: adapter.arrays,\n transaction: adapter.transaction,\n },\n };\n ((db.internal as unknown as Internal)[trxForTest] ??= []).push(data);\n\n return new Promise<void>((resolve) => {\n data.promise = db\n .transaction(() => {\n resolve();\n return new Promise<void>((_, rej) => {\n const trx = transactionStorage.getStore();\n db.internal.transactionStorage.getStore = () => trx;\n if (trx) {\n adapter.query = trx.query.bind(trx);\n adapter.arrays = trx.arrays.bind(trx);\n adapter.transaction = trx.transaction.bind(trx);\n }\n data.reject = rej;\n });\n })\n .catch((err) => {\n if (!(err instanceof Rollback)) {\n throw err;\n }\n })\n .finally(() => {\n db.internal.transactionStorage.getStore = getStore;\n });\n });\n },\n rollback(arg: Arg) {\n const db = argToDb(arg);\n const data = (db.internal as unknown as Internal)[trxForTest]?.pop();\n if (data) {\n data.reject?.(new Rollback());\n Object.assign(db.baseQuery.query.adapter, data.adapter);\n return data.promise;\n }\n return;\n },\n async close(arg: Arg) {\n const db = argToDb(arg);\n await this.rollback(db);\n if ((db.internal as unknown as Internal)[trxForTest]?.length === 0) {\n return db.query.adapter.close();\n }\n },\n};\n"],"names":["__spreadProps","__spreadValues","quoteValue","text","hasOptions","q","query","value","item","raw","_a","_b","quotedAs","name","types","__objRest","require","key","resolve","reject","adapter","handleResult","columnTypes","options"],"mappings":"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"}
|