{"version":3,"file":"index.mjs","sources":["../src/baseTable.ts","../src/relations/common/utils.ts","../src/relations/common/joinQueryChain.ts","../src/relations/belongsTo.ts","../src/relations/hasOne.ts","../src/relations/hasMany.ts","../src/relations/hasAndBelongsToMany.ts","../src/relations/relations.ts","../src/transaction.ts","../src/orm.ts","../src/repo.ts"],"sourcesContent":["import { Column, Query, QuerySchema } from 'pqb/internal';\nimport {\n  AfterHook,\n  ComputedColumnsFromOptions,\n  ComputedOptionsConfig,\n  ComputedOptionsFactory,\n  _createDbSqlMethod,\n  Db,\n  DbSqlMethod,\n  DbTableOptionScopes,\n  DefaultColumnTypes,\n  defaultSchemaConfig,\n  DefaultSchemaConfig,\n  getColumnTypes,\n  makeColumnTypes,\n  MapTableScopesOption,\n  parseTableData,\n  QueryAfterHook,\n  QueryBeforeActionHook,\n  QueryBeforeHook,\n  QueryData,\n  QueryHooks,\n  QueryScopes,\n  ShapeColumnPrimaryKeys,\n  ShapeUniqueColumns,\n  TableData,\n  TableDataFn,\n  TableDataItem,\n  TableDataItemsUniqueColumns,\n  TableDataItemsUniqueColumnTuples,\n  TableDataItemsUniqueConstraints,\n  UniqueConstraints,\n  applyMixins,\n  ColumnSchemaConfig,\n  emptyArray,\n  EmptyObject,\n  emptyObject,\n  getCallerFilePath,\n  getStackTrace,\n  IsQuery,\n  MaybeArray,\n  QueryOrExpression,\n  RecordUnknown,\n  ShallowSimplify,\n  snakeCaseKey,\n  toSnakeCase,\n  ColumnsShape,\n  _queryTake,\n  _queryTakeOptional,\n} from 'pqb/internal';\nimport {\n  RelationConfigSelf,\n  RelationTableToQuery,\n} from './relations/relations';\nimport { OrchidORM } from './orm';\nimport {\n  BelongsTo,\n  BelongsToInfo,\n  BelongsToOptions,\n  BelongsToQuery,\n} from './relations/belongsTo';\nimport {\n  HasOne,\n  HasOneInfo,\n  HasOneOptions,\n  HasOneQuery,\n} from './relations/hasOne';\nimport {\n  HasAndBelongsToMany,\n  HasAndBelongsToManyInfo,\n  HasAndBelongsToManyOptions,\n  HasAndBelongsToManyQuery,\n} from './relations/hasAndBelongsToMany';\nimport { HasMany, HasManyInfo, HasManyQuery } from './relations/hasMany';\n\n// type of table class itself\nexport interface TableClass<T extends ORMTableInput = ORMTableInput> {\n  new (): T;\n}\n\n// object with table classes, used on orchidORM() for setting tables\nexport interface TableClasses {\n  [K: string]: TableClass;\n}\n\nexport interface TableInfo {\n  definedAs: string;\n  db: OrchidORM;\n  getFilePath(): string;\n  name: string;\n}\n\nexport interface Table extends Query, TableInfo {}\n\n// convert table instance type to queryable interface\n// processes relations to a type that's understandable by `pqb`\n// add ORM table specific metadata like `definedAt`, `db`, `getFilePath`\nexport interface TableToDb<T extends ORMTableInput>\n  extends\n    TableInfo,\n    Db<\n      T['table'],\n      T['columns']['shape'],\n      keyof ShapeColumnPrimaryKeys<T['columns']['shape']> extends never\n        ? never\n        : ShapeColumnPrimaryKeys<T['columns']['shape']>,\n      | ShapeUniqueColumns<T['columns']['shape']>\n      | TableDataItemsUniqueColumns<\n          T['columns']['shape'],\n          T['columns']['data']\n        >,\n      TableDataItemsUniqueColumnTuples<\n        T['columns']['shape'],\n        T['columns']['data']\n      >,\n      | UniqueConstraints<T['columns']['shape']>\n      | TableDataItemsUniqueConstraints<T['columns']['data']>,\n      T['types'],\n      T['columns']['shape'] & ComputedColumnsFromOptions<T['computed']>,\n      MapTableScopesOption<T>,\n      ColumnsShape.DefaultSelectKeys<T['columns']['shape']>\n    > {\n  relations: T extends RelationConfigSelf\n    ? {\n        [K in keyof T['relations'] &\n          string]: T['relations'][K] extends BelongsTo\n          ? BelongsToInfo<\n              T,\n              K,\n              T['relations'][K]['options']['columns'][number] & string,\n              T['relations'][K]['options']['required'],\n              BelongsToQuery<RelationTableToQuery<T['relations'][K]>, K>\n            >\n          : T['relations'][K] extends HasOne\n            ? HasOneInfo<\n                T,\n                K,\n                T['relations'][K],\n                HasOneQuery<T, K, RelationTableToQuery<T['relations'][K]>>\n              >\n            : T['relations'][K] extends HasMany\n              ? HasManyInfo<\n                  T,\n                  K,\n                  T['relations'][K],\n                  HasManyQuery<T, K, RelationTableToQuery<T['relations'][K]>>\n                >\n              : T['relations'][K] extends HasAndBelongsToMany\n                ? HasAndBelongsToManyInfo<\n                    T,\n                    K,\n                    T['relations'][K]['options']['columns'][number] & string,\n                    HasAndBelongsToManyQuery<\n                      K,\n                      RelationTableToQuery<T['relations'][K]>\n                    >\n                  >\n                : never;\n      }\n    : EmptyObject;\n}\n\n// type of table instance created by a table class\n// is used only in `orchidORM` constructor to accept proper classes\nexport interface ORMTableInput {\n  // table name\n  table: string;\n  // columns shape and the record type\n  columns: {\n    shape: Column.Shape.QueryInit;\n    data: MaybeArray<TableDataItem>;\n  };\n  // database schema containing this table\n  schema?: QuerySchema;\n  // column types defined in base table to use in `setColumns`\n  types: unknown;\n  // suppress no primary key warning\n  noPrimaryKey?: boolean;\n  // path to file where the table is defined\n  filePath: string;\n  // default language for the full text search\n  language?: string;\n  /**\n   * collect computed columns returned by {@link BaseTable.setColumns}\n   */\n  computed?: ComputedOptionsFactory<never, never>;\n  // Available scopes for this table defined by user.\n  scopes?: RecordUnknown;\n  // enable soft delete, true for `deletedAt` column, string for column name\n  readonly softDelete?: true | string;\n  // database table comment\n  comment?: string;\n  // automatically create foreign keys for relations\n  autoForeignKeys?: TableData.References.BaseOptions | boolean;\n}\n\n// Object type that's allowed in `where` and similar methods of the table.\nexport type Queryable<T extends ORMTableInput> = ShallowSimplify<{\n  [K in keyof T['columns']['shape']]?: T['columns']['shape'][K]['queryType'];\n}>;\n\nexport type DefaultSelect<T extends ORMTableInput> = ShallowSimplify<\n  ColumnsShape.DefaultOutput<T['columns']['shape']>\n>;\n\n// Object type of table's record that's returned from database and is parsed.\nexport type Selectable<T extends ORMTableInput> = T['computed'] extends ((\n  t: never,\n) => infer R extends ComputedOptionsConfig)\n  ? ShallowSimplify<\n      ColumnsShape.Output<T['columns']['shape']> & {\n        [K in keyof R]: R[K] extends QueryOrExpression<unknown>\n          ? R[K]['result']['value']['outputType']\n          : R[K] extends () => {\n                result: { value: infer Value extends Column.Pick.QueryColumn };\n              }\n            ? Value['outputType']\n            : never;\n      }\n    >\n  : ShallowSimplify<ColumnsShape.Output<T['columns']['shape']>>;\n\n// Object type that conforms `create` method of the table.\nexport type Insertable<T extends ORMTableInput> = ShallowSimplify<\n  ColumnsShape.Input<T['columns']['shape']>\n>;\n\n// Object type that conforms `update` method of the table.\nexport type Updatable<T extends ORMTableInput> = ShallowSimplify<\n  ColumnsShape.InputPartial<T['columns']['shape']>\n>;\n\n// type of before hook function for the table\ntype BeforeHookMethod = (cb: QueryBeforeHook) => void;\ntype BeforeActionHookMethod = (cb: QueryBeforeActionHook) => void;\n\n// type of after hook function for the table\ntype AfterHookMethod = (cb: QueryAfterHook) => void;\n\n// type of after hook function that allows selecting columns for the table\ntype AfterSelectableHookMethod = <\n  Shape extends Column.QueryColumns,\n  S extends (keyof Shape)[],\n>(\n  this: { columns: { shape: Shape } },\n  select: S,\n  cb: AfterHook<S, Shape>,\n) => void;\n\nexport interface SetColumnsResult<\n  Shape extends Column.Shape.QueryInit,\n  Data extends MaybeArray<MaybeArray<TableDataItem>>,\n> {\n  shape: Shape;\n  data: Data extends unknown[] ? Data : [Data];\n}\n\nexport interface BaseTableInstance<ColumnTypes> {\n  table: string;\n  columns: { shape: Column.Shape.QueryInit; data: MaybeArray<TableDataItem> };\n  schema?: QuerySchema;\n  noPrimaryKey?: boolean;\n  snakeCase?: boolean;\n  types: ColumnTypes;\n  q: QueryData;\n  language?: string;\n  filePath: string;\n  result: Column.Shape.QueryInit;\n  clone<T extends IsQuery>(this: T): T;\n  getFilePath(): string;\n  setColumns<\n    Shape extends Column.Shape.QueryInit,\n    Data extends MaybeArray<TableDataItem>,\n  >(\n    fn: (t: ColumnTypes) => Shape,\n    tableData?: TableDataFn<Shape, Data>,\n  ): SetColumnsResult<Shape, Data>;\n\n  /**\n   * You can add a generated column in the migration (see [generated](/guide/migration-column-methods.html#generated-column)),\n   * such column will persist in the database, it can be indexed.\n   *\n   * Or you can add a computed column on the ORM level, without adding it to the database, in such a way:\n   *\n   * ```ts\n   * import { BaseTable, sql } from './baseTable';\n   *\n   * export class UserTable extends BaseTable {\n   *   readonly table = 'user';\n   *   columns = this.setColumns((t) => ({\n   *     id: t.identity().primaryKey(),\n   *     firstName: t.string(),\n   *     lastName: t.string(),\n   *   }));\n   *\n   *   computed = this.setComputed({\n   *     fullName: (q) =>\n   *       sql`${q.column('firstName')} || ' ' || ${q.column('lastName')}`.type(\n   *         (t) => t.string(),\n   *       ),\n   *   });\n   * }\n   * ```\n   *\n   * `setComputed` takes an object where keys are computed column names, and values are functions returning raw SQL.\n   *\n   * Use `q.column` as shown above to reference a table column, it will be prefixed with a correct table name even if the table is joined under a different name.\n   *\n   * Computed columns are not selected by default, only on demand:\n   *\n   * ```ts\n   * const a = await db.user.take();\n   * a.fullName; // not selected\n   *\n   * const b = await db.user.select('*', 'fullName');\n   * b.fullName; // selected\n   *\n   * // Table post belongs to user as an author.\n   * // it's possible to select joined computed column:\n   * const posts = await db.post\n   *   .join('author')\n   *   .select('post.title', 'author.fullName');\n   * ```\n   *\n   * SQL query can be generated dynamically based on the current request context.\n   *\n   * Imagine we are using [AsyncLocalStorage](https://nodejs.org/api/async_context.html#asynchronous-context-tracking)\n   * to keep track of current user's language.\n   *\n   * And we have articles translated to different languages, each article has `title_en`, `title_uk`, `title_be` and so on.\n   *\n   * We can define a computed `title` by passing a function into `sql` method:\n   *\n   * ```ts\n   * import { sql } from './baseTable';\n   *\n   * type Locale = 'en' | 'uk' | 'be';\n   * const asyncLanguageStorage = new AsyncLocalStorage<Locale>();\n   * const defaultLocale: Locale = 'en';\n   *\n   * export class ArticleTable extends BaseTable {\n   *   readonly table = 'article';\n   *   columns = this.setColumns((t) => ({\n   *     id: t.identity().primaryKey(),\n   *     title_en: t.text(),\n   *     title_uk: t.text().nullable(),\n   *     title_be: t.text().nullable(),\n   *   }));\n   *\n   *   computed = this.setComputed({\n   *     title: () =>\n   *       // `sql` accepts a callback to generate a new query on every run\n   *       sql(() => {\n   *         // get locale dynamically based on current storage value\n   *         const locale = asyncLanguageStorage.getStore() || defaultLocale;\n   *\n   *         // use COALESCE in case when localized title is NULL, use title_en\n   *         return sql`COALESCE(\n   *             ${q.column(`title_${locale}`)},\n   *             ${q.column(`title_${defaultLocale}`)}\n   *           )`;\n   *       }).type((t) => t.text()),\n   *   });\n   * }\n   * ```\n   *\n   * @param computed - object where keys are column names and values are functions returning raw SQL\n   */\n  setComputed<\n    Shape extends Column.Shape.QueryInit,\n    Computed extends ComputedOptionsFactory<ColumnTypes, Shape>,\n  >(\n    this: { columns: { shape: Shape } },\n    computed: Computed,\n  ): Computed;\n\n  /**\n   * See {@link ScopeMethods}\n   */\n  setScopes<\n    Table extends string,\n    Shape extends Column.Shape.QueryInit,\n    Keys extends string,\n  >(\n    this: { table: Table; columns: { shape: Shape } },\n    scopes: DbTableOptionScopes<Table, Shape, Keys>,\n  ): QueryScopes<Keys>;\n\n  belongsTo<\n    Columns extends Column.Shape.QueryInit,\n    Related extends ORMTableInput,\n    Options extends BelongsToOptions<Columns, Related>,\n  >(\n    this: { columns: { shape: Columns } },\n    fn: () => { new (): Related },\n    options: Options,\n  ): {\n    type: 'belongsTo';\n    related: Related;\n    options: Options;\n  };\n\n  hasOne<\n    Columns extends Column.Shape.QueryInit,\n    Related extends ORMTableInput,\n    Through extends string,\n    Source extends string,\n    Options extends HasOneOptions<Columns, Related, Through, Source>,\n  >(\n    this: { columns: { shape: Columns } },\n    fn: () => { new (): Related },\n    options: Options,\n  ): {\n    type: 'hasOne';\n    related: Related;\n    options: Options;\n  };\n\n  hasMany<\n    Columns extends Column.Shape.QueryInit,\n    Related extends ORMTableInput,\n    Through extends string,\n    Source extends string,\n    Options extends HasOneOptions<Columns, Related, Through, Source>,\n  >(\n    this: { columns: { shape: Columns } },\n    fn: () => { new (): Related },\n    options: Options,\n  ): {\n    type: 'hasMany';\n    related: Related;\n    options: Options;\n  };\n\n  hasAndBelongsToMany<\n    Columns extends Column.Shape.QueryInit,\n    Related extends ORMTableInput,\n    Options extends HasAndBelongsToManyOptions<Columns, Related>,\n  >(\n    this: { columns: { shape: Columns } },\n    fn: () => { new (): Related },\n    options: Options,\n  ): {\n    type: 'hasAndBelongsToMany';\n    related: Related;\n    options: Options;\n  };\n\n  beforeQuery: BeforeHookMethod;\n  afterQuery: AfterHookMethod;\n  beforeCreate: BeforeActionHookMethod;\n  afterCreate: AfterSelectableHookMethod;\n  afterCreateCommit: AfterSelectableHookMethod;\n  beforeUpdate: BeforeActionHookMethod;\n  afterUpdate: AfterSelectableHookMethod;\n  afterUpdateCommit: AfterSelectableHookMethod;\n  beforeSave: BeforeActionHookMethod;\n  afterSave: AfterSelectableHookMethod;\n  afterSaveCommit: AfterSelectableHookMethod;\n  beforeDelete: BeforeHookMethod;\n  afterDelete: AfterSelectableHookMethod;\n  afterDeleteCommit: AfterSelectableHookMethod;\n}\n\nexport interface BaseTableClass<\n  SchemaConfig extends ColumnSchemaConfig,\n  ColumnTypes,\n> {\n  nowSQL: string | undefined;\n  exportAs: string;\n  columnTypes: ColumnTypes;\n  getFilePath(): string;\n\n  sql: DbSqlMethod<ColumnTypes>;\n\n  new (): BaseTableInstance<ColumnTypes>;\n  instance(): BaseTableInstance<ColumnTypes>;\n\n  /**\n   * All column types for inserting.\n   */\n  inputSchema: SchemaConfig['inputSchema'];\n  /**\n   * All column types as returned from a database.\n   */\n  outputSchema: SchemaConfig['outputSchema'];\n  /**\n   * All column types for query methods such as `where`.\n   */\n  querySchema: SchemaConfig['querySchema'];\n  /**\n   * Primary key column(s) type for query methods such as `where`.\n   */\n  pkeySchema: SchemaConfig['pkeySchema'];\n  /**\n   * Column types for inserting, excluding primary keys.\n   * Equals to {@link inputSchema} without primary keys.\n   */\n  createSchema: SchemaConfig['createSchema'];\n  /**\n   * Column types for updating, excluding primary keys.\n   * Equals to partial {@link createSchema}.\n   */\n  updateSchema: SchemaConfig['updateSchema'];\n}\n\n// base table constructor\nexport function createBaseTable<\n  SchemaConfig extends ColumnSchemaConfig = DefaultSchemaConfig,\n  ColumnTypes = DefaultColumnTypes<SchemaConfig>,\n>({\n  schemaConfig = defaultSchemaConfig as unknown as SchemaConfig,\n  columnTypes: columnTypesArg,\n  snakeCase,\n  filePath: filePathArg,\n  nowSQL,\n  exportAs = 'BaseTable',\n  language,\n  autoForeignKeys,\n}: {\n  schemaConfig?: SchemaConfig;\n  // concrete column types or a callback for overriding standard column types\n  // this types will be used in tables to define their columns\n  columnTypes?:\n    | ColumnTypes\n    | ((t: DefaultColumnTypes<SchemaConfig>) => ColumnTypes);\n  // when set to true, all columns will be translated to `snake_case` when querying database\n  snakeCase?: boolean;\n  // if for some unknown reason you see error that file path for a table can't be guessed automatically,\n  // provide it manually via `filePath`\n  filePath?: string;\n  // if `now()` for some reason doesn't suite your timestamps, provide a custom SQL for it\n  nowSQL?: string;\n  // export name of the base table, by default it is BaseTable\n  exportAs?: string;\n  // default language for the full text search\n  language?: string;\n  // automatically create foreign keys for relations\n  autoForeignKeys?: boolean | TableData.References.BaseOptions;\n} = {}): BaseTableClass<SchemaConfig, ColumnTypes> {\n  const columnTypes = (\n    typeof columnTypesArg === 'function'\n      ? (\n          columnTypesArg as (t: DefaultColumnTypes<SchemaConfig>) => ColumnTypes\n        )(makeColumnTypes(schemaConfig))\n      : columnTypesArg || makeColumnTypes(schemaConfig)\n  ) as ColumnTypes;\n\n  // stack is needed only if filePath wasn't given\n  const filePathOrStack = filePathArg || getStackTrace();\n\n  let filePath: string | undefined;\n\n  const defaultColumns: {\n    shape: Column.Shape.QueryInit;\n    data: MaybeArray<TableDataItem>;\n  } = {\n    shape: emptyObject,\n    data: emptyArray,\n  };\n\n  const instances = new WeakMap<typeof base, InstanceType<typeof base>>();\n\n  const base = class BaseTable {\n    static nowSQL = nowSQL;\n    static exportAs = exportAs;\n    static columnTypes = columnTypes;\n\n    static sql = _createDbSqlMethod(columnTypes);\n\n    private static _inputSchema: unknown;\n    static inputSchema() {\n      this.instance();\n      // Nullish coalescing assignment (??=), for some reason, compiles to != null and miss undefined\n      return this._inputSchema === undefined\n        ? (this._inputSchema = schemaConfig.inputSchema.call(this as never))\n        : this._inputSchema;\n    }\n\n    private static _outputSchema: unknown;\n    static outputSchema() {\n      this.instance();\n      return this._outputSchema === undefined\n        ? (this._outputSchema = schemaConfig.outputSchema.call(this as never))\n        : this._outputSchema;\n    }\n\n    private static _querySchema: unknown;\n    static querySchema() {\n      this.instance();\n      return this._querySchema === undefined\n        ? (this._querySchema = schemaConfig.querySchema.call(this as never))\n        : this._querySchema;\n    }\n\n    private static _createSchema: unknown;\n    static createSchema() {\n      this.instance();\n      return this._createSchema === undefined\n        ? (this._createSchema = schemaConfig.createSchema.call(this as never))\n        : this._createSchema;\n    }\n\n    private static _updateSchema: unknown;\n    static updateSchema() {\n      this.instance();\n      return this._updateSchema === undefined\n        ? (this._updateSchema = schemaConfig.updateSchema.call(this as never))\n        : this._updateSchema;\n    }\n\n    private static _pkeySchema: unknown;\n    static pkeySchema() {\n      this.instance();\n      return this._pkeySchema === undefined\n        ? (this._pkeySchema = schemaConfig.pkeySchema.call(this as never))\n        : this._pkeySchema;\n    }\n\n    static getFilePath(): string {\n      if (filePath) return filePath;\n      if (typeof filePathOrStack === 'string') {\n        return (filePath = filePathOrStack);\n      }\n\n      filePath = getCallerFilePath(filePathOrStack);\n      if (filePath) return filePath;\n\n      throw new Error(\n        `Failed to determine file path of a base table. Please set the \\`filePath\\` option of \\`createBaseTable\\` manually.`,\n      );\n    }\n\n    static instance(): BaseTable {\n      let instance = instances.get(this);\n      if (!instance) {\n        instance = new this();\n        instances.set(this, instance);\n      }\n\n      return instance;\n    }\n\n    table!: string;\n    columns = defaultColumns;\n    schema?: QuerySchema;\n    noPrimaryKey?: boolean;\n    snakeCase = snakeCase;\n    types = columnTypes;\n    q: QueryData = {} as QueryData;\n    language = language;\n    declare filePath: string;\n    declare result: Column.Shape.QueryInit;\n    declare autoForeignKeys?: TableData.References.BaseOptions;\n\n    clone<T extends IsQuery>(this: T): T {\n      return this;\n    }\n\n    getFilePath() {\n      if (this.filePath) return this.filePath;\n      if (typeof filePathOrStack === 'string')\n        return (this.filePath = filePathOrStack);\n\n      const filePath = getCallerFilePath(filePathOrStack);\n      if (filePath) return (this.filePath = filePath);\n\n      throw new Error(\n        `Failed to determine file path for table ${this.constructor.name}. Please set \\`filePath\\` property manually`,\n      );\n    }\n\n    setColumns<\n      Shape extends Column.Shape.QueryInit,\n      Data extends MaybeArray<TableDataItem>,\n    >(\n      fn: (t: ColumnTypes) => Shape,\n      dataFn?: TableDataFn<Shape, Data>,\n    ): SetColumnsResult<Shape, Data> {\n      (columnTypes as { [snakeCaseKey]?: boolean })[snakeCaseKey] =\n        this.snakeCase;\n\n      const shape = getColumnTypes(columnTypes, fn, nowSQL, this.language);\n      const tableData = parseTableData(dataFn);\n\n      if (this.snakeCase) {\n        for (const key in shape) {\n          const column = shape[key];\n          if (column.data.name) continue;\n\n          const snakeName = toSnakeCase(key);\n          if (snakeName !== key) {\n            column.data.name = snakeName;\n          }\n        }\n      }\n\n      // save columns to prototype to make them available in static methods (inputSchema, outputSchema)\n      return (this.constructor.prototype.columns = {\n        shape,\n        data: tableData as never,\n      });\n    }\n\n    setComputed(computed: unknown) {\n      return computed;\n    }\n\n    setScopes(scopes: unknown) {\n      return scopes;\n    }\n\n    belongsTo(fn: () => unknown, options: unknown) {\n      return {\n        type: 'belongsTo' as const,\n        fn,\n        options,\n      };\n    }\n\n    hasOne(fn: () => unknown, options: unknown) {\n      return {\n        type: 'hasOne' as const,\n        fn,\n        options,\n      };\n    }\n\n    hasMany(fn: () => unknown, options: unknown) {\n      return {\n        type: 'hasMany' as const,\n        fn,\n        options,\n      };\n    }\n\n    hasAndBelongsToMany(fn: () => unknown, options: unknown) {\n      return {\n        type: 'hasAndBelongsToMany' as const,\n        fn,\n        options,\n      };\n    }\n  };\n\n  applyMixins(base, [QueryHooks]);\n\n  base.prototype.types = columnTypes as typeof base.prototype.types;\n  base.prototype.snakeCase = snakeCase;\n  base.prototype.autoForeignKeys =\n    autoForeignKeys === true ? {} : autoForeignKeys || undefined;\n\n  return base as unknown as BaseTableClass<SchemaConfig, ColumnTypes>;\n}\n","import {\n  _queryHookAfterCreate,\n  _queryHookAfterUpdate,\n  Column,\n  CreateCtx,\n  getQueryAs,\n  JoinQueryMethod,\n  pushQueryOnForOuter,\n  Query,\n  setQueryObjectValueImmutable,\n  UpdateData,\n  WhereArg,\n  emptyObject,\n  MaybeArray,\n  PickQueryRelations,\n  RecordUnknown,\n  RelationConfigBase,\n  PickQuerySelectableRelations,\n} from 'pqb/internal';\nimport { HasOneNestedInsert, HasOneNestedUpdate } from '../hasOne';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from '../hasMany';\nimport { BaseTableClass, ORMTableInput } from '../../baseTable';\nimport { RelationRefsOptions } from './options';\n\n// INNER JOIN the current relation instead of the default OUTER behavior\nexport interface RelJoin extends JoinQueryMethod {\n  <T extends Query>(this: T): T;\n}\n\nexport interface HasRelJoin {\n  join: RelJoin;\n}\n\nexport interface NestedInsertOneItem {\n  create?: NestedInsertOneItemCreate;\n  connect?: NestedInsertOneItemConnect;\n  connectOrCreate?: NestedInsertOneItemConnectOrCreate;\n}\n\nexport type NestedInsertOneItemCreate = RecordUnknown;\nexport type NestedInsertOneItemConnect = RecordUnknown;\n\nexport interface NestedInsertOneItemConnectOrCreate {\n  where: WhereArg<PickQuerySelectableRelations>;\n  create: RecordUnknown;\n}\n\nexport interface NestedInsertManyItems {\n  create?: NestedInsertManyCreate;\n  connect?: NestedInsertManyConnect;\n  connectOrCreate?: NestedInsertManyConnectOrCreate;\n}\n\nexport type NestedInsertManyCreate = RecordUnknown[];\n\nexport type NestedInsertManyConnect = WhereArg<PickQuerySelectableRelations>[];\n\nexport type NestedInsertManyConnectOrCreate =\n  NestedInsertOneItemConnectOrCreate[];\n\nexport type NestedInsertItem = NestedInsertOneItem | NestedInsertManyItems;\n\nexport interface NestedUpdateOneItem {\n  add?: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n  disconnect?: boolean;\n  set?: WhereArg<PickQuerySelectableRelations>;\n  delete?: boolean;\n  update?: UpdateData<Query>;\n  upsert?: {\n    update: UpdateData<Query>;\n    create: RecordUnknown | (() => RecordUnknown);\n  };\n  create: RecordUnknown;\n}\n\nexport interface NestedUpdateManyItems {\n  add?: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n  disconnect?: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n  set?: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n  delete?: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n  update?: {\n    where: MaybeArray<WhereArg<PickQuerySelectableRelations>>;\n    data: UpdateData<Query>;\n  };\n  create: RecordUnknown[];\n}\n\nexport type NestedUpdateItem = NestedUpdateOneItem | NestedUpdateManyItems;\n\nexport const getThroughRelation = (\n  table: Query,\n  through: string,\n): RelationConfigBase => {\n  return table.relations[through];\n};\n\nexport const getSourceRelation = (\n  throughRelation: RelationConfigBase,\n  source: string,\n): RelationConfigBase => {\n  return (throughRelation.query as unknown as PickQueryRelations).relations[\n    source\n  ];\n};\n\nexport const hasRelationHandleCreate = (\n  q: Query,\n  ctx: CreateCtx,\n  items: RecordUnknown[],\n  rowIndexes: number[],\n  key: string,\n  primaryKeys: string[],\n  nestedInsert: HasOneNestedInsert | HasManyNestedInsert,\n) => {\n  q.q.wrapInTransaction = true;\n\n  items.forEach((item, i) => {\n    const value = item[key] as NestedInsertItem;\n    if (\n      (!value.create ||\n        (Array.isArray(value.create) && value.create.length === 0)) &&\n      (!value.connect ||\n        (Array.isArray(value.connect) && value.connect.length === 0)) &&\n      (!value.connectOrCreate ||\n        (Array.isArray(value.connectOrCreate) &&\n          value.connectOrCreate.length === 0))\n    )\n      return;\n\n    const store = ctx as unknown as {\n      hasRelation?: Record<string, [number, NestedInsertItem][]>;\n    };\n\n    if (!store.hasRelation) store.hasRelation = {};\n\n    const values = [rowIndexes[i], value] as [number, NestedInsertItem];\n\n    if (store.hasRelation[key]) {\n      store.hasRelation[key].push(values);\n      return;\n    }\n\n    const relationData = [values];\n    store.hasRelation[key] = relationData;\n\n    _queryHookAfterCreate(q, primaryKeys, (rows, q) =>\n      (nestedInsert as HasOneNestedInsert)(\n        q,\n        relationData.map(([rowIndex, data]) => [\n          rows[rowIndex],\n          data as NestedInsertOneItem,\n        ]),\n      ),\n    );\n  });\n};\n\nexport const hasRelationHandleUpdate = (\n  q: Query,\n  set: RecordUnknown,\n  key: string,\n  primaryKeys: string[],\n  nestedUpdate: HasOneNestedUpdate | HasManyNestedUpdate,\n) => {\n  const value = set[key] as NestedUpdateItem;\n\n  if (\n    !value.set &&\n    !('upsert' in value) &&\n    (!value.add || (Array.isArray(value.add) && value.add.length === 0)) &&\n    (!value.disconnect ||\n      (Array.isArray(value.disconnect) && value.disconnect.length === 0)) &&\n    (!value.delete ||\n      (Array.isArray(value.delete) && value.delete.length === 0)) &&\n    (!value.update ||\n      (Array.isArray(value.update.where) && value.update.where.length === 0)) &&\n    (!value.create ||\n      (Array.isArray(value.create) && value.create.length === 0))\n  )\n    return;\n\n  q.q.wrapInTransaction = true;\n\n  _queryHookAfterUpdate(q, primaryKeys, (rows, q) => {\n    return (nestedUpdate as HasOneNestedUpdate)(\n      q,\n      rows,\n      value as NestedUpdateOneItem,\n    );\n  });\n};\n\nexport const _selectIfNotSelected = (q: Query, columns: string[]) => {\n  const select = q.q.select || [];\n  if (!select.includes('*')) {\n    for (const column of columns) {\n      if (!select.includes(column)) {\n        select.push(column);\n      }\n    }\n    q.q.select = select;\n  }\n};\n\nexport function joinHasThrough(\n  q: Query,\n  baseQuery: Query,\n  joiningQuery: Query,\n  throughRelation: RelationConfigBase,\n  sourceRelation: RelationConfigBase,\n): Query {\n  return q.whereExists(\n    throughRelation.joinQuery(\n      throughRelation.query as never,\n      baseQuery as never,\n    ) as never,\n    (() => {\n      const as = getQueryAs(joiningQuery);\n      return sourceRelation.joinQuery(\n        (sourceRelation.query as Query).as(as),\n        throughRelation.query as never,\n      );\n    }) as never,\n  );\n}\n\nexport function joinHasRelation(\n  baseQuery: Query,\n  joiningQuery: Query,\n  primaryKeys: string[],\n  foreignKeys: string[],\n  len: number,\n) {\n  const baseAs = getQueryAs(baseQuery);\n\n  const q = joiningQuery.clone();\n  setQueryObjectValueImmutable(q, 'joinedShapes', baseAs, baseQuery.q.shape);\n\n  for (let i = 0; i < len; i++) {\n    pushQueryOnForOuter(\n      q,\n      baseQuery,\n      joiningQuery,\n      foreignKeys[i],\n      `${baseAs}.${primaryKeys[i]}`,\n    );\n  }\n\n  return q;\n}\n\nexport const addAutoForeignKey = (\n  tableConfig: ORMTableInput,\n  from: Query,\n  to: Query,\n  primaryKeys: string[],\n  foreignKeys: string[],\n  options: RelationRefsOptions<PropertyKey>,\n  // non-snake-cased\n  originalForeignKeys?: string[],\n) => {\n  const toTable = to.table as string;\n\n  let fkeyOptions =\n    options.foreignKey !== undefined\n      ? options.foreignKey\n      : tableConfig.autoForeignKeys;\n  if (!fkeyOptions) return;\n\n  if (fkeyOptions === true) {\n    fkeyOptions = tableConfig.autoForeignKeys || emptyObject;\n  }\n\n  if (foreignKeys.length === 1) {\n    const column = from.shape[foreignKeys[0]] as Column;\n    if (column.data.foreignKeys) {\n      const pkey = primaryKeys[0];\n\n      for (const fkey of column.data.foreignKeys) {\n        let fkeyTable: string;\n        let fkeyColumn = fkey.foreignColumns[0];\n        if (typeof fkey.fnOrTable === 'string') {\n          fkeyTable = fkey.fnOrTable;\n          fkeyColumn = getColumnKeyFromDbName(to, fkeyColumn);\n        } else {\n          fkeyTable = (fkey.fnOrTable() as unknown as BaseTableClass<any, any>) // eslint-disable-line @typescript-eslint/no-explicit-any\n            .instance().table;\n        }\n\n        if (toTable === fkeyTable && pkey === fkeyColumn) return;\n      }\n    }\n  }\n\n  const { constraints } = from.internal.tableData;\n  if (constraints) {\n    const sortedPkeys = [...primaryKeys].sort();\n    const sortedFkeys = [...foreignKeys].sort();\n\n    for (const { references: refs } of constraints) {\n      if (!refs) continue;\n\n      if (\n        refs.columns.length === sortedFkeys.length &&\n        refs.columns.every((column, i) => column === sortedFkeys[i]) &&\n        refs.foreignColumns.length === sortedPkeys.length &&\n        (typeof refs.fnOrTable === 'string'\n          ? refs.fnOrTable === toTable &&\n            refs.foreignColumns.every(\n              (column, i) =>\n                getColumnKeyFromDbName(to, column) === sortedPkeys[i],\n            )\n          : (refs.fnOrTable as unknown as () => BaseTableClass<any, any>)() // eslint-disable-line @typescript-eslint/no-explicit-any\n              .instance().table === toTable &&\n            refs.foreignColumns.every((column, i) => column === sortedPkeys[i]))\n      )\n        return;\n    }\n  }\n\n  (from.internal.tableData.constraints ??= []).push({\n    references: {\n      columns: originalForeignKeys || foreignKeys,\n      fnOrTable: toTable,\n      foreignColumns: primaryKeys,\n      options: fkeyOptions,\n    },\n    dropMode: fkeyOptions.dropMode,\n  });\n};\n\nconst getColumnKeyFromDbName = (query: Query, name: string) => {\n  for (const k in query.shape) {\n    if ((query.shape[k] as Column).data.name === name) {\n      return k;\n    }\n  }\n  return name;\n};\n\nexport const selectCteColumnsSql = (cteAs: string, columns: string[]) =>\n  `(SELECT ${columns\n    .map((c) => `\"${cteAs}\".\"${c}\"`)\n    .join(', ')} FROM \"${cteAs}\")`;\n\nexport const selectCteColumnSql = (cteAs: string, column: string) =>\n  `(SELECT \"${cteAs}\".\"${column}\" FROM \"${cteAs}\")`;\n\nexport const selectCteColumnFromManySql = (\n  cteAs: string,\n  column: string,\n  rowIndex: number,\n  count: number,\n) => {\n  let sql = `(SELECT \"${cteAs}\".\"${column}\" FROM \"${cteAs}\"`;\n  if (count > 1) {\n    sql += ` LIMIT 1`;\n    if (rowIndex) sql += ` OFFSET ${rowIndex}`;\n  }\n  return sql + ')';\n};\n","import {\n  cloneQueryBaseUnscoped,\n  DynamicRawSQL,\n  getQueryAs,\n  getShapeFromSelect,\n  Query,\n  RawSql,\n  HookSelectValue,\n  isExpression,\n  RelationJoinQuery,\n  Column,\n} from 'pqb/internal';\n\nexport const joinQueryChainHOF =\n  (\n    relPKeys: string[],\n    reverseJoin: RelationJoinQuery,\n    joinQuery: RelationJoinQuery,\n  ): RelationJoinQuery =>\n  (joiningQuery, baseQuery) => {\n    const jq = joiningQuery as Query;\n    const chain = jq.q.relChain;\n    if (!chain || chain.length === 1) {\n      return joinQuery(jq, baseQuery);\n    }\n\n    const last = chain[chain.length - 1];\n    const prev = chain[chain.length - 2];\n    const query = prev.rel.joinQuery(last.query as never, baseQuery) as Query;\n\n    let useWhereExist = true;\n\n    // It does not make sense to return a single value not from the target table,\n    // so in this case skip guessing by order and select contains.\n    if (jq.q.returnType !== 'value' && jq.q.returnType !== 'valueOrThrow') {\n      let tablePrefix: string | undefined;\n      if (jq.q.order) {\n        const prefix = (tablePrefix = getQueryAs(jq) + '.');\n        useWhereExist = jq.q.order.every((o) => {\n          if (typeof o === 'string') {\n            return isOwnColumn(prefix, o);\n          } else if (isExpression(o)) {\n            return false;\n          } else {\n            for (const key in o) {\n              if (!isOwnColumn(prefix, key)) {\n                return false;\n              }\n            }\n            return true;\n          }\n        });\n      }\n\n      if (useWhereExist && jq.q.select) {\n        const prefix = tablePrefix || getQueryAs(jq) + '.';\n        useWhereExist = jq.q.select.every((s) => {\n          if (typeof s === 'string') {\n            return isOwnColumn(prefix, s);\n          } else if (isExpression(s)) {\n            return false;\n          } else if (!s) {\n            return false;\n          } else {\n            for (const key in s.selectAs) {\n              const value = s.selectAs[key];\n              if (typeof value !== 'string' || !isOwnColumn(prefix, value)) {\n                return false;\n              }\n            }\n            return true;\n          }\n        });\n      }\n    }\n\n    if (useWhereExist) {\n      return jq.where({\n        EXISTS: { q: reverseJoin(query, jq) },\n      });\n    }\n\n    const result = jq.join(\n      { _internalJoin: reverseJoin(query, jq) } as never,\n      undefined,\n    );\n\n    if (!query.q.chainMultiple) {\n      return result;\n    }\n\n    const item = selectRowNumber(result, relPKeys);\n    combineOrdering(result, query);\n    if (!result.q.select) result.q.select = ['*'];\n    return wrapQuery(jq, result, item);\n  };\n\nconst isOwnColumn = (prefix: string, column: string) =>\n  !column.includes('.') || column.startsWith(prefix);\n\nconst selectRowNumber = (\n  result: Query,\n  relPKeys: string[],\n): HookSelectValue => {\n  const hookSelect = (result.q.hookSelect = new Map(\n    result.q.hookSelect && [...result.q.hookSelect],\n  ));\n  const as = `\"${getQueryAs(result)}\"`;\n  const partitionColumns = relPKeys.map(\n    (key) =>\n      `${as}.\"${\n        (result.shape as Column.Shape.QueryInit)[key]?.data.name || key\n      }\"`,\n  );\n  const item = {\n    select: {\n      sql: `row_number() OVER (PARTITION BY ${partitionColumns.join(', ')})`,\n    },\n  };\n\n  hookSelect.set('r', item);\n\n  return item;\n};\n\nconst combineOrdering = (result: Query, joined: Query) => {\n  const { order } = joined.q;\n  if (order) {\n    const as = getQueryAs(joined);\n\n    const add = order.map((o) =>\n      typeof o === 'string'\n        ? `${as}.${o}`\n        : isExpression(o)\n          ? o\n          : Object.fromEntries(\n              Object.entries(o).map(([key, value]) => [`${as}.${key}`, value]),\n            ),\n    );\n\n    const arr = result.q.order;\n    result.q.order = arr ? [...add, ...arr] : add;\n  }\n};\n\nconst wrapQuery = (\n  joiningQuery: Query,\n  result: Query,\n  item: HookSelectValue,\n) => {\n  const baseOuterQuery = cloneQueryBaseUnscoped(joiningQuery);\n  const outer = baseOuterQuery.clone();\n\n  outer.q.and = [new DynamicRawSQL(() => new RawSql(`${item.as || 'r'} = 1`))];\n  outer.q.useFromLimitOffset = true;\n  outer.shape = getShapeFromSelect(result, true);\n  outer.q.select = Object.keys(outer.shape);\n  outer.q.returnType = result.q.returnType;\n\n  result.q.returnsOne = true;\n  return result.wrap(outer);\n};\n","import { ORMTableInput } from '../baseTable';\nimport {\n  _queryCreate,\n  _queryDefaults,\n  _queryDelete,\n  _queryFindBy,\n  _queryUpdate,\n  _queryWhere,\n  CreateCtx,\n  CreateData,\n  CreateMethodsNames,\n  DeleteMethodsNames,\n  getQueryAs,\n  isQueryReturnsAll,\n  pushQueryOnForOuter,\n  Query,\n  SelectableFromShape,\n  setQueryObjectValueImmutable,\n  UpdateData,\n  VirtualColumn,\n  WhereArg,\n  TableData,\n  defaultSchemaConfig,\n  ColumnSchemaConfig,\n  emptyArray,\n  EmptyObject,\n  getPrimaryKeys,\n  RecordUnknown,\n  RelationConfigBase,\n  RelationJoinQuery,\n  ColumnsShape,\n  Column,\n  getFreeAlias,\n  RawSql,\n  _orCreate,\n  QueryHasWhere,\n  QueryManyTake,\n  QueryManyTakeOptional,\n  _appendQuery,\n  _queryWhereIn,\n  _queryUpsert,\n  UpsertData,\n  UpsertThis,\n  _querySelect,\n  _prependWith,\n  noop,\n  _queryInsertMany,\n  _hookSelectColumns,\n} from 'pqb/internal';\nimport {\n  RelationConfigSelf,\n  RelationData,\n  RelationThunkBase,\n  RelationToOneDataForCreateSameQuery,\n} from './relations';\nimport {\n  addAutoForeignKey,\n  HasRelJoin,\n  NestedInsertOneItemCreate,\n  NestedUpdateOneItem,\n  selectCteColumnSql,\n  selectCteColumnsSql,\n  selectCteColumnFromManySql,\n} from './common/utils';\nimport { joinQueryChainHOF } from './common/joinQueryChain';\n\nexport interface BelongsTo extends RelationThunkBase {\n  type: 'belongsTo';\n  options: BelongsToOptions;\n}\n\nexport interface BelongsToOptions<\n  Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit,\n  Related extends ORMTableInput = ORMTableInput,\n> {\n  required?: boolean;\n  columns: (keyof Columns)[];\n  references: (keyof Related['columns']['shape'])[];\n  foreignKey?: boolean | TableData.References.Options;\n  on?: ColumnsShape.InputPartial<Related['columns']['shape']>;\n}\n\nexport type BelongsToParams<T extends RelationConfigSelf, FK extends string> = {\n  [Name in FK]: T['columns']['shape'][Name]['type'];\n};\n\nexport type BelongsToQuery<T extends Query, Name extends string> = {\n  [P in keyof T]: P extends '__selectable'\n    ? SelectableFromShape<T['shape'], Name>\n    : P extends '__as'\n      ? Name\n      : P extends CreateMethodsNames | DeleteMethodsNames\n        ? never\n        : T[P];\n} & QueryHasWhere &\n  HasRelJoin;\n\nexport interface BelongsToInfo<\n  T extends RelationConfigSelf,\n  Name extends string,\n  FK extends string,\n  Required,\n  Q extends Query,\n> extends RelationConfigBase {\n  returnsOne: true;\n  query: Q;\n  params: BelongsToParams<T, FK>;\n  maybeSingle: Required extends true\n    ? QueryManyTake<Q>\n    : QueryManyTakeOptional<Q>;\n  omitForeignKeyInCreate: FK;\n  dataForCreate: {\n    columns: FK;\n    nested: Required extends true\n      ? {\n          [Key in Name]: RelationToOneDataForCreateSameQuery<Q>;\n        }\n      : {\n          [Key in Name]?: RelationToOneDataForCreateSameQuery<Q>;\n        };\n  };\n  optionalDataForCreate: EmptyObject;\n  // `belongsTo` relation data available for update. It supports:\n  // - `disconnect` to nullify a foreign key for the relation\n  // - `set` to update the foreign key with a relation primary key found by conditions\n  // - `delete` to delete the related record, nullify the foreign key\n  // - `update` to update the related record\n  // - `create` to create the related record\n  dataForUpdate:\n    | { disconnect: boolean }\n    | { set: WhereArg<Q> }\n    | { delete: boolean }\n    | { update: UpdateData<Q> }\n    | {\n        create: CreateData<Q>;\n      };\n  // Only for records that update a single record:\n  // - `upsert` to update or create the related record\n  dataForUpdateOne:\n    | { disconnect: boolean }\n    | { set: WhereArg<Q> }\n    | { delete: boolean }\n    | { update: UpdateData<Q> }\n    | { create: CreateData<Q> }\n    | {\n        upsert: {\n          update: UpdateData<Q>;\n          create: CreateData<Q> | (() => CreateData<Q>);\n        };\n      };\n}\n\ninterface State {\n  query: Query;\n  primaryKeys: string[];\n  foreignKeys: string[];\n  len: number;\n  on?: RecordUnknown;\n}\n\ntype BelongsToNestedUpdate = (\n  q: Query,\n  update: RecordUnknown,\n  params: NestedUpdateOneItem,\n) => void;\n\nclass BelongsToVirtualColumn extends VirtualColumn<ColumnSchemaConfig> {\n  private readonly nestedUpdate: BelongsToNestedUpdate;\n\n  constructor(\n    schema: ColumnSchemaConfig,\n    private key: string,\n    private state: State,\n  ) {\n    super(schema);\n    this.nestedUpdate = nestedUpdate(this.state);\n  }\n\n  create(q: Query, ctx: CreateCtx, items: RecordUnknown[]) {\n    const {\n      key,\n      state: { query, primaryKeys, foreignKeys },\n    } = this;\n\n    interface NestedCreateItem {\n      items: RecordUnknown[];\n      values: RecordUnknown[];\n    }\n\n    interface NestedCreateItems {\n      create?: NestedCreateItem;\n      connect?: NestedCreateItem;\n      connectOrCreate?: NestedCreateItem;\n    }\n\n    let nestedCreateItems: NestedCreateItems | undefined;\n\n    items.forEach((item) => {\n      const value = item[key] as NestedInsertOneItemCreate;\n      const kind = value.create\n        ? 'create'\n        : value.connect\n          ? 'connect'\n          : 'connectOrCreate';\n\n      if (kind) {\n        const nestedCreateItem = ((nestedCreateItems ??= {})[kind] ??= {\n          items: [],\n          values: [],\n        });\n        nestedCreateItem.items.push(item);\n        nestedCreateItem.values.push(value[kind] as RecordUnknown);\n\n        if (kind !== 'connect') {\n          for (const key of foreignKeys) {\n            item[key] = new RawSql('');\n          }\n        }\n      }\n    });\n\n    if (!nestedCreateItems) {\n      return;\n    }\n\n    for (const key of foreignKeys) {\n      if (!ctx.columns.has(key)) {\n        ctx.columns.set(key, ctx.columns.size);\n      }\n    }\n\n    const { create, connect, connectOrCreate } = nestedCreateItems;\n    if (create) {\n      const selectPKeys = query.select(...primaryKeys);\n\n      _prependWith(\n        q,\n        (as) => {\n          const count = create.items.length;\n          foreignKeys.forEach((foreignKey, i) => {\n            const primaryKey = primaryKeys[i];\n            create.items.forEach((item, i) => {\n              (item[foreignKey] as RawSql)._sql = selectCteColumnFromManySql(\n                as,\n                primaryKey,\n                i,\n                count,\n              );\n            });\n          });\n        },\n        _queryInsertMany(selectPKeys, create.values),\n      );\n    }\n\n    if (connect) {\n      connect.values.forEach((value, itemI) => {\n        const as = getFreeAlias(q.q.withShapes, 'q');\n        _prependWith(q, as, query.select(...primaryKeys).findBy(value));\n\n        foreignKeys.map((foreignKey, i) => {\n          connect.items[itemI][foreignKey] = new RawSql(\n            selectCteColumnMustExistSql(i, as, primaryKeys[i]),\n          );\n        });\n      });\n    }\n\n    if (connectOrCreate) {\n      connectOrCreate.values.forEach((value, itemI) => {\n        const asFn = setForeignKeysFromCte(\n          connectOrCreate.items[itemI],\n          primaryKeys,\n          foreignKeys,\n        );\n\n        const selectPKeys = query.select(...primaryKeys);\n\n        _prependWith(\n          q,\n          asFn,\n          _orCreate(\n            _queryWhere(selectPKeys, [(value as { where: never }).where]),\n            (value as { create: never }).create,\n          ),\n        );\n      });\n    }\n  }\n\n  update(q: Query, set: RecordUnknown) {\n    q.q.wrapInTransaction = true;\n\n    const data = set[this.key] as NestedUpdateOneItem;\n    this.nestedUpdate(q, set, data);\n  }\n}\n\nexport const makeBelongsToMethod = (\n  tableConfig: ORMTableInput,\n  table: Query,\n  relation: BelongsTo,\n  relationName: string,\n  query: Query,\n): RelationData => {\n  const primaryKeys = relation.options.references as string[];\n  const foreignKeys = relation.options.columns as string[];\n  const { on } = relation.options;\n\n  if (on) {\n    _queryWhere(query, [on]);\n    _queryDefaults(query, on);\n  }\n\n  const len = primaryKeys.length;\n  const state: State = { query, primaryKeys, foreignKeys, len, on };\n\n  addAutoForeignKey(\n    tableConfig,\n    table,\n    query,\n    primaryKeys,\n    foreignKeys,\n    relation.options,\n  );\n\n  const join = (\n    baseQuery: Query,\n    joiningQuery: Query,\n    primaryKeys: string[],\n    foreignKeys: string[],\n  ) => {\n    const baseAs = getQueryAs(baseQuery);\n\n    const q = joiningQuery.clone();\n    setQueryObjectValueImmutable(q, 'joinedShapes', baseAs, baseQuery.q.shape);\n\n    for (let i = 0; i < len; i++) {\n      pushQueryOnForOuter(\n        q,\n        baseQuery,\n        joiningQuery,\n        primaryKeys[i],\n        `${baseAs}.${foreignKeys[i]}`,\n      );\n    }\n\n    return q;\n  };\n\n  const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n    return join(\n      joiningQuery as Query,\n      baseQuery as Query,\n      foreignKeys,\n      primaryKeys,\n    );\n  };\n\n  return {\n    returns: 'one',\n    queryRelated(params: RecordUnknown) {\n      const obj: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        obj[primaryKeys[i]] = params[foreignKeys[i]];\n      }\n      return query.where(obj as never);\n    },\n    virtualColumn: new BelongsToVirtualColumn(\n      defaultSchemaConfig,\n      relationName,\n      state,\n    ),\n    joinQuery: joinQueryChainHOF(\n      getPrimaryKeys(query),\n      reverseJoin,\n      (joiningQuery, baseQuery) =>\n        join(\n          baseQuery as Query,\n          joiningQuery as Query,\n          primaryKeys,\n          foreignKeys,\n        ),\n    ),\n    reverseJoin,\n  };\n};\n\nconst nestedUpdate = ({ query, primaryKeys, foreignKeys, len }: State) => {\n  return ((self, update, params) => {\n    if (params.create) {\n      const createQuery = _querySelect(\n        _queryCreate(query.clone(), params.create),\n        primaryKeys,\n      );\n\n      const asFn = setForeignKeysFromCte(update, primaryKeys, foreignKeys);\n\n      _prependWith(self, asFn, createQuery);\n    } else if (params.update) {\n      let appendedAs: string | undefined;\n      _hookSelectColumns(self, foreignKeys, (aliasedForeignKeys) => {\n        selectIdsSql._sql = selectCteColumnsSql(\n          appendedAs as string,\n          aliasedForeignKeys,\n        );\n      });\n\n      const selectIdsSql = new RawSql('');\n\n      const updateQuery = _queryUpdate(\n        _queryWhereIn(query.clone(), true, primaryKeys, selectIdsSql),\n        params.update as UpdateData<Query>,\n      );\n\n      // don't throw \"not found\" if it is not found for update\n      updateQuery.q.returnType = 'value';\n\n      _appendQuery(self, updateQuery, (as) => (appendedAs = as));\n    } else if (params.upsert) {\n      if (isQueryReturnsAll(self)) {\n        throw new Error('`upsert` option is not allowed in a batch update');\n      }\n\n      const { relQuery } = relWithSelectIds(\n        self,\n        query,\n        primaryKeys,\n        foreignKeys,\n      );\n\n      const upsertQuery = _querySelect(\n        _queryUpsert(\n          relQuery,\n          params.upsert as UpsertData<UpsertThis, UpdateData<Query>>,\n        ),\n        primaryKeys,\n      );\n\n      const asFn = setForeignKeysFromCte(update, primaryKeys, foreignKeys);\n\n      _prependWith(self, asFn, upsertQuery);\n    } else if (params.delete) {\n      _hookSelectColumns(self, foreignKeys, noop);\n\n      disconnect(update, foreignKeys);\n\n      const { selectIdsSql, relQuery } = relWithSelectIds(\n        self,\n        query,\n        primaryKeys,\n        foreignKeys,\n      );\n\n      self.q.and = self.q.or = undefined;\n\n      _queryWhereIn(self, true, foreignKeys, selectIdsSql);\n\n      const deleteQuery = _queryDelete(relQuery);\n      // don't throw \"not found\" if it is not found for delete\n      deleteQuery.q.returnType = 'value';\n\n      _appendQuery(self, deleteQuery, noop);\n    } else if (params.disconnect) {\n      disconnect(update, foreignKeys);\n    } else if (params.set) {\n      let loadPrimaryKeys: string[] | undefined;\n      let loadForeignKeys: string[] | undefined;\n      for (let i = 0; i < len; i++) {\n        const primaryKey = primaryKeys[i];\n        if (primaryKey in params.set) {\n          update[foreignKeys[i]] =\n            params.set[primaryKey as keyof typeof params.set];\n        } else {\n          (loadPrimaryKeys ??= []).push(primaryKey);\n          (loadForeignKeys ??= []).push(foreignKeys[i]);\n        }\n      }\n      if (loadPrimaryKeys) {\n        const asFn = setForeignKeysFromCte(\n          update,\n          loadPrimaryKeys,\n          loadForeignKeys as string[],\n          true,\n        );\n\n        _prependWith(\n          self,\n          asFn,\n          _queryFindBy(query.select(...loadPrimaryKeys), params.set as never),\n        );\n      }\n    }\n  }) as BelongsToNestedUpdate;\n};\n\nconst disconnect = (update: RecordUnknown, foreignKeys: string[]) => {\n  for (const foreignKey of foreignKeys) {\n    update[foreignKey] = null;\n  }\n};\n\nconst relWithSelectIds = (\n  self: Query,\n  rel: Query,\n  primaryKeys: string[],\n  foreignKeys: string[],\n) => {\n  const selectIdsQuery = makeSelectIdsQuery(self, foreignKeys);\n\n  const selectIdsSql = new RawSql('');\n\n  _prependWith(\n    self,\n    (as) => {\n      selectIdsSql._sql = selectCteColumnsSql(as, foreignKeys);\n    },\n    selectIdsQuery,\n  );\n\n  return {\n    selectIdsSql,\n    relQuery: _queryWhereIn(rel.clone(), true, primaryKeys, selectIdsSql),\n  };\n};\n\nconst makeSelectIdsQuery = (self: Query, foreignKeys: string[]) => {\n  const selectIdsQuery = self.baseQuery.clone();\n  selectIdsQuery.q.distinct = emptyArray;\n  selectIdsQuery.q.select = foreignKeys;\n  selectIdsQuery.q.and = self.q.and;\n  selectIdsQuery.q.or = self.q.or;\n  return selectIdsQuery;\n};\n\nconst setForeignKeysFromCte = (\n  record: RecordUnknown,\n  primaryKeys: string[],\n  foreignKeys: string[],\n  mustExist?: boolean,\n) => {\n  for (const key of foreignKeys) {\n    record[key] = new RawSql('');\n  }\n\n  return (as: string) => {\n    foreignKeys.forEach(\n      mustExist\n        ? (foreignKey, i) => {\n            (record[foreignKey] as RawSql)._sql = selectCteColumnMustExistSql(\n              i,\n              as,\n              primaryKeys[i],\n            );\n          }\n        : (foreignKey, i) => {\n            (record[foreignKey] as RawSql)._sql = selectCteColumnSql(\n              as,\n              primaryKeys[i],\n            );\n          },\n    );\n  };\n};\n\nconst selectCteColumnMustExistSql = (\n  i: number,\n  cteAs: string,\n  column: string,\n) => {\n  const selectColumn = selectCteColumnSql(cteAs, column);\n\n  return i === 0\n    ? `CASE WHEN (SELECT count(*) FROM \"${cteAs}\") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END`\n    : selectColumn;\n};\n","import { Column, Query, RawSql } from 'pqb/internal';\nimport {\n  _appendQuery,\n  _clone,\n  _hookSelectColumns,\n  _queryDefaults,\n  _queryDelete,\n  _queryInsert,\n  _queryInsertMany,\n  _queryUpdate,\n  _queryUpdateOrThrow,\n  _queryUpsert,\n  _queryWhere,\n  _queryWhereIn,\n  ColumnSchemaConfig,\n  CreateCtx,\n  CreateData,\n  CreateManyMethodsNames,\n  CreateMethodsNames,\n  defaultSchemaConfig,\n  EmptyObject,\n  getPrimaryKeys,\n  isQueryReturnsAll,\n  noop,\n  PickQueryQ,\n  prepareSubQueryForSql,\n  QueryHasWhere,\n  QueryManyTake,\n  QueryManyTakeOptional,\n  RecordString,\n  RecordUnknown,\n  RelationConfigBase,\n  RelationJoinQuery,\n  SelectableFromShape,\n  UpdateData,\n  VirtualColumn,\n  WhereArg,\n} from 'pqb/internal';\nimport { ORMTableInput } from '../baseTable';\nimport {\n  RelationData,\n  RelationThunkBase,\n  RelationToOneDataForCreate,\n  RelationConfigParams,\n  RelationConfigSelf,\n} from './relations';\nimport {\n  addAutoForeignKey,\n  getSourceRelation,\n  getThroughRelation,\n  hasRelationHandleCreate,\n  HasRelJoin,\n  joinHasRelation,\n  joinHasThrough,\n  NestedInsertOneItem,\n  NestedInsertOneItemConnectOrCreate,\n  NestedInsertOneItemCreate,\n  NestedUpdateOneItem,\n  selectCteColumnFromManySql,\n  selectCteColumnSql,\n  selectCteColumnsSql,\n} from './common/utils';\nimport { RelationRefsOptions, RelationThroughOptions } from './common/options';\nimport { joinQueryChainHOF } from './common/joinQueryChain';\n\nexport interface HasOne extends RelationThunkBase {\n  type: 'hasOne';\n  options: HasOneOptions;\n}\n\ninterface RelationHasOneThroughOptions<\n  Through extends string,\n  Source extends string,\n> extends RelationThroughOptions<Through, Source> {\n  required?: boolean;\n}\n\nexport type HasOneOptions<\n  Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit,\n  Related extends ORMTableInput = ORMTableInput,\n  Through extends string = string,\n  Source extends string = string,\n> =\n  | RelationRefsOptions<keyof Columns, Related['columns']['shape']>\n  | RelationHasOneThroughOptions<Through, Source>;\n\nexport type HasOneParams<\n  T extends RelationConfigSelf,\n  Options,\n> = Options extends RelationRefsOptions\n  ? {\n      [Name in Options['columns'][number]]: T['columns']['shape'][Name]['type'];\n    }\n  : Options extends RelationThroughOptions\n    ? RelationConfigParams<T, T['relations'][Options['through']]>\n    : never;\n\nexport type HasOneQueryThrough<\n  Name extends string,\n  TableQuery extends Query,\n> = {\n  [K in keyof TableQuery]: K extends '__selectable'\n    ? SelectableFromShape<TableQuery['shape'], Name>\n    : K extends '__as'\n      ? Name\n      : K extends CreateMethodsNames\n        ? never\n        : TableQuery[K];\n} & QueryHasWhere &\n  HasRelJoin;\n\nexport type HasOneQuery<\n  T extends RelationConfigSelf,\n  Name extends string,\n  TableQuery extends Query,\n> = T['relations'][Name]['options'] extends RelationRefsOptions\n  ? {\n      [K in keyof TableQuery]: K extends '__defaults'\n        ? {\n            [K in\n              | keyof TableQuery['__defaults']\n              | T['relations'][Name]['options']['references'][number]]: true;\n          }\n        : K extends '__selectable'\n          ? SelectableFromShape<TableQuery['shape'], Name>\n          : K extends '__as'\n            ? Name\n            : K extends CreateManyMethodsNames\n              ? never\n              : TableQuery[K];\n    } & QueryHasWhere &\n      HasRelJoin\n  : HasOneQueryThrough<Name, TableQuery>;\n\nexport interface HasOneInfo<\n  T extends RelationConfigSelf,\n  Name extends string,\n  Rel extends HasOne,\n  Q extends Query,\n> extends RelationConfigBase {\n  returnsOne: true;\n  query: Q;\n  params: HasOneParams<T, Rel['options']>;\n  maybeSingle: T['relations'][Name]['options']['required'] extends true\n    ? QueryManyTake<Q>\n    : QueryManyTakeOptional<Q>;\n  omitForeignKeyInCreate: never;\n  optionalDataForCreate: T['relations'][Name]['options'] extends RelationThroughOptions\n    ? EmptyObject\n    : {\n        [P in Name]?: RelationToOneDataForCreate<{\n          nestedCreateQuery: CreateData<Q>;\n          table: Q;\n        }>;\n      };\n  dataForCreate: never;\n  // `hasOne` relation data available for update. It supports:\n  // - `disconnect` to nullify a foreign key of the related record\n  // - `delete` to delete the related record\n  // - `update` to update the related record\n  dataForUpdate:\n    | { disconnect: boolean }\n    | { delete: boolean }\n    | { update: UpdateData<Q> };\n  // Only for records that update a single record:\n  // - `set` to update the foreign key of related record found by condition\n  // - `upsert` to update or create the related record\n  // - `create` to create a related record\n  dataForUpdateOne:\n    | { disconnect: boolean }\n    | { set: WhereArg<Q> }\n    | { delete: boolean }\n    | { update: UpdateData<Q> }\n    | {\n        upsert: {\n          update: UpdateData<Q>;\n          create: CreateData<Q> | (() => CreateData<Q>);\n        };\n      }\n    | {\n        create: CreateData<Q>;\n      };\n}\n\ninterface State {\n  query: Query;\n  primaryKeys: string[];\n  foreignKeys: string[];\n  on?: RecordUnknown;\n}\n\nexport type HasOneNestedInsert = (\n  query: Query,\n  data: [selfData: RecordUnknown, relationData: NestedInsertOneItem][],\n) => Promise<void>;\n\nexport type HasOneNestedUpdate = (\n  query: Query,\n  data: RecordUnknown[],\n  relationData: NestedUpdateOneItem,\n) => Promise<void>;\n\nclass HasOneVirtualColumn extends VirtualColumn<ColumnSchemaConfig> {\n  private readonly nestedInsert: HasOneNestedInsert;\n  private readonly setNulls: RecordUnknown;\n\n  constructor(\n    schema: ColumnSchemaConfig,\n    private key: string,\n    private state: State,\n  ) {\n    super(schema);\n    this.nestedInsert = nestedInsert(state);\n\n    this.setNulls = {};\n    for (const foreignKey of state.foreignKeys) {\n      this.setNulls[foreignKey] = null;\n    }\n  }\n\n  create(\n    self: Query,\n    ctx: CreateCtx,\n    items: RecordUnknown[],\n    rowIndexes: number[],\n    count: number,\n  ) {\n    if (count <= self.qb.internal.nestedCreateBatchMax) {\n      interface NestedCreateItem {\n        indexes: number[];\n        items: RecordUnknown[];\n        values: RecordUnknown[];\n      }\n\n      interface NestedCreateItems {\n        create?: NestedCreateItem;\n        connect?: NestedCreateItem;\n        connectOrCreate?: NestedCreateItem;\n      }\n\n      const { query: rel, primaryKeys, foreignKeys } = this.state;\n\n      let nestedCreateItems: NestedCreateItems | undefined;\n\n      items.forEach((item, i) => {\n        const value = item[this.key] as NestedInsertOneItem;\n        const kind = value.create\n          ? 'create'\n          : value.connect\n            ? 'connect'\n            : 'connectOrCreate';\n\n        if (kind) {\n          const nestedCreateItem = ((nestedCreateItems ??= {})[kind] ??= {\n            indexes: [],\n            items: [],\n            values: [],\n          });\n          nestedCreateItem.indexes.push(rowIndexes[i]);\n          nestedCreateItem.values.push(value[kind] as RecordUnknown);\n\n          const data = value.create ? { ...value.create } : {};\n\n          for (const key of foreignKeys) {\n            data[key] = new RawSql('');\n          }\n\n          nestedCreateItem.items.push(data);\n        }\n      });\n\n      if (!nestedCreateItems) {\n        return;\n      }\n\n      let createAs: string | undefined;\n      let connectAs: string | undefined;\n      let connectOrCreateAs: string | undefined;\n      _hookSelectColumns(self, primaryKeys, (aliasedPrimaryKeys) => {\n        foreignKeys.forEach((key, keyI) => {\n          const primaryKey = aliasedPrimaryKeys[keyI];\n\n          if (create && createAs) {\n            for (let i = 0; i < create.items.length; i++) {\n              (create.items[i][key] as RawSql)._sql =\n                selectCteColumnFromManySql(\n                  createAs,\n                  primaryKey,\n                  create.indexes[i],\n                  count,\n                );\n            }\n          }\n\n          if (connect && connectAs) {\n            for (let i = 0; i < connect.items.length; i++) {\n              (connect.items[i][key] as RawSql)._sql =\n                selectCteColumnFromManySql(\n                  connectAs,\n                  primaryKey,\n                  connect.indexes[i],\n                  count,\n                );\n            }\n          }\n\n          if (connectOrCreate && connectOrCreateAs) {\n            for (let i = 0; i < connectOrCreate.items.length; i++) {\n              (connectOrCreate.items[i][key] as RawSql)._sql =\n                selectCteColumnFromManySql(\n                  connectOrCreateAs,\n                  primaryKey,\n                  connectOrCreate.indexes[i],\n                  count,\n                );\n            }\n          }\n        });\n      });\n\n      const { create, connect, connectOrCreate } = nestedCreateItems;\n\n      if (create) {\n        const query = _queryInsertMany(_clone(rel), create.items as never);\n\n        _appendQuery(self, query, (as) => (createAs = as));\n      }\n\n      if (connect) {\n        connect.values.forEach((value, i) => {\n          const query = _queryUpdateOrThrow(\n            rel.where(value as never) as never,\n            connect.items[i] as never,\n          ) as Query;\n\n          query.q.ensureCount = 1;\n\n          _appendQuery(self, query, (as) => (connectAs = as));\n        });\n      }\n\n      if (connectOrCreate) {\n        connectOrCreate.values.forEach((value, i) => {\n          const query = _queryUpsert(rel.where(value.where as never) as never, {\n            update: connectOrCreate.items[i],\n            create: {\n              ...(value.create as RecordUnknown),\n              ...connectOrCreate.items[i],\n            },\n          });\n\n          _appendQuery(self, query, (as) => (connectOrCreateAs = as));\n        });\n      }\n    } else {\n      hasRelationHandleCreate(\n        self,\n        ctx,\n        items,\n        rowIndexes,\n        this.key,\n        this.state.primaryKeys,\n        this.nestedInsert,\n      );\n    }\n  }\n\n  update(self: Query, set: RecordUnknown) {\n    const params = set[this.key] as NestedUpdateOneItem;\n    if (\n      (params.set || params.create || params.upsert) &&\n      isQueryReturnsAll(self)\n    ) {\n      const key = params.set ? 'set' : params.create ? 'create' : 'upsert';\n      throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n    }\n\n    const { primaryKeys, foreignKeys, query: relQuery } = this.state;\n    if (\n      params.create ||\n      params.update ||\n      params.upsert ||\n      params.disconnect ||\n      params.set ||\n      params.delete\n    ) {\n      let appendedAs: string | undefined;\n      _hookSelectColumns(self, primaryKeys, (aliasedPrimaryKeys) => {\n        selectIdsSql._sql = selectCteColumnsSql(\n          appendedAs as string,\n          aliasedPrimaryKeys,\n        );\n\n        if (params.create || params.set || params.upsert) {\n          foreignKeys.forEach((foreignKey, i) => {\n            (setIds[foreignKey] as RawSql)._sql = selectCteColumnSql(\n              appendedAs as string,\n              aliasedPrimaryKeys[i],\n            );\n          });\n        }\n      });\n\n      const selectIdsSql = new RawSql('');\n\n      const existingRelQuery = _queryWhereIn(\n        _clone(relQuery),\n        true,\n        foreignKeys,\n        selectIdsSql,\n      );\n\n      let setIds = undefined as unknown as RecordUnknown;\n      if (params.create || params.set || params.upsert) {\n        setIds = {};\n        foreignKeys.forEach((foreignKey) => {\n          setIds[foreignKey] = new RawSql('');\n        });\n      }\n\n      const nullifyOrDeleteQuery = params.update\n        ? _queryUpdate(existingRelQuery, params.update)\n        : params.upsert\n          ? _queryUpsert(existingRelQuery, {\n              update: params.upsert.update,\n              create: {\n                ...(typeof params.upsert.create === 'function'\n                  ? params.upsert.create()\n                  : params.upsert.create),\n                ...setIds,\n              },\n            })\n          : params.delete\n            ? _queryDelete(existingRelQuery)\n            : _queryUpdate(existingRelQuery, this.setNulls);\n\n      nullifyOrDeleteQuery.q.returnType = 'void';\n\n      _appendQuery(self, nullifyOrDeleteQuery, (as) => (appendedAs = as));\n\n      if (params.create) {\n        const createQuery = _queryInsert(_clone(relQuery), {\n          ...params.create,\n          ...setIds,\n        });\n\n        _appendQuery(self, createQuery, noop);\n      } else if (params.set) {\n        const setQuery = _queryUpdate(\n          _queryWhere(_clone(relQuery), [params.set as never]),\n          setIds,\n        );\n        setQuery.q.returnType = 'void';\n\n        _appendQuery(self, setQuery, noop);\n      }\n    }\n  }\n}\n\nexport const makeHasOneMethod = (\n  tableConfig: ORMTableInput,\n  table: Query,\n  relation: HasOne,\n  relationName: string,\n  query: Query,\n): RelationData => {\n  const relPKeys = getPrimaryKeys(query);\n\n  if ('through' in relation.options) {\n    const { through, source } = relation.options;\n\n    const throughRelation = getThroughRelation(table, through);\n    const sourceRelation = getSourceRelation(throughRelation, source);\n    const sourceRelationQuery = (sourceRelation.query as Query).as(\n      relationName,\n    );\n    const sourceQuery = sourceRelation.joinQuery(\n      sourceRelationQuery,\n      throughRelation.query as never,\n    ) as Query;\n\n    const whereExistsCallback = () => sourceQuery;\n\n    const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n      return joinHasThrough(\n        baseQuery as Query,\n        baseQuery as Query,\n        joiningQuery as Query,\n        throughRelation,\n        sourceRelation,\n      );\n    };\n\n    return {\n      returns: 'one',\n      queryRelated: (params: RecordUnknown) => {\n        const throughQuery = table.queryRelated(through, params) as Query;\n\n        return query.whereExists(throughQuery, whereExistsCallback);\n      },\n      joinQuery: joinQueryChainHOF(\n        relPKeys,\n        reverseJoin,\n        (joiningQuery, baseQuery) =>\n          joinHasThrough(\n            joiningQuery as Query,\n            baseQuery as Query,\n            joiningQuery as Query,\n            throughRelation,\n            sourceRelation,\n          ),\n      ),\n      reverseJoin,\n    };\n  }\n\n  const primaryKeys = relation.options.columns as string[];\n  const foreignKeys = relation.options.references as string[];\n  const { on } = relation.options;\n\n  if (on) {\n    _queryWhere(query, [on]);\n    _queryDefaults(query, on);\n  }\n\n  addAutoForeignKey(\n    tableConfig,\n    query,\n    table,\n    primaryKeys,\n    foreignKeys,\n    relation.options,\n  );\n\n  const state: State = { query, primaryKeys, foreignKeys, on };\n  const len = primaryKeys.length;\n\n  const reversedOn: RecordString = {};\n  for (let i = 0; i < len; i++) {\n    reversedOn[foreignKeys[i]] = primaryKeys[i];\n  }\n\n  const fromQuerySelect = [{ selectAs: reversedOn }];\n\n  const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n    return joinHasRelation(\n      joiningQuery as Query,\n      baseQuery as Query,\n      foreignKeys,\n      primaryKeys,\n      len,\n    );\n  };\n\n  return {\n    returns: 'one',\n    queryRelated: (params: RecordUnknown) => {\n      const values: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        values[foreignKeys[i]] = params[primaryKeys[i]];\n      }\n\n      return _queryDefaults(query.where(values as never), { ...on, ...values });\n    },\n    virtualColumn: new HasOneVirtualColumn(\n      defaultSchemaConfig,\n      relationName,\n      state,\n    ),\n    joinQuery: joinQueryChainHOF(\n      relPKeys,\n      reverseJoin,\n      (joiningQuery, baseQuery) =>\n        joinHasRelation(\n          baseQuery as Query,\n          joiningQuery as Query,\n          primaryKeys,\n          foreignKeys,\n          len,\n        ),\n    ),\n    reverseJoin,\n    modifyRelatedQuery(relationQuery) {\n      return (query) => {\n        const baseQuery = (query as Query).clone();\n        baseQuery.q.select = fromQuerySelect;\n        const q = (relationQuery as unknown as PickQueryQ).q;\n        q.insertFrom = prepareSubQueryForSql(q as never, baseQuery);\n        q.values = [];\n      };\n    },\n  };\n};\n\nconst nestedInsert = ({ query, primaryKeys, foreignKeys }: State) => {\n  return (async (_, data) => {\n    const t = query.clone();\n\n    // array to store specific items will be reused\n    const items: unknown[] = [];\n    for (const item of data) {\n      if (item[1].connect || item[1].connectOrCreate) {\n        items.push(item);\n      }\n    }\n\n    let connected: number[];\n    if (items.length) {\n      for (let i = 0, len = items.length; i < len; i++) {\n        const [selfData, item] = items[i] as [RecordUnknown, RecordUnknown];\n\n        const data: RecordUnknown = {};\n        primaryKeys.forEach((primaryKey, i) => {\n          data[foreignKeys[i]] = selfData[primaryKey];\n        });\n\n        items[i] =\n          'connect' in item\n            ? _queryUpdateOrThrow(\n                t.where(item.connect as WhereArg<Query>) as never,\n                data as never,\n              )\n            : _queryUpdate(\n                t.where(\n                  (item.connectOrCreate as RecordUnknown)\n                    .where as WhereArg<Query>,\n                ) as never,\n                data as never,\n              );\n      }\n\n      connected = (await Promise.all(items)) as number[];\n    } else {\n      connected = [];\n    }\n\n    let connectedI = 0;\n    items.length = 0;\n    for (const item of data) {\n      if (item[1].connectOrCreate) {\n        if (!connected[connectedI++]) {\n          items.push(item);\n        }\n      } else if (item[1].create) {\n        items.push(item);\n      }\n    }\n\n    if (items.length) {\n      for (let i = 0, len = items.length; i < len; i++) {\n        const [selfData, item] = items[i] as [RecordUnknown, RecordUnknown];\n        const data: RecordUnknown = {\n          ...('create' in item\n            ? (item.create as NestedInsertOneItemCreate)\n            : (item.connectOrCreate as NestedInsertOneItemConnectOrCreate)\n                .create),\n        };\n\n        for (let i = 0; i < primaryKeys.length; i++) {\n          data[foreignKeys[i]] = selfData[primaryKeys[i]];\n        }\n\n        items[i] = data;\n      }\n\n      await t.insertMany(items as RecordUnknown[]);\n    }\n  }) as HasOneNestedInsert;\n};\n","import {\n  RelationData,\n  RelationThunkBase,\n  RelationConfigSelf,\n} from './relations';\nimport { OrchidOrmInternalError } from 'pqb';\nimport {\n  CreateData,\n  Query,\n  WhereArg,\n  isQueryReturnsAll,\n  VirtualColumn,\n  CreateCtx,\n  UpdateData,\n  _queryDefaults,\n  _queryUpdateOrThrow,\n  _queryUpdate,\n  _queryCreateMany,\n  _queryDelete,\n  PickQueryQ,\n  _queryWhere,\n  SelectableFromShape,\n  defaultSchemaConfig,\n  ColumnSchemaConfig,\n  EmptyObject,\n  getPrimaryKeys,\n  MaybeArray,\n  objectHasValues,\n  RecordString,\n  RecordUnknown,\n  RelationConfigBase,\n  RelationJoinQuery,\n  toArray,\n  prepareSubQueryForSql,\n  PickQuerySelectableRelations,\n  QueryHasWhere,\n  RawSql,\n  _hookSelectColumns,\n  _queryInsertMany,\n  _clone,\n  _appendQuery,\n  _queryUpsert,\n} from 'pqb/internal';\nimport {\n  addAutoForeignKey,\n  getSourceRelation,\n  getThroughRelation,\n  hasRelationHandleCreate,\n  hasRelationHandleUpdate,\n  HasRelJoin,\n  joinHasRelation,\n  joinHasThrough,\n  NestedInsertManyConnect,\n  NestedInsertManyConnectOrCreate,\n  NestedInsertManyItems,\n  NestedInsertOneItemConnectOrCreate,\n  NestedUpdateManyItems,\n  selectCteColumnFromManySql,\n} from './common/utils';\nimport { RelationRefsOptions, RelationThroughOptions } from './common/options';\nimport { HasOneOptions, HasOneParams, HasOneQueryThrough } from './hasOne';\nimport { ORMTableInput } from '../baseTable';\nimport { joinQueryChainHOF } from './common/joinQueryChain';\n\nexport interface HasMany extends RelationThunkBase {\n  type: 'hasMany';\n  options: HasOneOptions;\n}\n\nexport type HasManyQuery<\n  T extends RelationConfigSelf,\n  Name extends string,\n  TableQuery extends Query,\n> = T['relations'][Name]['options'] extends RelationRefsOptions\n  ? {\n      [K in keyof TableQuery]: K extends '__defaults'\n        ? {\n            [K in\n              | keyof TableQuery['__defaults']\n              | T['relations'][Name]['options']['references'][number]]: true;\n          }\n        : K extends '__selectable'\n          ? SelectableFromShape<TableQuery['shape'], Name>\n          : K extends '__as'\n            ? Name\n            : TableQuery[K];\n    } & QueryHasWhere &\n      HasRelJoin\n  : HasOneQueryThrough<Name, TableQuery>;\n\nexport interface HasManyInfo<\n  T extends RelationConfigSelf,\n  Name extends string,\n  Rel extends HasMany,\n  Q extends Query,\n> extends RelationConfigBase {\n  returnsOne: false;\n  query: Q;\n  params: HasOneParams<T, Rel['options']>;\n  maybeSingle: Q;\n  omitForeignKeyInCreate: never;\n  optionalDataForCreate: {\n    [P in Name]?: T['relations'][Name]['options'] extends RelationThroughOptions\n      ? EmptyObject\n      : {\n          // create related records\n          create?: CreateData<Q>[];\n          // find existing records by `where` conditions and update their foreign keys with the new id\n          connect?: WhereArg<Q>[];\n          // try finding records by `where` conditions, and create them if not found\n          connectOrCreate?: {\n            where: WhereArg<Q>;\n            create: CreateData<Q>;\n          }[];\n        };\n  };\n  dataForCreate: never;\n  // `hasMany` relation data available for update. It supports:\n  // - `disconnect` nullifies foreign keys of the related records\n  // - `delete` deletes related record found by conditions\n  // - `update` updates related records found by conditions with a provided data\n  dataForUpdate: {\n    disconnect?: MaybeArray<WhereArg<Q>>;\n    delete?: MaybeArray<WhereArg<Q>>;\n    update?: {\n      where: MaybeArray<WhereArg<Q>>;\n      data: UpdateData<Q>;\n    };\n  };\n  // Only for records that update a single record:\n  // - `set` updates foreign keys of related records found by conditions, nullifies previously connected\n  // - `add` updates foreign keys of related records found by conditions, doesn't nullify previously connected\n  // - `create` creates related records\n  dataForUpdateOne: {\n    disconnect?: MaybeArray<WhereArg<Q>>;\n    delete?: MaybeArray<WhereArg<Q>>;\n    update?: {\n      where: MaybeArray<WhereArg<Q>>;\n      data: UpdateData<Q>;\n    };\n    set?: MaybeArray<WhereArg<Q>>;\n    add?: MaybeArray<WhereArg<Q>>;\n    create?: CreateData<Q>[];\n  };\n}\n\ninterface State {\n  query: Query;\n  primaryKeys: string[];\n  foreignKeys: string[];\n  on?: RecordUnknown;\n}\n\nexport type HasManyNestedUpdate = (\n  query: Query,\n  data: RecordUnknown[],\n  relationData: NestedUpdateManyItems,\n) => Promise<void>;\n\nexport type HasManyNestedInsert = (\n  query: Query,\n  data: [selfData: RecordUnknown, relationData: NestedInsertManyItems][],\n) => Promise<void>;\n\nclass HasManyVirtualColumn extends VirtualColumn<ColumnSchemaConfig> {\n  private readonly nestedInsert: HasManyNestedInsert;\n  private readonly nestedUpdate: HasManyNestedUpdate;\n\n  constructor(\n    schema: ColumnSchemaConfig,\n    private key: string,\n    private state: State,\n  ) {\n    super(schema);\n    this.nestedInsert = nestedInsert(state);\n    this.nestedUpdate = nestedUpdate(state);\n  }\n\n  create(\n    self: Query,\n    ctx: CreateCtx,\n    items: RecordUnknown[],\n    rowIndexes: number[],\n    count: number,\n  ) {\n    if (count <= self.qb.internal.nestedCreateBatchMax) {\n      interface NestedCreateItem {\n        indexes: number[];\n        items: RecordUnknown[];\n        values: unknown[][];\n      }\n\n      interface NestedCreateItems {\n        create?: {\n          indexes: number[];\n          items: RecordUnknown[][];\n        };\n        connect?: NestedCreateItem;\n        connectOrCreate?: NestedCreateItem;\n      }\n\n      const { query: rel, primaryKeys, foreignKeys } = this.state;\n\n      let nestedCreateItems: NestedCreateItems | undefined;\n\n      items.forEach((item, i) => {\n        const value = item[this.key] as NestedInsertManyItems;\n\n        if (value.create?.length) {\n          const nestedCreateItem = ((nestedCreateItems ??= {}).create ??= {\n            indexes: [],\n            items: [],\n          });\n          nestedCreateItem.indexes.push(rowIndexes[i]);\n\n          const data = value.create.map((obj) => {\n            const data = { ...obj };\n            for (const key of foreignKeys) {\n              data[key] = new RawSql('');\n            }\n            return data;\n          });\n\n          nestedCreateItem.items.push(data);\n        } else {\n          const kind = value.connect?.length\n            ? 'connect'\n            : value.connectOrCreate?.length\n              ? 'connectOrCreate'\n              : undefined;\n\n          if (kind) {\n            const nestedCreateItem = ((nestedCreateItems ??= {})[kind] ??= {\n              indexes: [],\n              items: [],\n              values: [],\n            });\n            nestedCreateItem.indexes.push(rowIndexes[i]);\n            nestedCreateItem.values.push(value[kind] as unknown[]);\n\n            const data: RecordUnknown = {};\n            for (const key of foreignKeys) {\n              data[key] = new RawSql('');\n            }\n            nestedCreateItem.items.push(data);\n          }\n        }\n      });\n\n      if (!nestedCreateItems) {\n        return;\n      }\n\n      let createAs: string | undefined;\n      let connectAs: string | undefined;\n      let connectOrCreateAs: string | undefined;\n      _hookSelectColumns(self, primaryKeys, (aliasedPrimaryKeys) => {\n        foreignKeys.forEach((key, keyI) => {\n          const primaryKey = aliasedPrimaryKeys[keyI];\n\n          if (create && createAs) {\n            for (let i = 0; i < create.items.length; i++) {\n              const sql = selectCteColumnFromManySql(\n                createAs,\n                primaryKey,\n                create.indexes[i],\n                count,\n              );\n\n              for (const item of create.items[i]) {\n                (item[key] as RawSql)._sql = sql;\n              }\n            }\n          }\n\n          if (connect && connectAs) {\n            for (let i = 0; i < connect.items.length; i++) {\n              (connect.items[i][key] as RawSql)._sql =\n                selectCteColumnFromManySql(\n                  connectAs,\n                  primaryKey,\n                  connect.indexes[i],\n                  count,\n                );\n            }\n          }\n\n          if (connectOrCreate && connectOrCreateAs) {\n            for (let i = 0; i < connectOrCreate.items.length; i++) {\n              (connectOrCreate.items[i][key] as RawSql)._sql =\n                selectCteColumnFromManySql(\n                  connectOrCreateAs,\n                  primaryKey,\n                  connectOrCreate.indexes[i],\n                  count,\n                );\n            }\n          }\n        });\n      });\n\n      const { create, connect, connectOrCreate } = nestedCreateItems;\n\n      if (create) {\n        const query = _queryInsertMany(\n          _clone(rel),\n          create.items.flat() as never,\n        );\n\n        _appendQuery(self, query, (as) => (createAs = as));\n      }\n\n      if (connect) {\n        connect.values.forEach((value, i) => {\n          const query = _queryUpdateOrThrow(\n            rel.whereOneOf(...(value as never[])) as never,\n            connect.items[i] as never,\n          ) as Query;\n\n          query.q.ensureCount = value.length;\n\n          _appendQuery(self, query, (as) => (connectAs = as));\n        });\n      }\n\n      if (connectOrCreate) {\n        connectOrCreate.values.forEach((array, i) => {\n          const foreignKeyValues = connectOrCreate.items[i];\n          for (const value of array as NestedInsertOneItemConnectOrCreate[]) {\n            const query = _queryUpsert(rel.where(value.where) as never, {\n              update: foreignKeyValues,\n              create: {\n                ...value.create,\n                ...foreignKeyValues,\n              },\n            });\n\n            _appendQuery(self, query, (as) => (connectOrCreateAs = as));\n          }\n        });\n      }\n    } else {\n      hasRelationHandleCreate(\n        self,\n        ctx,\n        items,\n        rowIndexes,\n        this.key,\n        this.state.primaryKeys,\n        this.nestedInsert,\n      );\n    }\n  }\n\n  update(q: Query, set: RecordUnknown) {\n    const params = set[this.key] as NestedUpdateManyItems;\n    if ((params.set || params.create) && isQueryReturnsAll(q)) {\n      const key = params.set ? 'set' : 'create';\n      throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n    }\n\n    hasRelationHandleUpdate(\n      q,\n      set,\n      this.key,\n      this.state.primaryKeys,\n      this.nestedUpdate,\n    );\n  }\n}\n\nexport const makeHasManyMethod = (\n  tableConfig: ORMTableInput,\n  table: Query,\n  relation: HasMany,\n  relationName: string,\n  query: Query,\n): RelationData => {\n  const relPKeys = getPrimaryKeys(query);\n\n  if ('through' in relation.options) {\n    const { through, source } = relation.options;\n\n    const throughRelation = getThroughRelation(table, through);\n    const sourceRelation = getSourceRelation(throughRelation, source);\n    const sourceRelationQuery = (sourceRelation.query as Query).as(\n      relationName,\n    );\n    const sourceQuery = sourceRelation.joinQuery(\n      sourceRelationQuery,\n      throughRelation.query as never,\n    );\n\n    const whereExistsCallback = () => sourceQuery;\n\n    const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n      return joinHasThrough(\n        baseQuery as Query,\n        baseQuery as Query,\n        joiningQuery as Query,\n        throughRelation,\n        sourceRelation,\n      );\n    };\n\n    return {\n      returns: 'many',\n      queryRelated: (params: RecordUnknown) => {\n        const throughQuery = table.queryRelated(through, params) as Query;\n\n        return query.whereExists(\n          throughQuery,\n          whereExistsCallback as never,\n        ) as never;\n      },\n      joinQuery: joinQueryChainHOF(\n        relPKeys,\n        reverseJoin,\n        (joiningQuery, baseQuery) =>\n          joinHasThrough(\n            joiningQuery as Query,\n            baseQuery as Query,\n            joiningQuery as Query,\n            throughRelation,\n            sourceRelation,\n          ),\n      ),\n      reverseJoin,\n    };\n  }\n\n  const primaryKeys = relation.options.columns as string[];\n  const foreignKeys = relation.options.references as string[];\n  const { on } = relation.options;\n\n  if (on) {\n    _queryWhere(query, [on]);\n    _queryDefaults(query, on);\n  }\n\n  addAutoForeignKey(\n    tableConfig,\n    query,\n    table,\n    primaryKeys,\n    foreignKeys,\n    relation.options,\n  );\n\n  const state: State = { query, primaryKeys, foreignKeys, on };\n  const len = primaryKeys.length;\n\n  const reversedOn: RecordString = {};\n  for (let i = 0; i < len; i++) {\n    reversedOn[foreignKeys[i]] = primaryKeys[i];\n  }\n\n  const fromQuerySelect = [{ selectAs: reversedOn }];\n\n  const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n    return joinHasRelation(\n      joiningQuery as Query,\n      baseQuery as Query,\n      foreignKeys,\n      primaryKeys,\n      len,\n    );\n  };\n\n  return {\n    returns: 'many',\n    queryRelated: (params: RecordUnknown) => {\n      const values: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        values[foreignKeys[i]] = params[primaryKeys[i]];\n      }\n\n      return _queryDefaults(query.where(values as never), { ...on, ...values });\n    },\n    virtualColumn: new HasManyVirtualColumn(\n      defaultSchemaConfig,\n      relationName,\n      state,\n    ),\n    joinQuery: joinQueryChainHOF(\n      relPKeys,\n      reverseJoin,\n      (joiningQuery, baseQuery) =>\n        joinHasRelation(\n          baseQuery as Query,\n          joiningQuery as Query,\n          primaryKeys,\n          foreignKeys,\n          len,\n        ),\n    ),\n    reverseJoin,\n    modifyRelatedQuery(relationQuery) {\n      return (query) => {\n        const baseQuery = (query as Query).clone();\n        baseQuery.q.select = fromQuerySelect;\n        const q = (relationQuery as unknown as PickQueryQ).q;\n        q.insertFrom = prepareSubQueryForSql(q as never, baseQuery);\n        q.values = [];\n      };\n    },\n  };\n};\n\nconst getWhereForNestedUpdate = (\n  t: Query,\n  data: RecordUnknown[],\n  params: MaybeArray<WhereArg<PickQuerySelectableRelations>> | undefined,\n  primaryKeys: string[],\n  foreignKeys: string[],\n): Query => {\n  return t.where({\n    IN: {\n      columns: foreignKeys,\n      values: data.map((item) => primaryKeys.map((key) => item[key])),\n    },\n    OR: params ? toArray(params) : undefined,\n  });\n};\n\nconst nestedInsert = ({ query, primaryKeys, foreignKeys }: State) => {\n  const len = primaryKeys.length;\n\n  return (async (_, data) => {\n    const t = query.clone();\n\n    // array to store specific items will be reused\n    const items: unknown[] = [];\n    for (const item of data) {\n      if (item[1].connect) {\n        items.push(item);\n      }\n    }\n\n    if (items.length) {\n      for (let i = 0, len = items.length; i < len; i++) {\n        const [selfData, { connect }] = items[i] as [\n          RecordUnknown,\n          { connect: NestedInsertManyConnect },\n        ];\n\n        const obj: RecordUnknown = {};\n        for (let i = 0; i < len; i++) {\n          obj[foreignKeys[i]] = selfData[primaryKeys[i]];\n        }\n\n        items[i] = _queryUpdateOrThrow(\n          t.where<Query>({ OR: connect as never[] }),\n          obj as never,\n        );\n      }\n\n      await Promise.all(items);\n    }\n\n    items.length = 0;\n    for (const item of data) {\n      if (item[1].connectOrCreate) {\n        items.push(item);\n      }\n    }\n\n    let connected: number[];\n    if (items.length) {\n      const queries: Query[] = [];\n      for (let i = 0, len = items.length; i < len; i++) {\n        const [selfData, { connectOrCreate }] = items[i] as [\n          RecordUnknown,\n          { connectOrCreate: NestedInsertManyConnectOrCreate },\n        ];\n\n        for (const item of connectOrCreate) {\n          const obj: RecordUnknown = {};\n          for (let i = 0; i < len; i++) {\n            obj[foreignKeys[i]] = selfData[primaryKeys[i]];\n          }\n\n          queries.push(\n            _queryUpdate(\n              t.where(item.where as WhereArg<Query>) as never,\n              obj as never,\n            ),\n          );\n        }\n      }\n\n      connected = (await Promise.all(queries)) as number[];\n    } else {\n      connected = [];\n    }\n\n    let connectedI = 0;\n    items.length = 0;\n    for (const item of data) {\n      if (item[1].connectOrCreate) {\n        const length = item[1].connectOrCreate.length;\n        connectedI += length;\n        for (let i = length; i > 0; i--) {\n          if (connected[connectedI - i] === 0) {\n            items.push(item);\n            break;\n          }\n        }\n      } else if (item[1].create) {\n        items.push(item);\n      }\n    }\n\n    connectedI = 0;\n    if (items.length) {\n      const records: RecordUnknown[] = [];\n\n      for (const [selfData, { create, connectOrCreate }] of items as [\n        RecordUnknown,\n        NestedInsertManyItems,\n      ][]) {\n        const obj: RecordUnknown = {};\n        for (let i = 0; i < len; i++) {\n          obj[foreignKeys[i]] = selfData[primaryKeys[i]];\n        }\n\n        if (create) {\n          for (const item of create) {\n            records.push({\n              ...item,\n              ...obj,\n            });\n          }\n        }\n\n        if (connectOrCreate) {\n          for (const item of connectOrCreate) {\n            if (connected[connectedI++] === 0) {\n              records.push({\n                ...item.create,\n                ...obj,\n              });\n            }\n          }\n        }\n      }\n\n      await _queryCreateMany(t, records);\n    }\n  }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKeys, foreignKeys }: State) => {\n  const len = primaryKeys.length;\n\n  return (async (_, data, params) => {\n    const t = query.clone();\n    if (params.create) {\n      const obj: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        obj[foreignKeys[i]] = data[0][primaryKeys[i]];\n      }\n\n      await t.insertMany(\n        params.create.map((create) => ({\n          ...create,\n          ...obj,\n        })),\n      );\n    }\n\n    if (params.add) {\n      if (data.length > 1) {\n        throw new OrchidOrmInternalError(\n          query,\n          '`connect` is not available when updating multiple records, it is only applicable for a single record update',\n        );\n      }\n\n      const obj: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        obj[foreignKeys[i]] = data[0][primaryKeys[i]];\n      }\n\n      const relatedWheres = toArray(params.add);\n\n      const count = await _queryUpdate(\n        t.where({ OR: relatedWheres }) as Query,\n        obj as never,\n      );\n\n      if (count < relatedWheres.length) {\n        throw new OrchidOrmInternalError(\n          query,\n          `Expected to find at least ${relatedWheres.length} record(s) based on \\`add\\` conditions, but found ${count}`,\n        );\n      }\n    }\n\n    if (params.disconnect || params.set) {\n      const obj: RecordUnknown = {};\n      for (const foreignKey of foreignKeys) {\n        obj[foreignKey] = null;\n      }\n\n      const setConditions =\n        params.set &&\n        (Array.isArray(params.set)\n          ? params.set.length\n          : objectHasValues(params.set)) &&\n        (Array.isArray(params.set)\n          ? {\n              OR: params.set,\n            }\n          : params.set);\n\n      let queryToDisconnect = getWhereForNestedUpdate(\n        t,\n        data,\n        params.disconnect,\n        primaryKeys,\n        foreignKeys,\n      );\n\n      // do not nullify those records that are going to be set, because the column may non-nullable.\n      if (setConditions) {\n        queryToDisconnect = queryToDisconnect.whereNot(setConditions) as never;\n      }\n\n      await _queryUpdate(queryToDisconnect, obj as never);\n\n      if (setConditions) {\n        const obj: RecordUnknown = {};\n        for (let i = 0; i < len; i++) {\n          obj[foreignKeys[i]] = data[0][primaryKeys[i]];\n        }\n\n        await _queryUpdate(\n          t.where<Query>(setConditions as never),\n          obj as never,\n        );\n      }\n    }\n\n    if (params.delete || params.update) {\n      const q = getWhereForNestedUpdate(\n        t,\n        data,\n        params.delete || params.update?.where,\n        primaryKeys,\n        foreignKeys,\n      );\n\n      if (params.delete) {\n        await _queryDelete(q);\n      } else if (params.update) {\n        await _queryUpdate(q, params.update.data as never);\n      }\n    }\n  }) as HasManyNestedUpdate;\n};\n","import {\n  RelationConfigSelf,\n  RelationData,\n  RelationThunkBase,\n} from './relations';\nimport { NotFoundError, OrchidOrmInternalError } from 'pqb';\nimport { ORMTableInput } from '../baseTable';\nimport {\n  _queryCreateManyFrom,\n  _queryCreateMany,\n  _queryDefaults,\n  _queryDelete,\n  _queryFindBy,\n  _queryFindByOptional,\n  _queryHookAfterCreate,\n  _queryJoinOn,\n  _queryRows,\n  _querySelect,\n  _queryUpdate,\n  _queryWhere,\n  _queryWhereExists,\n  CreateCtx,\n  CreateData,\n  getQueryAs,\n  JoinedShapes,\n  Query,\n  SelectableFromShape,\n  TableData,\n  UpdateData,\n  VirtualColumn,\n  WhereArg,\n  ColumnSchemaConfig,\n  ColumnsShape,\n  getPrimaryKeys,\n  MaybeArray,\n  objectHasValues,\n  pick,\n  RecordString,\n  RecordUnknown,\n  RelationConfigBase,\n  RelationJoinQuery,\n  toArray,\n  toSnakeCase,\n  defaultSchemaConfig,\n  Column,\n  QueryHasWhere,\n  QuerySchema,\n} from 'pqb/internal';\nimport {\n  addAutoForeignKey,\n  hasRelationHandleCreate,\n  hasRelationHandleUpdate,\n  HasRelJoin,\n  NestedInsertManyConnect,\n  NestedInsertManyConnectOrCreate,\n  NestedInsertManyItems,\n} from './common/utils';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from './hasMany';\nimport { joinQueryChainHOF } from './common/joinQueryChain';\n\nexport interface HasAndBelongsToMany extends RelationThunkBase {\n  type: 'hasAndBelongsToMany';\n  options: HasAndBelongsToManyOptions;\n}\n\nexport interface HasAndBelongsToManyOptions<\n  Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit,\n  Related extends ORMTableInput = ORMTableInput,\n> {\n  required?: boolean;\n  columns: (keyof Columns)[];\n  references: string[];\n  foreignKey?: boolean | TableData.References.Options;\n  through: {\n    schema?: QuerySchema;\n    table: string;\n    columns: string[];\n    references: (keyof Related['columns']['shape'])[];\n    foreignKey?: boolean | TableData.References.Options;\n  };\n  on?: ColumnsShape.InputPartial<Related['columns']['shape']>;\n}\n\nexport type HasAndBelongsToManyParams<\n  T extends RelationConfigSelf,\n  FK extends string,\n> = {\n  [Name in FK]: T['columns']['shape'][Name]['type'];\n};\n\nexport type HasAndBelongsToManyQuery<\n  Name extends string,\n  TableQuery extends Query,\n> = {\n  [K in keyof TableQuery]: K extends '__selectable'\n    ? SelectableFromShape<TableQuery['shape'], Name>\n    : K extends '__as'\n      ? Name\n      : TableQuery[K];\n} & QueryHasWhere &\n  HasRelJoin;\n\nexport interface HasAndBelongsToManyInfo<\n  T extends RelationConfigSelf,\n  Name extends string,\n  FK extends string,\n  Q extends Query,\n> extends RelationConfigBase {\n  returnsOne: false;\n  query: Q;\n  params: HasAndBelongsToManyParams<T, FK>;\n  maybeSingle: Q;\n  omitForeignKeyInCreate: never;\n  optionalDataForCreate: {\n    [P in Name]?: {\n      // create related records\n      create?: CreateData<Q>[];\n      // find existing records by `where` conditions and update their foreign keys with the new id\n      connect?: WhereArg<Q>[];\n      // try finding records by `where` conditions, and create them if not found\n      connectOrCreate?: {\n        where: WhereArg<Q>;\n        create: CreateData<Q>;\n      }[];\n    };\n  };\n  dataForCreate: never;\n  // `hasAndBelongsToMany` relation data available for update. It supports:\n  // - `disconnect` deletes join table records for related records found by conditions\n  // - `set` creates join table records for related records found by conditions, deletes previous connects\n  // - `add` creates join table records for related records found by conditions, does not delete previous connects\n  // - `delete` deletes join table records and related records found by conditions\n  // - `update` updates related records found by conditions with a provided data\n  // - `create` creates related records and a join table records\n  dataForUpdate: {\n    disconnect?: MaybeArray<WhereArg<Q>>;\n    set?: MaybeArray<WhereArg<Q>>;\n    add?: MaybeArray<WhereArg<Q>>;\n    delete?: MaybeArray<WhereArg<Q>>;\n    update?: {\n      where: MaybeArray<WhereArg<Q>>;\n      data: UpdateData<Q>;\n    };\n    create?: CreateData<Q>[];\n  };\n  dataForUpdateOne: {\n    disconnect?: MaybeArray<WhereArg<Q>>;\n    set?: MaybeArray<WhereArg<Q>>;\n    add?: MaybeArray<WhereArg<Q>>;\n    delete?: MaybeArray<WhereArg<Q>>;\n    update?: {\n      where: MaybeArray<WhereArg<Q>>;\n      data: UpdateData<Q>;\n    };\n    create?: CreateData<Q>[];\n  };\n}\n\ninterface State {\n  relatedTableQuery: Query;\n  joinTableQuery: Query;\n  primaryKeys: string[];\n  foreignKeys: string[];\n  throughForeignKeys: string[];\n  throughPrimaryKeys: string[];\n  foreignKeysFull: string[];\n  throughForeignKeysFull: string[];\n  throughPrimaryKeysFull: string[];\n  primaryKeysShape: Column.Shape.Data;\n  on?: RecordUnknown;\n}\n\nclass HasAndBelongsToManyVirtualColumn extends VirtualColumn<ColumnSchemaConfig> {\n  private readonly nestedInsert: HasManyNestedInsert;\n  private readonly nestedUpdate: HasManyNestedUpdate;\n\n  constructor(\n    // is used to generate a migration for join table\n    public joinTable: Query,\n    schema: ColumnSchemaConfig,\n    private key: string,\n    private state: State,\n  ) {\n    super(schema);\n    this.nestedInsert = nestedInsert(state);\n    this.nestedUpdate = nestedUpdate(state);\n  }\n\n  create(\n    q: Query,\n    ctx: CreateCtx,\n    items: RecordUnknown[],\n    rowIndexes: number[],\n  ) {\n    hasRelationHandleCreate(\n      q,\n      ctx,\n      items,\n      rowIndexes,\n      this.key,\n      this.state.primaryKeys,\n      this.nestedInsert,\n    );\n  }\n\n  update(q: Query, set: RecordUnknown) {\n    hasRelationHandleUpdate(\n      q,\n      set,\n      this.key,\n      this.state.primaryKeys,\n      this.nestedUpdate,\n    );\n  }\n}\n\nconst removeColumnName = (column: Column.Pick.Data) => {\n  if (!column.data.name) return column;\n\n  const cloned = Object.create(column);\n  cloned.data = { ...column.data, name: undefined };\n  return cloned;\n};\n\nexport const makeHasAndBelongsToManyMethod = (\n  tableConfig: ORMTableInput,\n  table: Query,\n  qb: Query,\n  relation: HasAndBelongsToMany,\n  relationName: string,\n  query: Query,\n  schema?: QuerySchema,\n): RelationData => {\n  const { options } = relation;\n  const { snakeCase } = table.internal;\n  const primaryKeys = options.columns as string[];\n  const foreignKeys = options.references;\n  const originalForeignKeys = snakeCase ? [...foreignKeys] : foreignKeys;\n  const joinTable = options.through.table;\n  const throughForeignKeys = options.through.columns;\n  const originalThroughForeignKeys = snakeCase\n    ? [...throughForeignKeys]\n    : throughForeignKeys;\n  const throughPrimaryKeys = options.through.references as string[];\n  const { on } = options;\n\n  if (on) {\n    _queryWhere(query, [on]);\n    _queryDefaults(query, on);\n  }\n\n  const foreignKeysFull = foreignKeys.map((key, i) => {\n    if (snakeCase) key = foreignKeys[i] = toSnakeCase(key);\n\n    return `${joinTable}.${key}`;\n  });\n\n  const throughForeignKeysFull = throughForeignKeys.map((key, i) => {\n    if (snakeCase) key = throughForeignKeys[i] = toSnakeCase(key);\n\n    return `${joinTable}.${key}`;\n  });\n\n  const foreignTable = getQueryAs(query);\n  const throughPrimaryKeysFull = throughPrimaryKeys.map(\n    (key) => `${foreignTable}.${key}`,\n  );\n\n  const len = primaryKeys.length;\n  const throughLen = throughPrimaryKeys.length;\n\n  const baseQuery = Object.create(qb.baseQuery);\n  baseQuery.baseQuery = baseQuery;\n  baseQuery.table = joinTable;\n\n  const shape: Column.Shape.Data = {};\n  const primaryKeysShape: Column.Shape.Data = {};\n\n  for (let i = 0; i < len; i++) {\n    const pk = primaryKeys[i];\n\n    shape[foreignKeys[i]] = removeColumnName(\n      table.shape[pk] as unknown as Column.Pick.Data,\n    );\n\n    primaryKeysShape[pk] = table.shape[pk] as unknown as Column.Pick.Data;\n  }\n\n  for (let i = 0; i < throughLen; i++) {\n    shape[throughForeignKeys[i]] = removeColumnName(\n      query.shape[throughPrimaryKeys[i]] as unknown as Column.Pick.Data,\n    );\n  }\n\n  baseQuery.shape = shape;\n  baseQuery.q = {\n    ...baseQuery.q,\n    schema: options.through.schema || schema,\n    shape: baseQuery.shape,\n  };\n  const subQuery = Object.create(baseQuery) as Query;\n\n  addAutoForeignKey(\n    tableConfig,\n    subQuery,\n    table,\n    primaryKeys,\n    foreignKeys,\n    relation.options,\n    originalForeignKeys,\n  );\n\n  addAutoForeignKey(\n    tableConfig,\n    subQuery,\n    query,\n    throughPrimaryKeys,\n    throughForeignKeys,\n    relation.options.through,\n    originalThroughForeignKeys,\n  );\n\n  const state: State = {\n    relatedTableQuery: query,\n    joinTableQuery: subQuery,\n    primaryKeys,\n    foreignKeys,\n    throughForeignKeys,\n    throughPrimaryKeys,\n    foreignKeysFull,\n    throughForeignKeysFull,\n    throughPrimaryKeysFull,\n    primaryKeysShape,\n    on,\n  };\n\n  const joinQuery = (\n    joiningQuery: Query,\n    tableAs: string,\n    foreignAs: string,\n    joinedShapes: JoinedShapes,\n  ) => {\n    const cloned = joiningQuery.clone();\n    cloned.q.joinedShapes = joinedShapes;\n    return _queryWhereExists(cloned, subQuery, [\n      (q) => {\n        for (let i = 0; i < throughLen; i++) {\n          _queryJoinOn(q, [\n            throughForeignKeysFull[i],\n            `${foreignAs}.${throughPrimaryKeys[i]}`,\n          ]);\n        }\n\n        for (let i = 0; i < len; i++) {\n          _queryJoinOn(q, [foreignKeysFull[i], `${tableAs}.${primaryKeys[i]}`]);\n        }\n\n        return q;\n      },\n    ]);\n  };\n\n  const obj: RecordString = {};\n  for (let i = 0; i < len; i++) {\n    obj[foreignKeys[i]] = primaryKeys[i];\n  }\n  const selectPrimaryKeysAsForeignKeys = [{ selectAs: obj }];\n\n  const reverseJoin: RelationJoinQuery = (baseQuery, joiningQuery) => {\n    const foreignAs = getQueryAs(joiningQuery as Query);\n    return joinQuery(\n      baseQuery as Query,\n      getQueryAs(baseQuery as Query),\n      foreignAs,\n      {\n        ...(baseQuery as Query).q.joinedShapes,\n        [foreignAs]: (joiningQuery as Query).q.shape,\n      },\n    );\n  };\n\n  return {\n    returns: 'many',\n    queryRelated(params: RecordUnknown) {\n      const q = query.whereExists(subQuery, (q) => {\n        q = q.clone();\n\n        const where: RecordUnknown = {};\n        for (let i = 0; i < len; i++) {\n          where[foreignKeysFull[i]] = params[primaryKeys[i]];\n        }\n\n        for (let i = 0; i < throughLen; i++) {\n          _queryJoinOn(q, [\n            throughForeignKeysFull[i],\n            throughPrimaryKeysFull[i],\n          ]);\n        }\n\n        return _queryWhere(q, [where as never]);\n      });\n\n      return on ? _queryDefaults(q, on) : q;\n    },\n    virtualColumn: new HasAndBelongsToManyVirtualColumn(\n      subQuery,\n      defaultSchemaConfig,\n      relationName,\n      state,\n    ),\n    joinQuery: joinQueryChainHOF(\n      getPrimaryKeys(query),\n      reverseJoin,\n      (joiningQuery, baseQuery) =>\n        joinQuery(\n          joiningQuery as Query,\n          getQueryAs(baseQuery as Query),\n          getQueryAs(joiningQuery as Query),\n          {\n            ...(joiningQuery as Query).q.joinedShapes,\n            [((baseQuery as Query).q.as ||\n              (baseQuery as Query).table) as string]: (baseQuery as Query).q\n              .shape,\n          },\n        ),\n    ),\n    reverseJoin,\n    modifyRelatedQuery(relationQuery) {\n      const ref = {} as { q: Query };\n\n      _queryHookAfterCreate(\n        relationQuery as Query,\n        [],\n        async (result: unknown[]) => {\n          const baseQuery = ref.q.clone();\n          baseQuery.q.select = selectPrimaryKeysAsForeignKeys;\n\n          const data = result.map((resultRow) => {\n            const dataRow: RecordUnknown = {};\n            for (let i = 0; i < throughLen; i++) {\n              dataRow[throughForeignKeys[i]] = (resultRow as RecordUnknown)[\n                throughPrimaryKeys[i]\n              ];\n            }\n            return dataRow;\n          });\n\n          const createdCount = await _queryCreateManyFrom(\n            subQuery.count(),\n            baseQuery as Query & { returnType: 'one' | 'oneOrThrow' },\n            data as never,\n          );\n\n          if ((createdCount as unknown as number) === 0) {\n            throw new NotFoundError(baseQuery);\n          }\n        },\n      );\n\n      return (q) => {\n        ref.q = q as Query;\n      };\n    },\n  };\n};\n\nconst queryJoinTable = (\n  state: State,\n  data: RecordUnknown[],\n  conditions?: MaybeArray<WhereArg<Query>>,\n) => {\n  const t = state.joinTableQuery.where({\n    IN: {\n      columns: state.foreignKeys,\n      values: data.map((item) => state.primaryKeys.map((key) => item[key])),\n    },\n  });\n\n  if (conditions) {\n    _queryWhere(t, [\n      {\n        IN: {\n          columns: state.throughForeignKeys,\n          values: _querySelect(\n            state.relatedTableQuery.where(conditionsToWhereArg(conditions)),\n            state.throughPrimaryKeys,\n          ),\n        },\n      },\n    ]);\n  }\n\n  if (state.on) {\n    _queryWhereExists(t, state.relatedTableQuery, [\n      (q) => {\n        for (let i = 0; i < state.throughPrimaryKeys.length; i++) {\n          _queryJoinOn(q, [\n            state.throughPrimaryKeysFull[i],\n            state.throughForeignKeysFull[i],\n          ]);\n        }\n        return q;\n      },\n    ]);\n  }\n\n  return t;\n};\n\nconst conditionsToWhereArg = (\n  conditions: MaybeArray<WhereArg<Query>>,\n): WhereArg<Query> =>\n  Array.isArray(conditions) ? { OR: conditions } : conditions;\n\nconst insertToJoinTable = (\n  state: State,\n  joinTableTransaction: Query,\n  data: RecordUnknown[],\n  idsRows: unknown[][],\n) => {\n  const len = state.primaryKeys.length;\n  const throughLen = state.throughPrimaryKeys.length;\n\n  const records: RecordUnknown[] = [];\n  for (const item of data) {\n    const obj: RecordUnknown = {};\n    for (let i = 0; i < len; i++) {\n      obj[state.foreignKeys[i]] = item[state.primaryKeys[i]];\n    }\n\n    for (const ids of idsRows) {\n      const record = { ...obj };\n      for (let i = 0; i < throughLen; i++) {\n        record[state.throughForeignKeys[i]] = ids[i];\n      }\n      records.push(record);\n    }\n  }\n\n  return joinTableTransaction.insertMany(records);\n};\n\nconst nestedInsert = ({\n  relatedTableQuery,\n  joinTableQuery,\n  primaryKeys,\n  foreignKeys,\n  throughPrimaryKeys,\n  throughForeignKeys,\n}: State) => {\n  const len = primaryKeys.length;\n  const throughLen = primaryKeys.length;\n\n  return (async (_, data) => {\n    const t = relatedTableQuery.clone();\n\n    // array to store specific items will be reused\n    const items: unknown[] = [];\n    for (const item of data) {\n      if (item[1].connect) {\n        items.push(item);\n      }\n    }\n\n    let connected: RecordUnknown[];\n    if (items.length) {\n      const queries: Query[] = [];\n\n      for (const [, { connect }] of items as [\n        unknown,\n        { connect: NestedInsertManyConnect },\n      ][]) {\n        for (const item of connect) {\n          queries.push(\n            _queryFindBy(\n              t.select(...throughPrimaryKeys),\n              item as never,\n            ) as Query,\n          );\n        }\n      }\n\n      connected = (await Promise.all(queries)) as Record<string, unknown[]>[];\n    } else {\n      connected = [];\n    }\n\n    items.length = 0;\n    for (const item of data) {\n      if (item[1].connectOrCreate) {\n        items.push(item);\n      }\n    }\n\n    let connectOrCreated: (RecordUnknown | undefined)[];\n    if (items.length) {\n      const queries: Query[] = [];\n\n      for (const [, { connectOrCreate }] of items as [\n        unknown,\n        { connectOrCreate: NestedInsertManyConnectOrCreate },\n      ][]) {\n        for (const item of connectOrCreate) {\n          queries.push(\n            _queryFindByOptional(\n              t.select(...throughPrimaryKeys),\n              item.where as never,\n            ) as Query,\n          );\n        }\n      }\n\n      connectOrCreated = (await Promise.all(queries)) as RecordUnknown[];\n    } else {\n      connectOrCreated = [];\n    }\n\n    let connectOrCreateI = 0;\n    items.length = 0;\n    for (const item of data) {\n      if (item[1].connectOrCreate) {\n        const length = item[1].connectOrCreate.length;\n        connectOrCreateI += length;\n        for (let i = length; i > 0; i--) {\n          if (!connectOrCreated[connectOrCreateI - i]) {\n            items.push(item);\n            break;\n          }\n        }\n      } else if (item[1].create) {\n        items.push(item);\n      }\n    }\n\n    connectOrCreateI = 0;\n    let created: RecordUnknown[];\n    if (items.length) {\n      const records: RecordUnknown[] = [];\n\n      for (const [, { create, connectOrCreate }] of items as [\n        unknown,\n        NestedInsertManyItems,\n      ][]) {\n        if (create) {\n          records.push(...create);\n        }\n\n        if (connectOrCreate) {\n          for (const item of connectOrCreate) {\n            if (!connectOrCreated[connectOrCreateI++]) {\n              records.push(item.create);\n            }\n          }\n        }\n      }\n\n      created = (await _queryCreateMany(\n        t.select(...throughPrimaryKeys),\n        records,\n      )) as never;\n    } else {\n      created = [];\n    }\n\n    const allKeys = data as unknown as [\n      selfData: RecordUnknown,\n      relationKeys: RecordUnknown[],\n    ][];\n\n    let createI = 0;\n    let connectI = 0;\n    connectOrCreateI = 0;\n    for (let index = 0, len = data.length; index < len; index++) {\n      const item = data[index][1] as NestedInsertManyItems;\n\n      if (item.create || item.connectOrCreate) {\n        if (item.create) {\n          const len = item.create.length;\n          allKeys[index][1] = created.slice(createI, createI + len);\n          createI += len;\n        }\n        if (item.connectOrCreate) {\n          const arr: RecordUnknown[] = [];\n          allKeys[index][1] = arr;\n\n          const len = item.connectOrCreate.length;\n          for (let i = 0; i < len; i++) {\n            const item = connectOrCreated[connectOrCreateI++];\n            if (item) {\n              arr.push(item);\n            } else {\n              arr.push(created[createI++]);\n            }\n          }\n        }\n      }\n\n      if (item.connect) {\n        const len = item.connect.length;\n        allKeys[index][1] = connected.slice(connectI, connectI + len);\n        connectI += len;\n      }\n    }\n\n    const records: RecordUnknown[] = [];\n    for (const [selfData, relationKeys] of allKeys) {\n      const obj: RecordUnknown = {};\n      for (let i = 0; i < len; i++) {\n        obj[foreignKeys[i]] = selfData[primaryKeys[i]];\n      }\n\n      for (const relationData of relationKeys) {\n        const record = { ...obj };\n\n        for (let i = 0; i < throughLen; i++) {\n          record[throughForeignKeys[i]] = relationData[throughPrimaryKeys[i]];\n        }\n\n        records.push(record);\n      }\n    }\n\n    await joinTableQuery.insertMany(records);\n  }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = (state: State) => {\n  const len = state.primaryKeys.length;\n  const throughLen = state.throughPrimaryKeys.length;\n\n  return (async (query, data, params) => {\n    if (params.create) {\n      const idsRows: unknown[][] = await _queryCreateMany(\n        _queryRows(state.relatedTableQuery.select(...state.throughPrimaryKeys)),\n        params.create,\n      );\n\n      const records: RecordUnknown[] = [];\n      for (const item of data) {\n        const obj: RecordUnknown = {};\n        for (let i = 0; i < len; i++) {\n          obj[state.foreignKeys[i]] = item[state.primaryKeys[i]];\n        }\n\n        for (const ids of idsRows) {\n          const record = { ...obj };\n\n          for (let i = 0; i < throughLen; i++) {\n            record[state.throughForeignKeys[i]] = ids[i];\n          }\n\n          records.push(record);\n        }\n      }\n\n      await state.joinTableQuery.createMany(records);\n    }\n\n    if (params.update) {\n      await _queryUpdate(\n        _queryWhere(\n          state.relatedTableQuery.whereExists(state.joinTableQuery, (q) => {\n            for (let i = 0; i < throughLen; i++) {\n              _queryJoinOn(q, [\n                state.throughForeignKeysFull[i],\n                state.throughPrimaryKeysFull[i],\n              ]);\n            }\n\n            return _queryWhere(q, [\n              {\n                IN: {\n                  columns: state.foreignKeysFull,\n                  values: data.map((item) =>\n                    state.primaryKeys.map((key) => item[key]),\n                  ),\n                },\n              },\n            ]);\n          }),\n          [conditionsToWhereArg(params.update.where as WhereArg<Query>)],\n        ),\n        params.update.data as UpdateData<Query>,\n      );\n    }\n\n    /**\n     * Performs `insertForEachFrom` on the joining table,\n     * based on a query to the related table with applied filters of `params.connect`,\n     * joins the main table data using `joinData`.\n     */\n    if (params.add) {\n      const as = query.table as string;\n      const relatedWheres = toArray(params.add);\n      const joinTableColumns = [\n        ...state.foreignKeys,\n        ...state.throughForeignKeys,\n      ];\n\n      try {\n        const count = await state.joinTableQuery\n          .insertForEachFrom(\n            _querySelect(\n              state.relatedTableQuery.whereOneOf(...relatedWheres) as Query,\n              [\n                Object.fromEntries([\n                  ...state.primaryKeys.map((key, i) => [\n                    state.foreignKeys[i],\n                    as + '.' + (state.primaryKeysShape[key].data.name || key),\n                  ]),\n                  ...state.throughForeignKeys.map((key, i) => [\n                    key,\n                    state.throughPrimaryKeys[i],\n                  ]),\n                ]),\n              ],\n            ).joinData(\n              as,\n              () =>\n                Object.fromEntries(\n                  state.primaryKeys.map((key) => [\n                    key,\n                    state.primaryKeysShape[key],\n                  ]),\n                ) as never,\n              data.map((x) => pick(x, state.primaryKeys)) as never,\n            ),\n          )\n          // do update on conflict to increase the resulting counter\n          .onConflict(joinTableColumns)\n          .merge([state.foreignKeys[0]]);\n\n        if (count < data.length * relatedWheres.length) {\n          throw new OrchidOrmInternalError(\n            query,\n            `Expected to find at least ${\n              relatedWheres.length\n            } record(s) based on \\`add\\` conditions, but found ${\n              count / data.length\n            }`,\n          );\n        }\n      } catch (err) {\n        if ((err as RecordUnknown).code === '42P10') {\n          throw new OrchidOrmInternalError(\n            query,\n            `\"${\n              state.joinTableQuery.table\n            }\" must have a primary key or a unique index on columns (${joinTableColumns.join(\n              ', ',\n            )}) for this kind of query.`,\n          );\n        }\n        throw err;\n      }\n    }\n\n    if (params.disconnect) {\n      await _queryDelete(\n        queryJoinTable(state, data, params.disconnect as WhereArg<Query>),\n      );\n    }\n\n    if (params.delete) {\n      const j = queryJoinTable(state, data, params.delete as WhereArg<Query>);\n\n      const idsRows = await _queryDelete(\n        _queryRows(_querySelect(j, state.throughForeignKeys)),\n      );\n\n      await _queryDelete(\n        state.relatedTableQuery.where({\n          IN: {\n            columns: state.throughPrimaryKeys,\n            values: idsRows,\n          },\n        }),\n      );\n    }\n\n    if (params.set) {\n      const j = queryJoinTable(state, data);\n      await _queryDelete(j);\n\n      if (\n        Array.isArray(params.set)\n          ? params.set.length\n          : objectHasValues(params.set)\n      ) {\n        const idsRows = await _queryRows(\n          _querySelect(\n            state.relatedTableQuery.where(\n              conditionsToWhereArg(params.set as WhereArg<Query>),\n            ),\n            state.throughPrimaryKeys,\n          ),\n        );\n\n        await insertToJoinTable(state, j, data, idsRows);\n      }\n    }\n  }) as HasManyNestedUpdate;\n};\n","import { BelongsTo, BelongsToParams, makeBelongsToMethod } from './belongsTo';\nimport { HasOne, HasOneParams, makeHasOneMethod } from './hasOne';\nimport { ORMTableInput, TableClass, TableInfo, TableToDb } from '../baseTable';\nimport { OrchidORM } from '../orm';\nimport {\n  _queryTake,\n  _queryTakeOptional,\n  CreateData,\n  Query,\n  VirtualColumn,\n  WhereArg,\n  ColumnSchemaConfig,\n  IsQuery,\n  RecordUnknown,\n  RelationJoinQuery,\n  RelationsBase,\n  Column,\n  QuerySchema,\n} from 'pqb/internal';\nimport { HasMany, makeHasManyMethod } from './hasMany';\nimport {\n  HasAndBelongsToMany,\n  HasAndBelongsToManyParams,\n  makeHasAndBelongsToManyMethod,\n} from './hasAndBelongsToMany';\nimport { getSourceRelation, getThroughRelation } from './common/utils';\n\n// `belongsTo` and `hasOne` relation data available for create. It supports:\n// - `create` to create a related record\n// - `connect` to find existing record and use its primary key\n// - `connectOrCreate` to first try connecting to an existing record, and create it if not found\nexport type RelationToOneDataForCreate<\n  Rel extends { nestedCreateQuery: unknown; table: Query },\n> =\n  | {\n      create: Rel['nestedCreateQuery'];\n      connect?: never;\n      connectOrCreate?: never;\n    }\n  | {\n      create?: never;\n      connect: WhereArg<Rel['table']>;\n      connectOrCreate?: never;\n    }\n  | {\n      create?: never;\n      connect?: never;\n      connectOrCreate: {\n        where: WhereArg<Rel['table']>;\n        create: Rel['nestedCreateQuery'];\n      };\n    };\n\nexport type RelationToOneDataForCreateSameQuery<Q extends Query> =\n  | {\n      create: CreateData<Q>;\n      connect?: never;\n      connectOrCreate?: never;\n    }\n  | {\n      create?: never;\n      connect: WhereArg<Q>;\n      connectOrCreate?: never;\n    }\n  | {\n      create?: never;\n      connect?: never;\n      connectOrCreate: {\n        where: WhereArg<Q>;\n        create: CreateData<Q>;\n      };\n    };\n\nexport interface RelationThunkBase {\n  type: string;\n  related: ORMTableInput;\n  options: unknown;\n}\n\nexport type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;\n\nexport interface RelationThunks {\n  [K: string]: RelationThunk;\n}\n\nexport interface RelationData {\n  returns: 'one' | 'many';\n  queryRelated(params: RecordUnknown): Query;\n  virtualColumn?: VirtualColumn<ColumnSchemaConfig>;\n  joinQuery: RelationJoinQuery;\n  reverseJoin: RelationJoinQuery;\n  modifyRelatedQuery?(relatedQuery: IsQuery): (query: IsQuery) => void;\n}\n\nexport type RelationTableToQuery<Relation> = Relation extends {\n  related: infer R extends ORMTableInput;\n}\n  ? TableToDb<R>\n  : never;\n\nexport interface RelationConfigSelf {\n  columns: { shape: Column.Shape.QueryInit };\n  relations: RelationThunks;\n}\n\nexport type RelationConfigParams<\n  T extends RelationConfigSelf,\n  Relation extends RelationThunk,\n> = Relation extends BelongsTo\n  ? BelongsToParams<T, Relation['options']['columns'][number] & string>\n  : Relation extends HasOne | HasMany\n    ? HasOneParams<T, Relation['options']>\n    : Relation extends HasAndBelongsToMany\n      ? HasAndBelongsToManyParams<\n          T,\n          Relation['options']['columns'][number] & string\n        >\n      : never;\n\ninterface ApplyRelationData {\n  relationName: string;\n  relation: RelationThunk;\n  dbTable: Query;\n  otherDbTable: Query;\n}\n\ntype DelayedRelations = Map<Query, Record<string, ApplyRelationData[]>>;\n\nexport const applyRelations = (\n  qb: Query,\n  tables: Record<string, ORMTableInput>,\n  result: OrchidORM,\n  schema?: QuerySchema,\n) => {\n  const tableEntries = Object.entries(tables);\n\n  const delayedRelations: DelayedRelations = new Map();\n\n  for (const name in tables) {\n    const table = tables[name] as ORMTableInput & {\n      relations?: RelationThunks;\n    };\n    if (!('relations' in table) || typeof table.relations !== 'object')\n      continue;\n\n    const dbTable = result[name];\n    for (const relationName in table.relations) {\n      const relation = table.relations[relationName];\n      const otherTableClass = (\n        relation as unknown as { fn(): TableClass }\n      ).fn();\n      const otherTable = tableEntries.find(\n        (pair) => pair[1] instanceof otherTableClass,\n      );\n      if (!otherTable) {\n        throw new Error(\n          `Cannot find table class for class ${otherTableClass.name}`,\n        );\n      }\n      const otherTableName = otherTable[0];\n      const otherDbTable = result[otherTableName];\n      if (!otherDbTable)\n        throw new Error(`Cannot find table class by name ${otherTableName}`);\n\n      const data: ApplyRelationData = {\n        relationName,\n        relation,\n        dbTable,\n        otherDbTable,\n      };\n\n      const options = relation.options as { through?: string; source?: string };\n      if (\n        typeof options.through === 'string' &&\n        typeof options.source === 'string'\n      ) {\n        const throughRelation = getThroughRelation(dbTable, options.through);\n        if (!throughRelation) {\n          delayRelation(delayedRelations, dbTable, options.through, data);\n          continue;\n        }\n\n        const sourceRelation = getSourceRelation(\n          throughRelation,\n          options.source,\n        );\n        if (!sourceRelation) {\n          delayRelation(\n            delayedRelations,\n            (throughRelation as unknown as { table: Query }).table,\n            options.source,\n            data,\n          );\n          continue;\n        }\n      }\n\n      applyRelation(table, qb, data, delayedRelations, schema);\n    }\n  }\n\n  if (delayedRelations.size) {\n    const { value } = delayedRelations.values().next() as {\n      value: Record<string, ApplyRelationData[]>;\n    };\n    for (const key in value) {\n      for (const item of value[key]) {\n        const { relation } = item;\n\n        if (item.dbTable.relations[item.relationName] as never) continue;\n\n        const as = (item.dbTable as unknown as TableInfo).definedAs;\n        let message = `Cannot define a \\`${item.relationName}\\` relation on \\`${as}\\``;\n        const table = result[as];\n\n        const { through, source } = relation.options as {\n          through: string;\n          source: string;\n        };\n        const throughRel = (table.relations as RelationsBase)[\n          through\n        ] as unknown as { table: Query } | undefined;\n\n        if (through && !throughRel) {\n          message += `: cannot find \\`${through}\\` relation required by the \\`through\\` option`;\n        } else if (\n          source &&\n          throughRel &&\n          !throughRel.table.relations[source as never]\n        ) {\n          message += `: cannot find \\`${source}\\` relation in \\`${\n            (throughRel.table as unknown as TableInfo).definedAs\n          }\\` required by the \\`source\\` option`;\n        }\n\n        throw new Error(message);\n      }\n    }\n  }\n};\n\nconst delayRelation = (\n  delayedRelations: DelayedRelations,\n  table: Query,\n  relationName: string,\n  data: ApplyRelationData,\n) => {\n  let tableRelations = delayedRelations.get(table);\n  if (!tableRelations) {\n    tableRelations = {};\n    delayedRelations.set(table, tableRelations);\n  }\n  if (tableRelations[relationName]) {\n    tableRelations[relationName].push(data);\n  } else {\n    tableRelations[relationName] = [data];\n  }\n};\n\nconst applyRelation = (\n  table: ORMTableInput,\n  qb: Query,\n  { relationName, relation, dbTable, otherDbTable }: ApplyRelationData,\n  delayedRelations: DelayedRelations,\n  schema?: QuerySchema,\n) => {\n  const baseQuery = Object.create(otherDbTable);\n  baseQuery.baseQuery = baseQuery;\n\n  const query = baseQuery.as(relationName);\n\n  const definedAs = (query as unknown as { definedAs?: string }).definedAs;\n  if (!definedAs) {\n    throw new Error(\n      `Table class for table ${query.table} is not attached to db instance`,\n    );\n  }\n\n  const { type } = relation;\n  let data;\n  if (type === 'belongsTo') {\n    data = makeBelongsToMethod(table, dbTable, relation, relationName, query);\n  } else if (type === 'hasOne') {\n    data = makeHasOneMethod(table, dbTable, relation, relationName, query);\n  } else if (type === 'hasMany') {\n    data = makeHasManyMethod(table, dbTable, relation, relationName, query);\n  } else if (type === 'hasAndBelongsToMany') {\n    data = makeHasAndBelongsToManyMethod(\n      table,\n      dbTable,\n      qb,\n      relation,\n      relationName,\n      query,\n      schema,\n    );\n  } else {\n    throw new Error(`Unknown relation type ${type}`);\n  }\n\n  if (data.returns === 'one') {\n    if (relation.options.required) {\n      _queryTake(query);\n    } else {\n      _queryTakeOptional(query);\n    }\n\n    query.q.returnsOne = true;\n  }\n\n  if (data.virtualColumn) {\n    dbTable.shape[relationName] = dbTable.q.shape[relationName] =\n      data.virtualColumn;\n  }\n\n  baseQuery.joinQuery = data.joinQuery;\n\n  const { join: originalJoin } = baseQuery;\n  baseQuery.join = function (...args: unknown[]) {\n    if (args.length) {\n      return originalJoin.apply(this, args);\n    } else {\n      const q = this.clone();\n      q.q.innerJoinLateral = true;\n      return q;\n    }\n  };\n\n  (dbTable.relations as RecordUnknown)[relationName] = {\n    table: otherDbTable,\n    query,\n    queryRelated: data.queryRelated,\n    joinQuery: data.joinQuery,\n    reverseJoin: data.reverseJoin,\n    modifyRelatedQuery: data.modifyRelatedQuery,\n  };\n\n  (dbTable.relationQueries ??= {})[relationName] = query;\n\n  const tableRelations = delayedRelations.get(dbTable);\n  if (!tableRelations) return;\n\n  tableRelations[relationName]?.forEach((data) => {\n    applyRelation(table, qb, data, delayedRelations, schema);\n  });\n};\n","import {\n  Db,\n  IsolationLevel,\n  TransactionOptions,\n  AfterCommitStandaloneHook,\n} from 'pqb/internal';\n\nexport function transaction<Result>(\n  this: { $qb: Db },\n  fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<Result>(\n  this: { $qb: Db },\n  options: IsolationLevel | TransactionOptions,\n  fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<Result>(\n  this: { $qb: Db },\n  fnOrOptions: IsolationLevel | TransactionOptions | (() => Promise<Result>),\n  fn?: () => Promise<Result>,\n): Promise<Result> {\n  return this.$qb.transaction(\n    fnOrOptions as IsolationLevel,\n    fn as () => Promise<Result>,\n  );\n}\n\nexport function ensureTransaction<Result>(\n  this: { $qb: Db },\n  cb: () => Promise<Result>,\n): Promise<Result> {\n  return this.$qb.ensureTransaction(cb);\n}\n\nexport function isInTransaction(this: { $qb: Db }): boolean {\n  return this.$qb.isInTransaction();\n}\n\nexport function afterCommit(\n  this: { $qb: Db },\n  hook: AfterCommitStandaloneHook,\n): void {\n  this.$qb.afterCommit(hook);\n}\n","import {\n  Column,\n  FromArg,\n  FromResult,\n  Query,\n  QueryLogOptions,\n  StorageOptions,\n  AdapterBase,\n  AsyncState,\n  defaultSchemaConfig,\n  Db,\n  DbSharedOptions,\n  DbTableOptionScopes,\n  DbTableOptions,\n  _initQueryBuilder,\n  makeColumnTypes,\n  MaybeArray,\n  NoPrimaryKeyOption,\n  QueryData,\n  RecordUnknown,\n  ColumnSchemaConfig,\n} from 'pqb/internal';\nimport {\n  ORMTableInput,\n  TableClasses,\n  BaseTableClass,\n  TableToDb,\n} from './baseTable';\nimport { applyRelations } from './relations/relations';\nimport {\n  transaction,\n  ensureTransaction,\n  isInTransaction,\n  afterCommit,\n} from './transaction';\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nexport interface FromQuery extends Query {\n  returnType: 'all';\n}\n\nexport type OrchidORM<T extends TableClasses = TableClasses> = {\n  [K in keyof T]: T[K] extends { new (): infer R extends ORMTableInput }\n    ? TableToDb<R>\n    : never;\n} & OrchidORMMethods;\n\ninterface OrchidORMMethods {\n  /**\n   * @see import('pqb').QueryTransaction.prototype.transaction\n   */\n  $transaction: typeof transaction;\n  /**\n   * @see import('pqb').QueryTransaction.prototype.ensureTransaction\n   */\n  $ensureTransaction: typeof ensureTransaction;\n  /**\n   * @see import('pqb').QueryTransaction.prototype.isInTransaction\n   */\n  $isInTransaction: typeof isInTransaction;\n  /**\n   * @see import('pqb').QueryTransaction.prototype.afterCommit\n   */\n  $afterCommit: typeof afterCommit;\n  $qb: Db;\n  $adapterNotInTransaction: AdapterBase;\n\n  /**\n   * Adapter is a wrapper on top of `postgres-js`, `node-postgres`, or other db driver.\n   *\n   * When in transaction, returns a db adapter object for the transaction,\n   * returns a default adapter object otherwise.\n   *\n   * Treat the adapter as implementation detail and avoid accessing it directly.\n   */\n  $getAdapter(): AdapterBase;\n\n  /**\n   * Use `$query` to perform raw SQL queries.\n   *\n   * ```ts\n   * const value = 1;\n   *\n   * // it is safe to interpolate inside the backticks (``):\n   * const result = await db.$query<{ one: number }>`SELECT ${value}  one`;\n   * // data is inside `rows` array:\n   * result.rows[0].one;\n   * ```\n   *\n   * If the query is executing inside a transaction, it will use the transaction connection automatically.\n   *\n   * ```ts\n   * await db.transaction(async () => {\n   *   // both queries will execute in the same transaction\n   *   await db.$query`SELECT 1`;\n   *   await db.$query`SELECT 2`;\n   * });\n   * ```\n   *\n   * Alternatively, support a simple SQL string, with optional `values`:\n   *\n   * Note that the values is a simple array, and the SQL is referring to the values with `$1`, `$2` and so on.\n   *\n   * ```ts\n   * const value = 1;\n   *\n   * // it is NOT safe to interpolate inside a simple string, use `values` to pass the values.\n   * const result = await db.$query<{ one: number }>({\n   *   raw: 'SELECT $1 AS one',\n   *   values: [value],\n   * });\n   * // data is inside `rows` array:\n   * result.rows[0].one;\n   * ```\n   *\n   * @param args - SQL template literal, or an object { raw: string, values?: unknown[] }\n   */\n  $query: Db['query'];\n\n  /**\n   * The same as the {@link $query}, but returns an array of arrays instead of objects:\n   *\n   * ```ts\n   * const value = 1;\n   *\n   * // it is safe to interpolate inside the backticks (``):\n   * const result = await db.$queryArrays<[number]>`SELECT ${value} AS one`;\n   * // `rows` is an array of arrays:\n   * const row = result.rows[0];\n   * row[0]; // our value\n   * ```\n   *\n   * @param args - SQL template literal, or an object { raw: string, values?: unknown[] }\n   */\n  $queryArrays: Db['queryArrays'];\n\n  /**\n   * See {@link FromMethods.from}\n   */\n  $from<Arg extends MaybeArray<FromArg<Query>>>(\n    arg: Arg,\n  ): FromResult<FromQuery, Arg>;\n\n  /**\n   * `$withOptions` supports overriding `log` and `schema`.\n   *\n   * - `log`: boolean, enables or disables logging in the scope of the callback.\n   * - `schema`: set a **default** schema, note that it does not override\n   *   if you already have a schema set in the ORM config or for a specific table.\n   *\n   * ```ts\n   * await db.$withOptions({ log: true, schema: 'custom' }, async () => {\n   *   // will log this query, and will use the custom schema for this table,\n   *   // unless this table already has a configured schema.\n   *   await db.table.find(123);\n   * });\n   * ```\n   */\n  $withOptions<Result>(\n    options: StorageOptions,\n    cb: () => Promise<Result>,\n  ): Promise<Result>;\n\n  $close(): Promise<void>;\n}\n\nexport type OrchidOrmParam<Options> = true | null extends true\n  ? 'Set strict: true to tsconfig'\n  : Options;\n\nexport const orchidORMWithAdapter = <T extends TableClasses>(\n  {\n    log,\n    logger,\n    autoPreparedStatements,\n    noPrimaryKey = 'error',\n    schema,\n    ...options\n  }: OrchidOrmParam<\n    ({ db: Query } | { adapter: AdapterBase }) & DbSharedOptions\n  >,\n  tables: T,\n): OrchidORM<T> => {\n  const commonOptions: QueryLogOptions & {\n    autoPreparedStatements?: boolean;\n    noPrimaryKey?: NoPrimaryKeyOption;\n  } = {\n    log,\n    logger,\n    autoPreparedStatements,\n    noPrimaryKey,\n  };\n\n  let adapter: AdapterBase;\n  let asyncStorage;\n  let qb: Db;\n  if ('db' in options) {\n    adapter = options.db.q.adapter;\n    asyncStorage = options.db.internal.asyncStorage;\n    qb = options.db.qb as Db;\n  } else {\n    adapter = options.adapter;\n\n    asyncStorage = new AsyncLocalStorage<AsyncState>();\n\n    qb = _initQueryBuilder(\n      adapter,\n      makeColumnTypes(defaultSchemaConfig),\n      asyncStorage,\n      commonOptions,\n      options,\n    );\n  }\n\n  const result = {\n    $transaction: transaction,\n    $ensureTransaction: ensureTransaction,\n    $isInTransaction: isInTransaction,\n    $afterCommit: afterCommit,\n    $adapterNotInTransaction: adapter,\n    $getAdapter,\n    $qb: qb,\n    get $query() {\n      return qb.query;\n    },\n    $queryArrays: ((...args) =>\n      qb.queryArrays(...args)) as typeof qb.queryArrays,\n    $with: qb.with.bind(qb),\n    $withRecursive: qb.withRecursive.bind(qb),\n    $withSql: qb.withSql.bind(qb),\n    $from: qb.from.bind(qb),\n    $close: adapter.close.bind(adapter),\n    $withOptions: qb.withOptions.bind(qb),\n  } as unknown as OrchidORM;\n\n  const tableInstances: Record<string, ORMTableInput> = {};\n\n  for (const key in tables) {\n    if (key[0] === '$') {\n      throw new Error(`Table class name must not start with $`);\n    }\n\n    const tableClass = tables[key];\n    const table = (\n      tableClass as unknown as { instance(): ORMTableInput }\n    ).instance();\n    tableInstances[key] = table;\n\n    const options: DbTableOptions<unknown, string, Column.Shape.QueryInit> = {\n      ...commonOptions,\n      schema: table.schema || schema,\n      language: table.language,\n      scopes: table.scopes as DbTableOptionScopes<\n        string,\n        Column.Shape.QueryInit\n      >,\n      softDelete: table.softDelete,\n      snakeCase: (table as { snakeCase?: boolean }).snakeCase,\n      comment: table.comment,\n      noPrimaryKey: table.noPrimaryKey ? 'ignore' : undefined,\n      computed: table.computed as never,\n      nowSQL: (\n        tableClass as unknown as BaseTableClass<ColumnSchemaConfig, unknown>\n      ).nowSQL,\n    };\n\n    const dbTable = new Db(\n      adapter,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      qb as any,\n      table.table,\n      table.columns.shape,\n      table.types,\n      asyncStorage,\n      options,\n      table.constructor.prototype.columns?.data ?? {},\n    );\n\n    (dbTable as unknown as { definedAs: string }).definedAs = key;\n    (dbTable as unknown as { db: unknown }).db = result;\n    (dbTable as unknown as { filePath: string }).filePath = table.filePath;\n    (dbTable as unknown as { name: string }).name = table.constructor.name;\n\n    (result as RecordUnknown)[key] = dbTable;\n  }\n\n  applyRelations(qb, tableInstances, result, schema);\n\n  for (const key in tables) {\n    const table = tableInstances[key] as unknown as {\n      init?(orm: unknown): void;\n      q: QueryData;\n    };\n\n    if (table.init) {\n      table.init(result);\n      // assign before and after hooks from table.query to the table base query\n      Object.assign(result[key].baseQuery.q, table.q);\n    }\n  }\n\n  return result as unknown as OrchidORM<T>;\n};\n\nfunction $getAdapter(this: OrchidORM) {\n  return this.$qb.$getAdapter();\n}\n","import {\n  getClonedQueryData,\n  MergeQuery,\n  Query,\n  QueryReturnType,\n  RecordUnknown,\n  QueryHasWhere,\n} from 'pqb/internal';\n\ntype QueryMethods<T extends Query> = Record<\n  string,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (q: T, ...args: any[]) => any\n>;\n\ntype QueryOne<T extends Query> = {\n  [K in keyof T]: K extends 'returnType'\n    ? Exclude<QueryReturnType, 'all' | undefined>\n    : T[K];\n};\n\nexport interface MethodsBase<T extends Query> {\n  queryMethods?: QueryMethods<T>;\n  queryOneMethods?: QueryMethods<QueryOne<T>>;\n  queryWithWhereMethods?: QueryMethods<T & QueryHasWhere>;\n  queryOneWithWhereMethods?: QueryMethods<QueryOne<T & QueryHasWhere>>;\n  methods?: RecordUnknown;\n}\n\nexport type MapQueryMethods<BaseQuery extends Query, Method> = Method extends (\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  q: any,\n  ...args: infer Args\n) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\ninfer Result\n  ? <T extends BaseQuery>(\n      this: T,\n      ...args: Args\n    ) => Result extends Query ? MergeQuery<T, Result> : Result\n  : never;\n\nexport type MapMethods<T extends Query, Methods extends MethodsBase<T>> = {\n  [K in\n    | keyof Methods['queryMethods']\n    | keyof Methods['queryOneMethods']\n    | keyof Methods['queryWithWhereMethods']\n    | keyof Methods['queryOneWithWhereMethods']\n    | keyof Methods['methods']]: K extends keyof Methods['methods']\n    ? Methods['methods'][K]\n    : K extends keyof Methods['queryOneWithWhereMethods']\n      ? MapQueryMethods<\n          QueryOne<Query & QueryHasWhere>,\n          Methods['queryOneWithWhereMethods'][K]\n        >\n      : K extends keyof Methods['queryWithWhereMethods']\n        ? MapQueryMethods<\n            Query & QueryHasWhere,\n            Methods['queryWithWhereMethods'][K]\n          >\n        : K extends keyof Methods['queryOneMethods']\n          ? MapQueryMethods<QueryOne<Query>, Methods['queryOneMethods'][K]>\n          : K extends keyof Methods['queryMethods']\n            ? MapQueryMethods<Query, Methods['queryMethods'][K]>\n            : never;\n};\n\nexport type Repo<T extends Query, Methods extends MethodsBase<T>> = T &\n  MapMethods<T, Methods>;\n\nexport const createRepo = <T extends Query, Methods extends MethodsBase<T>>(\n  table: T,\n  methods: Methods,\n): Repo<\n  (<Q extends { table: T['table']; shape: T['shape'] }>(\n    q: Q,\n  ) => Query & Q & MapMethods<T, Methods>) &\n    T,\n  Methods\n> => {\n  const queryMethods = {\n    ...methods.queryMethods,\n    ...methods.queryOneMethods,\n    ...methods.queryWithWhereMethods,\n    ...methods.queryOneWithWhereMethods,\n  };\n\n  const plainMethods = methods.methods;\n\n  const repo = (q: Query) => {\n    const proto = Object.create(q.baseQuery);\n    proto.baseQuery = proto;\n    const result = Object.create(proto);\n    result.q = getClonedQueryData(q.q);\n\n    if (plainMethods) {\n      Object.assign(proto.baseQuery, plainMethods);\n    }\n\n    for (const key in queryMethods) {\n      const method = queryMethods[key] as (...args: unknown[]) => unknown;\n      (proto.baseQuery as unknown as RecordUnknown)[key] = function (\n        ...args: unknown[]\n      ) {\n        return method(this, ...args);\n      };\n    }\n\n    return result;\n  };\n\n  const q = repo(table);\n\n  return new Proxy(repo, {\n    get(_, key) {\n      return q[key];\n    },\n  }) as never;\n};\n"],"names":["filePath","q","nestedUpdate","key","i","primaryKeys","foreignKeys","nestedInsert","reverseJoin","query","data","len","obj","baseQuery","records","item","options"],"mappings":"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"}