@payloadcms/drizzle 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd

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.
Files changed (169) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +3 -25
  3. package/dist/count.js.map +1 -1
  4. package/dist/countVersions.d.ts.map +1 -1
  5. package/dist/countVersions.js +4 -28
  6. package/dist/countVersions.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts.map +1 -1
  8. package/dist/createGlobalVersion.js +2 -15
  9. package/dist/createGlobalVersion.js.map +1 -1
  10. package/dist/createVersion.d.ts.map +1 -1
  11. package/dist/createVersion.js +1 -12
  12. package/dist/createVersion.js.map +1 -1
  13. package/dist/deleteOne.d.ts.map +1 -1
  14. package/dist/deleteOne.js +1 -18
  15. package/dist/deleteOne.js.map +1 -1
  16. package/dist/find/buildFindManyArgs.d.ts +2 -3
  17. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  18. package/dist/find/buildFindManyArgs.js +1 -2
  19. package/dist/find/buildFindManyArgs.js.map +1 -1
  20. package/dist/find/buildPolymorphicJoinQuery.d.ts +4 -4
  21. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
  22. package/dist/find/buildPolymorphicJoinQuery.js +26 -32
  23. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
  24. package/dist/find/buildPolymorphicJoinWhere.js +1 -1
  25. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
  26. package/dist/find/createPolymorphicJoinWherePlan.d.ts +2 -1
  27. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -1
  28. package/dist/find/createPolymorphicJoinWherePlan.js +14 -5
  29. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
  30. package/dist/find/findMany.d.ts +1 -6
  31. package/dist/find/findMany.d.ts.map +1 -1
  32. package/dist/find/findMany.js +3 -16
  33. package/dist/find/findMany.js.map +1 -1
  34. package/dist/find/traverseFields.d.ts +2 -3
  35. package/dist/find/traverseFields.d.ts.map +1 -1
  36. package/dist/find/traverseFields.js +8 -54
  37. package/dist/find/traverseFields.js.map +1 -1
  38. package/dist/find.d.ts.map +1 -1
  39. package/dist/find.js +4 -32
  40. package/dist/find.js.map +1 -1
  41. package/dist/findDistinct.d.ts.map +1 -1
  42. package/dist/findDistinct.js +8 -107
  43. package/dist/findDistinct.js.map +1 -1
  44. package/dist/findGlobal.d.ts.map +1 -1
  45. package/dist/findGlobal.js +5 -22
  46. package/dist/findGlobal.js.map +1 -1
  47. package/dist/findGlobalVersions.js +3 -8
  48. package/dist/findGlobalVersions.js.map +1 -1
  49. package/dist/findOne.d.ts +1 -1
  50. package/dist/findOne.d.ts.map +1 -1
  51. package/dist/findOne.js +3 -30
  52. package/dist/findOne.js.map +1 -1
  53. package/dist/findVersions.d.ts.map +1 -1
  54. package/dist/findVersions.js +5 -32
  55. package/dist/findVersions.js.map +1 -1
  56. package/dist/index.d.ts +0 -10
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +0 -10
  59. package/dist/index.js.map +1 -1
  60. package/dist/postgres/insert.d.ts.map +1 -1
  61. package/dist/postgres/insert.js +2 -4
  62. package/dist/postgres/insert.js.map +1 -1
  63. package/dist/postgres/types.d.ts +0 -4
  64. package/dist/postgres/types.d.ts.map +1 -1
  65. package/dist/postgres/types.js.map +1 -1
  66. package/dist/queries/buildAndOrConditions.d.ts +2 -3
  67. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  68. package/dist/queries/buildAndOrConditions.js +1 -2
  69. package/dist/queries/buildAndOrConditions.js.map +1 -1
  70. package/dist/queries/buildOrderBy.d.ts +2 -3
  71. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  72. package/dist/queries/buildOrderBy.js +1 -2
  73. package/dist/queries/buildOrderBy.js.map +1 -1
  74. package/dist/queries/buildQuery.d.ts +2 -3
  75. package/dist/queries/buildQuery.d.ts.map +1 -1
  76. package/dist/queries/buildQuery.js +2 -4
  77. package/dist/queries/buildQuery.js.map +1 -1
  78. package/dist/queries/getTableColumnFromPath.d.ts +2 -3
  79. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  80. package/dist/queries/getTableColumnFromPath.js +27 -166
  81. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  82. package/dist/queries/parseParams.d.ts +2 -3
  83. package/dist/queries/parseParams.d.ts.map +1 -1
  84. package/dist/queries/parseParams.js +1 -4
  85. package/dist/queries/parseParams.js.map +1 -1
  86. package/dist/queryDrafts.d.ts.map +1 -1
  87. package/dist/queryDrafts.js +4 -23
  88. package/dist/queryDrafts.js.map +1 -1
  89. package/dist/schema/build.d.ts.map +1 -1
  90. package/dist/schema/build.js +20 -23
  91. package/dist/schema/build.js.map +1 -1
  92. package/dist/sqlite/execute.js.map +1 -1
  93. package/dist/sqlite/insert.d.ts.map +1 -1
  94. package/dist/sqlite/insert.js +3 -5
  95. package/dist/sqlite/insert.js.map +1 -1
  96. package/dist/sqlite/types.d.ts +0 -4
  97. package/dist/sqlite/types.d.ts.map +1 -1
  98. package/dist/sqlite/types.js.map +1 -1
  99. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  100. package/dist/transactions/beginTransaction.js +5 -13
  101. package/dist/transactions/beginTransaction.js.map +1 -1
  102. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  103. package/dist/transactions/commitTransaction.js +5 -1
  104. package/dist/transactions/commitTransaction.js.map +1 -1
  105. package/dist/transform/read/traverseFields.js.map +1 -1
  106. package/dist/transform/write/array.d.ts +2 -3
  107. package/dist/transform/write/array.d.ts.map +1 -1
  108. package/dist/transform/write/array.js +1 -2
  109. package/dist/transform/write/array.js.map +1 -1
  110. package/dist/transform/write/blocks.d.ts +2 -3
  111. package/dist/transform/write/blocks.d.ts.map +1 -1
  112. package/dist/transform/write/blocks.js +1 -2
  113. package/dist/transform/write/blocks.js.map +1 -1
  114. package/dist/transform/write/index.d.ts.map +1 -1
  115. package/dist/transform/write/index.js +0 -2
  116. package/dist/transform/write/index.js.map +1 -1
  117. package/dist/transform/write/traverseFields.d.ts +1 -2
  118. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  119. package/dist/transform/write/traverseFields.js +6 -32
  120. package/dist/transform/write/traverseFields.js.map +1 -1
  121. package/dist/transform/write/types.d.ts +0 -7
  122. package/dist/transform/write/types.d.ts.map +1 -1
  123. package/dist/transform/write/types.js.map +1 -1
  124. package/dist/types.d.ts +0 -1
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js.map +1 -1
  127. package/dist/updateGlobal.d.ts +1 -5
  128. package/dist/updateGlobal.d.ts.map +1 -1
  129. package/dist/updateGlobal.js +4 -96
  130. package/dist/updateGlobal.js.map +1 -1
  131. package/dist/updateOne.d.ts.map +1 -1
  132. package/dist/updateOne.js +5 -47
  133. package/dist/updateOne.js.map +1 -1
  134. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  135. package/dist/upsertRow/deleteExistingRowsByPath.js +12 -17
  136. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  137. package/dist/upsertRow/index.d.ts +1 -1
  138. package/dist/upsertRow/index.d.ts.map +1 -1
  139. package/dist/upsertRow/index.js +42 -132
  140. package/dist/upsertRow/index.js.map +1 -1
  141. package/dist/upsertRow/types.d.ts +0 -3
  142. package/dist/upsertRow/types.d.ts.map +1 -1
  143. package/dist/upsertRow/types.js.map +1 -1
  144. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  145. package/dist/utilities/blocksToJsonMigrator.js +6 -17
  146. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  147. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  148. package/dist/utilities/createSchemaGenerator.js +7 -12
  149. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  150. package/dist/utilities/executeSchemaHooks.js +1 -1
  151. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  152. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  153. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  154. package/dist/utilities/formatGeneratedFile.js +58 -0
  155. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  156. package/dist/utilities/getTransaction.js.map +1 -1
  157. package/package.json +16 -19
  158. package/dist/deleteBranchGlobal.d.ts +0 -10
  159. package/dist/deleteBranchGlobal.d.ts.map +0 -1
  160. package/dist/deleteBranchGlobal.js +0 -27
  161. package/dist/deleteBranchGlobal.js.map +0 -1
  162. package/dist/queries/buildBranchVisibility.d.ts +0 -11
  163. package/dist/queries/buildBranchVisibility.d.ts.map +0 -1
  164. package/dist/queries/buildBranchVisibility.js +0 -48
  165. package/dist/queries/buildBranchVisibility.js.map +0 -1
  166. package/dist/upsertBranchGlobalChange.d.ts +0 -3
  167. package/dist/upsertBranchGlobalChange.d.ts.map +0 -1
  168. package/dist/upsertBranchGlobalChange.js +0 -35
  169. package/dist/upsertBranchGlobalChange.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { and, desc, eq, isNull, or } from 'drizzle-orm';
