orchid-orm 1.25.2 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Query, SelectableFromShape, CreateMethodsNames, AddQueryDefaults, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, UpdateData, WhereArg, CreateData, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArg, FromArgOptions, FromResult, AdapterOptions, DbSharedOptions, RelationQuery, MapTableScopesOption, ComputedColumnsBase, QueryData, QueryBase, DbTableOptionScopes, DefaultSchemaConfig, DefaultColumnTypes, RelationQueryBase, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery } from 'pqb';
1
+ import { Query, SelectableFromShape, CreateMethodsNames, AddQueryDefaults, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, UpdateData, WhereArg, CreateData, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArg, FromArgOptions, FromResult, AdapterOptions, DbSharedOptions, RelationQuery, ShapeColumnPrimaryKeys, ShapeUniqueColumns, TableDataItemsUniqueColumns, TableDataItemsUniqueColumnTuples, UniqueConstraints, TableDataItemsUniqueConstraints, MapTableScopesOption, TableDataItem, ComputedColumnsBase, QueryData, QueryBase, TableDataFn, DbTableOptionScopes, DefaultSchemaConfig, DefaultColumnTypes, RelationQueryBase, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery } from 'pqb';
2
2
  export * from 'pqb';
3
3
  import { ColumnsShapeBase, EmptyObject, MaybeArray, RecordUnknown, CoreQueryScopes, ColumnShapeOutput, ColumnShapeInput, ColumnShapeInputPartial, ColumnSchemaConfig, QueryReturnType } from 'orchid-core';
4
4
  export * from 'orchid-core';
@@ -26,10 +26,10 @@ interface HasOne extends RelationThunkBase {
26
26
  type: 'hasOne';
27
27
  options: HasOneOptions;
28
28
  }
29
- type HasOneOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = RelationCommonOptions<Related, Scope> & (RelationHasOptions<keyof Columns, keyof InstanceType<Related>['columns']> | RelationThroughOptions<Through, Source>);
29
+ type HasOneOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = RelationCommonOptions<Related, Scope> & (RelationHasOptions<keyof Columns, keyof InstanceType<Related>['columns']['shape']> | RelationThroughOptions<Through, Source>);
30
30
  type HasOneParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
