@payloadcms/drizzle 4.0.0-internal.77191e5 → 4.0.0-internal.7b53b6d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +25 -3
- package/dist/count.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +28 -4
- package/dist/countVersions.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +15 -2
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +12 -1
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteBranchGlobal.d.ts +10 -0
- package/dist/deleteBranchGlobal.d.ts.map +1 -0
- package/dist/deleteBranchGlobal.js +27 -0
- package/dist/deleteBranchGlobal.js.map +1 -0
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +18 -1
- package/dist/deleteOne.js.map +1 -1
- package/dist/exports/postgres.d.ts +2 -1
- package/dist/exports/postgres.d.ts.map +1 -1
- package/dist/exports/postgres.js +2 -1
- package/dist/exports/postgres.js.map +1 -1
- package/dist/exports/sqlite.d.ts +2 -1
- package/dist/exports/sqlite.d.ts.map +1 -1
- package/dist/exports/sqlite.js +2 -1
- package/dist/exports/sqlite.js.map +1 -1
- package/dist/find/buildFindManyArgs.d.ts +3 -2
- package/dist/find/buildFindManyArgs.d.ts.map +1 -1
- package/dist/find/buildFindManyArgs.js +2 -1
- package/dist/find/buildFindManyArgs.js.map +1 -1
- package/dist/find/buildPolymorphicJoinQuery.d.ts +5 -3
- package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -1
- package/dist/find/buildPolymorphicJoinQuery.js +43 -15
- package/dist/find/buildPolymorphicJoinQuery.js.map +1 -1
- package/dist/find/buildPolymorphicJoinWhere.js +1 -1
- package/dist/find/buildPolymorphicJoinWhere.js.map +1 -1
- package/dist/find/createPolymorphicJoinWherePlan.d.ts +2 -1
- package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -1
- package/dist/find/createPolymorphicJoinWherePlan.js +14 -5
- package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -1
- package/dist/find/findMany.d.ts +6 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +16 -3
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts +3 -2
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +55 -7
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +32 -4
- package/dist/find.js.map +1 -1
- package/dist/findDistinct.d.ts.map +1 -1
- package/dist/findDistinct.js +107 -8
- package/dist/findDistinct.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +22 -5
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.js +8 -3
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +30 -3
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +32 -5
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -8
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +6 -2
- package/dist/migrate.js.map +1 -1
- package/dist/migrateDown.d.ts.map +1 -1
- package/dist/migrateDown.js +5 -2
- package/dist/migrateDown.js.map +1 -1
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js +5 -2
- package/dist/migrateFresh.js.map +1 -1
- package/dist/migrateRefresh.d.ts.map +1 -1
- package/dist/migrateRefresh.js +6 -2
- package/dist/migrateRefresh.js.map +1 -1
- package/dist/migrateReset.d.ts.map +1 -1
- package/dist/migrateReset.js +6 -2
- package/dist/migrateReset.js.map +1 -1
- package/dist/postgres/insert.d.ts.map +1 -1
- package/dist/postgres/insert.js +4 -2
- package/dist/postgres/insert.js.map +1 -1
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
- package/dist/postgres/requireDrizzleKit.d.ts +4 -0
- package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
- package/dist/postgres/requireDrizzleKit.js +16 -10
- package/dist/postgres/requireDrizzleKit.js.map +1 -1
- package/dist/postgres/types.d.ts +4 -0
- package/dist/postgres/types.d.ts.map +1 -1
- package/dist/postgres/types.js.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts +3 -2
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +2 -1
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildBranchVisibility.d.ts +11 -0
- package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
- package/dist/queries/buildBranchVisibility.js +48 -0
- package/dist/queries/buildBranchVisibility.js.map +1 -0
- package/dist/queries/buildOrderBy.d.ts +3 -2
- package/dist/queries/buildOrderBy.d.ts.map +1 -1
- package/dist/queries/buildOrderBy.js +2 -1
- package/dist/queries/buildOrderBy.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +3 -2
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +4 -2
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts +3 -2
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +166 -27
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/queries/parseParams.d.ts +3 -2
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +4 -1
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +23 -4
- package/dist/queryDrafts.js.map +1 -1
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +23 -20
- package/dist/schema/build.js.map +1 -1
- package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
- package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
- package/dist/sqlite/createRequireDrizzleKit.js +15 -0
- package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
- package/dist/sqlite/execute.js.map +1 -1
- package/dist/sqlite/insert.d.ts.map +1 -1
- package/dist/sqlite/insert.js +9 -4
- package/dist/sqlite/insert.js.map +1 -1
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
- package/dist/sqlite/types.d.ts +4 -0
- package/dist/sqlite/types.d.ts.map +1 -1
- package/dist/sqlite/types.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +13 -5
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +1 -5
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/transform/write/array.d.ts +3 -2
- package/dist/transform/write/array.d.ts.map +1 -1
- package/dist/transform/write/array.js +2 -1
- package/dist/transform/write/array.js.map +1 -1
- package/dist/transform/write/blocks.d.ts +3 -2
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/blocks.js +2 -1
- package/dist/transform/write/blocks.js.map +1 -1
- package/dist/transform/write/index.d.ts.map +1 -1
- package/dist/transform/write/index.js +2 -0
- package/dist/transform/write/index.js.map +1 -1
- package/dist/transform/write/traverseFields.d.ts +2 -1
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +32 -6
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/dist/transform/write/types.d.ts +7 -0
- package/dist/transform/write/types.d.ts.map +1 -1
- package/dist/transform/write/types.js.map +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/updateGlobal.d.ts +5 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +96 -4
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +47 -5
- package/dist/updateOne.js.map +1 -1
- package/dist/upsertBranchGlobalChange.d.ts +3 -0
- package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
- package/dist/upsertBranchGlobalChange.js +35 -0
- package/dist/upsertBranchGlobalChange.js.map +1 -0
- package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
- package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
- package/dist/upsertRow/index.d.ts +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +132 -42
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/upsertRow/types.d.ts +3 -0
- package/dist/upsertRow/types.d.ts.map +1 -1
- package/dist/upsertRow/types.js.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.js +7 -18
- package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
- package/dist/utilities/buildCreateMigration.js +1 -1
- package/dist/utilities/buildCreateMigration.js.map +1 -1
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
- package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.js +7 -12
- package/dist/utilities/createSchemaGenerator.js.map +1 -1
- package/dist/utilities/executeSchemaHooks.js +1 -1
- package/dist/utilities/executeSchemaHooks.js.map +1 -1
- package/dist/utilities/formatGeneratedFile.d.ts +10 -0
- package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
- package/dist/utilities/formatGeneratedFile.js +58 -0
- package/dist/utilities/formatGeneratedFile.js.map +1 -0
- package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
- package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
- package/dist/utilities/getSizesToVariantsRenames.js +251 -0
- package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
- package/dist/utilities/getTransaction.js.map +1 -1
- package/dist/utilities/pushDevSchema.js +1 -1
- package/dist/utilities/pushDevSchema.js.map +1 -1
- package/package.json +17 -19
- package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
- package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
- package/dist/sqlite/requireDrizzleKit.js +0 -12
- package/dist/sqlite/requireDrizzleKit.js.map +0 -1
package/dist/updateOne.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { and, eq } from 'drizzle-orm';
|
|
2
|
+
import { applyBranchIDProjection, resolveBranchRowID, withBranchIDSelect } from 'payload';
|
|
1
3
|
import toSnakeCase from 'to-snake-case';
|
|
2
4
|
import { buildQuery } from './queries/buildQuery.js';
|
|
3
5
|
import { selectDistinct } from './queries/selectDistinct.js';
|
|
@@ -8,12 +10,17 @@ import { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpser
|
|
|
8
10
|
import { getPrimaryDb } from './utilities/getPrimaryDb.js';
|
|
9
11
|
import { getTransaction } from './utilities/getTransaction.js';
|
|
10
12
|
import { markWrite } from './utilities/readAfterWrite.js';
|
|
11
|
-
export const updateOne = async function updateOne({ id, collection: collectionSlug, data, joins: joinQuery, locale, options = {
|
|
13
|
+
export const updateOne = async function updateOne({ id, branch, collection: collectionSlug, data, joins: joinQuery, locale, options = {
|
|
12
14
|
upsert: false
|
|
13
15
|
}, req, returning, select, where: whereArg }) {
|
|
14
16
|
const collection = this.payload.collections[collectionSlug].config;
|
|
15
17
|
const tableName = this.tableNameMap.get(toSnakeCase(collection.slug));
|
|
16
|
-
let idToUpdate = id
|
|
18
|
+
let idToUpdate = id === undefined || id === null ? id : await resolveBranchRowID({
|
|
19
|
+
id,
|
|
20
|
+
branch,
|
|
21
|
+
collectionSlug,
|
|
22
|
+
req
|
|
23
|
+
});
|
|
17
24
|
let whereToUpdate;
|
|
18
25
|
const db = getPrimaryDb(this, await getTransaction(this, req));
|
|
19
26
|
if (!idToUpdate) {
|
|
@@ -28,6 +35,9 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
|
|
|
28
35
|
// queries keep resolving a matching id first and then update that row unconditionally
|
|
29
36
|
whereToUpdate = joins.length === 0 ? where : undefined;
|
|
30
37
|
if (options.atomic === true) {
|
|
38
|
+
if (joins.length > 0) {
|
|
39
|
+
throw new Error('Atomic where updates do not support predicates that require joins');
|
|
40
|
+
}
|
|
31
41
|
if (!shouldUseOptimizedUpsertRow({
|
|
32
42
|
data,
|
|
33
43
|
fields: collection.flattenedFields
|
|
@@ -44,12 +54,20 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
|
|
|
44
54
|
if (arraysToPush && Object.keys(arraysToPush).length) {
|
|
45
55
|
throw new Error('Atomic where updates do not support array operations');
|
|
46
56
|
}
|
|
57
|
+
const table = this.tables[tableName];
|
|
58
|
+
const matchingRowQuery = db.select({
|
|
59
|
+
id: table.id
|
|
60
|
+
}).from(table).where(where).limit(1);
|
|
61
|
+
// PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can
|
|
62
|
+
// continue to another match if a concurrent update makes the first row ineligible.
|
|
63
|
+
// SQLite serializes writers and does not support SELECT ... FOR UPDATE.
|
|
64
|
+
const matchingRow = this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery;
|
|
47
65
|
markWrite(this);
|
|
48
|
-
const docs = await db.update(
|
|
66
|
+
const docs = await db.update(table).set(row).where(and(eq(table.id, matchingRow), where)).returning();
|
|
49
67
|
if (!docs[0]) {
|
|
50
68
|
return null;
|
|
51
69
|
}
|
|
52
|
-
|
|
70
|
+
const result = transform({
|
|
53
71
|
adapter: this,
|
|
54
72
|
config: this.payload.config,
|
|
55
73
|
data: docs[0],
|
|
@@ -57,6 +75,15 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
|
|
|
57
75
|
joinQuery: false,
|
|
58
76
|
tableName
|
|
59
77
|
});
|
|
78
|
+
applyBranchIDProjection({
|
|
79
|
+
branch,
|
|
80
|
+
collectionSlug,
|
|
81
|
+
docs: [
|
|
82
|
+
result
|
|
83
|
+
],
|
|
84
|
+
req
|
|
85
|
+
});
|
|
86
|
+
return result;
|
|
60
87
|
}
|
|
61
88
|
// selectDistinct will only return if there are joins
|
|
62
89
|
const selectDistinctResult = await selectDistinct({
|
|
@@ -96,13 +123,28 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
|
|
|
96
123
|
joinQuery,
|
|
97
124
|
operation: 'update',
|
|
98
125
|
req,
|
|
99
|
-
select
|
|
126
|
+
select: withBranchIDSelect({
|
|
127
|
+
branch,
|
|
128
|
+
collectionSlug,
|
|
129
|
+
req,
|
|
130
|
+
select
|
|
131
|
+
}),
|
|
100
132
|
tableName,
|
|
101
133
|
where: whereToUpdate
|
|
102
134
|
});
|
|
103
135
|
if (returning === false) {
|
|
104
136
|
return null;
|
|
105
137
|
}
|
|
138
|
+
// The row written on a branch is the shadow row, so the document it returns
|
|
139
|
+
// carries that row's primary key rather than the document's canonical ID.
|
|
140
|
+
applyBranchIDProjection({
|
|
141
|
+
branch,
|
|
142
|
+
collectionSlug,
|
|
143
|
+
docs: [
|
|
144
|
+
result
|
|
145
|
+
],
|
|
146
|
+
req
|
|
147
|
+
});
|
|
106
148
|
return result;
|
|
107
149
|
};
|
|
108
150
|
|
package/dist/updateOne.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { transformForWrite } from './transform/write/index.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate
|
|
1
|
+
{"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport { and, eq } from 'drizzle-orm'\nimport { applyBranchIDProjection, resolveBranchRowID, withBranchIDSelect } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, PostgresDB } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { transformForWrite } from './transform/write/index.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n branch,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate =\n id === undefined || id === null\n ? id\n : await resolveBranchRowID({ id, branch, collectionSlug, req })\n let whereToUpdate: SQL<unknown> | undefined\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (!idToUpdate) {\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale,\n tableName,\n where: whereArg,\n })\n // A `where` that needs joins cannot be applied to the UPDATE statement itself, so those\n // queries keep resolving a matching id first and then update that row unconditionally\n whereToUpdate = joins.length === 0 ? where : undefined\n\n if (options.atomic === true) {\n if (joins.length > 0) {\n throw new Error('Atomic where updates do not support predicates that require joins')\n }\n\n if (!shouldUseOptimizedUpsertRow({ data, fields: collection.flattenedFields })) {\n throw new Error('Atomic where updates only support fields stored on the main table')\n }\n\n const { arraysToPush, row } = transformForWrite({\n adapter: this,\n data,\n enableAtomicWrites: true,\n fields: collection.flattenedFields,\n tableName,\n })\n\n if (arraysToPush && Object.keys(arraysToPush).length) {\n throw new Error('Atomic where updates do not support array operations')\n }\n\n const table = this.tables[tableName]\n const matchingRowQuery = (db as PostgresDB)\n .select({ id: table.id })\n .from(table)\n .where(where)\n .limit(1)\n\n // PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can\n // continue to another match if a concurrent update makes the first row ineligible.\n // SQLite serializes writers and does not support SELECT ... FOR UPDATE.\n const matchingRow =\n this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery\n\n markWrite(this)\n\n const docs = await (db as LibSQLDatabase)\n .update(table)\n .set(row)\n .where(and(eq(table.id, matchingRow), where))\n .returning()\n\n if (!docs[0]) {\n return null\n }\n\n const result = transform({\n adapter: this,\n config: this.payload.config,\n data: docs[0],\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n }\n\n // selectDistinct will only return if there are joins\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n idToUpdate = selectDistinctResult?.[0]?.id\n // If id wasn't passed but `where` without any joins, retrieve it with findFirst\n } else if (whereArg && !joins.length) {\n const table = this.tables[tableName]\n\n const docsToUpdate = await (db as LibSQLDatabase)\n .select({\n id: table.id,\n })\n .from(table)\n .where(where)\n .limit(1)\n idToUpdate = docsToUpdate?.[0]?.id\n }\n }\n\n if (!idToUpdate && !options.upsert) {\n // TODO: In 4.0, if returning === false, we should differentiate between:\n // - No document found to update\n // - Document found, but returning === false\n return null\n }\n\n const result = await upsertRow({\n id: idToUpdate,\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n joinQuery,\n operation: 'update',\n req,\n select: withBranchIDSelect({ branch, collectionSlug, req, select }),\n tableName,\n where: whereToUpdate,\n })\n\n if (returning === false) {\n return null\n }\n\n // The row written on a branch is the shadow row, so the document it returns\n // carries that row's primary key rather than the document's canonical ID.\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n}\n"],"names":["and","eq","applyBranchIDProjection","resolveBranchRowID","withBranchIDSelect","toSnakeCase","buildQuery","selectDistinct","transform","transformForWrite","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","markWrite","updateOne","id","branch","collection","collectionSlug","data","joins","joinQuery","locale","options","upsert","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","idToUpdate","undefined","whereToUpdate","db","selectFields","adapter","fields","flattenedFields","length","atomic","Error","arraysToPush","row","enableAtomicWrites","Object","keys","table","tables","matchingRowQuery","from","limit","matchingRow","name","for","docs","update","set","result","selectDistinctResult","query","docsToUpdate","ignoreResult","operation"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsertBranchGlobalChange.d.ts","sourceRoot":"","sources":["../src/upsertBranchGlobalChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,wBAAwB,EAAE,wBAyBpC,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { branchChangesCollectionSlug } from 'payload';
|
|
2
|
+
import toSnakeCase from 'to-snake-case';
|
|
3
|
+
import { getPrimaryDb } from './utilities/getPrimaryDb.js';
|
|
4
|
+
import { getTransaction } from './utilities/getTransaction.js';
|
|
5
|
+
import { markWrite } from './utilities/readAfterWrite.js';
|
|
6
|
+
export const upsertBranchGlobalChange = async function upsertBranchGlobalChange({ branch, globalSlug, req }) {
|
|
7
|
+
const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug));
|
|
8
|
+
const table = this.tables[tableName];
|
|
9
|
+
const db = getPrimaryDb(this, await getTransaction(this, req));
|
|
10
|
+
const now = new Date().toISOString();
|
|
11
|
+
await this.insert({
|
|
12
|
+
db,
|
|
13
|
+
onConflictDoUpdate: {
|
|
14
|
+
set: {
|
|
15
|
+
globalSlug
|
|
16
|
+
},
|
|
17
|
+
target: [
|
|
18
|
+
table.branch,
|
|
19
|
+
table.globalSlug
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
tableName,
|
|
23
|
+
values: {
|
|
24
|
+
branch,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
entityType: 'global',
|
|
27
|
+
globalSlug,
|
|
28
|
+
operation: 'update',
|
|
29
|
+
updatedAt: now
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
markWrite(this);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=upsertBranchGlobalChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/upsertBranchGlobalChange.ts"],"sourcesContent":["import type { UpsertBranchGlobalChange } from 'payload'\n\nimport { branchChangesCollectionSlug } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const upsertBranchGlobalChange: UpsertBranchGlobalChange =\n async function upsertBranchGlobalChange(this: DrizzleAdapter, { branch, globalSlug, req }) {\n const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug))\n const table = this.tables[tableName]\n const db = getPrimaryDb(this, await getTransaction(this, req))\n const now = new Date().toISOString()\n\n await this.insert({\n db,\n onConflictDoUpdate: {\n set: { globalSlug },\n target: [table.branch, table.globalSlug],\n },\n tableName,\n values: {\n branch,\n createdAt: now,\n entityType: 'global',\n globalSlug,\n operation: 'update',\n updatedAt: now,\n },\n })\n\n markWrite(this)\n }\n"],"names":["branchChangesCollectionSlug","toSnakeCase","getPrimaryDb","getTransaction","markWrite","upsertBranchGlobalChange","branch","globalSlug","req","tableName","tableNameMap","get","table","tables","db","now","Date","toISOString","insert","onConflictDoUpdate","set","target","values","createdAt","entityType","operation","updatedAt"],"mappings":"AAEA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,SAAS,QAAQ,gCAA+B;AAEzD,OAAO,MAAMC,2BACX,eAAeA,yBAA+C,EAAEC,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE;IACvF,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACV,YAAYD;IACpD,MAAMY,QAAQ,IAAI,CAACC,MAAM,CAACJ,UAAU;IACpC,MAAMK,KAAKZ,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEK;IACzD,MAAMO,MAAM,IAAIC,OAAOC,WAAW;IAElC,MAAM,IAAI,CAACC,MAAM,CAAC;QAChBJ;QACAK,oBAAoB;YAClBC,KAAK;gBAAEb;YAAW;YAClBc,QAAQ;gBAACT,MAAMN,MAAM;gBAAEM,MAAML,UAAU;aAAC;QAC1C;QACAE;QACAa,QAAQ;YACNhB;YACAiB,WAAWR;YACXS,YAAY;YACZjB;YACAkB,WAAW;YACXC,WAAWX;QACb;IACF;IAEAX,UAAU,IAAI;AAChB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,CAmDrB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { and, eq, inArray } from 'drizzle-orm';
|
|
2
2
|
export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName = '_locale', parentColumnName = '_parentID', parentID, pathColumnName = '_path', rows, tableName })=>{
|
|
3
|
-
const localizedPathsToDelete = new
|
|
3
|
+
const localizedPathsToDelete = new Map();
|
|
4
4
|
const pathsToDelete = new Set();
|
|
5
5
|
const table = adapter.tables[tableName];
|
|
6
6
|
rows.forEach((row)=>{
|
|
@@ -8,24 +8,29 @@ export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName =
|
|
|
8
8
|
const localeData = row[localeColumnName];
|
|
9
9
|
if (typeof path === 'string') {
|
|
10
10
|
if (typeof localeData === 'string') {
|
|
11
|
-
localizedPathsToDelete.
|
|
11
|
+
const localePaths = localizedPathsToDelete.get(localeData) ?? new Set();
|
|
12
|
+
localePaths.add(path);
|
|
13
|
+
localizedPathsToDelete.set(localeData, localePaths);
|
|
12
14
|
} else {
|
|
13
15
|
pathsToDelete.add(path);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
});
|
|
17
19
|
if (localizedPathsToDelete.size > 0) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
for (const [locale, localePaths] of localizedPathsToDelete){
|
|
21
|
+
const whereConstraints = [
|
|
22
|
+
eq(table[parentColumnName], parentID)
|
|
23
|
+
];
|
|
24
|
+
if (pathColumnName) {
|
|
25
|
+
whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)));
|
|
26
|
+
}
|
|
27
|
+
whereConstraints.push(eq(table[localeColumnName], locale));
|
|
28
|
+
await adapter.deleteWhere({
|
|
29
|
+
db,
|
|
30
|
+
tableName,
|
|
31
|
+
where: and(...whereConstraints)
|
|
32
|
+
});
|
|
23
33
|
}
|
|
24
|
-
await adapter.deleteWhere({
|
|
25
|
-
db,
|
|
26
|
-
tableName,
|
|
27
|
-
where: and(...whereConstraints)
|
|
28
|
-
});
|
|
29
34
|
}
|
|
30
35
|
if (pathsToDelete.size > 0) {
|
|
31
36
|
const whereConstraints = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Set<string
|
|
1
|
+
{"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Map<string, Set<string>>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n const localePaths = localizedPathsToDelete.get(localeData) ?? new Set<string>()\n\n localePaths.add(path)\n localizedPathsToDelete.set(localeData, localePaths)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n for (const [locale, localePaths] of localizedPathsToDelete) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)))\n }\n\n whereConstraints.push(eq(table[localeColumnName], locale))\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Map","pathsToDelete","Set","table","tables","forEach","row","path","localeData","localePaths","get","add","set","size","locale","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAIC;IAC1B,MAAMC,QAAQZ,QAAQa,MAAM,CAACN,UAAU;IAEvCD,KAAKQ,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACV,eAAe;QAChC,MAAMY,aAAaF,GAAG,CAACb,iBAAiB;QACxC,IAAI,OAAOc,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClC,MAAMC,cAAcV,uBAAuBW,GAAG,CAACF,eAAe,IAAIN;gBAElEO,YAAYE,GAAG,CAACJ;gBAChBR,uBAAuBa,GAAG,CAACJ,YAAYC;YACzC,OAAO;gBACLR,cAAcU,GAAG,CAACJ;YACpB;QACF;IACF;IAEA,IAAIR,uBAAuBc,IAAI,GAAG,GAAG;QACnC,KAAK,MAAM,CAACC,QAAQL,YAAY,IAAIV,uBAAwB;YAC1D,MAAMgB,mBAAmB;gBAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;aAAU;YAEhE,IAAIC,gBAAgB;gBAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACT;YAClE;YAEAM,iBAAiBC,IAAI,CAAC5B,GAAGe,KAAK,CAACV,iBAAiB,EAAEqB;YAElD,MAAMvB,QAAQ4B,WAAW,CAAC;gBACxB3B;gBACAM;gBACAsB,OAAOjC,OAAO4B;YAChB;QACF;IACF;IAEA,IAAId,cAAcY,IAAI,GAAG,GAAG;QAC1B,MAAME,mBAAmB;YAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACjB;QAClE;QAEA,MAAMV,QAAQ4B,WAAW,CAAC;YACxB3B;YACAM;YACAsB,OAAOjC,OAAO4B;QAChB;IACF;AACF,EAAC"}
|
|
@@ -7,5 +7,5 @@ import type { Args } from './types.js';
|
|
|
7
7
|
*
|
|
8
8
|
* adapter function replaces the entire row and does not support partial updates.
|
|
9
9
|
*/
|
|
10
|
-
export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertTarget, where, }: Args) => Promise<null | T>;
|
|
10
|
+
export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertConflictData, upsertTarget, where, }: Args) => Promise<null | T>;
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,mMAsB3E,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CA01BzB,CAAA"}
|
package/dist/upsertRow/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { and, desc, eq, isNull, or } from 'drizzle-orm';
|
|
2
|
+
import { branchField, MAIN_BRANCH } from 'payload';
|
|
2
3
|
import { buildFindManyArgs } from '../find/buildFindManyArgs.js';
|
|
3
4
|
import { transform } from '../transform/read/index.js';
|
|
4
5
|
import { transformForWrite } from '../transform/write/index.js';
|
|
@@ -17,7 +18,7 @@ import { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js';
|
|
|
17
18
|
*/ export const upsertRow = async ({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, // TODO:
|
|
18
19
|
// When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs
|
|
19
20
|
// Make a new argument in upsertRow.ts and pass the slug from every operation.
|
|
20
|
-
customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertTarget, where })=>{
|
|
21
|
+
customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertConflictData, upsertTarget, where })=>{
|
|
21
22
|
if (operation === 'create' && !data.createdAt) {
|
|
22
23
|
data.createdAt = new Date().toISOString();
|
|
23
24
|
}
|
|
@@ -162,6 +163,16 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
162
163
|
path,
|
|
163
164
|
tableName
|
|
164
165
|
});
|
|
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;
|
|
165
176
|
if (customID) {
|
|
166
177
|
rowToInsert.row.id = customID;
|
|
167
178
|
}
|
|
@@ -182,22 +193,58 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
182
193
|
[insertedRow] = await adapter.insert({
|
|
183
194
|
db,
|
|
184
195
|
onConflictDoUpdate: where ? {
|
|
185
|
-
set:
|
|
196
|
+
set: conflictWrite.row,
|
|
186
197
|
target,
|
|
187
198
|
where
|
|
188
199
|
} : {
|
|
189
|
-
set:
|
|
200
|
+
set: conflictWrite.row,
|
|
190
201
|
target
|
|
191
202
|
},
|
|
192
203
|
tableName,
|
|
193
204
|
values: rowToInsert.row
|
|
194
205
|
});
|
|
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
|
+
}
|
|
195
242
|
} else {
|
|
196
243
|
;
|
|
197
244
|
[insertedRow] = await adapter.insert({
|
|
198
245
|
db,
|
|
199
246
|
onConflictDoUpdate: {
|
|
200
|
-
set:
|
|
247
|
+
set: conflictWrite.row,
|
|
201
248
|
target,
|
|
202
249
|
where
|
|
203
250
|
},
|
|
@@ -231,39 +278,44 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
231
278
|
const numbersToInsert = [];
|
|
232
279
|
const blocksToInsert = {};
|
|
233
280
|
const selectsToInsert = {};
|
|
281
|
+
const localeTableName = `${tableName}${adapter.localesSuffix}`;
|
|
282
|
+
const shouldStampLocaleBranch = Boolean(adapter.rawTables[localeTableName]?.columns[branchField]);
|
|
234
283
|
// If there are locale rows with data, add the parent and locale to each
|
|
235
|
-
if (Object.keys(
|
|
236
|
-
Object.entries(
|
|
284
|
+
if (Object.keys(nestedWrite.locales).length > 0) {
|
|
285
|
+
Object.entries(nestedWrite.locales).forEach(([locale, localeRow])=>{
|
|
237
286
|
localeRow._parentID = insertedRow.id;
|
|
238
287
|
localeRow._locale = locale;
|
|
288
|
+
if (shouldStampLocaleBranch) {
|
|
289
|
+
localeRow[branchField] = insertedRow[branchField] ?? data[branchField] ?? MAIN_BRANCH;
|
|
290
|
+
}
|
|
239
291
|
localesToInsert.push(localeRow);
|
|
240
292
|
});
|
|
241
293
|
}
|
|
242
294
|
// If there are relationships, add parent to each
|
|
243
|
-
if (
|
|
244
|
-
|
|
295
|
+
if (nestedWrite.relationships.length > 0) {
|
|
296
|
+
nestedWrite.relationships.forEach((relation)=>{
|
|
245
297
|
relation.parent = insertedRow.id;
|
|
246
298
|
relationsToInsert.push(relation);
|
|
247
299
|
});
|
|
248
300
|
}
|
|
249
301
|
// If there are texts, add parent to each
|
|
250
|
-
if (
|
|
251
|
-
|
|
302
|
+
if (nestedWrite.texts.length > 0) {
|
|
303
|
+
nestedWrite.texts.forEach((textRow)=>{
|
|
252
304
|
textRow.parent = insertedRow.id;
|
|
253
305
|
textsToInsert.push(textRow);
|
|
254
306
|
});
|
|
255
307
|
}
|
|
256
308
|
// If there are numbers, add parent to each
|
|
257
|
-
if (
|
|
258
|
-
|
|
309
|
+
if (nestedWrite.numbers.length > 0) {
|
|
310
|
+
nestedWrite.numbers.forEach((numberRow)=>{
|
|
259
311
|
numberRow.parent = insertedRow.id;
|
|
260
312
|
numbersToInsert.push(numberRow);
|
|
261
313
|
});
|
|
262
314
|
}
|
|
263
315
|
// If there are selects, add parent to each, and then
|
|
264
316
|
// store by table name and rows
|
|
265
|
-
if (Object.keys(
|
|
266
|
-
Object.entries(
|
|
317
|
+
if (Object.keys(nestedWrite.selects).length > 0) {
|
|
318
|
+
Object.entries(nestedWrite.selects).forEach(([selectTableName, selectRows])=>{
|
|
267
319
|
selectsToInsert[selectTableName] = [];
|
|
268
320
|
selectRows.forEach((row)=>{
|
|
269
321
|
if (typeof row.parent === 'undefined') {
|
|
@@ -275,8 +327,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
275
327
|
}
|
|
276
328
|
// If there are blocks, add parent to each, and then
|
|
277
329
|
// store by table name and rows
|
|
278
|
-
Object.keys(
|
|
279
|
-
|
|
330
|
+
Object.keys(nestedWrite.blocks).forEach((tableName)=>{
|
|
331
|
+
nestedWrite.blocks[tableName].forEach((blockRow)=>{
|
|
280
332
|
blockRow.row._parentID = insertedRow.id;
|
|
281
333
|
if (!blocksToInsert[tableName]) {
|
|
282
334
|
blocksToInsert[tableName] = [];
|
|
@@ -291,20 +343,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
291
343
|
// INSERT LOCALES
|
|
292
344
|
// //////////////////////////////////
|
|
293
345
|
if (localesToInsert.length > 0) {
|
|
294
|
-
const localeTableName = `${tableName}${adapter.localesSuffix}`;
|
|
295
346
|
const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`];
|
|
296
|
-
if (operation === 'update') {
|
|
297
|
-
|
|
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({
|
|
298
371
|
db,
|
|
299
372
|
tableName: localeTableName,
|
|
300
|
-
|
|
373
|
+
values: localesToInsert
|
|
301
374
|
});
|
|
302
375
|
}
|
|
303
|
-
await adapter.insert({
|
|
304
|
-
db,
|
|
305
|
-
tableName: localeTableName,
|
|
306
|
-
values: localesToInsert
|
|
307
|
-
});
|
|
308
376
|
}
|
|
309
377
|
// //////////////////////////////////
|
|
310
378
|
// INSERT RELATIONSHIPS
|
|
@@ -312,7 +380,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
312
380
|
const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
|
|
313
381
|
if (operation === 'update') {
|
|
314
382
|
// Filter out specific item deletions (those with itemToRemove) from general path deletions
|
|
315
|
-
const generalRelationshipDeletes =
|
|
383
|
+
const generalRelationshipDeletes = nestedWrite.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
|
|
316
384
|
await deleteExistingRowsByPath({
|
|
317
385
|
adapter,
|
|
318
386
|
db,
|
|
@@ -337,9 +405,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
337
405
|
// //////////////////////////////////
|
|
338
406
|
// HANDLE RELATIONSHIP $push OPERATIONS
|
|
339
407
|
// //////////////////////////////////
|
|
340
|
-
if (
|
|
408
|
+
if (nestedWrite.relationshipsToAppend.length > 0) {
|
|
341
409
|
// Prepare all relationships for batch insert (order will be set after max query)
|
|
342
|
-
const relationshipsToInsert =
|
|
410
|
+
const relationshipsToInsert = nestedWrite.relationshipsToAppend.map((rel)=>{
|
|
343
411
|
const parentId = id || insertedRow.id;
|
|
344
412
|
const row = {
|
|
345
413
|
parent: parentId,
|
|
@@ -437,10 +505,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
437
505
|
// //////////////////////////////////
|
|
438
506
|
// HANDLE RELATIONSHIP $remove OPERATIONS
|
|
439
507
|
// //////////////////////////////////
|
|
440
|
-
if (
|
|
508
|
+
if (nestedWrite.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
|
|
441
509
|
const relationshipTable = adapter.tables[relationshipsTableName];
|
|
442
510
|
if (relationshipTable) {
|
|
443
|
-
for (const relToDelete of
|
|
511
|
+
for (const relToDelete of nestedWrite.relationshipsToDelete){
|
|
444
512
|
if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {
|
|
445
513
|
const item = relToDelete.itemToRemove;
|
|
446
514
|
const parentId = id || insertedRow.id;
|
|
@@ -494,7 +562,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
494
562
|
pathColumnName: 'path',
|
|
495
563
|
rows: [
|
|
496
564
|
...textsToInsert,
|
|
497
|
-
...
|
|
565
|
+
...nestedWrite.textsToDelete
|
|
498
566
|
],
|
|
499
567
|
tableName: textsTableName
|
|
500
568
|
});
|
|
@@ -520,7 +588,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
520
588
|
pathColumnName: 'path',
|
|
521
589
|
rows: [
|
|
522
590
|
...numbersToInsert,
|
|
523
|
-
...
|
|
591
|
+
...nestedWrite.numbersToDelete
|
|
524
592
|
],
|
|
525
593
|
tableName: numbersTableName
|
|
526
594
|
});
|
|
@@ -537,7 +605,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
537
605
|
// //////////////////////////////////
|
|
538
606
|
const insertedBlockRows = {};
|
|
539
607
|
if (operation === 'update') {
|
|
540
|
-
for (const tableName of
|
|
608
|
+
for (const tableName of nestedWrite.blocksToDelete){
|
|
541
609
|
const blockTable = adapter.tables[tableName];
|
|
542
610
|
await adapter.deleteWhere({
|
|
543
611
|
db,
|
|
@@ -593,7 +661,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
593
661
|
// INSERT ARRAYS RECURSIVELY
|
|
594
662
|
// //////////////////////////////////
|
|
595
663
|
if (operation === 'update') {
|
|
596
|
-
for (const arrayTableName of Object.keys(
|
|
664
|
+
for (const arrayTableName of Object.keys(nestedWrite.arrays)){
|
|
597
665
|
await deleteExistingArrayRows({
|
|
598
666
|
adapter,
|
|
599
667
|
db,
|
|
@@ -605,8 +673,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
605
673
|
await insertArrays({
|
|
606
674
|
adapter,
|
|
607
675
|
arrays: [
|
|
608
|
-
|
|
609
|
-
|
|
676
|
+
nestedWrite.arrays,
|
|
677
|
+
nestedWrite.arraysToPush
|
|
610
678
|
],
|
|
611
679
|
db,
|
|
612
680
|
parentRows: [
|
|
@@ -618,14 +686,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
618
686
|
// //////////////////////////////////
|
|
619
687
|
// INSERT hasMany SELECTS
|
|
620
688
|
// //////////////////////////////////
|
|
621
|
-
|
|
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] ?? [];
|
|
622
695
|
const selectTable = adapter.tables[selectTableName];
|
|
623
696
|
if (operation === 'update') {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
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
|
+
}
|
|
629
719
|
}
|
|
630
720
|
if (Object.keys(arraysBlocksUUIDMap).length > 0) {
|
|
631
721
|
tableRows.forEach((row)=>{
|