{"version":3,"file":"delete.cjs","names":["QueryPromise","entityKind","Table","tracer","SelectionProxyHandler"],"sources":["../../../src/cockroach-core/query-builders/delete.ts"],"sourcesContent":["import type { CockroachDialect } from '~/cockroach-core/dialect.ts';\nimport type {\n\tCockroachPreparedQuery,\n\tCockroachQueryResultHKT,\n\tCockroachQueryResultKind,\n\tCockroachSession,\n\tPreparedQueryConfig,\n} from '~/cockroach-core/session.ts';\nimport type { CockroachTable } from '~/cockroach-core/table.ts';\nimport { entityKind } 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, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport { tracer } from '~/tracing.ts';\nimport { orderSelectedFields } from '~/utils.ts';\nimport type { CockroachColumn } from '../columns/common.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type CockroachDeleteWithout<\n\tT extends AnyCockroachDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tCockroachDeleteBase<\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 CockroachDelete<\n\tTTable extends CockroachTable = CockroachTable,\n\tTQueryResult extends CockroachQueryResultHKT = CockroachQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = CockroachDeleteBase<TTable, TQueryResult, TSelectedFields, TReturning, true, never>;\n\nexport interface CockroachDeleteConfig {\n\twhere?: SQL | undefined;\n\ttable: CockroachTable;\n\treturningFields?: SelectedFieldsFlat;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type CockroachDeleteReturningAll<\n\tT extends AnyCockroachDeleteBase,\n\tTDynamic extends boolean,\n> = CockroachDeleteWithout<\n\tCockroachDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['table']['_']['columns'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type CockroachDeleteReturning<\n\tT extends AnyCockroachDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = CockroachDeleteWithout<\n\tCockroachDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tTSelectedFields,\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type CockroachDeletePrepare<T extends AnyCockroachDeleteBase> = 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 CockroachDeleteDynamic<T extends AnyCockroachDeleteBase> = CockroachDelete<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['selectedFields'],\n\tT['_']['returning']\n>;\n\nexport type AnyCockroachDeleteBase = CockroachDeleteBase<any, any, any, any, any, any>;\n\nexport interface CockroachDeleteBase<\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 CockroachDeleteBase<\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\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 = 'CockroachDelete';\n\n\tprivate config: CockroachDeleteConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tprivate session: CockroachSession,\n\t\tprivate dialect: CockroachDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * await db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * await db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): CockroachDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\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 deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): CockroachDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): CockroachDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[Table.Symbol.Columns],\n\t): CockroachDeleteReturning<this, TDynamic, any> | CockroachDeleteReturningAll<this, TDynamic> {\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/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(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): CockroachDeletePrepare<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): CockroachDeletePrepare<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(): CockroachDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;AAuIA,IAAa,sBAAb,cAQUA,gCAWV;CACC,QAA0BC,0BAAsB;CAEhD,AAAQ;CAER,YACC,OACA,AAAQ,SACR,AAAQ,SACR,UACC;AACD,SAAO;EAJC;EACA;AAIR,OAAK,SAAS;GAAE;GAAO;GAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClC,MAAM,OAAyE;AAC9E,OAAK,OAAO,QAAQ;AACpB,SAAO;;CA2BR,UACC,SAA6B,KAAK,OAAO,MAAMC,iBAAM,OAAO,UACkC;AAC9F,OAAK,OAAO,kBAAkB;AAC9B,OAAK,OAAO,gDAAiD,OAAO;AACpE,SAAO;;;CAIR,SAAc;AACb,SAAO,KAAK,QAAQ,iBAAiB,KAAK,OAAO;;CAGlD,QAAe;AACd,SAAO,KAAK,QAAQ,WAAW,KAAK,QAAQ,CAAC;;;CAI9C,SAAS,MAAe,eAAe,OAAqC;AAC3E,SAAOC,oBAAO,gBAAgB,8BAA8B;GAC3D,MAAM,EAAE,WAAW,WAAW,KAAK;GACnC,MAAM,QAAQ,KAAK,QAAQ,WAAW,KAAK,QAAQ,CAAC;AAEpD,UAAO,KAAK,QAAQ,aAKnB,OACA,SAAS,WAAW,OACpB,QAAQ,cACR,SAAS,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,OAAU,GAAG,OACjE;IACA;;CAGH,QAAQ,MAA4C;AACnD,SAAO,KAAK,SAAS,MAAM,KAAK;;CAGjC,AAAS,WAAmD,sBAAsB;AACjF,SAAOA,oBAAO,gBAAgB,2BAA2B;AACxD,UAAO,KAAK,UAAU,CAAC,QAAQ,kBAAkB;IAChD;;;CAIH,oBAAiD;AAChD,SACC,KAAK,OAAO,kBACT,IAAI,MACL,KAAK,OAAO,iBACZ,IAAIC,2CAAsB;GACzB,oCAAoB,KAAK,OAAO,MAAM;GACtC,oBAAoB;GACpB,aAAa;GACb,CAAC,CACF,GACC;;;CAKL,6BAAmC;AAClC,SAAO;;CAGR,WAAyC;AACxC,SAAO"}