orchid-orm 1.59.5 → 1.60.1

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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { makeColumnTypes, getStackTrace, applyMixins, QueryHooks, defaultSchemaConfig, raw, getCallerFilePath, snakeCaseKey, getColumnTypes, parseTableData, toSnakeCase, emptyObject, emptyArray, _queryHookAfterCreate, _queryHookAfterUpdate, getQueryAs, setQueryObjectValueImmutable, pushQueryOnForOuter, isExpression, cloneQueryBaseUnscoped, DynamicRawSQL, RawSql, getShapeFromSelect, _queryWhere, _queryDefaults, getPrimaryKeys, VirtualColumn, _with, _queryCreate, _orCreate, getFreeAlias, isQueryReturnsAll, _queryHookBeforeUpdate, _queryFindBy, _queryRows, _queryUpdate, _queryDelete, prepareSubQueryForSql, _queryUpdateOrThrow, _queryCreateMany, OrchidOrmInternalError, toArray, objectHasValues, _queryJoinOn, _queryCreateManyFrom, NotFoundError, _queryFindByOptional, _querySelect, pick, _queryWhereExists, _queryTake, _queryTakeOptional, _initQueryBuilder, Db, getClonedQueryData } from 'pqb';
1
+ import { makeColumnTypes, getStackTrace, applyMixins, QueryHooks, defaultSchemaConfig, raw, getCallerFilePath, snakeCaseKey, getColumnTypes, parseTableData, toSnakeCase, emptyObject, emptyArray, _queryHookAfterCreate, _queryHookAfterUpdate, getQueryAs, setQueryObjectValueImmutable, pushQueryOnForOuter, isExpression, cloneQueryBaseUnscoped, DynamicRawSQL, RawSql, getShapeFromSelect, _queryWhere, _queryDefaults, getPrimaryKeys, VirtualColumn, _prependWith, _queryCreate, _orCreate, getFreeAlias, _querySelect, _queryUpdate, _queryWhereIn, _appendQuery, isQueryReturnsAll, _queryUpsert, _queryDelete, noop, _queryFindBy, prepareSubQueryForSql, _clone, _queryUpdateOrThrow, _queryInsert, _queryCreateMany, OrchidOrmInternalError, toArray, objectHasValues, _queryJoinOn, _queryCreateManyFrom, NotFoundError, _queryFindByOptional, _queryRows, pick, _queryWhereExists, _queryTake, _queryTakeOptional, _initQueryBuilder, Db, getClonedQueryData } from 'pqb';
2
2
  export * from 'pqb';
3
3
  import { AsyncLocalStorage } from 'node:async_hooks';
4
4
 
@@ -190,7 +190,7 @@ const hasRelationHandleUpdate = (q, set, key, primaryKeys, nestedUpdate) => {
190
190
  );
191
191
  });
192
192
  };