2
- import { branchField, MAIN_BRANCH } from 'payload';
3
2
  import { buildFindManyArgs } from '../find/buildFindManyArgs.js';
4
3
  import { transform } from '../transform/read/index.js';
5
4
  import { transformForWrite } from '../transform/write/index.js';
@@ -18,7 +17,7 @@ import { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js';
18
17
  */ export const upsertRow = async ({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, // TODO:
19
18
  // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs
20
19
  // Make a new argument in upsertRow.ts and pass the slug from every operation.
21
- customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertConflictData, upsertTarget, where })=>{
20
+ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertTarget, where })=>{
22
21
  if (operation === 'create' && !data.createdAt) {
23
22
  data.createdAt = new Date().toISOString();
24
23
  }
@@ -163,16 +162,6 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
163
162
  path,
164
163
  tableName
165
164
  });
166
- const conflictWrite = upsertConflictData ? transformForWrite({
167
- adapter,
168
- data: upsertConflictData,
169
- enableAtomicWrites: false,
170
- fields,
171
- path,
172
- tableName
173
- }) : rowToInsert;
174
- let nestedWrite = rowToInsert;
175
- let isUpdatingAfterInsertConflict = false;
176
165
  if (customID) {
177
166
  rowToInsert.row.id = customID;
178
167
  }
@@ -193,58 +182,22 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
193
182
  [insertedRow] = await adapter.insert({
194
183
  db,
195
184
  onConflictDoUpdate: where ? {
196
- set: conflictWrite.row,
185
+ set: rowToInsert.row,
197
186
  target,
198
187
  where
199
188
  } : {
200
- set: conflictWrite.row,
189
+ set: rowToInsert.row,
201
190
  target
202
191
  },
203
192
  tableName,
204
193
  values: rowToInsert.row
205
194
  });
