{"version":3,"file":"insert.cjs","names":["entityKind","QueryBuilder","SQL","Table","QueryPromise","sql","tracer","SelectionProxyHandler"],"sources":["../../../src/cockroach-core/query-builders/insert.ts"],"sourcesContent":["import type { CockroachDialect } from '~/cockroach-core/dialect.ts';\nimport type { IndexColumn } from '~/cockroach-core/indexes.ts';\nimport type {\n\tCockroachPreparedQuery,\n\tCockroachQueryResultHKT,\n\tCockroachQueryResultKind,\n\tCockroachSession,\n\tPreparedQueryConfig,\n} from '~/cockroach-core/session.ts';\nimport type { CockroachTable, TableConfig } from '~/cockroach-core/table.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { SQL, sql } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport type { InferInsertModel } from '~/table.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport { tracer } from '~/tracing.ts';\nimport { type DrizzleTypeError, mapUpdateSet, orderSelectedFields } from '~/utils.ts';\nimport type { AnyCockroachColumn, CockroachColumn } from '../columns/common.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { CockroachUpdateSetSource } from './update.ts';\n\nexport interface CockroachInsertConfig<TTable extends CockroachTable = CockroachTable> {\n\ttable: TTable;\n\tvalues: Record<string, unknown>[] | TypedQueryBuilder<CockroachInsertSelection<TTable>> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL;\n\treturningFields?: SelectedFieldsFlat;\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n\tcolumnList?: string[];\n}\n\nexport type CockroachInsertValue<\n\tTTable extends CockroachTable<TableConfig>,\n\tOverrideT extends boolean = false,\n\tTColumnsList extends string[] | 'all' = 'all',\n\tTModel extends Record<string, any> = InferInsertModel<TTable, { dbColumnNames: false; override: OverrideT }>,\n> =\n\t& {\n\t\t[K in keyof TModel as TColumnsList extends 'all' ? K : Extract<K, TColumnsList[number]>]:\n\t\t\t| TModel[K]\n\t\t\t| SQL\n\t\t\t| Placeholder;\n\t}\n\t& {};\n\nexport type CockroachInsertSelection<\n\tTTable extends CockroachTable<TableConfig>,\n\tTColumnsList extends string[] | 'all' = 'all',\n\tTModel extends Record<string, unknown> = InferInsertModel<TTable>,\n> =\n\t& {\n\t\t[K in keyof TModel as TColumnsList extends 'all' ? K : Extract<K, TColumnsList[number]>]:\n\t\t\t| AnyCockroachColumn\n\t\t\t| SQL\n\t\t\t| SQL.Aliased\n\t\t\t| TModel[K];\n\t}\n\t& {};\n\nexport type NoDuplicateColumns<\n\tT extends readonly unknown[],\n\tTSeen = never,\n> = T extends readonly [infer Head, ...infer Tail] ? [\n\t\tHead extends TSeen ? DrizzleTypeError<`Duplicate columns are not allowed in insert selection: \"${Head & string}\"`>\n\t\t\t: Head,\n\t\t...NoDuplicateColumns<Tail, TSeen | Head>,\n\t]\n\t: T;\n\nexport type ValidateInsertSelectionKey<\n\tTTable extends CockroachTable<TableConfig>,\n\tTSelection extends CockroachInsertSelection<any>,\n\tK extends keyof TSelection,\n> = K extends keyof InferInsertModel<TTable> ? TSelection[K]\n\t: K extends keyof InferInsertModel<TTable, { override: true }> ? DrizzleTypeError<\n\t\t\t`Column \"${\n\t\t\t\t& K\n\t\t\t\t& string}\" in table \"${TTable['_'][\n\t\t\t\t'name'\n\t\t\t]}\" is a generated column - manual value insertion restricted`\n\t\t>\n\t: DrizzleTypeError<`Column \"${K & string}\" does not exist in table \"${TTable['_']['name']}\"`>;\n\nexport type NoUnknownKeysInInsertSelection<\n\tTTable extends CockroachTable<TableConfig>,\n\tTSelection extends CockroachInsertSelection<any>,\n\tTColumnList extends string[] | 'all' = 'all',\n> = {\n\t[K in keyof TSelection]: TColumnList extends string[]\n\t\t? K extends TColumnList[number] ? ValidateInsertSelectionKey<TTable, TSelection, K>\n\t\t: DrizzleTypeError<`Column \"${K & string}\" is not included in the insert column selection`>\n\t\t: ValidateInsertSelectionKey<TTable, TSelection, K>;\n};\n\nexport class CockroachInsertBuilder<\n\tTTable extends CockroachTable,\n\tTQueryResult extends CockroachQueryResultHKT,\n\tTColumnList extends string[] | 'all' = 'all',\n\tOverrideT extends boolean = false,\n> {\n\tstatic readonly [entityKind]: string = 'CockroachInsertBuilder';\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: CockroachSession,\n\t\tprivate dialect: CockroachDialect,\n\t\tprivate withList?: Subquery[],\n\t\tprivate columnList?: string[],\n\t) {}\n\n\tvalues(value: CockroachInsertValue<TTable, OverrideT, TColumnList>): CockroachInsertBase<TTable, TQueryResult>;\n\tvalues(values: CockroachInsertValue<TTable, OverrideT, TColumnList>[]): CockroachInsertBase<TTable, TQueryResult>;\n\tvalues(\n\t\tvalues: CockroachInsertValue<TTable, OverrideT, TColumnList> | CockroachInsertValue<\n\t\t\tTTable,\n\t\t\tOverrideT,\n\t\t\tTColumnList\n\t\t>[],\n\t): CockroachInsertBase<TTable, TQueryResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\treturn new CockroachInsertBase(\n\t\t\tthis.table,\n\t\t\tvalues,\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t\tfalse,\n\t\t\tthis.columnList,\n\t\t) as any;\n\t}\n\n\tselect<TSelection extends CockroachInsertSelection<TTable, TColumnList>>(\n\t\tselectQuery: (\n\t\t\tqb: QueryBuilder,\n\t\t) => TypedQueryBuilder<NoUnknownKeysInInsertSelection<TTable, TSelection, TColumnList>>,\n\t): CockroachInsertBase<TTable, TQueryResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): CockroachInsertBase<TTable, TQueryResult>;\n\tselect(selectQuery: SQL): CockroachInsertBase<TTable, TQueryResult>;\n\tselect<TSelection extends CockroachInsertSelection<TTable, TColumnList>>(\n\t\tselectQuery: TypedQueryBuilder<NoUnknownKeysInInsertSelection<TTable, TSelection, TColumnList>>,\n\t): CockroachInsertBase<TTable, TQueryResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| TypedQueryBuilder<\n\t\t\t\tNoUnknownKeysInInsertSelection<TTable, CockroachInsertSelection<TTable, TColumnList>, TColumnList>\n\t\t\t>\n\t\t\t| ((qb: QueryBuilder) =>\n\t\t\t\t| TypedQueryBuilder<\n\t\t\t\t\tNoUnknownKeysInInsertSelection<TTable, CockroachInsertSelection<TTable, TColumnList>, TColumnList>\n\t\t\t\t>\n\t\t\t\t| SQL),\n\t): CockroachInsertBase<TTable, TQueryResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (!is(select, SQL)) {\n\t\t\tconst insertCols = Object.keys(this.table[Table.Symbol.Columns]);\n\t\t\tconst selected = Object.keys(select._.selectedFields);\n\n\t\t\tfor (const col of selected) {\n\t\t\t\tif (!insertCols.includes(col)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Insert select error: column \"${col}\" does not exist in table \"${this.table[Table.Symbol.Name]}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new CockroachInsertBase(\n\t\t\tthis.table,\n\t\t\tselect,\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t\ttrue,\n\t\t\tthis.columnList,\n\t\t);\n\t}\n}\n\nexport type CockroachInsertWithout<\n\tT extends AnyCockroachInsert,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tCockroachInsertBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['queryResult'],\n\t\t\tT['_']['selectedFields'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type CockroachInsertReturning<\n\tT extends AnyCockroachInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = CockroachInsertBase<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tTSelectedFields,\n\tSelectResultFields<TSelectedFields>,\n\tTDynamic,\n\tT['_']['excludedMethods']\n>;\n\nexport type CockroachInsertReturningAll<T extends AnyCockroachInsert, TDynamic extends boolean> = CockroachInsertBase<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['table']['_']['columns'],\n\tT['_']['table']['$inferSelect'],\n\tTDynamic,\n\tT['_']['excludedMethods']\n>;\n\nexport interface CockroachInsertOnConflictDoUpdateConfig<T extends AnyCockroachInsert> {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: CockroachUpdateSetSource<T['_']['table']>;\n}\n\nexport type CockroachInsertPrepare<T extends AnyCockroachInsert> = CockroachPreparedQuery<\n\tPreparedQueryConfig & {\n\t\texecute: T['_']['returning'] extends undefined ? CockroachQueryResultKind<T['_']['queryResult'], never>\n\t\t\t: T['_']['returning'][];\n\t}\n>;\n\nexport type CockroachInsertDynamic<T extends AnyCockroachInsert> = CockroachInsert<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['returning']\n>;\n\nexport type AnyCockroachInsert = CockroachInsertBase<any, any, any, any, any, any>;\n\nexport type CockroachInsert<\n\tTTable extends CockroachTable = CockroachTable,\n\tTQueryResult extends CockroachQueryResultHKT = CockroachQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = ColumnsSelection | undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = CockroachInsertBase<TTable, TQueryResult, TSelectedFields, TReturning, true, never>;\n\nexport interface CockroachInsertBase<\n\tTTable extends CockroachTable,\n\tTQueryResult extends CockroachQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tTypedQueryBuilder<\n\t\tTSelectedFields,\n\t\tTReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[]\n\t>,\n\tQueryPromise<TReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[]>,\n\tRunnableQuery<\n\t\tTReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[],\n\t\t'cockroach'\n\t>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\treadonly dialect: 'cockroach';\n\t\treadonly table: TTable;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[];\n\t};\n}\n\nexport class CockroachInsertBase<\n\tTTable extends CockroachTable,\n\tTQueryResult extends CockroachQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[]>\n\timplements\n\t\tTypedQueryBuilder<\n\t\t\tTSelectedFields,\n\t\t\tTReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[]\n\t\t>,\n\t\tRunnableQuery<\n\t\t\tTReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[],\n\t\t\t'cockroach'\n\t\t>,\n\t\tSQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'CockroachInsert';\n\n\tprivate config: CockroachInsertConfig<TTable>;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: CockroachInsertConfig['values'],\n\t\tprivate session: CockroachSession,\n\t\tprivate dialect: CockroachDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t\tcolumnList?: string[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select, columnList };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t *   .values({ brand: 'BMW' })\n\t *   .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t *   .values({ brand: 'BMW' })\n\t *   .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): CockroachInsertWithout<CockroachInsertReturningAll<this, TDynamic>, TDynamic, 'returning'>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): CockroachInsertWithout<CockroachInsertReturning<this, TDynamic, TSelectedFields>, TDynamic, 'returning'>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[Table.Symbol.Columns],\n\t): CockroachInsertWithout<AnyCockroachInsert, TDynamic, 'returning'> {\n\t\tthis.config.returningFields = fields;\n\t\tthis.config.returning = orderSelectedFields<CockroachColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(\n\t\tconfig: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {},\n\t): CockroachInsertWithout<this, TDynamic, 'onConflictDoNothing' | 'onConflictDoUpdate'> {\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict = sql`do nothing`;\n\t\t} else {\n\t\t\tlet targetColumn = '';\n\t\t\ttargetColumn = Array.isArray(config.target)\n\t\t\t\t? config.target.map((it) => this.dialect.escapeName(it.name)).join(',')\n\t\t\t\t: this.dialect.escapeName(config.target.name);\n\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\t\tthis.config.onConflict = sql`(${sql.raw(targetColumn)})${whereSql} do nothing`;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoUpdate({\n\t *     target: cars.id,\n\t *     set: { brand: 'Porsche' }\n\t *   });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoUpdate({\n\t *     target: cars.id,\n\t *     set: { brand: 'newBMW' },\n\t *     targetWhere: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t *   });\n\t * ```\n\t */\n\tonConflictDoUpdate(\n\t\tconfig: CockroachInsertOnConflictDoUpdateConfig<this>,\n\t): CockroachInsertWithout<this, TDynamic, 'onConflictDoNothing' | 'onConflictDoUpdate'> {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tlet targetColumn = '';\n\t\ttargetColumn = Array.isArray(config.target)\n\t\t\t? config.target.map((it) => this.dialect.escapeName(it.name)).join(',')\n\t\t\t: this.dialect.escapeName(config.target.name);\n\t\tthis.config.onConflict = sql`(${\n\t\t\tsql.raw(targetColumn)\n\t\t})${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`;\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this.dialect.sqlToQuery(this.getSQL());\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string, generateName = false): CockroachInsertPrepare<this> {\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\tconst { returning: fields } = this.config;\n\t\t\tconst query = this.dialect.sqlToQuery(this.getSQL());\n\n\t\t\treturn this.session.prepareQuery<\n\t\t\t\tPreparedQueryConfig & {\n\t\t\t\t\texecute: TReturning extends undefined ? CockroachQueryResultKind<TQueryResult, never> : TReturning[];\n\t\t\t\t}\n\t\t\t>(\n\t\t\t\tquery,\n\t\t\t\tfields ? 'arrays' : 'raw',\n\t\t\t\tname ?? generateName,\n\t\t\t\tfields ? this.dialect.mapperGenerators.rows(fields, undefined) : undefined,\n\t\t\t);\n\t\t});\n\t}\n\n\tprepare(name?: string): CockroachInsertPrepare<this> {\n\t\treturn this._prepare(name, true);\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(placeholderValues);\n\t\t});\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): this['_']['selectedFields'] {\n\t\treturn (\n\t\t\tthis.config.returningFields\n\t\t\t\t? new Proxy(\n\t\t\t\t\tthis.config.returningFields,\n\t\t\t\t\tnew SelectionProxyHandler({\n\t\t\t\t\t\talias: getTableName(this.config.table),\n\t\t\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\t\t\tsqlBehavior: 'error',\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t: undefined\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t/** @internal */\n\twithoutSelectionCastCodecs(): this {\n\t\treturn this;\n\t}\n\n\t$dynamic(): CockroachInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n"],"mappings":"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"}