193
- const selectIfNotSelected = (q, columns) => {
193
+ const _selectIfNotSelected = (q, columns) => {
194
194
  const select = q.q.select || [];
195
195
  if (!select.includes("*")) {
196
196
  for (const column of columns) {
@@ -286,6 +286,8 @@ const getColumnKeyFromDbName = (query, name) => {
286
286
  }
287
287
  return name;
288
288
  };
289
+ const selectCteColumnsSql = (cteAs, columns) => `(SELECT ${columns.map((c) => `"${cteAs}"."${c}"`).join(", ")} FROM "${cteAs}")`;
290
+ const selectCteColumnSql = (cteAs, column) => `(SELECT "${cteAs}"."${column}" FROM "${cteAs}")`;
289
291
 
290
292
  const joinQueryChainHOF = (relPKeys, reverseJoin, joinQuery) => (joiningQuery, baseQuery) => {
291
293
  const jq = joiningQuery;
@@ -401,7 +403,7 @@ class BelongsToVirtualColumn extends VirtualColumn {
401
403
  super(schema);
402
404
  this.key = key;
403
405
  this.state = state;
404
- this.nestedUpdate = nestedUpdate$3(this.state);
406
+ this.nestedUpdate = nestedUpdate$2(this.state);
405
407
  }
406
408
  create(q, ctx, item) {
407
409
  const {
@@ -415,18 +417,11 @@ class BelongsToVirtualColumn extends VirtualColumn {
415
417
  }
416
418
  const value = item[key];
417
419
  if ("create" in value || "connectOrCreate" in value) {
418
- foreignKeys.forEach((foreignKey) => item[foreignKey] = new RawSql(""));
420
+ const asFn = setForeignKeysFromCte(item, primaryKeys, foreignKeys);
419
421
  const selectPKeys = query.select(...primaryKeys);
420
- _with(
422
+ _prependWith(
421
423
  q,
422
- (as) => {
423
- foreignKeys.forEach((foreignKey, i) => {
424
- item[foreignKey]._sql = selectCteColumnSql(
425
- as,
426
- primaryKeys[i]
427
- );
428
- });
429
- },
424
+ asFn,
430
425
  "create" in value ? _queryCreate(selectPKeys, value.create) : _orCreate(
431
426
  _queryWhere(selectPKeys, [
432
427
  value.connectOrCreate.where
@@ -437,7 +432,7 @@ class BelongsToVirtualColumn extends VirtualColumn {
437
432
  return;
438
433
  } else if ("connect" in value) {
439
434
  const as = getFreeAlias(q.q.withShapes, "q");
440
- _with(q, as, query.select(...primaryKeys).findBy(value.connect));
435
+ _prependWith(q, as, query.select(...primaryKeys).findBy(value.connect));
441
436
  foreignKeys.map((foreignKey, i) => {
442
437
  item[foreignKey] = new RawSql(
443
438
  selectCteColumnMustExistSql(i, as, primaryKeys[i])
@@ -446,10 +441,10 @@ class BelongsToVirtualColumn extends VirtualColumn {
446
441
  return;
447
442
  }
448
443
  }
449
- update(q, ctx, set) {
444
+ update(q, set) {
450
445
  q.q.wrapInTransaction = true;
451
446
  const data = set[this.key];
452
- this.nestedUpdate(q, set, data, ctx);
447
+ this.nestedUpdate(q, set, data);
453
448
  }
454
449
  }
455
450
  const makeBelongsToMethod = (tableConfig, table, relation, relationName, query) => {
@@ -520,139 +515,138 @@ const makeBelongsToMethod = (tableConfig, table, relation, relationName, query)
520
515
  reverseJoin
521
516
  };
522
517
  };
523
- const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
524
- return (q, update, params, state) => {
525
- if (params.upsert && isQueryReturnsAll(q)) {
526
- throw new Error("`upsert` option is not allowed in a batch update");
527
- }
528
- let idsForDelete;
529
- _queryHookBeforeUpdate(q, async ({ query: q2 }) => {
530
- if (params.disconnect) {
531
- for (const key of foreignKeys) {
532
- update[key] = null;
533
- }
534
- } else if (params.set) {
535
- let loadPrimaryKeys;
536
- let loadForeignKeys;
537
- for (let i = 0; i < len; i++) {
538
- const primaryKey = primaryKeys[i];
539
- if (primaryKey in params.set) {
540
- update[foreignKeys[i]] = params.set[primaryKey];
541
- } else {
542
- (loadPrimaryKeys ?? (loadPrimaryKeys = [])).push(primaryKey);
543
- (loadForeignKeys ?? (loadForeignKeys = [])).push(foreignKeys[i]);
544
- }
545
- }
546
- if (loadPrimaryKeys) {
547
- for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
548
- update[loadForeignKeys[i]] = new RawSql("");
549
- }
550
- _with(
551
- q2,
552
- (as) => {
553
- for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
554
- update[loadForeignKeys[i]]._sql = selectCteColumnMustExistSql(i, as, loadPrimaryKeys[i]);
555
- }
556
- },
557
- _queryFindBy(query.select(...loadPrimaryKeys), params.set)
558
- );
518
+ const nestedUpdate$2 = ({ query, primaryKeys, foreignKeys, len }) => {
519
+ return (self, update, params) => {
520
+ if (params.create) {
521
+ const createQuery = _querySelect(
522
+ _queryCreate(query.clone(), params.create),
523
+ primaryKeys
524
+ );
525
+ const asFn = setForeignKeysFromCte(update, primaryKeys, foreignKeys);
526
+ _prependWith(self, asFn, createQuery);
527
+ } else if (params.update) {
528
+ _selectIfNotSelected(self, foreignKeys);
529
+ const selectIdsSql = new RawSql("");
530
+ const updateQuery = _queryUpdate(
531
+ _queryWhereIn(query.clone(), true, primaryKeys, selectIdsSql),
532
+ params.update
533
+ );
534
+ updateQuery.q.returnType = "value";
535
+ _appendQuery(self, updateQuery, (as) => {
536
+ selectIdsSql._sql = selectCteColumnsSql(as, foreignKeys);
537
+ });
538
+ } else if (params.upsert) {
539
+ if (isQueryReturnsAll(self)) {
540
+ throw new Error("`upsert` option is not allowed in a batch update");
541
+ }
542
+ const { relQuery } = relWithSelectIds(
543
+ self,
544
+ query,
545
+ primaryKeys,
546
+ foreignKeys
547
+ );
548
+ const upsertQuery = _querySelect(
549
+ _queryUpsert(
550
+ relQuery,
551
+ params.upsert
552
+ ),
553
+ primaryKeys
554
+ );
555
+ const asFn = setForeignKeysFromCte(update, primaryKeys, foreignKeys);
556
+ _prependWith(self, asFn, upsertQuery);
557
+ } else if (params.delete) {
558
+ _selectIfNotSelected(self, foreignKeys);
559
+ disconnect(update, foreignKeys);
560
+ const { selectIdsSql, relQuery } = relWithSelectIds(
561
+ self,
562
+ query,
563
+ primaryKeys,
564
+ foreignKeys
565
+ );
566
+ self.q.and = self.q.or = void 0;
567
+ _queryWhereIn(self, true, foreignKeys, selectIdsSql);
568
+ const deleteQuery = _queryDelete(relQuery);
569
+ deleteQuery.q.returnType = "value";
570
+ _appendQuery(self, deleteQuery, noop);
571
+ } else if (params.disconnect) {
572
+ disconnect(update, foreignKeys);
573
+ } else if (params.set) {
574
+ let loadPrimaryKeys;
575
+ let loadForeignKeys;
576
+ for (let i = 0; i < len; i++) {
577
+ const primaryKey = primaryKeys[i];
578
+ if (primaryKey in params.set) {
579
+ update[foreignKeys[i]] = params.set[primaryKey];
580
+ } else {
581
+ (loadPrimaryKeys ?? (loadPrimaryKeys = [])).push(primaryKey);
582
+ (loadForeignKeys ?? (loadForeignKeys = [])).push(foreignKeys[i]);
559
583
  }
560
- } else if (params.create) {
561
- const q3 = query.clone();
562
- q3.q.select = primaryKeys;
563
- const record = await _queryCreate(
564
- q3,
565
- params.create
584
+ }
585
+ if (loadPrimaryKeys) {
586
+ const asFn = setForeignKeysFromCte(
587
+ update,
588
+ loadPrimaryKeys,
589
+ loadForeignKeys,
590
+ true
591
+ );
592
+ _prependWith(
593
+ self,
594
+ asFn,
595
+ _queryFindBy(query.select(...loadPrimaryKeys), params.set)
566
596
  );
567
- for (let i = 0; i < len; i++) {
568
- update[foreignKeys[i]] = record[primaryKeys[i]];
569
- }
570
- } else if (params.delete) {
571
- const selectQuery = q2.clone();
572
- selectQuery.q.type = void 0;
573
- selectQuery.q.distinct = emptyArray;
574
- selectIfNotSelected(selectQuery, foreignKeys);
575
- idsForDelete = await _queryRows(selectQuery);
576
- for (const foreignKey of foreignKeys) {
577
- update[foreignKey] = null;
578
- }
579
597
  }
580
- });
581
- const { upsert } = params;
582
- if (upsert || params.update || params.delete) {
583
- selectIfNotSelected(q, foreignKeys);
584
- }
585
- if (upsert) {
586
- (state.queries ?? (state.queries = [])).push(async (queryResult) => {
587
- const row = queryResult.rows[0];
588
- let obj = {};
589
- for (let i = 0; i < len; i++) {
590
- const id = row[foreignKeys[i]];
591
- if (id === null) {
592
- obj = void 0;
593
- break;
594
- }
595
- obj[primaryKeys[i]] = id;
596
- }
597
- const count = obj ? await _queryUpdate(
598
- query.findBy(obj),
599
- upsert.update
600
- ) : 0;
601
- if (!count) {
602
- const data = typeof upsert.create === "function" ? upsert.create() : upsert.create;
603
- const result = await _queryCreate(
604
- query.select(...primaryKeys),
605
- data
606
- );
607
- const collectData = {};
608
- state.collect = {
609
- data: collectData
610
- };
611
- for (let i = 0; i < len; i++) {
612
- collectData[foreignKeys[i]] = result[primaryKeys[i]];
613
- }
614
- }
615
- });
616
- } else if (params.delete || params.update) {
617
- _queryHookAfterUpdate(
618
- q,
619
- params.update ? foreignKeys : emptyArray,
620
- async (data) => {
621
- let ids;
622
- if (params.delete) {
623
- ids = idsForDelete;
624
- } else {
625
- ids = [];
626
- for (const item of data) {
627
- let row;
628
- for (const foreignKey of foreignKeys) {
629
- const id = item[foreignKey];
630
- if (id === null) {
631
- row = void 0;
632
- break;
633
- } else {
634
- (row ?? (row = [])).push(id);
635
- }
636
- }
637
- if (row) ids.push(row);
638
- }
639
- }
640
- if (!ids?.length) return;
641
- const t = query.whereIn(
642
- primaryKeys,
643
- ids
644
- );
645
- if (params.delete) {
646
- await _queryDelete(t);
647
- } else {
648
- await _queryUpdate(t, params.update);
649
- }
650
- }
651
- );
652
598
  }
653
599
  };
654
600
  };
655
- const selectCteColumnSql = (cteAs, column) => `(SELECT "${cteAs}"."${column}" FROM "${cteAs}")`;
601
+ const disconnect = (update, foreignKeys) => {
602
+ for (const foreignKey of foreignKeys) {
603
+ update[foreignKey] = null;
604
+ }
605
+ };
606
+ const relWithSelectIds = (self, rel, primaryKeys, foreignKeys) => {
607
+ const selectIdsQuery = makeSelectIdsQuery(self, foreignKeys);
608
+ const selectIdsSql = new RawSql("");
609
+ _prependWith(
610
+ self,
611
+ (as) => {
612
+ selectIdsSql._sql = selectCteColumnsSql(as, foreignKeys);
613
+ },
614
+ selectIdsQuery
615
+ );
616
+ return {
617
+ selectIdsSql,
618
+ relQuery: _queryWhereIn(rel.clone(), true, primaryKeys, selectIdsSql)
619
+ };
620
+ };
621
+ const makeSelectIdsQuery = (self, foreignKeys) => {
622
+ const selectIdsQuery = self.baseQuery.clone();
623
+ selectIdsQuery.q.distinct = emptyArray;
624
+ selectIdsQuery.q.select = foreignKeys;
625
+ selectIdsQuery.q.and = self.q.and;
626
+ selectIdsQuery.q.or = self.q.or;
627
+ return selectIdsQuery;
628
+ };
629
+ const setForeignKeysFromCte = (record, primaryKeys, foreignKeys, mustExist) => {
630
+ for (const key of foreignKeys) {
631
+ record[key] = new RawSql("");
632
+ }
633
+ return (as) => {
634
+ foreignKeys.forEach(
635
+ mustExist ? (foreignKey, i) => {
636
+ record[foreignKey]._sql = selectCteColumnMustExistSql(
637
+ i,
638
+ as,
639
+ primaryKeys[i]
640
+ );
641
+ } : (foreignKey, i) => {
642
+ record[foreignKey]._sql = selectCteColumnSql(
643
+ as,
644
+ primaryKeys[i]
645
+ );
646
+ }
647
+ );
648
+ };
649
+ };
656
650
  const selectCteColumnMustExistSql = (i, cteAs, column) => {
657
651
  const selectColumn = selectCteColumnSql(cteAs, column);
658
652
  return i === 0 ? `CASE WHEN (SELECT count(*) FROM "${cteAs}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn;
@@ -664,32 +658,107 @@ class HasOneVirtualColumn extends VirtualColumn {
664
658
  this.key = key;
665
659
  this.state = state;
666
660
  this.nestedInsert = nestedInsert$2(state);
667
- this.nestedUpdate = nestedUpdate$2(state);
661
+ this.setNulls = {};
662
+ for (const foreignKey of state.foreignKeys) {
663
+ this.setNulls[foreignKey] = null;
664
+ }
668
665
  }
669
- create(q, ctx, item, rowIndex) {
670
- hasRelationHandleCreate(
671
- q,
672
- ctx,
673
- item,
674
- rowIndex,
675
- this.key,
676
- this.state.primaryKeys,
677
- this.nestedInsert
678
- );
666
+ create(self, ctx, item, rowIndex, one) {
667
+ if (one) {
668
+ const value = item[this.key];
669
+ if (!value.create && !value.connect && !value.connectOrCreate) {
670
+ return;
671
+ }
672
+ const { query: rel, primaryKeys, foreignKeys } = this.state;
673
+ _selectIfNotSelected(self, primaryKeys);
674
+ const data = value.create ? { ...value.create } : {};
675
+ foreignKeys.forEach((key) => {
676
+ data[key] = new RawSql("");
677
+ });
678
+ const query = value.create ? _queryCreate(_clone(rel), data) : value.connect ? _queryUpdateOrThrow(
679
+ rel.where(value.connect),
680
+ data
681
+ ) : value.connectOrCreate ? _queryUpsert(rel.where(value.connectOrCreate.where), {
682
+ update: data,
683
+ create: {
684
+ ...value.connectOrCreate.create,
685
+ ...data
686
+ }
687
+ }) : void 0;
688
+ _appendQuery(self, query, (as) => {
689
+ foreignKeys.forEach((key, i) => {
690
+ data[key]._sql = selectCteColumnSql(as, primaryKeys[i]);
691
+ });
692
+ });
693
+ } else {
694
+ hasRelationHandleCreate(
695
+ self,
696
+ ctx,
697
+ item,
698
+ rowIndex,
699
+ this.key,
700
+ this.state.primaryKeys,
701
+ this.nestedInsert
702
+ );
703
+ }
679
704
  }
680
- update(q, _, set) {
705
+ update(self, set) {
681
706
  const params = set[this.key];
682
- if ((params.set || params.create || params.upsert) && isQueryReturnsAll(q)) {
707
+ if ((params.set || params.create || params.upsert) && isQueryReturnsAll(self)) {
683
708
  const key = params.set ? "set" : params.create ? "create" : "upsert";
684
709
  throw new Error(`\`${key}\` option is not allowed in a batch update`);
685
710
  }
686
- hasRelationHandleUpdate(
687
- q,
688
- set,
689
- this.key,
690
- this.state.primaryKeys,
691
- this.nestedUpdate
692
- );
711
+ const { primaryKeys, foreignKeys, query: relQuery } = this.state;
712
+ if (params.create || params.update || params.upsert || params.disconnect || params.set || params.delete) {
713
+ _selectIfNotSelected(self, primaryKeys);
714
+ const selectIdsSql = new RawSql("");
715
+ const existingRelQuery = _queryWhereIn(
716
+ _clone(relQuery),
717
+ true,
718
+ foreignKeys,
719
+ selectIdsSql
720
+ );
721
+ let setIds = void 0;
722
+ if (params.create || params.set || params.upsert) {
723
+ setIds = {};
724
+ foreignKeys.forEach((foreignKey) => {
725
+ setIds[foreignKey] = new RawSql("");
726
+ });
727
+ }
728
+ const nullifyOrDeleteQuery = params.update ? _queryUpdate(existingRelQuery, params.update) : params.upsert ? _queryUpsert(existingRelQuery, {
729
+ update: params.upsert.update,
730
+ create: {
731
+ ...typeof params.upsert.create === "function" ? params.upsert.create() : params.upsert.create,
732
+ ...setIds
733
+ }
734
+ }) : params.delete ? _queryDelete(existingRelQuery) : _queryUpdate(existingRelQuery, this.setNulls);
735
+ nullifyOrDeleteQuery.q.returnType = "void";
736
+ _appendQuery(self, nullifyOrDeleteQuery, (as) => {
737
+ selectIdsSql._sql = selectCteColumnsSql(as, primaryKeys);
738
+ if (params.create || params.set || params.upsert) {
739
+ foreignKeys.forEach((foreignKey, i) => {
740
+ setIds[foreignKey]._sql = selectCteColumnSql(
741
+ as,
742
+ primaryKeys[i]
743
+ );
744
+ });
745
+ }
746
+ });
747
+ if (params.create) {
748
+ const createQuery = _queryInsert(_clone(relQuery), {
749
+ ...params.create,
750
+ ...setIds
751
+ });
752
+ _appendQuery(self, createQuery, noop);
753
+ } else if (params.set) {
754
+ const setQuery = _queryUpdate(
755
+ _queryWhere(_clone(relQuery), [params.set]),
756
+ setIds
757
+ );
758
+ setQuery.q.returnType = "void";
759
+ _appendQuery(self, setQuery, noop);
760
+ }
761
+ }
693
762
  }
694
763
  }
695
764
  const makeHasOneMethod = (tableConfig, table, relation, relationName, query) => {
@@ -817,9 +886,9 @@ const nestedInsert$2 = ({ query, primaryKeys, foreignKeys }) => {
817
886
  for (let i = 0, len = items.length; i < len; i++) {
818
887
  const [selfData, item] = items[i];
819
888
  const data2 = {};
820
- for (let i2 = 0; i2 < len; i2++) {
821
- data2[foreignKeys[i2]] = selfData[primaryKeys[i2]];
822
- }
889
+ primaryKeys.forEach((primaryKey, i2) => {
890
+ data2[foreignKeys[i2]] = selfData[primaryKey];
891
+ });
823
892
  items[i] = "connect" in item ? _queryUpdateOrThrow(
824
893
  t.where(item.connect),
825
894
  data2
@@ -860,78 +929,6 @@ const nestedInsert$2 = ({ query, primaryKeys, foreignKeys }) => {
860
929
  }
861
930
  };
862
931
  };
863
- const nestedUpdate$2 = ({ query, primaryKeys, foreignKeys }) => {
864
- const len = primaryKeys.length;
865
- const setNulls = {};
866
- for (const foreignKey of foreignKeys) {
867
- setNulls[foreignKey] = null;
868
- }
869
- return async (_, data, params) => {
870
- const t = query.clone();
871
- const ids = data.map(
872
- (item) => primaryKeys.map((primaryKey) => item[primaryKey])
873
- );
874
- const currentRelationsQuery = t.whereIn(
875
- foreignKeys,
876
- ids
877
- );
878
- if (params.create || params.disconnect || params.set) {
879
- let queryToDisconnect = currentRelationsQuery;
880
- if (params.set) {
881
- queryToDisconnect = queryToDisconnect.whereNot(params.set);
882
- }
883
- await _queryUpdate(queryToDisconnect, setNulls);
884
- const record = data[0];
885
- if (params.create) {
886
- const obj = { ...params.create };
887
- for (let i = 0; i < len; i++) {
888
- obj[foreignKeys[i]] = record[primaryKeys[i]];
889
- }
890
- await t.insert(obj);
891
- }
892
- if (params.set) {
893
- const obj = {};
894
- for (let i = 0; i < len; i++) {
895
- obj[foreignKeys[i]] = record[primaryKeys[i]];
896
- }
897
- await _queryUpdate(
898
- _queryWhere(t, [params.set]),
899
- obj
900
- );
901
- }
902
- } else if (params.update) {
903
- await _queryUpdate(currentRelationsQuery, params.update);
904
- } else if (params.delete) {
905
- const q = _queryDelete(currentRelationsQuery);
906
- q.q.returnType = "value";
907
- await q;
908
- } else if (params.upsert) {
909
- const { update, create } = params.upsert;
910
- currentRelationsQuery.q.select = foreignKeys;
911
- const updatedIds = await _queryUpdate(
912
- _queryRows(currentRelationsQuery),
913
- update
914
- );
915
- if (updatedIds.length < ids.length) {
916
- const data2 = typeof create === "function" ? create() : create;
917
- await t.createMany(
918
- ids.reduce((rows, ids2) => {
919
- if (!updatedIds.some(
920
- (updated) => updated.every((value, i) => value === ids2[i])
921
- )) {
922
- const obj = { ...data2 };
923
- for (let i = 0; i < len; i++) {
924
- obj[foreignKeys[i]] = ids2[i];
925
- }
926
- rows.push(obj);
927
- }
928
- return rows;
929
- }, [])
930
- );
931
- }
932
- }
933
- };
934
- };
935
932
 
936
933
  class HasManyVirtualColumn extends VirtualColumn {
937
934
  constructor(schema, key, state) {
@@ -952,7 +949,7 @@ class HasManyVirtualColumn extends VirtualColumn {
952
949
  this.nestedInsert
953
950
  );
954
951
  }
955
- update(q, _, set) {
952
+ update(q, set) {
956
953
  const params = set[this.key];
957
954
  if ((params.set || params.create) && isQueryReturnsAll(q)) {
958
955
  const key = params.set ? "set" : "create";
@@ -1295,7 +1292,7 @@ class HasAndBelongsToManyVirtualColumn extends VirtualColumn {
1295
1292
  this.nestedInsert
1296
1293
  );
1297
1294
  }
1298
- update(q, _, set) {
1295
+ update(q, set) {
1299
1296
  hasRelationHandleUpdate(
1300
1297
  q,
1301
1298
  set,