206
- } else if (upsertConflictData && upsertTarget) {
207
- // The parent conflict is atomic. Child-table replacements are serialized only
208
- // when the caller's transaction spans this complete upsert.
209
- const targetKey = Object.entries(adapter.tables[tableName]).find(([, column])=>column === target)?.[0];
210
- const targetValue = targetKey ? rowToInsert.row[targetKey] : undefined;
211
- if (!targetKey || typeof targetValue === 'undefined') {
212
- throw new Error(`Could not resolve the upsert target value for table "${tableName}".`);
213
- }
214
- for(let attempt = 0; attempt < 10; attempt++){
215
- ;
216
- [insertedRow] = await adapter.insert({
217
- db,
218
- onConflictDoNothing: {
219
- target
220
- },
221
- tableName,
222
- values: rowToInsert.row
223
- });
224
- if (insertedRow) {
225
- break;
226
- }
227
- const updateWhere = where ? and(eq(target, targetValue), where) : eq(target, targetValue);
228
- const updatedRows = await db.update(adapter.tables[tableName]).set(conflictWrite.row).where(updateWhere).returning();
229
- if (updatedRows[0]) {
230
- insertedRow = updatedRows[0];
231
- nestedWrite = conflictWrite;
232
- isUpdatingAfterInsertConflict = true;
233
- break;
234
- }
235
- if (where) {
236
- return null;
237
- }
238
- }
239
- if (!insertedRow) {
240
- throw new Error(`Could not upsert a stable row in table "${tableName}".`);
241
- }
242
195
  } else {
243
196
  ;
244
197
  [insertedRow] = await adapter.insert({
245
198
  db,
246
199
  onConflictDoUpdate: {
247
- set: conflictWrite.row,
200
+ set: rowToInsert.row,
248
201
  target,
249
202
  where
250
203
  },
@@ -278,44 +231,39 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
278
231
  const numbersToInsert = [];
279
232
  const blocksToInsert = {};
280
233
  const selectsToInsert = {};
281
- const localeTableName = `${tableName}${adapter.localesSuffix}`;
282
- const shouldStampLocaleBranch = Boolean(adapter.rawTables[localeTableName]?.columns[branchField]);
283
234
  // If there are locale rows with data, add the parent and locale to each
284
- if (Object.keys(nestedWrite.locales).length > 0) {
285
- Object.entries(nestedWrite.locales).forEach(([locale, localeRow])=>{
235
+ if (Object.keys(rowToInsert.locales).length > 0) {
236
+ Object.entries(rowToInsert.locales).forEach(([locale, localeRow])=>{
286
237
  localeRow._parentID = insertedRow.id;
287
238
  localeRow._locale = locale;
288
- if (shouldStampLocaleBranch) {
289
- localeRow[branchField] = insertedRow[branchField] ?? data[branchField] ?? MAIN_BRANCH;
290
- }
291
239
  localesToInsert.push(localeRow);
292
240
  });
293
241
  }
294
242
  // If there are relationships, add parent to each
295
- if (nestedWrite.relationships.length > 0) {
296
- nestedWrite.relationships.forEach((relation)=>{
243
+ if (rowToInsert.relationships.length > 0) {
244
+ rowToInsert.relationships.forEach((relation)=>{
297
245
  relation.parent = insertedRow.id;
298
246
  relationsToInsert.push(relation);
299
247
  });
300
248
  }
301
249
  // If there are texts, add parent to each
302
- if (nestedWrite.texts.length > 0) {
303
- nestedWrite.texts.forEach((textRow)=>{
250
+ if (rowToInsert.texts.length > 0) {
251
+ rowToInsert.texts.forEach((textRow)=>{
304
252
  textRow.parent = insertedRow.id;
305
253
  textsToInsert.push(textRow);
306
254
  });
307
255
  }
308
256
  // If there are numbers, add parent to each
309
- if (nestedWrite.numbers.length > 0) {
310
- nestedWrite.numbers.forEach((numberRow)=>{
257
+ if (rowToInsert.numbers.length > 0) {
258
+ rowToInsert.numbers.forEach((numberRow)=>{
311
259
  numberRow.parent = insertedRow.id;
312
260
  numbersToInsert.push(numberRow);
313
261
  });
314
262
  }
315
263
  // If there are selects, add parent to each, and then
316
264
  // store by table name and rows
317
- if (Object.keys(nestedWrite.selects).length > 0) {
318
- Object.entries(nestedWrite.selects).forEach(([selectTableName, selectRows])=>{
265
+ if (Object.keys(rowToInsert.selects).length > 0) {
266
+ Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows])=>{
319
267
  selectsToInsert[selectTableName] = [];
320
268
  selectRows.forEach((row)=>{
321
269
  if (typeof row.parent === 'undefined') {
@@ -327,8 +275,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
327
275
  }
328
276
  // If there are blocks, add parent to each, and then
329
277
  // store by table name and rows
330
- Object.keys(nestedWrite.blocks).forEach((tableName)=>{
331
- nestedWrite.blocks[tableName].forEach((blockRow)=>{
278
+ Object.keys(rowToInsert.blocks).forEach((tableName)=>{
279
+ rowToInsert.blocks[tableName].forEach((blockRow)=>{
332
280
  blockRow.row._parentID = insertedRow.id;
333
281
  if (!blocksToInsert[tableName]) {
334
282
  blocksToInsert[tableName] = [];
@@ -343,36 +291,20 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
343
291
  // INSERT LOCALES
344
292
  // //////////////////////////////////
345
293
  if (localesToInsert.length > 0) {
294
+ const localeTableName = `${tableName}${adapter.localesSuffix}`;
346
295
  const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`];
347
- if (operation === 'update' && isUpdatingAfterInsertConflict) {
348
- for (const localeRow of localesToInsert){
349
- await adapter.insert({
350
- db,
351
- onConflictDoUpdate: {
352
- set: localeRow,
353
- target: [
354
- localeTable._locale,
355
- localeTable._parentID
356
- ]
357
- },
358
- tableName: localeTableName,
359
- values: localeRow
360
- });
361
- }
362
- } else {
363
- if (operation === 'update') {
364
- await adapter.deleteWhere({
365
- db,
366
- tableName: localeTableName,
367
- where: eq(localeTable._parentID, insertedRow.id)
368
- });
369
- }
370
- await adapter.insert({
296
+ if (operation === 'update') {
297
+ await adapter.deleteWhere({
371
298
  db,
372
299
  tableName: localeTableName,
373
- values: localesToInsert
300
+ where: eq(localeTable._parentID, insertedRow.id)
374
301
  });
375
302
  }
303
+ await adapter.insert({
304
+ db,
305
+ tableName: localeTableName,
306
+ values: localesToInsert
307
+ });
376
308
  }
377
309
  // //////////////////////////////////
378
310
  // INSERT RELATIONSHIPS
@@ -380,7 +312,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
380
312
  const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
381
313
  if (operation === 'update') {
382
314
  // Filter out specific item deletions (those with itemToRemove) from general path deletions
383
- const generalRelationshipDeletes = nestedWrite.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
315
+ const generalRelationshipDeletes = rowToInsert.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
384
316
  await deleteExistingRowsByPath({
385
317
  adapter,
386
318
  db,
@@ -405,9 +337,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
405
337
  // //////////////////////////////////
406
338
  // HANDLE RELATIONSHIP $push OPERATIONS
407
339
  // //////////////////////////////////
408
- if (nestedWrite.relationshipsToAppend.length > 0) {
340
+ if (rowToInsert.relationshipsToAppend.length > 0) {
409
341
  // Prepare all relationships for batch insert (order will be set after max query)
410
- const relationshipsToInsert = nestedWrite.relationshipsToAppend.map((rel)=>{
342
+ const relationshipsToInsert = rowToInsert.relationshipsToAppend.map((rel)=>{
411
343
  const parentId = id || insertedRow.id;
412
344
  const row = {
413
345
  parent: parentId,
@@ -505,10 +437,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
505
437
  // //////////////////////////////////
506
438
  // HANDLE RELATIONSHIP $remove OPERATIONS
507
439
  // //////////////////////////////////
508
- if (nestedWrite.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
440
+ if (rowToInsert.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
509
441
  const relationshipTable = adapter.tables[relationshipsTableName];
510
442
  if (relationshipTable) {
511
- for (const relToDelete of nestedWrite.relationshipsToDelete){
443
+ for (const relToDelete of rowToInsert.relationshipsToDelete){
512
444
  if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {
513
445
  const item = relToDelete.itemToRemove;
514
446
  const parentId = id || insertedRow.id;
@@ -562,7 +494,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
562
494
  pathColumnName: 'path',
563
495
  rows: [
564
496
  ...textsToInsert,
565
- ...nestedWrite.textsToDelete
497
+ ...rowToInsert.textsToDelete
566
498
  ],
567
499
  tableName: textsTableName
568
500
  });
@@ -588,7 +520,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
588
520
  pathColumnName: 'path',
589
521
  rows: [
590
522
  ...numbersToInsert,
591
- ...nestedWrite.numbersToDelete
523
+ ...rowToInsert.numbersToDelete
592
524
  ],
593
525
  tableName: numbersTableName
594
526
  });
@@ -605,7 +537,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
605
537
  // //////////////////////////////////
606
538
  const insertedBlockRows = {};
607
539
  if (operation === 'update') {
608
- for (const tableName of nestedWrite.blocksToDelete){
540
+ for (const tableName of rowToInsert.blocksToDelete){
609
541
  const blockTable = adapter.tables[tableName];
610
542
  await adapter.deleteWhere({
611
543
  db,
@@ -661,7 +593,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
661
593
  // INSERT ARRAYS RECURSIVELY
662
594
  // //////////////////////////////////
663
595
  if (operation === 'update') {
664
- for (const arrayTableName of Object.keys(nestedWrite.arrays)){
596
+ for (const arrayTableName of Object.keys(rowToInsert.arrays)){
665
597
  await deleteExistingArrayRows({
666
598
  adapter,
667
599
  db,
@@ -673,8 +605,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
673
605
  await insertArrays({
674
606
  adapter,
675
607
  arrays: [
676
- nestedWrite.arrays,
677
- nestedWrite.arraysToPush
608
+ rowToInsert.arrays,
609
+ rowToInsert.arraysToPush
678
610
  ],
679
611
  db,
680
612
  parentRows: [
@@ -686,36 +618,14 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
686
618
  // //////////////////////////////////
687
619
  // INSERT hasMany SELECTS
688
620
  // //////////////////////////////////
689
- const selectTableNames = new Set([
690
- ...Object.keys(nestedWrite.selectsToDelete),
691
- ...Object.keys(selectsToInsert)
692
- ]);
693
- for (const selectTableName of selectTableNames){
694
- const tableRows = selectsToInsert[selectTableName] ?? [];
621
+ for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)){
695
622
  const selectTable = adapter.tables[selectTableName];
696
623
  if (operation === 'update') {
697
- for (const selectToDelete of nestedWrite.selectsToDelete[selectTableName] ?? []){
698
- let selectParent = selectToDelete.parent ?? insertedRow.id;
699
- if ((typeof selectParent === 'number' || typeof selectParent === 'string') && selectParent in arraysBlocksUUIDMap) {
700
- selectParent = arraysBlocksUUIDMap[selectParent];
701
- }
702
- const deleteConstraints = [
703
- eq(selectTable.parent, selectParent)
704
- ];
705
- if (typeof selectToDelete.locale === 'string') {
706
- if (!selectTable.locale) {
707
- throw new Error(`Could not limit the select replacement for table "${selectTableName}" to locale "${selectToDelete.locale}".`);
708
- }
709
- deleteConstraints.push(eq(selectTable.locale, selectToDelete.locale));
710
- } else if (selectTable.locale) {
711
- deleteConstraints.push(isNull(selectTable.locale));
712
- }
713
- await adapter.deleteWhere({
714
- db,
715
- tableName: selectTableName,
716
- where: and(...deleteConstraints)
717
- });
718
- }
624
+ await adapter.deleteWhere({
625
+ db,
626
+ tableName: selectTableName,
627
+ where: eq(selectTable.parent, insertedRow.id)
628
+ });
719
629
  }
720
630
  if (Object.keys(arraysBlocksUUIDMap).length > 0) {
721
631
  tableRows.forEach((row)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { and, desc, eq, isNull, or } from 'drizzle-orm'\nimport { branchField, MAIN_BRANCH } from 'payload'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\ntype RelationshipRow = {\n [key: string]: number | string | undefined // For relationship ID columns like categoriesID, moviesID, etc.\n id?: number | string\n locale?: string\n order: number\n parent: number | string // Drizzle table uses 'parent' key\n path: string\n}\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { markWrite } from '../utilities/readAfterWrite.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { handleUpsertError } from './handleUpsertError.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n collectionSlug,\n data,\n db,\n fields,\n globalSlug,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n customID,\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertConflictData,\n upsertTarget,\n where,\n}: Args): Promise<null | T> => {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date().toISOString()\n }\n\n markWrite(adapter)\n\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n try {\n const transformedForWrite = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n const { row } = transformedForWrite\n const { arraysToPush } = transformedForWrite\n\n const drizzle = db as LibSQLDatabase\n const updateWhere = where\n ? and(eq(adapter.tables[tableName].id, id), where)\n : eq(adapter.tables[tableName].id, id)\n\n // First, handle $push arrays\n\n if (arraysToPush && Object.keys(arraysToPush)?.length) {\n await insertArrays({\n adapter,\n arrays: [arraysToPush],\n db,\n parentRows: [insertedRow],\n uuidMap: {},\n })\n }\n\n // If row.updatedAt is not set, delete it to avoid triggering hasDataToUpdate. `updatedAt` may be explicitly set to null to\n // disable triggering hasDataToUpdate.\n if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {\n delete row.updatedAt\n }\n\n const hasDataToUpdate = row && Object.keys(row)?.length\n\n // Then, handle regular row update\n if (ignoreResult) {\n if (hasDataToUpdate) {\n // Only update row if there is something to update.\n // Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.\n await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere)\n }\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (!hasDataToUpdate) {\n // Nothing to update => just fetch current row and return\n findManyArgs.where = updateWhere\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n if (!doc) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n if (!docs[0]) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning({\n id: adapter.tables[tableName].id,\n })\n\n if (!docs[0]) {\n return null\n }\n\n insertedRow = docs[0]\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n const conflictWrite = upsertConflictData\n ? transformForWrite({\n adapter,\n data: upsertConflictData,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n : rowToInsert\n let nestedWrite = rowToInsert\n let isUpdatingAfterInsertConflict = false\n\n if (customID) {\n rowToInsert.row.id = customID\n }\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n // Check if we only have relationship operations and no main row data to update\n // Exclude timestamp-only updates when we only have relationship operations.\n // Localized field updates live in the `_locales` table, so the main row may only\n // contain timestamps — in that case the parent row's `updatedAt` must still bump.\n const rowKeys = Object.keys(rowToInsert.row)\n const hasLocalizedData = Object.keys(rowToInsert.locales).length > 0\n const hasMainRowData =\n rowKeys.length > 0 &&\n (hasLocalizedData || !rowKeys.every((key) => key === 'updatedAt' || key === 'createdAt'))\n\n if (hasMainRowData) {\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: where\n ? { set: conflictWrite.row, target, where }\n : { set: conflictWrite.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else if (upsertConflictData && upsertTarget) {\n // The parent conflict is atomic. Child-table replacements are serialized only\n // when the caller's transaction spans this complete upsert.\n const targetKey = Object.entries(adapter.tables[tableName]).find(\n ([, column]) => column === target,\n )?.[0]\n const targetValue = targetKey ? rowToInsert.row[targetKey] : undefined\n\n if (!targetKey || typeof targetValue === 'undefined') {\n throw new Error(`Could not resolve the upsert target value for table \"${tableName}\".`)\n }\n\n for (let attempt = 0; attempt < 10; attempt++) {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoNothing: { target },\n tableName,\n values: rowToInsert.row,\n })\n\n if (insertedRow) {\n break\n }\n\n const updateWhere = where\n ? and(eq(target, targetValue), where)\n : eq(target, targetValue)\n const updatedRows = await (db as LibSQLDatabase)\n .update(adapter.tables[tableName])\n .set(conflictWrite.row)\n .where(updateWhere)\n .returning()\n\n if (updatedRows[0]) {\n insertedRow = updatedRows[0]\n nestedWrite = conflictWrite\n isUpdatingAfterInsertConflict = true\n break\n }\n\n if (where) {\n return null\n }\n }\n\n if (!insertedRow) {\n throw new Error(`Could not upsert a stable row in table \"${tableName}\".`)\n }\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: conflictWrite.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n\n if (!insertedRow) {\n return null\n }\n } else {\n // No main row data to update, just use the existing ID\n insertedRow = { id }\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const shouldStampLocaleBranch = Boolean(\n adapter.rawTables[localeTableName]?.columns[branchField],\n )\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(nestedWrite.locales).length > 0) {\n Object.entries(nestedWrite.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n if (shouldStampLocaleBranch) {\n localeRow[branchField] = insertedRow[branchField] ?? data[branchField] ?? MAIN_BRANCH\n }\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (nestedWrite.relationships.length > 0) {\n nestedWrite.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (nestedWrite.texts.length > 0) {\n nestedWrite.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (nestedWrite.numbers.length > 0) {\n nestedWrite.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(nestedWrite.selects).length > 0) {\n Object.entries(nestedWrite.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(nestedWrite.blocks).forEach((tableName) => {\n nestedWrite.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update' && isUpdatingAfterInsertConflict) {\n for (const localeRow of localesToInsert) {\n await adapter.insert({\n db,\n onConflictDoUpdate: {\n set: localeRow,\n target: [localeTable._locale, localeTable._parentID],\n },\n tableName: localeTableName,\n values: localeRow,\n })\n }\n } else {\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n // Filter out specific item deletions (those with itemToRemove) from general path deletions\n const generalRelationshipDeletes = nestedWrite.relationshipsToDelete.filter(\n (rel) => !('itemToRemove' in rel),\n )\n\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...generalRelationshipDeletes],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $push OPERATIONS\n // //////////////////////////////////\n\n if (nestedWrite.relationshipsToAppend.length > 0) {\n // Prepare all relationships for batch insert (order will be set after max query)\n const relationshipsToInsert = nestedWrite.relationshipsToAppend.map((rel) => {\n const parentId = id || insertedRow.id\n const row: Record<string, unknown> = {\n parent: parentId as number | string, // Use 'parent' key for Drizzle table\n path: rel.path,\n }\n\n // Only add locale if this relationship table has a locale column\n const relationshipTable = adapter.rawTables[relationshipsTableName]\n if (rel.locale && relationshipTable && relationshipTable.columns.locale) {\n row.locale = rel.locale\n }\n\n if (rel.relationTo) {\n // Use camelCase key for Drizzle table (e.g., categoriesID not categories_id)\n row[`${rel.relationTo}ID`] = rel.value\n }\n\n return row\n })\n\n if (relationshipsToInsert.length > 0) {\n // Check for potential duplicates\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n // Build conditions only if we have relationships to check\n if (relationshipsToInsert.length === 0) {\n return // No relationships to insert\n }\n\n const conditions = relationshipsToInsert.map((row: RelationshipRow) => {\n const parts = [\n eq(relationshipTable.parent, row.parent),\n eq(relationshipTable.path, row.path),\n ]\n\n // Add locale condition\n if (row.locale !== undefined && relationshipTable.locale) {\n parts.push(eq(relationshipTable.locale, row.locale))\n } else if (relationshipTable.locale) {\n parts.push(isNull(relationshipTable.locale))\n }\n\n // Add all relationship ID matches using schema fields\n for (const [key, value] of Object.entries(row)) {\n if (key.endsWith('ID') && value != null) {\n const column = relationshipTable[key]\n if (column && typeof column === 'object') {\n parts.push(eq(column, value))\n }\n }\n }\n\n return and(...parts)\n })\n\n // Get both existing relationships AND max order in a single query\n let existingRels: Record<string, unknown>[] = []\n let maxOrder = 0\n\n if (conditions.length > 0) {\n // Query for existing relationships\n existingRels = await (db as any)\n .select()\n .from(relationshipTable)\n .where(or(...conditions))\n }\n\n // Get max order for this parent across all paths in a single query\n const parentId = id || insertedRow.id\n const maxOrderResult = await (db as any)\n .select({ maxOrder: relationshipTable.order })\n .from(relationshipTable)\n .where(eq(relationshipTable.parent, parentId))\n .orderBy(desc(relationshipTable.order))\n .limit(1)\n\n if (maxOrderResult.length > 0 && maxOrderResult[0].maxOrder) {\n maxOrder = maxOrderResult[0].maxOrder\n }\n\n // Set order values for all relationships based on max order\n relationshipsToInsert.forEach((row, index) => {\n row.order = maxOrder + index + 1\n })\n\n // Filter out relationships that already exist\n const relationshipsToActuallyInsert = relationshipsToInsert.filter((newRow) => {\n return !existingRels.some((existingRow: Record<string, unknown>) => {\n // Check if this relationship already exists\n let matches = existingRow.parent === newRow.parent && existingRow.path === newRow.path\n\n if (newRow.locale !== undefined) {\n matches = matches && existingRow.locale === newRow.locale\n }\n\n // Check relationship value matches - convert to camelCase for comparison\n for (const key of Object.keys(newRow)) {\n if (key.endsWith('ID')) {\n // Now using camelCase keys\n matches = matches && existingRow[key] === newRow[key]\n }\n }\n\n return matches\n })\n })\n\n // Insert only non-duplicate relationships\n if (relationshipsToActuallyInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationshipsToActuallyInsert,\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $remove OPERATIONS\n // //////////////////////////////////\n\n if (nestedWrite.relationshipsToDelete.some((rel) => 'itemToRemove' in rel)) {\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n for (const relToDelete of nestedWrite.relationshipsToDelete) {\n if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {\n const item = relToDelete.itemToRemove\n const parentId = (id || insertedRow.id) as number | string\n\n const conditions = [\n eq(relationshipTable.parent, parentId),\n eq(relationshipTable.path, relToDelete.path),\n ]\n\n // Add locale condition if this relationship table has a locale column\n if (adapter.rawTables[relationshipsTableName]?.columns.locale) {\n if (relToDelete.locale) {\n conditions.push(eq(relationshipTable.locale, relToDelete.locale))\n } else {\n conditions.push(isNull(relationshipTable.locale))\n }\n }\n\n // Handle polymorphic vs simple relationships\n if (typeof item === 'object' && 'relationTo' in item) {\n // Polymorphic relationship - convert to camelCase key\n const camelKey = `${item.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item.value))\n }\n } else if (relToDelete.relationTo) {\n // Simple relationship - convert to camelCase key\n const camelKey = `${relToDelete.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item))\n }\n }\n\n // Execute DELETE using Drizzle query builder\n await adapter.deleteWhere({\n db,\n tableName: relationshipsTableName,\n where: and(...conditions),\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...nestedWrite.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...nestedWrite.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of nestedWrite.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(nestedWrite.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [nestedWrite.arrays, nestedWrite.arraysToPush],\n db,\n parentRows: [insertedRow, insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n const selectTableNames = new Set([\n ...Object.keys(nestedWrite.selectsToDelete),\n ...Object.keys(selectsToInsert),\n ])\n\n for (const selectTableName of selectTableNames) {\n const tableRows = selectsToInsert[selectTableName] ?? []\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n for (const selectToDelete of nestedWrite.selectsToDelete[selectTableName] ?? []) {\n let selectParent = selectToDelete.parent ?? insertedRow.id\n\n if (\n (typeof selectParent === 'number' || typeof selectParent === 'string') &&\n selectParent in arraysBlocksUUIDMap\n ) {\n selectParent = arraysBlocksUUIDMap[selectParent]\n }\n\n const deleteConstraints = [eq(selectTable.parent, selectParent)]\n\n if (typeof selectToDelete.locale === 'string') {\n if (!selectTable.locale) {\n throw new Error(\n `Could not limit the select replacement for table \"${selectTableName}\" to locale \"${selectToDelete.locale}\".`,\n )\n }\n\n deleteConstraints.push(eq(selectTable.locale, selectToDelete.locale))\n } else if (selectTable.locale) {\n deleteConstraints.push(isNull(selectTable.locale))\n }\n\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: and(...deleteConstraints),\n })\n }\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: RelationshipRow) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["and","desc","eq","isNull","or","branchField","MAIN_BRANCH","buildFindManyArgs","transform","transformForWrite","markWrite","deleteExistingArrayRows","deleteExistingRowsByPath","handleUpsertError","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","collectionSlug","data","db","fields","globalSlug","ignoreResult","customID","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertConflictData","upsertTarget","where","createdAt","Date","toISOString","insertedRow","transformedForWrite","enableAtomicWrites","row","arraysToPush","drizzle","updateWhere","tables","Object","keys","length","arrays","parentRows","uuidMap","updatedAt","hasDataToUpdate","update","set","findManyArgs","depth","findManyKeysLength","hasOnlyColumns","columns","doc","query","findFirst","config","payload","selectedFields","column","enabled","entries","docs","returning","undefined","error","rowToInsert","conflictWrite","nestedWrite","isUpdatingAfterInsertConflict","target","rowKeys","hasLocalizedData","locales","hasMainRowData","every","key","insert","onConflictDoUpdate","values","targetKey","find","targetValue","Error","attempt","onConflictDoNothing","updatedRows","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","localeTableName","localesSuffix","shouldStampLocaleBranch","Boolean","rawTables","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","generalRelationshipDeletes","relationshipsToDelete","filter","rel","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToAppend","relationshipsToInsert","map","parentId","relationshipTable","relationTo","value","conditions","parts","endsWith","existingRels","maxOrder","from","maxOrderResult","order","orderBy","limit","index","relationshipsToActuallyInsert","newRow","some","existingRow","matches","relToDelete","itemToRemove","item","camelKey","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrayTableName","selectTableNames","Set","selectsToDelete","tableRows","selectTable","selectToDelete","selectParent","deleteConstraints","result"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { and, desc, eq, isNull, or } from 'drizzle-orm'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\ntype RelationshipRow = {\n [key: string]: number | string | undefined // For relationship ID columns like categoriesID, moviesID, etc.\n id?: number | string\n locale?: string\n order: number\n parent: number | string // Drizzle table uses 'parent' key\n path: string\n}\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { markWrite } from '../utilities/readAfterWrite.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { handleUpsertError } from './handleUpsertError.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n collectionSlug,\n data,\n db,\n fields,\n globalSlug,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n customID,\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertTarget,\n where,\n}: Args): Promise<null | T> => {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date().toISOString()\n }\n\n markWrite(adapter)\n\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n try {\n const transformedForWrite = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n const { row } = transformedForWrite\n const { arraysToPush } = transformedForWrite\n\n const drizzle = db as LibSQLDatabase\n const updateWhere = where\n ? and(eq(adapter.tables[tableName].id, id), where)\n : eq(adapter.tables[tableName].id, id)\n\n // First, handle $push arrays\n\n if (arraysToPush && Object.keys(arraysToPush)?.length) {\n await insertArrays({\n adapter,\n arrays: [arraysToPush],\n db,\n parentRows: [insertedRow],\n uuidMap: {},\n })\n }\n\n // If row.updatedAt is not set, delete it to avoid triggering hasDataToUpdate. `updatedAt` may be explicitly set to null to\n // disable triggering hasDataToUpdate.\n if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {\n delete row.updatedAt\n }\n\n const hasDataToUpdate = row && Object.keys(row)?.length\n\n // Then, handle regular row update\n if (ignoreResult) {\n if (hasDataToUpdate) {\n // Only update row if there is something to update.\n // Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.\n await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere)\n }\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (!hasDataToUpdate) {\n // Nothing to update => just fetch current row and return\n findManyArgs.where = updateWhere\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n if (!doc) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n if (!docs[0]) {\n return null\n }\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(updateWhere)\n .returning({\n id: adapter.tables[tableName].id,\n })\n\n if (!docs[0]) {\n return null\n }\n\n insertedRow = docs[0]\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n\n if (customID) {\n rowToInsert.row.id = customID\n }\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n // Check if we only have relationship operations and no main row data to update\n // Exclude timestamp-only updates when we only have relationship operations.\n // Localized field updates live in the `_locales` table, so the main row may only\n // contain timestamps — in that case the parent row's `updatedAt` must still bump.\n const rowKeys = Object.keys(rowToInsert.row)\n const hasLocalizedData = Object.keys(rowToInsert.locales).length > 0\n const hasMainRowData =\n rowKeys.length > 0 &&\n (hasLocalizedData || !rowKeys.every((key) => key === 'updatedAt' || key === 'createdAt'))\n\n if (hasMainRowData) {\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: where\n ? { set: rowToInsert.row, target, where }\n : { set: rowToInsert.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n\n if (!insertedRow) {\n return null\n }\n } else {\n // No main row data to update, just use the existing ID\n insertedRow = { id }\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(rowToInsert.locales).length > 0) {\n Object.entries(rowToInsert.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (rowToInsert.relationships.length > 0) {\n rowToInsert.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (rowToInsert.texts.length > 0) {\n rowToInsert.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (rowToInsert.numbers.length > 0) {\n rowToInsert.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(rowToInsert.selects).length > 0) {\n Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(rowToInsert.blocks).forEach((tableName) => {\n rowToInsert.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n // Filter out specific item deletions (those with itemToRemove) from general path deletions\n const generalRelationshipDeletes = rowToInsert.relationshipsToDelete.filter(\n (rel) => !('itemToRemove' in rel),\n )\n\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...generalRelationshipDeletes],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $push OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToAppend.length > 0) {\n // Prepare all relationships for batch insert (order will be set after max query)\n const relationshipsToInsert = rowToInsert.relationshipsToAppend.map((rel) => {\n const parentId = id || insertedRow.id\n const row: Record<string, unknown> = {\n parent: parentId, // Use 'parent' key for Drizzle table\n path: rel.path,\n }\n\n // Only add locale if this relationship table has a locale column\n const relationshipTable = adapter.rawTables[relationshipsTableName]\n if (rel.locale && relationshipTable && relationshipTable.columns.locale) {\n row.locale = rel.locale\n }\n\n if (rel.relationTo) {\n // Use camelCase key for Drizzle table (e.g., categoriesID not categories_id)\n row[`${rel.relationTo}ID`] = rel.value\n }\n\n return row\n })\n\n if (relationshipsToInsert.length > 0) {\n // Check for potential duplicates\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n // Build conditions only if we have relationships to check\n if (relationshipsToInsert.length === 0) {\n return // No relationships to insert\n }\n\n const conditions = relationshipsToInsert.map((row: RelationshipRow) => {\n const parts = [\n eq(relationshipTable.parent, row.parent),\n eq(relationshipTable.path, row.path),\n ]\n\n // Add locale condition\n if (row.locale !== undefined && relationshipTable.locale) {\n parts.push(eq(relationshipTable.locale, row.locale))\n } else if (relationshipTable.locale) {\n parts.push(isNull(relationshipTable.locale))\n }\n\n // Add all relationship ID matches using schema fields\n for (const [key, value] of Object.entries(row)) {\n if (key.endsWith('ID') && value != null) {\n const column = relationshipTable[key]\n if (column && typeof column === 'object') {\n parts.push(eq(column, value))\n }\n }\n }\n\n return and(...parts)\n })\n\n // Get both existing relationships AND max order in a single query\n let existingRels: Record<string, unknown>[] = []\n let maxOrder = 0\n\n if (conditions.length > 0) {\n // Query for existing relationships\n existingRels = await (db as any)\n .select()\n .from(relationshipTable)\n .where(or(...conditions))\n }\n\n // Get max order for this parent across all paths in a single query\n const parentId = id || insertedRow.id\n const maxOrderResult = await (db as any)\n .select({ maxOrder: relationshipTable.order })\n .from(relationshipTable)\n .where(eq(relationshipTable.parent, parentId))\n .orderBy(desc(relationshipTable.order))\n .limit(1)\n\n if (maxOrderResult.length > 0 && maxOrderResult[0].maxOrder) {\n maxOrder = maxOrderResult[0].maxOrder\n }\n\n // Set order values for all relationships based on max order\n relationshipsToInsert.forEach((row, index) => {\n row.order = maxOrder + index + 1\n })\n\n // Filter out relationships that already exist\n const relationshipsToActuallyInsert = relationshipsToInsert.filter((newRow) => {\n return !existingRels.some((existingRow: Record<string, unknown>) => {\n // Check if this relationship already exists\n let matches = existingRow.parent === newRow.parent && existingRow.path === newRow.path\n\n if (newRow.locale !== undefined) {\n matches = matches && existingRow.locale === newRow.locale\n }\n\n // Check relationship value matches - convert to camelCase for comparison\n for (const key of Object.keys(newRow)) {\n if (key.endsWith('ID')) {\n // Now using camelCase keys\n matches = matches && existingRow[key] === newRow[key]\n }\n }\n\n return matches\n })\n })\n\n // Insert only non-duplicate relationships\n if (relationshipsToActuallyInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationshipsToActuallyInsert,\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // HANDLE RELATIONSHIP $remove OPERATIONS\n // //////////////////////////////////\n\n if (rowToInsert.relationshipsToDelete.some((rel) => 'itemToRemove' in rel)) {\n const relationshipTable = adapter.tables[relationshipsTableName]\n\n if (relationshipTable) {\n for (const relToDelete of rowToInsert.relationshipsToDelete) {\n if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {\n const item = relToDelete.itemToRemove\n const parentId = (id || insertedRow.id) as number | string\n\n const conditions = [\n eq(relationshipTable.parent, parentId),\n eq(relationshipTable.path, relToDelete.path),\n ]\n\n // Add locale condition if this relationship table has a locale column\n if (adapter.rawTables[relationshipsTableName]?.columns.locale) {\n if (relToDelete.locale) {\n conditions.push(eq(relationshipTable.locale, relToDelete.locale))\n } else {\n conditions.push(isNull(relationshipTable.locale))\n }\n }\n\n // Handle polymorphic vs simple relationships\n if (typeof item === 'object' && 'relationTo' in item) {\n // Polymorphic relationship - convert to camelCase key\n const camelKey = `${item.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item.value))\n }\n } else if (relToDelete.relationTo) {\n // Simple relationship - convert to camelCase key\n const camelKey = `${relToDelete.relationTo}ID`\n if (relationshipTable[camelKey]) {\n conditions.push(eq(relationshipTable[camelKey], item))\n }\n }\n\n // Execute DELETE using Drizzle query builder\n await adapter.deleteWhere({\n db,\n tableName: relationshipsTableName,\n where: and(...conditions),\n })\n }\n }\n }\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...rowToInsert.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...rowToInsert.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of rowToInsert.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(rowToInsert.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [rowToInsert.arrays, rowToInsert.arraysToPush],\n db,\n parentRows: [insertedRow, insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)) {\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: eq(selectTable.parent, insertedRow.id),\n })\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: RelationshipRow) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n } catch (error) {\n handleUpsertError({ id, adapter, collectionSlug, error, globalSlug, req, tableName })\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["and","desc","eq","isNull","or","buildFindManyArgs","transform","transformForWrite","markWrite","deleteExistingArrayRows","deleteExistingRowsByPath","handleUpsertError","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","collectionSlug","data","db","fields","globalSlug","ignoreResult","customID","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertTarget","where","createdAt","Date","toISOString","insertedRow","transformedForWrite","enableAtomicWrites","row","arraysToPush","drizzle","updateWhere","tables","Object","keys","length","arrays","parentRows","uuidMap","updatedAt","hasDataToUpdate","update","set","findManyArgs","depth","findManyKeysLength","hasOnlyColumns","columns","doc","query","findFirst","config","payload","selectedFields","column","enabled","entries","docs","returning","undefined","error","rowToInsert","target","rowKeys","hasLocalizedData","locales","hasMainRowData","every","key","insert","onConflictDoUpdate","values","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTableName","localesSuffix","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","generalRelationshipDeletes","relationshipsToDelete","filter","rel","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToAppend","relationshipsToInsert","map","parentId","relationshipTable","rawTables","relationTo","value","conditions","parts","endsWith","existingRels","maxOrder","from","maxOrderResult","order","orderBy","limit","index","relationshipsToActuallyInsert","newRow","some","existingRow","matches","relToDelete","itemToRemove","item","camelKey","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrayTableName","tableRows","selectTable","result"],"mappings":"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"}
@@ -30,7 +30,6 @@ type CreateArgs = {
30
30
  joinQuery?: never;
31
31
  operation: 'create';
32
32
  select?: SelectType;
33
- upsertConflictData?: never;
34
33
  upsertTarget?: never;
35
34
  where?: never;
36
35
  } & BaseArgs;
@@ -40,8 +39,6 @@ type UpdateArgs = {
40
39
  joinQuery?: JoinQuery;
41
40
  operation: 'update';
42
41
  select?: SelectType;
43
- /** Data applied only when an insert conflicts with an existing upsert target. */
44
- upsertConflictData?: Record<string, unknown>;
45
42
  upsertTarget?: GenericColumn;
46
43
  where?: SQL<unknown>;
47
44
  } & BaseArgs;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upsertRow/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,kBAAkB,CAAC,EAAE,KAAK,CAAA;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,QAAQ,CAAA;AAEZ,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACrB,GAAG,QAAQ,CAAA;AAEZ,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upsertRow/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,QAAQ,CAAA;AAEZ,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACrB,GAAG,QAAQ,CAAA;AAEZ,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/types.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { FlattenedField, JoinQuery, PayloadRequest, SelectType } from 'payload'\n\nimport type { DrizzleAdapter, DrizzleTransaction, GenericColumn } from '../types.js'\n\ntype BaseArgs = {\n adapter: DrizzleAdapter\n /**\n * Collection slug for error reporting\n */\n collectionSlug?: string\n data: Record<string, unknown>\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n fields: FlattenedField[]\n /**\n * Collection slug for error reporting\n */\n globalSlug?: string\n /**\n * When true, skips reading the data back from the database and returns the input data\n * @default false\n */\n ignoreResult?: 'idOnly' | boolean\n joinQuery?: JoinQuery\n path?: string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\ntype CreateArgs = {\n customID?: number | string\n id?: never\n joinQuery?: never\n operation: 'create'\n select?: SelectType\n upsertConflictData?: never\n upsertTarget?: never\n where?: never\n} & BaseArgs\n\ntype UpdateArgs = {\n customID?: never\n id?: number | string\n joinQuery?: JoinQuery\n operation: 'update'\n select?: SelectType\n /** Data applied only when an insert conflicts with an existing upsert target. */\n upsertConflictData?: Record<string, unknown>\n upsertTarget?: GenericColumn\n where?: SQL<unknown>\n} & BaseArgs\n\nexport type Args = CreateArgs | UpdateArgs\n"],"names":[],"mappings":"AAoDA,WAA0C"}
1
+ {"version":3,"sources":["../../src/upsertRow/types.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { FlattenedField, JoinQuery, PayloadRequest, SelectType } from 'payload'\n\nimport type { DrizzleAdapter, DrizzleTransaction, GenericColumn } from '../types.js'\n\ntype BaseArgs = {\n adapter: DrizzleAdapter\n /**\n * Collection slug for error reporting\n */\n collectionSlug?: string\n data: Record<string, unknown>\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n fields: FlattenedField[]\n /**\n * Collection slug for error reporting\n */\n globalSlug?: string\n /**\n * When true, skips reading the data back from the database and returns the input data\n * @default false\n */\n ignoreResult?: 'idOnly' | boolean\n joinQuery?: JoinQuery\n path?: string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\ntype CreateArgs = {\n customID?: number | string\n id?: never\n joinQuery?: never\n operation: 'create'\n select?: SelectType\n upsertTarget?: never\n where?: never\n} & BaseArgs\n\ntype UpdateArgs = {\n customID?: never\n id?: number | string\n joinQuery?: JoinQuery\n operation: 'update'\n select?: SelectType\n upsertTarget?: GenericColumn\n where?: SQL<unknown>\n} & BaseArgs\n\nexport type Args = CreateArgs | UpdateArgs\n"],"names":[],"mappings":"AAiDA,WAA0C"}