session.d.cts 4.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { type Cache } from "../cache/core/cache.cjs";
  2. import type { WithCacheConfig } from "../cache/core/types.cjs";
  3. import { entityKind } from "../entity.cjs";
  4. import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
  5. import { type Query, type SQL } from "../sql/sql.cjs";
  6. import type { Assume, Equal } from "../utils.cjs";
  7. import { MySqlDatabase } from "./db.cjs";
  8. import type { MySqlDialect } from "./dialect.cjs";
  9. import type { SelectedFieldsOrdered } from "./query-builders/select.types.cjs";
  10. export type Mode = 'default' | 'planetscale';
  11. export interface MySqlQueryResultHKT {
  12. readonly $brand: 'MySqlQueryResultHKT';
  13. readonly row: unknown;
  14. readonly type: unknown;
  15. }
  16. export interface AnyMySqlQueryResultHKT extends MySqlQueryResultHKT {
  17. readonly type: any;
  18. }
  19. export type MySqlQueryResultKind<TKind extends MySqlQueryResultHKT, TRow> = (TKind & {
  20. readonly row: TRow;
  21. })['type'];
  22. export interface MySqlPreparedQueryConfig {
  23. execute: unknown;
  24. iterator: unknown;
  25. }
  26. export interface MySqlPreparedQueryHKT {
  27. readonly $brand: 'MySqlPreparedQueryHKT';
  28. readonly config: unknown;
  29. readonly type: unknown;
  30. }
  31. export type PreparedQueryKind<TKind extends MySqlPreparedQueryHKT, TConfig extends MySqlPreparedQueryConfig, TAssume extends boolean = false> = Equal<TAssume, true> extends true ? Assume<(TKind & {
  32. readonly config: TConfig;
  33. })['type'], MySqlPreparedQuery<TConfig>> : (TKind & {
  34. readonly config: TConfig;
  35. })['type'];
  36. export declare abstract class MySqlPreparedQuery<T extends MySqlPreparedQueryConfig> {
  37. private cache;
  38. private queryMetadata;
  39. private cacheConfig?;
  40. static readonly [entityKind]: string;
  41. constructor(// cache instance
  42. cache: Cache | undefined, queryMetadata: {
  43. type: 'select' | 'update' | 'delete' | 'insert';
  44. tables: string[];
  45. } | undefined, cacheConfig?: WithCacheConfig | undefined);
  46. abstract execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
  47. abstract iterator(placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']>;
  48. }
  49. export interface MySqlTransactionConfig {
  50. withConsistentSnapshot?: boolean;
  51. accessMode?: 'read only' | 'read write';
  52. isolationLevel: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
  53. }
  54. export declare abstract class MySqlSession<TQueryResult extends MySqlQueryResultHKT = MySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase, TFullSchema extends Record<string, unknown> = Record<string, never>, TSchema extends TablesRelationalConfig = Record<string, never>> {
  55. protected dialect: MySqlDialect;
  56. static readonly [entityKind]: string;
  57. constructor(dialect: MySqlDialect);
  58. abstract prepareQuery<T extends MySqlPreparedQueryConfig, TPreparedQueryHKT extends MySqlPreparedQueryHKT>(query: Query, fields: SelectedFieldsOrdered | undefined, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record<string, unknown>[], returningIds?: SelectedFieldsOrdered, queryMetadata?: {
  59. type: 'select' | 'update' | 'delete' | 'insert';
  60. tables: string[];
  61. }, cacheConfig?: WithCacheConfig): PreparedQueryKind<TPreparedQueryHKT, T>;
  62. execute<T>(query: SQL): Promise<T>;
  63. abstract all<T = unknown>(query: SQL): Promise<T[]>;
  64. count(sql: SQL): Promise<number>;
  65. abstract transaction<T>(transaction: (tx: MySqlTransaction<TQueryResult, TPreparedQueryHKT, TFullSchema, TSchema>) => Promise<T>, config?: MySqlTransactionConfig): Promise<T>;
  66. protected getSetTransactionSQL(config: MySqlTransactionConfig): SQL | undefined;
  67. protected getStartTransactionSQL(config: MySqlTransactionConfig): SQL | undefined;
  68. }
  69. export declare abstract class MySqlTransaction<TQueryResult extends MySqlQueryResultHKT, TPreparedQueryHKT extends PreparedQueryHKTBase, TFullSchema extends Record<string, unknown> = Record<string, never>, TSchema extends TablesRelationalConfig = Record<string, never>> extends MySqlDatabase<TQueryResult, TPreparedQueryHKT, TFullSchema, TSchema> {
  70. protected schema: RelationalSchemaConfig<TSchema> | undefined;
  71. protected readonly nestedIndex: number;
  72. static readonly [entityKind]: string;
  73. constructor(dialect: MySqlDialect, session: MySqlSession, schema: RelationalSchemaConfig<TSchema> | undefined, nestedIndex: number, mode: Mode);
  74. rollback(): never;
  75. /** Nested transactions (aka savepoints) only work with InnoDB engine. */
  76. abstract transaction<T>(transaction: (tx: MySqlTransaction<TQueryResult, TPreparedQueryHKT, TFullSchema, TSchema>) => Promise<T>): Promise<T>;
  77. }
  78. export interface PreparedQueryHKTBase extends MySqlPreparedQueryHKT {
  79. type: MySqlPreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;
  80. }