insert.d.cts 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { entityKind } from "../../entity.cjs";
  2. import type { GelDialect } from "../dialect.cjs";
  3. import type { IndexColumn } from "../indexes.cjs";
  4. import type { GelPreparedQuery, GelQueryResultHKT, GelQueryResultKind, GelSession, PreparedQueryConfig } from "../session.cjs";
  5. import type { GelTable, TableConfig } from "../table.cjs";
  6. import type { TypedQueryBuilder } from "../../query-builders/query-builder.cjs";
  7. import type { SelectResultFields } from "../../query-builders/select.types.cjs";
  8. import { QueryPromise } from "../../query-promise.cjs";
  9. import type { RunnableQuery } from "../../runnable-query.cjs";
  10. import type { Placeholder, Query, SQLWrapper } from "../../sql/sql.cjs";
  11. import { Param, SQL } from "../../sql/sql.cjs";
  12. import type { Subquery } from "../../subquery.cjs";
  13. import type { InferInsertModel } from "../../table.cjs";
  14. import type { AnyGelColumn } from "../columns/common.cjs";
  15. import { QueryBuilder } from "./query-builder.cjs";
  16. import type { SelectedFieldsFlat, SelectedFieldsOrdered } from "./select.types.cjs";
  17. import type { GelUpdateSetSource } from "./update.cjs";
  18. export interface GelInsertConfig<TTable extends GelTable = GelTable> {
  19. table: TTable;
  20. values: Record<string, Param | SQL>[] | GelInsertSelectQueryBuilder<TTable> | SQL;
  21. withList?: Subquery[];
  22. onConflict?: SQL;
  23. returning?: SelectedFieldsOrdered;
  24. select?: boolean;
  25. overridingSystemValue_?: boolean;
  26. }
  27. export type GelInsertValue<TTable extends GelTable<TableConfig>, OverrideT extends boolean = false> = {
  28. [Key in keyof InferInsertModel<TTable, {
  29. dbColumnNames: false;
  30. override: OverrideT;
  31. }>]: InferInsertModel<TTable, {
  32. dbColumnNames: false;
  33. override: OverrideT;
  34. }>[Key] | SQL | Placeholder;
  35. } & {};
  36. export type GelInsertSelectQueryBuilder<TTable extends GelTable> = TypedQueryBuilder<{
  37. [K in keyof TTable['$inferInsert']]: AnyGelColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K];
  38. }>;
  39. export declare class GelInsertBuilder<TTable extends GelTable, TQueryResult extends GelQueryResultHKT, OverrideT extends boolean = false> {
  40. private table;
  41. private session;
  42. private dialect;
  43. private withList?;
  44. private overridingSystemValue_?;
  45. static readonly [entityKind]: string;
  46. constructor(table: TTable, session: GelSession, dialect: GelDialect, withList?: Subquery[] | undefined, overridingSystemValue_?: boolean | undefined);
  47. private authToken?;
  48. overridingSystemValue(): Omit<GelInsertBuilder<TTable, TQueryResult, true>, 'overridingSystemValue'>;
  49. values(value: GelInsertValue<TTable, OverrideT>): GelInsertBase<TTable, TQueryResult>;
  50. values(values: GelInsertValue<TTable, OverrideT>[]): GelInsertBase<TTable, TQueryResult>;
  51. select(selectQuery: (qb: QueryBuilder) => GelInsertSelectQueryBuilder<TTable>): GelInsertBase<TTable, TQueryResult>;
  52. select(selectQuery: (qb: QueryBuilder) => SQL): GelInsertBase<TTable, TQueryResult>;
  53. select(selectQuery: SQL): GelInsertBase<TTable, TQueryResult>;
  54. select(selectQuery: GelInsertSelectQueryBuilder<TTable>): GelInsertBase<TTable, TQueryResult>;
  55. }
  56. export type GelInsertWithout<T extends AnyGelInsert, TDynamic extends boolean, K extends keyof T & string> = TDynamic extends true ? T : Omit<GelInsertBase<T['_']['table'], T['_']['queryResult'], T['_']['returning'], TDynamic, T['_']['excludedMethods'] | K>, T['_']['excludedMethods'] | K>;
  57. export type GelInsertReturning<T extends AnyGelInsert, TDynamic extends boolean, TSelectedFields extends SelectedFieldsFlat> = GelInsertBase<T['_']['table'], T['_']['queryResult'], SelectResultFields<TSelectedFields>, TDynamic, T['_']['excludedMethods']>;
  58. export type GelInsertReturningAll<T extends AnyGelInsert, TDynamic extends boolean> = GelInsertBase<T['_']['table'], T['_']['queryResult'], T['_']['table']['$inferSelect'], TDynamic, T['_']['excludedMethods']>;
  59. export interface GelInsertOnConflictDoUpdateConfig<T extends AnyGelInsert> {
  60. target: IndexColumn | IndexColumn[];
  61. /** @deprecated use either `targetWhere` or `setWhere` */
  62. where?: SQL;
  63. targetWhere?: SQL;
  64. setWhere?: SQL;
  65. set: GelUpdateSetSource<T['_']['table']>;
  66. }
  67. export type GelInsertPrepare<T extends AnyGelInsert> = GelPreparedQuery<PreparedQueryConfig & {
  68. execute: T['_']['returning'] extends undefined ? GelQueryResultKind<T['_']['queryResult'], never> : T['_']['returning'][];
  69. }>;
  70. export type GelInsertDynamic<T extends AnyGelInsert> = GelInsert<T['_']['table'], T['_']['queryResult'], T['_']['returning']>;
  71. export type AnyGelInsert = GelInsertBase<any, any, any, any, any>;
  72. export type GelInsert<TTable extends GelTable = GelTable, TQueryResult extends GelQueryResultHKT = GelQueryResultHKT, TReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined> = GelInsertBase<TTable, TQueryResult, TReturning, true, never>;
  73. export interface GelInsertBase<TTable extends GelTable, TQueryResult extends GelQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends QueryPromise<TReturning extends undefined ? GelQueryResultKind<TQueryResult, never> : TReturning[]>, RunnableQuery<TReturning extends undefined ? GelQueryResultKind<TQueryResult, never> : TReturning[], 'gel'>, SQLWrapper {
  74. readonly _: {
  75. readonly dialect: 'gel';
  76. readonly table: TTable;
  77. readonly queryResult: TQueryResult;
  78. readonly returning: TReturning;
  79. readonly dynamic: TDynamic;
  80. readonly excludedMethods: TExcludedMethods;
  81. readonly result: TReturning extends undefined ? GelQueryResultKind<TQueryResult, never> : TReturning[];
  82. };
  83. }
  84. export declare class GelInsertBase<TTable extends GelTable, TQueryResult extends GelQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends QueryPromise<TReturning extends undefined ? GelQueryResultKind<TQueryResult, never> : TReturning[]> implements RunnableQuery<TReturning extends undefined ? GelQueryResultKind<TQueryResult, never> : TReturning[], 'gel'>, SQLWrapper {
  85. private session;
  86. private dialect;
  87. static readonly [entityKind]: string;
  88. private config;
  89. constructor(table: TTable, values: GelInsertConfig['values'], session: GelSession, dialect: GelDialect, withList?: Subquery[], select?: boolean, overridingSystemValue_?: boolean);
  90. /**
  91. * Adds a `returning` clause to the query.
  92. *
  93. * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.
  94. *
  95. * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}
  96. *
  97. * @example
  98. * ```ts
  99. * // Insert one row and return all fields
  100. * const insertedCar: Car[] = await db.insert(cars)
  101. * .values({ brand: 'BMW' })
  102. * .returning();
  103. *
  104. * // Insert one row and return only the id
  105. * const insertedCarId: { id: number }[] = await db.insert(cars)
  106. * .values({ brand: 'BMW' })
  107. * .returning({ id: cars.id });
  108. * ```
  109. */
  110. returning(): GelInsertWithout<GelInsertReturningAll<this, TDynamic>, TDynamic, 'returning'>;
  111. returning<TSelectedFields extends SelectedFieldsFlat>(fields: TSelectedFields): GelInsertWithout<GelInsertReturning<this, TDynamic, TSelectedFields>, TDynamic, 'returning'>;
  112. toSQL(): Query;
  113. prepare(name: string): GelInsertPrepare<this>;
  114. execute: ReturnType<this['prepare']>['execute'];
  115. $dynamic(): GelInsertDynamic<this>;
  116. }