@strapi/database 5.3.0 → 5.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AAyLxB,eAAO,MAAM,mBAAmB,OAAQ,QAAQ,KAAG,aA2kClD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA2LxB,eAAO,MAAM,mBAAmB,OAAQ,QAAQ,KAAG,aA0yClD,CAAC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="lodash" />
1
2
  import type { Knex } from 'knex';
2
3
  import type { Database } from '..';
3
4
  import type { MorphJoinTable } from '../types';
@@ -9,5 +10,16 @@ export declare const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate: (rows
9
10
  db: Database;
10
11
  transaction?: Knex.Transaction;
11
12
  }) => Promise<void>;
13
+ /**
14
+ * Encoding utilities for polymorphic relations.
15
+ *
16
+ * In some scenarios is useful to encode both the id & __type of the relation
17
+ * to have a unique identifier for the relation. (e.g. relations reordering)
18
+ */
19
+ export declare const encodePolymorphicId: (id: number | string, __type: string) => string;
20
+ export declare const encodePolymorphicRelation: import("lodash").CurriedFunction2<{
21
+ idColumn: any;
22
+ typeColumn: any;
23
+ }, any, any>;
12
24
  export {};
13
25
  //# sourceMappingURL=morph-relations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"morph-relations.d.ts","sourceRoot":"","sources":["../../src/entity-manager/morph-relations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,UAAU,CAAC;AAEzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AA8BtC,eAAO,MAAM,oDAAoD,yEAQ5D;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC;CAChC,kBAoCF,CAAC"}
1
+ {"version":3,"file":"morph-relations.d.ts","sourceRoot":"","sources":["../../src/entity-manager/morph-relations.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,UAAU,CAAC;AAEzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AA8BtC,eAAO,MAAM,oDAAoD,yEAQ5D;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC;CAChC,kBAoCF,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB,OAAQ,MAAM,GAAG,MAAM,UAAU,MAAM,WAEtE,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;YAkBpC,CAAC"}
@@ -8,6 +8,7 @@ interface Link {
8
8
  end?: true;
9
9
  };
10
10
  order?: number;
11
+ __component?: string;
11
12
  }
