update.d.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import type { WithCacheConfig } from "../../cache/core/types.js";
  2. import type { GetColumnData } from "../../column.js";
  3. import { entityKind } from "../../entity.js";
  4. import type { MySqlDialect } from "../dialect.js";
  5. import type { AnyMySqlQueryResultHKT, MySqlPreparedQueryConfig, MySqlQueryResultHKT, MySqlQueryResultKind, MySqlSession, PreparedQueryHKTBase, PreparedQueryKind } from "../session.js";
  6. import type { MySqlTable } from "../table.js";
  7. import { QueryPromise } from "../../query-promise.js";
  8. import type { Placeholder, Query, SQL, SQLWrapper } from "../../sql/sql.js";
  9. import type { Subquery } from "../../subquery.js";
  10. import { type UpdateSet, type ValueOrArray } from "../../utils.js";
  11. import type { MySqlColumn } from "../columns/common.js";
  12. import type { SelectedFieldsOrdered } from "./select.types.js";
  13. export interface MySqlUpdateConfig {
  14. where?: SQL | undefined;
  15. limit?: number | Placeholder;
  16. orderBy?: (MySqlColumn | SQL | SQL.Aliased)[];
  17. set: UpdateSet;
  18. table: MySqlTable;
  19. returning?: SelectedFieldsOrdered;
  20. withList?: Subquery[];
  21. }
  22. export type MySqlUpdateSetSource<TTable extends MySqlTable> = {
  23. [Key in keyof TTable['$inferInsert']]?: GetColumnData<TTable['_']['columns'][Key], 'query'> | SQL | undefined;
  24. } & {};
  25. export declare class MySqlUpdateBuilder<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase> {
  26. private table;
  27. private session;
  28. private dialect;
  29. private withList?;
  30. static readonly [entityKind]: string;
  31. readonly _: {
  32. readonly table: TTable;
  33. };
  34. constructor(table: TTable, session: MySqlSession, dialect: MySqlDialect, withList?: Subquery[] | undefined);
  35. set(values: MySqlUpdateSetSource<TTable>): MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT>;
  36. }
  37. export type MySqlUpdateWithout<T extends AnyMySqlUpdateBase, TDynamic extends boolean, K extends keyof T & string> = TDynamic extends true ? T : Omit<MySqlUpdateBase<T['_']['table'], T['_']['queryResult'], T['_']['preparedQueryHKT'], TDynamic, T['_']['excludedMethods'] | K>, T['_']['excludedMethods'] | K>;
  38. export type MySqlUpdatePrepare<T extends AnyMySqlUpdateBase> = PreparedQueryKind<T['_']['preparedQueryHKT'], MySqlPreparedQueryConfig & {
  39. execute: MySqlQueryResultKind<T['_']['queryResult'], never>;
  40. iterator: never;
  41. }, true>;
  42. export type MySqlUpdateDynamic<T extends AnyMySqlUpdateBase> = MySqlUpdate<T['_']['table'], T['_']['queryResult'], T['_']['preparedQueryHKT']>;
  43. export type MySqlUpdate<TTable extends MySqlTable = MySqlTable, TQueryResult extends MySqlQueryResultHKT = AnyMySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase> = MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT, true, never>;
  44. export type AnyMySqlUpdateBase = MySqlUpdateBase<any, any, any, any, any>;
  45. export interface MySqlUpdateBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>>, SQLWrapper {
  46. readonly _: {
  47. readonly table: TTable;
  48. readonly queryResult: TQueryResult;
  49. readonly preparedQueryHKT: TPreparedQueryHKT;
  50. readonly dynamic: TDynamic;
  51. readonly excludedMethods: TExcludedMethods;
  52. };
  53. }
  54. export declare class MySqlUpdateBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>> implements SQLWrapper {
  55. private session;
  56. private dialect;
  57. static readonly [entityKind]: string;
  58. private config;
  59. protected cacheConfig?: WithCacheConfig;
  60. constructor(table: TTable, set: UpdateSet, session: MySqlSession, dialect: MySqlDialect, withList?: Subquery[]);
  61. /**
  62. * Adds a 'where' clause to the query.
  63. *
  64. * Calling this method will update only those rows that fulfill a specified condition.
  65. *
  66. * See docs: {@link https://orm.drizzle.team/docs/update}
  67. *
  68. * @param where the 'where' clause.
  69. *
  70. * @example
  71. * You can use conditional operators and `sql function` to filter the rows to be updated.
  72. *
  73. * ```ts
  74. * // Update all cars with green color
  75. * db.update(cars).set({ color: 'red' })
  76. * .where(eq(cars.color, 'green'));
  77. * // or
  78. * db.update(cars).set({ color: 'red' })
  79. * .where(sql`${cars.color} = 'green'`)
  80. * ```
  81. *
  82. * You can logically combine conditional operators with `and()` and `or()` operators:
  83. *
  84. * ```ts
  85. * // Update all BMW cars with a green color
  86. * db.update(cars).set({ color: 'red' })
  87. * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));
  88. *
  89. * // Update all cars with the green or blue color
  90. * db.update(cars).set({ color: 'red' })
  91. * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));
  92. * ```
  93. */
  94. where(where: SQL | undefined): MySqlUpdateWithout<this, TDynamic, 'where'>;
  95. orderBy(builder: (updateTable: TTable) => ValueOrArray<MySqlColumn | SQL | SQL.Aliased>): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;
  96. orderBy(...columns: (MySqlColumn | SQL | SQL.Aliased)[]): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;
  97. limit(limit: number | Placeholder): MySqlUpdateWithout<this, TDynamic, 'limit'>;
  98. toSQL(): Query;
  99. prepare(): MySqlUpdatePrepare<this>;
  100. execute: ReturnType<this['prepare']>['execute'];
  101. private createIterator;
  102. iterator: ReturnType<this["prepare"]>["iterator"];
  103. $dynamic(): MySqlUpdateDynamic<this>;
  104. }