31
- [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
32
- } : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
31
+ [Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
32
+ } : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns']['shape'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
33
33
  interface HasOneInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Populate = T['relations'][Name]['options'] extends RelationRefsOptions ? Record<T['relations'][Name]['options']['references'][number], true> : T['relations'][Name]['options'] extends RelationKeysOptions ? Record<T['relations'][Name]['options']['foreignKey'], true> : never, Q extends Query = T['relations'][Name]['options'] extends RelationThroughOptions ? {
34
34
  [K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
35
35
  as: Name;
@@ -82,8 +82,8 @@ interface HasMany extends RelationThunkBase {
82
82
  }
83
83
  type HasManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = HasOneOptions<Columns, Related, Scope, Through, Source>;
84
84
  type HasManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
85
- [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
86
- } : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
85
+ [Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
86
+ } : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns']['shape'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
87
87
  interface HasManyInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Populate extends PropertyKey = T['relations'][Name]['options'] extends RelationRefsOptions ? T['relations'][Name]['options']['references'][number] : T['relations'][Name]['options'] extends RelationKeysOptions ? T['relations'][Name]['options']['foreignKey'] : never, Q extends Query = T['relations'][Name]['options'] extends RelationThroughOptions ? {
88
88
  [K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
89
89
  as: Name;
@@ -131,10 +131,10 @@ interface BelongsTo extends RelationThunkBase {
131
131
  type: 'belongsTo';
132
132
  options: BelongsToOptions;
133
133
  }
134
- type BelongsToOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & RelationRefsOrKeysOptions<keyof Columns, keyof InstanceType<Related>['columns'], keyof InstanceType<Related>['columns'], keyof Columns>;
134
+ type BelongsToOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & RelationRefsOrKeysOptions<keyof Columns, keyof InstanceType<Related>['columns']['shape'], keyof InstanceType<Related>['columns']['shape'], keyof Columns>;
135
135
  type BelongsToFKey<Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? Relation['options']['columns'][number] : Relation['options'] extends RelationKeysOptions ? Relation['options']['foreignKey'] : never;
136
136
  type BelongsToParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = {
137
- [Name in BelongsToFKey<Relation>]: T['columns'][Name]['type'];
137
+ [Name in BelongsToFKey<Relation>]: T['columns']['shape'][Name]['type'];
138
138
  };
139
139
  interface BelongsToInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, FK extends string, Required, Q extends Query = {
140
140
  [P in keyof TableQuery]: P extends 'meta' ? // Omit is optimal
@@ -151,7 +151,7 @@ interface BelongsToInfo<T extends RelationConfigSelf, Name extends keyof T['rela
151
151
  omitForeignKeyInCreate: FK;
152
152
  dataForCreate: {
153
153
  columns: {
154
- [L in FK]: T['columns'][L]['inputType'];
154
+ [L in FK]: T['columns']['shape'][L]['inputType'];
155
155
  };
156
156
  nested: Required extends true ? {
157
157
  [Key in Name]: RelationToOneDataForCreateSameQuery<Q>;
@@ -270,22 +270,22 @@ type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeB
270
270
  through: {
271
271
  table: string;
272
272
  columns: string[];
273
- references: (keyof InstanceType<Related>['columns'])[];
273
+ references: (keyof InstanceType<Related>['columns']['shape'])[];
274
274
  };
275
275
  } | {
276
276
  primaryKey: keyof Columns;
277
277
  foreignKey: string;
278
278
  joinTable: string;
279
279
  associationPrimaryKey: string;
280
- associationForeignKey: keyof InstanceType<Related>['columns'];
280
+ associationForeignKey: keyof InstanceType<Related>['columns']['shape'];
281
281
  });
282
282
  type HasAndBelongsToManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends {
283
283
  columns: string[];
284
284
  } ? {
285
- [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
285
+ [Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
286
286
  } : Relation['options'] extends {
287
287
  primaryKey: string;
288
- } ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
288
+ } ? Record<Relation['options']['primaryKey'], T['columns']['shape'][Relation['options']['primaryKey']]['type']> : never;
289
289
  interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Q extends Query = {
290
290
  [K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
291
291
  as: Name;
@@ -375,15 +375,14 @@ interface RelationThunks {
375
375
  }
376
376
  type RelationScopeOrTable<Relation extends RelationThunkBase> = Relation['options']['scope'] extends (q: Query) => Query ? ReturnType<Relation['options']['scope']> : DbTable<InstanceType<ReturnType<Relation['fn']>>>;
377
377
  interface RelationConfigSelf {
378
- columns: ColumnsShapeBase;
378
+ columns: {
379
+ shape: ColumnsShapeBase;
380
+ };
379
381
  relations: RelationThunks;
380
382
  }
381
383
  type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation> : Relation extends HasOne ? HasOneParams<T, Relation> : Relation extends HasMany ? HasManyParams<T, Relation> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation> : never;
382
384
  type MapRelation<T extends RelationConfigSelf, K extends keyof T['relations'] & string> = RelationQuery<T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, RelationScopeOrTable<T['relations'][K]>, BelongsToFKey<T['relations'][K]>, T['relations'][K]['options']['required']> : T['relations'][K] extends HasOne ? HasOneInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : T['relations'][K] extends HasMany ? HasManyInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : T['relations'][K] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : never>;
383
- type MapRelations<T> = T extends {
384
- columns: ColumnsShapeBase;
385
- relations: RelationThunks;
386
- } ? {
385
+ type MapRelations<T> = T extends RelationConfigSelf ? {
387
386
  [K in keyof T['relations'] & string]: MapRelation<T, K>;
388
387
  } : EmptyObject;
389
388
 
@@ -397,9 +396,9 @@ interface TableClasses {
397
396
  interface RelationQueriesBase {
398
397
  [K: string]: RelationQueryBase;
399
398
  }
400
- interface TableToDb<T extends Table, RelationQueries extends RelationQueriesBase> extends Db<T['table'], T['columns'], RelationQueries, T['types'], T['computed'] extends RecordUnknown ? T['columns'] & {
399
+ interface TableToDb<T extends Table, RelationQueries extends RelationQueriesBase> extends Db<T['table'], T['columns']['shape'], keyof ShapeColumnPrimaryKeys<T['columns']['shape']> extends never ? never : ShapeColumnPrimaryKeys<T['columns']['shape']>, ShapeUniqueColumns<T['columns']['shape']> | TableDataItemsUniqueColumns<T['columns']['shape'], T['columns']['data']>, TableDataItemsUniqueColumnTuples<T['columns']['shape'], T['columns']['data']>, UniqueConstraints<T['columns']['shape']> | TableDataItemsUniqueConstraints<T['columns']['data']>, RelationQueries, T['types'], T['computed'] extends RecordUnknown ? T['columns']['shape'] & {
401
400
  [K in keyof T['computed']]: ReturnType<T['computed'][K]>['_type'];
402
- } : T['columns'], MapTableScopesOption<T['scopes'], T['softDelete']>> {
401
+ } : T['columns']['shape'], MapTableScopesOption<T['scopes'], T['softDelete']>> {
403
402
  definedAs: string;
404
403
  db: OrchidORM;
405
404
  getFilePath(): string;
@@ -409,7 +408,10 @@ type DbTable<T extends Table> = TableToDb<T, MapRelations<T>> & MapRelations<T>;
409
408
  type ScopeFn<Related extends TableClass, Scope extends Query> = (q: DbTable<InstanceType<Related>>) => Scope;
410
409
  interface Table {
411
410
  table: string;
412
- columns: ColumnsShapeBase;
411
+ columns: {
412
+ shape: ColumnsShapeBase;
413
+ data: MaybeArray<TableDataItem>;
414
+ };
413
415
  schema?: string;
414
416
  types: unknown;
415
417
  noPrimaryKey?: boolean;
@@ -424,17 +426,24 @@ interface Table {
424
426
  comment?: string;
425
427
  }
426
428
  type Queryable<T extends Table> = {
427
- [K in keyof T['columns']]?: T['columns'][K]['queryType'];
429
+ [K in keyof T['columns']['shape']]?: T['columns']['shape'][K]['queryType'];
428
430
  };
429
- type Selectable<T extends Table> = ColumnShapeOutput<T['columns']>;
430
- type Insertable<T extends Table> = ColumnShapeInput<T['columns']>;
431
- type Updatable<T extends Table> = ColumnShapeInputPartial<T['columns']>;
431
+ type Selectable<T extends Table> = ColumnShapeOutput<T['columns']['shape']>;
432
+ type Insertable<T extends Table> = ColumnShapeInput<T['columns']['shape']>;
433
+ type Updatable<T extends Table> = ColumnShapeInputPartial<T['columns']['shape']>;
432
434
  type BeforeHookMethod = <T extends Table>(cb: QueryBeforeHook) => T;
433
435
  type AfterHookMethod = <T extends Table>(cb: QueryAfterHook) => T;
434
- type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns'])[]>(this: T, select: S, cb: AfterHook<S, T['columns']>) => T;
436
+ type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns']['shape'])[]>(this: T, select: S, cb: AfterHook<S, T['columns']['shape']>) => T;
437
+ interface SetColumnsResult<Shape extends ColumnsShapeBase, Data extends MaybeArray<MaybeArray<TableDataItem>>> {
438
+ shape: Shape;
439
+ data: Data extends unknown[] ? Data : [Data];
440
+ }
435
441
  interface BaseTableInstance<ColumnTypes> {
436
442
  table: string;
437
- columns: ColumnsShapeBase;
443
+ columns: {
444
+ shape: ColumnsShapeBase;
445
+ data: MaybeArray<TableDataItem>;
446
+ };
438
447
  schema?: string;
439
448
  noPrimaryKey?: boolean;
440
449
  snakeCase?: boolean;
@@ -445,7 +454,7 @@ interface BaseTableInstance<ColumnTypes> {
445
454
  result: ColumnsShapeBase;
446
455
  clone<T extends QueryBase>(this: T): T;
447
456
  getFilePath(): string;
448
- setColumns<T extends ColumnsShapeBase>(fn: (t: ColumnTypes) => T): T;
457
+ setColumns<Shape extends ColumnsShapeBase, Data extends MaybeArray<TableDataItem>>(fn: (t: ColumnTypes) => Shape, tableData?: TableDataFn<Shape, Data>): SetColumnsResult<Shape, Data>;
449
458
  /**
450
459
  * You can add a generated column in the migration (see [generated](/guide/migration-column-methods.html#generated-column)),
451
460
  * such column will persist in the database, it can be indexed.
@@ -536,37 +545,47 @@ interface BaseTableInstance<ColumnTypes> {
536
545
  *
537
546
  * @param computed - object where keys are column names and values are functions returning raw SQL
538
547
  */
539
- setComputed<Table extends string, Shape extends ColumnsShapeBase, Computed extends ComputedColumnsBase<Db<Table, Shape, EmptyObject, ColumnTypes>>>(computed: Computed): Computed;
548
+ setComputed<Table extends string, Shape extends ColumnsShapeBase, Computed extends ComputedColumnsBase<Db<Table, Shape, never, never, never, never, EmptyObject, ColumnTypes>>>(computed: Computed): Computed;
540
549
  /**
541
550
  * See {@link ScopeMethods}
542
551
  */
543
552
  setScopes<Table extends string, Columns extends ColumnsShapeBase, Keys extends string>(this: {
544
553
  table: Table;
545
- columns: Columns;
554
+ columns: {
555
+ shape: Columns;
556
+ };
546
557
  }, scopes: DbTableOptionScopes<Table, Columns, Keys>): CoreQueryScopes<Keys>;
547
558
  belongsTo<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Options extends BelongsToOptions<Columns, Related, Scope>>(this: {
548
- columns: Columns;
559
+ columns: {
560
+ shape: Columns;
561
+ };
549
562
  }, fn: () => Related, options: Options): {
550
563
  type: 'belongsTo';
551
564
  fn: () => Related;
552
565
  options: Options;
553
566
  };
554
567
  hasOne<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Scope, Through, Source>>(this: {
555
- columns: Columns;
568
+ columns: {
569
+ shape: Columns;
570
+ };
556
571
  }, fn: () => Related, options: Options): {
557
572
  type: 'hasOne';
558
573
  fn: () => Related;
559
574
  options: Options;
560
575
  };
561
576
  hasMany<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Through extends string, Source extends string, Options extends HasManyOptions<Columns, Related, Scope, Through, Source>>(this: {
562
- columns: Columns;
577
+ columns: {
578
+ shape: Columns;
579
+ };
563
580
  }, fn: () => Related, options: Options): {
564
581
  type: 'hasMany';
565
582
  fn: () => Related;
566
583
  options: Options;
567
584
  };
568
585
  hasAndBelongsToMany<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Options extends HasAndBelongsToManyOptions<Columns, Related, Scope>>(this: {
569
- columns: Columns;
586
+ columns: {
587
+ shape: Columns;
588
+ };
570
589
  }, fn: () => Related, options: Options): {
571
590
  type: 'hasAndBelongsToMany';
572
591
  fn: () => Related;
@@ -629,4 +648,4 @@ type Repo<T extends Query, Methods extends MethodsBase<T>> = (<Q extends {
629
648
  }>(q: Q) => Query & Q & MapMethods<T, Methods>) & T & MapMethods<T, Methods>;
630
649
  declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(table: T, methods: Methods) => Repo<T, Methods>;
631
650
 
632
- export { BaseTableClass, BaseTableInstance, DbTable, Insertable, MapMethods, MapQueryMethods, MethodsBase, OrchidORM, Queryable, Repo, ScopeFn, Selectable, Table, TableClass, TableClasses, TableToDb, Updatable, createBaseTable, createRepo, orchidORM };
651
+ export { BaseTableClass, BaseTableInstance, DbTable, Insertable, MapMethods, MapQueryMethods, MethodsBase, OrchidORM, Queryable, Repo, ScopeFn, Selectable, SetColumnsResult, Table, TableClass, TableClasses, TableToDb, Updatable, createBaseTable, createRepo, orchidORM };
package/dist/index.js CHANGED
@@ -14,29 +14,39 @@ function createBaseTable({
14
14
  language
15
15
  } = {}) {
16
16
  var _a;
17
- const columnTypes = typeof columnTypesArg === "function" ? columnTypesArg(pqb.makeColumnTypes(schemaConfig)) : columnTypesArg || pqb.makeColumnTypes(pqb.defaultSchemaConfig);
17
+ const columnTypes = typeof columnTypesArg === "function" ? columnTypesArg(pqb.makeColumnTypes(schemaConfig)) : columnTypesArg || pqb.makeColumnTypes(schemaConfig);
18
18
  const filePathOrStack = filePathArg || orchidCore.getStackTrace();
19
19
  let filePath;
20
+ const defaultColumns = {
21
+ shape: orchidCore.emptyObject,
22
+ data: orchidCore.emptyArray
23
+ };
20
24
  const base = (_a = class {
21
25
  constructor() {
26
+ this.columns = defaultColumns;
22
27
  this.snakeCase = snakeCase;
23
28
  this.types = columnTypes;
24
29
  this.q = {};
25
30
  this.language = language;
26
31
  }
27
32
  static inputSchema() {
33
+ this.instance();
28
34
  return this._inputSchema === void 0 ? this._inputSchema = schemaConfig.inputSchema.call(this) : this._inputSchema;
29
35
  }
30
36
  static outputSchema() {
37
+ this.instance();
31
38
  return this._outputSchema === void 0 ? this._outputSchema = schemaConfig.outputSchema.call(this) : this._outputSchema;
32
39
  }
33
40
  static querySchema() {
41
+ this.instance();
34
42
  return this._querySchema === void 0 ? this._querySchema = schemaConfig.querySchema.call(this) : this._querySchema;
35
43
  }
36
44
  static updateSchema() {
45
+ this.instance();
37
46
  return this._updateSchema === void 0 ? this._updateSchema = schemaConfig.updateSchema.call(this) : this._updateSchema;
38
47
  }
39
48
  static pkeySchema() {
49
+ this.instance();
40
50
  return this._pkeySchema === void 0 ? this._pkeySchema = schemaConfig.pkeySchema.call(this) : this._pkeySchema;
41
51
  }
42
52
  static getFilePath() {
@@ -71,10 +81,10 @@ function createBaseTable({
71
81
  `Failed to determine file path for table ${this.constructor.name}. Please set \`filePath\` property manually`
72
82
  );
73
83
  }
74
- setColumns(fn) {
84
+ setColumns(fn, dataFn) {
75
85
  columnTypes[orchidCore.snakeCaseKey] = this.snakeCase;
76
86
  const shape = pqb.getColumnTypes(columnTypes, fn, nowSQL, this.language);
77
- this.constructor.prototype.tableData = pqb.getTableData();
87
+ const tableData = this.constructor.prototype.tableData = pqb.parseTableData(dataFn);
78
88
  if (this.snakeCase) {
79
89
  for (const key in shape) {
80
90
  const column = shape[key];
@@ -86,7 +96,10 @@ function createBaseTable({
86
96
  }
87
97
  }
88
98
  }
89
- return this.constructor.prototype.columns = shape;
99
+ return this.constructor.prototype.columns = {
100
+ shape,
101
+ data: tableData
102
+ };
90
103
  }
91
104
  setComputed(computed) {
92
105
  return computed;
@@ -169,7 +182,7 @@ const hasRelationHandleUpdate = (q, set, key, primaryKeys, nestedUpdate) => {
169
182
  return;
170
183
  selectIfNotSelected(q, primaryKeys);
171
184
  q.q.wrapInTransaction = true;
172
- pqb._queryHookAfterUpdate(q, q.primaryKeys, (rows, q2) => {
185
+ pqb._queryHookAfterUpdate(q, primaryKeys, (rows, q2) => {
173
186
  return nestedUpdate(
174
187
  q2,
175
188
  rows,
@@ -443,7 +456,6 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
443
456
  }
444
457
  if (upsert) {
445
458
  ((_a = state.queries) != null ? _a : state.queries = []).push(async (queryResult) => {
446
- var _a2;
447
459
  const row = queryResult.rows[0];
448
460
  let obj = {};
449
461
  for (let i = 0; i < len; i++) {
@@ -462,8 +474,13 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
462
474
  } else {
463
475
  const data = typeof upsert.create === "function" ? upsert.create() : upsert.create;
464
476
  const result = await pqb._queryCreate(query.select(...primaryKeys), data);
477
+ const collectData = {};
478
+ state.collect = {
479
+ keys: primaryKeys,
480
+ data: collectData
481
+ };
465
482
  for (let i = 0; i < len; i++) {
466
- ((_a2 = state.updateData) != null ? _a2 : state.updateData = {})[foreignKeys[i]] = result[primaryKeys[i]];
483
+ collectData[foreignKeys[i]] = result[primaryKeys[i]];
467
484
  }
468
485
  }
469
486
  });
@@ -1871,11 +1888,11 @@ const orchidORM = (_a, tables) => {
1871
1888
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1872
1889
  qb,
1873
1890
  table.table,
1874
- table.columns,
1891
+ table.columns.shape,
1875
1892
  table.types,
1876
1893
  transactionStorage,
1877
1894
  options2,
1878
- (_a2 = table.constructor.prototype.tableData) != null ? _a2 : {}
1895
+ (_a2 = table.constructor.prototype.tableData) != null ? _a2 : orchidCore.emptyObject
1879
1896
  );
1880
1897
  dbTable.definedAs = key;
1881
1898
  dbTable.db = result;