12
13
  interface OrderedLink extends Link {
13
14
  init?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"relations-orderer.d.ts","sourceRoot":"","sources":["../../src/entity-manager/relations-orderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,UAAU,IAAI;IACZ,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAY,SAAQ,IAAI;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,gBAAgB,eAAgB,IAAI,EAAE,eAAc,IAAI,EAAE,iCAwF/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,QAAA,MAAM,gBAAgB,yDACX,SAAS,EAAE,YACV,MAAM,SAAS,eACZ,MAAM,SAAS,WACnB,OAAO;0BAuDQ,IAAI,GAAG,IAAI,EAAE;uBAMhB,IAAI,GAAG,IAAI,EAAE;;IAqBhC;;OAEG;;CAgBN,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"relations-orderer.d.ts","sourceRoot":"","sources":["../../src/entity-manager/relations-orderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,UAAU,IAAI;IACZ,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,WAAY,SAAQ,IAAI;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,gBAAgB,eAAgB,IAAI,EAAE,eAAc,IAAI,EAAE,iCA0G/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,QAAA,MAAM,gBAAgB,yDACX,SAAS,EAAE,YACV,MAAM,SAAS,eACZ,MAAM,SAAS,WACnB,OAAO;0BAuDQ,IAAI,GAAG,IAAI,EAAE;uBAMhB,IAAI,GAAG,IAAI,EAAE;;IAqBhC;;OAEG;;CAgBN,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -4910,6 +4910,25 @@ const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (rows, {
4910
4910
  await createQueryBuilder(joinTable.name, db).delete().where({ $or: orWhere }).transacting(trx).execute();
4911
4911
  }
4912
4912
  };
4913
+ const encodePolymorphicId = (id, __type) => {
4914
+ return `${id}:::${__type}`;
4915
+ };
4916
+ const encodePolymorphicRelation = _.curry(({ idColumn, typeColumn }, relation) => {
4917
+ const newRelation = {
4918
+ ...relation,
4919
+ [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn])
4920
+ };
4921
+ if (relation.position) {
4922
+ const { before, after } = relation.position;
4923
+ const __type = relation.position.__type || relation.__type;
4924
+ newRelation.position = { ...relation.position };
4925
+ if (before)
4926
+ newRelation.position.before = encodePolymorphicId(before, __type);
4927
+ if (after)
4928
+ newRelation.position.after = encodePolymorphicId(after, __type);
4929
+ }
4930
+ return newRelation;
4931
+ });
4913
4932
  const getDocumentSiblingIdsQuery = (tableName, id) => {
4914
4933
  const models = Array.from(strapi.db.metadata.values());
4915
4934
  const isContentType = models.find((model) => {
@@ -5096,7 +5115,10 @@ const sortConnectArray = (connectArr, initialArr = [], strictSort = true) => {
5096
5115
  if (!adjacentRelId || !relationInInitialArray[adjacentRelId] && !mapper[adjacentRelId]) {
5097
5116
  needsSorting = true;
5098
5117
  }
5099
- if (mapper[relation.id]) {
5118
+ const existingRelation = mapper[relation.id];
5119
+ const hasNoComponent = existingRelation && !("__component" in existingRelation);
5120
+ const hasSameComponent = existingRelation && existingRelation.__component === relation.__component;
5121
+ if (existingRelation && (hasNoComponent || hasSameComponent)) {
5100
5122
  throw new InvalidRelationError(
5101
5123
  `The relation with id ${relation.id} is already connected. You cannot connect the same relation twice.`
5102
5124
  );
@@ -5237,7 +5259,7 @@ const toId = (value) => {
5237
5259
  if (isValidId(value)) {
5238
5260
  return value;
5239
5261
  }
5240
- throw new Error(`Invalid id, expected a string or integer, got ${value}`);
5262
+ throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);
5241
5263
  };
5242
5264
  const toIds = (value) => _.castArray(value || []).map(toId);
5243
5265
  const isValidId = (value) => _.isString(value) || _.isInteger(value);
@@ -5272,7 +5294,8 @@ const toAssocs = (data) => {
5272
5294
  connect: toIdArray(data?.connect).map((elm) => ({
5273
5295
  id: elm.id,
5274
5296
  position: elm.position ? elm.position : { end: true },
5275
- __pivot: elm.__pivot ?? {}
5297
+ __pivot: elm.__pivot ?? {},
5298
+ __type: elm.__type
5276
5299
  })),
5277
5300
  disconnect: toIdArray(data?.disconnect)
5278
5301
  };
@@ -5547,23 +5570,33 @@ const createEntityManager = (db) => {
5547
5570
  const { joinTable } = attribute;
5548
5571
  const { joinColumn, morphColumn } = joinTable;
5549
5572
  const { idColumn, typeColumn, typeField = "__type" } = morphColumn;
5550
- if (_.isEmpty(cleanRelationData.set)) {
5573
+ if (_.isEmpty(cleanRelationData.set) && _.isEmpty(cleanRelationData.connect)) {
5551
5574
  continue;
5552
5575
  }
5553
- const rows = cleanRelationData.set?.map((data2, idx) => ({
5576
+ const dataset = cleanRelationData.set || cleanRelationData.connect || [];
5577
+ const rows = dataset.map((data2, idx) => ({
5554
5578
  [joinColumn.name]: id,
5555
5579
  [idColumn.name]: data2.id,
5556
5580
  [typeColumn.name]: data2[typeField],
5557
5581
  ..."on" in joinTable && joinTable.on || {},
5558
5582
  ...data2.__pivot || {},
5559
5583
  order: idx + 1
5560
- })) ?? [];
5561
- await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {
5562
- uid,
5563
- attributeName,
5564
- joinTable,
5565
- db,
5566
- transaction: trx
5584
+ }));
5585
+ const orderMap = relationsOrderer(
5586
+ [],
5587
+ morphColumn.idColumn.name,
5588
+ "order",
5589
+ true
5590
+ // Always make a strict connect when inserting
5591
+ ).connect(
5592
+ // Merge id & __type to get a single id key
5593
+ dataset.map(encodePolymorphicRelation({ idColumn: "id", typeColumn: "__type" }))
5594
+ ).get().reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {});
5595
+ rows.forEach((row) => {
5596
+ const rowId = row[morphColumn.idColumn.name];
5597
+ const rowType = row[morphColumn.typeColumn.name];
5598
+ const encodedId = encodePolymorphicId(rowId, rowType);
5599
+ row.order = orderMap[encodedId];
5567
5600
  });
5568
5601
  await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5569
5602
  continue;
@@ -5663,25 +5696,67 @@ const createEntityManager = (db) => {
5663
5696
  const { joinTable } = targetAttribute;
5664
5697
  const { joinColumn, morphColumn } = joinTable;
5665
5698
  const { idColumn, typeColumn } = morphColumn;
5699
+ const hasSet = !_.isEmpty(cleanRelationData.set);
5700
+ const hasConnect = !_.isEmpty(cleanRelationData.connect);
5701
+ const hasDisconnect = !_.isEmpty(cleanRelationData.disconnect);
5702
+ if (!hasSet && (hasConnect || hasDisconnect)) {
5703
+ const idsToDelete = [
5704
+ ...cleanRelationData.disconnect || [],
5705
+ ...cleanRelationData.connect || []
5706
+ ];
5707
+ if (!_.isEmpty(idsToDelete)) {
5708
+ const where = {
5709
+ $or: idsToDelete.map((item) => {
5710
+ return {
5711
+ [idColumn.name]: id,
5712
+ [typeColumn.name]: uid,
5713
+ [joinColumn.name]: item.id,
5714
+ ...joinTable.on || {},
5715
+ field: attributeName
5716
+ };
5717
+ })
5718
+ };
5719
+ await this.createQueryBuilder(joinTable.name).delete().where(where).transacting(trx).execute();
5720
+ }
5721
+ if (hasConnect) {
5722
+ const start = await this.createQueryBuilder(joinTable.name).where({
5723
+ [idColumn.name]: id,
5724
+ [typeColumn.name]: uid,
5725
+ ...joinTable.on || {},
5726
+ ...data.__pivot || {}
5727
+ }).max("order").first().transacting(trx).execute();
5728
+ const startOrder = start?.max || 0;
5729
+ const rows = (cleanRelationData.connect ?? []).map((data2, idx) => ({
5730
+ [joinColumn.name]: data2.id,
5731
+ [idColumn.name]: id,
5732
+ [typeColumn.name]: uid,
5733
+ ...joinTable.on || {},
5734
+ ...data2.__pivot || {},
5735
+ order: startOrder + idx + 1,
5736
+ field: attributeName
5737
+ }));
5738
+ await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5739
+ }
5740
+ continue;
5741
+ }
5666
5742
  await this.createQueryBuilder(joinTable.name).delete().where({
5667
5743
  [idColumn.name]: id,
5668
5744
  [typeColumn.name]: uid,
5669
5745
  ...joinTable.on || {},
5670
5746
  field: attributeName
5671
5747
  }).transacting(trx).execute();
5672
- if (_.isEmpty(cleanRelationData.set)) {
5673
- continue;
5748
+ if (hasSet) {
5749
+ const rows = (cleanRelationData.set ?? []).map((data2, idx) => ({
5750
+ [joinColumn.name]: data2.id,
5751
+ [idColumn.name]: id,
5752
+ [typeColumn.name]: uid,
5753
+ ...joinTable.on || {},
5754
+ ...data2.__pivot || {},
5755
+ order: idx + 1,
5756
+ field: attributeName
5757
+ }));
5758
+ await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5674
5759
  }
5675
- const rows = cleanRelationData.set?.map((data2, idx) => ({
5676
- [joinColumn.name]: data2.id,
5677
- [idColumn.name]: id,
5678
- [typeColumn.name]: uid,
5679
- ...joinTable.on || {},
5680
- ...data2.__pivot || {},
5681
- order: idx + 1,
5682
- field: attributeName
5683
- }));
5684
- await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5685
5760
  }
5686
5761
  continue;
5687
5762
  }
@@ -5692,29 +5767,129 @@ const createEntityManager = (db) => {
5692
5767
  const { joinTable } = attribute;
5693
5768
  const { joinColumn, morphColumn } = joinTable;
5694
5769
  const { idColumn, typeColumn, typeField = "__type" } = morphColumn;
5695
- await this.createQueryBuilder(joinTable.name).delete().where({
5696
- [joinColumn.name]: id,
5697
- ...joinTable.on || {}
5698
- }).transacting(trx).execute();
5699
- if (_.isEmpty(cleanRelationData.set)) {
5770
+ const hasSet = !_.isEmpty(cleanRelationData.set);
5771
+ const hasConnect = !_.isEmpty(cleanRelationData.connect);
5772
+ const hasDisconnect = !_.isEmpty(cleanRelationData.disconnect);
5773
+ if (!hasSet && (hasConnect || hasDisconnect)) {
5774
+ const idsToDelete = [
5775
+ ...cleanRelationData.disconnect || [],
5776
+ ...cleanRelationData.connect || []
5777
+ ];
5778
+ const rowsToDelete = [
5779
+ ...(cleanRelationData.disconnect ?? []).map((data2, idx) => ({
5780
+ [joinColumn.name]: id,
5781
+ [idColumn.name]: data2.id,
5782
+ [typeColumn.name]: data2[typeField],
5783
+ ..."on" in joinTable && joinTable.on || {},
5784
+ ...data2.__pivot || {},
5785
+ order: idx + 1
5786
+ })),
5787
+ ...(cleanRelationData.connect ?? []).map((data2, idx) => ({
5788
+ [joinColumn.name]: id,
5789
+ [idColumn.name]: data2.id,
5790
+ // @ts-expect-error TODO
5791
+ [typeColumn.name]: data2[typeField],
5792
+ ..."on" in joinTable && joinTable.on || {},
5793
+ ...data2.__pivot || {},
5794
+ order: idx + 1
5795
+ }))
5796
+ ];
5797
+ const adjacentRelations = await this.createQueryBuilder(joinTable.name).where({
5798
+ $or: [
5799
+ {
5800
+ [joinColumn.name]: id,
5801
+ [idColumn.name]: {
5802
+ $in: _.compact(
5803
+ cleanRelationData.connect?.map(
5804
+ (r) => r.position?.after || r.position?.before
5805
+ )
5806
+ )
5807
+ }
5808
+ },
5809
+ {
5810
+ [joinColumn.name]: id,
5811
+ order: this.createQueryBuilder(joinTable.name).max("order").where({ [joinColumn.name]: id }).where(joinTable.on || {}).transacting(trx).getKnexQuery()
5812
+ }
5813
+ ]
5814
+ }).where(joinTable.on || {}).transacting(trx).execute();
5815
+ if (!_.isEmpty(idsToDelete)) {
5816
+ const where = {
5817
+ $or: idsToDelete.map((item) => {
5818
+ return {
5819
+ [idColumn.name]: item.id,
5820
+ [typeColumn.name]: item[typeField],
5821
+ [joinColumn.name]: id,
5822
+ ...joinTable.on || {}
5823
+ };
5824
+ })
5825
+ };
5826
+ await this.createQueryBuilder(joinTable.name).delete().where(where).transacting(trx).execute();
5827
+ await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete, {
5828
+ uid,
5829
+ attributeName,
5830
+ joinTable,
5831
+ db,
5832
+ transaction: trx
5833
+ });
5834
+ }
5835
+ if (hasConnect) {
5836
+ const dataset = cleanRelationData.connect || [];
5837
+ const rows = dataset.map((data2) => ({
5838
+ [joinColumn.name]: id,
5839
+ [idColumn.name]: data2.id,
5840
+ [typeColumn.name]: data2[typeField],
5841
+ ...joinTable.on || {},
5842
+ ...data2.__pivot || {},
5843
+ field: attributeName
5844
+ }));
5845
+ const orderMap = relationsOrderer(
5846
+ // Merge id & __type to get a single id key
5847
+ adjacentRelations.map(
5848
+ encodePolymorphicRelation({
5849
+ idColumn: idColumn.name,
5850
+ typeColumn: typeColumn.name
5851
+ })
5852
+ ),
5853
+ idColumn.name,
5854
+ "order",
5855
+ cleanRelationData.options?.strict
5856
+ ).connect(
5857
+ // Merge id & __type to get a single id key
5858
+ dataset.map(encodePolymorphicRelation({ idColumn: "id", typeColumn: "__type" }))
5859
+ ).getOrderMap();
5860
+ rows.forEach((row) => {
5861
+ const rowId = row[idColumn.name];
5862
+ const rowType = row[typeColumn.name];
5863
+ const encodedId = encodePolymorphicId(rowId, rowType);
5864
+ row.order = orderMap[encodedId];
5865
+ });
5866
+ await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5867
+ }
5700
5868
  continue;
5701
5869
  }
5702
- const rows = (cleanRelationData.set ?? []).map((data2, idx) => ({
5703
- [joinColumn.name]: id,
5704
- [idColumn.name]: data2.id,
5705
- [typeColumn.name]: data2[typeField],
5706
- ...joinTable.on || {},
5707
- ...data2.__pivot || {},
5708
- order: idx + 1
5709
- }));
5710
- await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {
5711
- uid,
5712
- attributeName,
5713
- joinTable,
5714
- db,
5715
- transaction: trx
5716
- });
5717
- await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5870
+ if (hasSet) {
5871
+ await this.createQueryBuilder(joinTable.name).delete().where({
5872
+ [joinColumn.name]: id,
5873
+ ...joinTable.on || {}
5874
+ }).transacting(trx).execute();
5875
+ const rows = (cleanRelationData.set ?? []).map((data2, idx) => ({
5876
+ [joinColumn.name]: id,
5877
+ [idColumn.name]: data2.id,
5878
+ [typeColumn.name]: data2[typeField],
5879
+ field: attributeName,
5880
+ ...joinTable.on || {},
5881
+ ...data2.__pivot || {},
5882
+ order: idx + 1
5883
+ }));
5884
+ await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {
5885
+ uid,
5886
+ attributeName,
5887
+ joinTable,
5888
+ db,
5889
+ transaction: trx
5890
+ });
5891
+ await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();
5892
+ }
5718
5893
  continue;
5719
5894
  }
5720
5895
  if ("joinColumn" in attribute && attribute.joinColumn && attribute.owner) {
@@ -6139,7 +6314,7 @@ const QUERIES = {
6139
6314
  FROM :tableName:
6140
6315
  LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
6141
6316
  WHERE document_id IS NULL
6142
- GROUP BY :tableName:.id, :joinColumn:
6317
+ GROUP BY :tableName:.id, :joinTableName:.:joinColumn:
6143
6318
  LIMIT 1;
6144
6319
  `,
6145
6320
  params
@@ -6153,7 +6328,7 @@ const QUERIES = {
6153
6328
  FROM :tableName:
6154
6329
  LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
6155
6330
  WHERE document_id IS NULL
6156
- GROUP BY :tableName:.id, :joinColumn:
6331
+ GROUP BY :tableName:.id, :joinTableName:.:joinColumn:
6157
6332
  LIMIT 1;
6158
6333
  `,
6159
6334
  params
@@ -6167,7 +6342,7 @@ const QUERIES = {
6167
6342
  FROM :tableName:
6168
6343
  LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:
6169
6344
  WHERE document_id IS NULL
6170
- GROUP BY :joinColumn:
6345
+ GROUP BY :joinTableName:.:joinColumn:
6171
6346
  LIMIT 1;
6172
6347
  `,
6173
6348
  params