@vantreeseba/drizzle-graphql 12.0.0 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -8
- package/dist/index.cjs +451 -374
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +375 -52
- package/dist/index.d.ts +375 -52
- package/dist/index.js +451 -374
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4320,17 +4320,15 @@ const computeResolverFieldNames = (tableName, typeNameMapper, prefixes, suffixes
|
|
|
4320
4320
|
const upsertPrefix = prefixes.upsert ?? "upsert";
|
|
4321
4321
|
const upsertArrayFieldName = `${upsertPrefix}${pluralNoun}${suffixes.list}`;
|
|
4322
4322
|
const upsertSingleFieldName = mapped ? `${upsertPrefix}${capitalize(mapped.singular)}` : `${upsertPrefix}${capitalize(tableName)}${suffixes.single}`;
|
|
4323
|
-
const
|
|
4324
|
-
const
|
|
4325
|
-
const restoreBase = `${prefixes.restore ?? "restore"}${singularNoun}`;
|
|
4326
|
-
const updateFieldName = `${updateBase}${suffixes.list}`;
|
|
4323
|
+
const restorePrefix = prefixes.restore ?? "restore";
|
|
4324
|
+
const updateFieldName = `${prefixes.update}${pluralNoun}${suffixes.list}`;
|
|
4327
4325
|
const updateManyFieldName = `${prefixes.update}${pluralNoun}Many`;
|
|
4328
|
-
const deleteFieldName = `${
|
|
4329
|
-
const restoreFieldName = `${
|
|
4330
|
-
const
|
|
4331
|
-
const updateSingleFieldName =
|
|
4332
|
-
const deleteSingleFieldName =
|
|
4333
|
-
const restoreSingleFieldName =
|
|
4326
|
+
const deleteFieldName = `${prefixes.delete}${pluralNoun}${suffixes.list}`;
|
|
4327
|
+
const restoreFieldName = `${restorePrefix}${pluralNoun}${suffixes.list}`;
|
|
4328
|
+
const singleWrite = (prefix) => mapped ? `${prefix}${singularNoun}` : `${prefix}${singularNoun}${suffixes.single}`;
|
|
4329
|
+
const updateSingleFieldName = singleWrite(prefixes.update);
|
|
4330
|
+
const deleteSingleFieldName = singleWrite(prefixes.delete);
|
|
4331
|
+
const restoreSingleFieldName = singleWrite(restorePrefix);
|
|
4334
4332
|
return {
|
|
4335
4333
|
typeName,
|
|
4336
4334
|
listFieldName,
|
|
@@ -6530,6 +6528,72 @@ const createSchemaBuilder = (adapter) => {
|
|
|
6530
6528
|
havingInput
|
|
6531
6529
|
};
|
|
6532
6530
|
};
|
|
6531
|
+
/**
|
|
6532
|
+
* The per-table loop, run once for every table the build covers.
|
|
6533
|
+
*
|
|
6534
|
+
* The dialect's callback receives the values the loop has already worked out — the feature
|
|
6535
|
+
* flags, the extension factory, the field names, the table's generated types and its
|
|
6536
|
+
* soft-delete config — and answers with the mutations it generated. Registering them, and
|
|
6537
|
+
* registering the inputs and outputs those mutations reference, happens here: both sides
|
|
6538
|
+
* did it identically, down to the `description` strings on the count mutations, so a gate
|
|
6539
|
+
* changed on one side and forgotten on the other used to be a silent dialect divergence.
|
|
6540
|
+
*
|
|
6541
|
+
* What stays in the dialect is what genuinely differs — which generators run, what each
|
|
6542
|
+
* mutation returns, and (on MySQL) that a write cannot report the rows it touched.
|
|
6543
|
+
*/
|
|
6544
|
+
const forEachTable = (ctx, perTable) => {
|
|
6545
|
+
const { schema, featureOf, softDeleteOf, typeNameMapper, gqlSchemaTypes, mutations, inputs, outputs } = ctx;
|
|
6546
|
+
const { prefixes, suffixes } = ctx.options;
|
|
6547
|
+
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
6548
|
+
const tableFeatures = featureOf(tableName);
|
|
6549
|
+
const drizzleMeta = tableFieldExtensions(tableName, primaryKeyPropNames(schema[tableName]));
|
|
6550
|
+
const names = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
6551
|
+
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
6552
|
+
const readTypes = addReadFields(ctx, tableName, names, tableTypes, drizzleMeta);
|
|
6553
|
+
const built = perTable({
|
|
6554
|
+
tableName,
|
|
6555
|
+
table: schema[tableName],
|
|
6556
|
+
tableFeatures,
|
|
6557
|
+
drizzleMeta,
|
|
6558
|
+
names,
|
|
6559
|
+
types: tableTypes,
|
|
6560
|
+
softDeleteInfo
|
|
6561
|
+
});
|
|
6562
|
+
for (const { generated, type, meta, description } of built.mutations) if (generated) defineRootField(mutations, "mutation", generated.name, {
|
|
6563
|
+
type,
|
|
6564
|
+
args: generated.args,
|
|
6565
|
+
resolve: generated.resolver,
|
|
6566
|
+
...meta ? { extensions: { drizzle: drizzleMeta({
|
|
6567
|
+
kind: "mutation",
|
|
6568
|
+
...meta
|
|
6569
|
+
}) } } : {},
|
|
6570
|
+
...description ? { description } : {}
|
|
6571
|
+
});
|
|
6572
|
+
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6573
|
+
[
|
|
6574
|
+
...tableFeatures.insert || built.onConflictInput ? [insertInput] : [],
|
|
6575
|
+
...built.onConflictInput ? [built.onConflictInput] : [],
|
|
6576
|
+
...tableFeatures.update ? [updateInput] : [],
|
|
6577
|
+
...built.updateManyInput ? [built.updateManyInput] : [],
|
|
6578
|
+
tableFilters,
|
|
6579
|
+
tableOrder
|
|
6580
|
+
].forEach((e) => {
|
|
6581
|
+
inputs[e.name] = e;
|
|
6582
|
+
});
|
|
6583
|
+
const { selectSingleOutput } = tableTypes.outputs;
|
|
6584
|
+
outputs[selectSingleOutput.name] = selectSingleOutput;
|
|
6585
|
+
if (adapter.returnsRows) {
|
|
6586
|
+
const { singleTableItemOutput } = tableTypes.outputs;
|
|
6587
|
+
outputs[singleTableItemOutput.name] = singleTableItemOutput;
|
|
6588
|
+
}
|
|
6589
|
+
const { aggregateType, groupByType, havingInput } = readTypes;
|
|
6590
|
+
if (aggregateType) outputs[aggregateType.name] = aggregateType;
|
|
6591
|
+
if (groupByType && havingInput) {
|
|
6592
|
+
outputs[groupByType.name] = groupByType;
|
|
6593
|
+
inputs[havingInput.name] = havingInput;
|
|
6594
|
+
}
|
|
6595
|
+
}
|
|
6596
|
+
};
|
|
6533
6597
|
/** The relation field resolvers and the transaction roster, once every root field exists. */
|
|
6534
6598
|
const finalizeBuild = (ctx) => {
|
|
6535
6599
|
if (ctx.mutationTxCtx) for (const name of Object.keys(ctx.mutations)) ctx.mutationTxCtx.fieldNames.add(name);
|
|
@@ -6560,7 +6624,7 @@ const createSchemaBuilder = (adapter) => {
|
|
|
6560
6624
|
primaryKeyPropNames,
|
|
6561
6625
|
uniqueColumnSets,
|
|
6562
6626
|
prepareBuild,
|
|
6563
|
-
|
|
6627
|
+
forEachTable,
|
|
6564
6628
|
finalizeBuild
|
|
6565
6629
|
};
|
|
6566
6630
|
};
|
|
@@ -6769,7 +6833,7 @@ const generateDelete = (db, tableName, table, filterArgs, fieldName, single, req
|
|
|
6769
6833
|
const getTableConfig$2 = memoizeTableConfig(drizzle_orm_mysql_core.getTableConfig);
|
|
6770
6834
|
/** Primary-key property names for a MySQL table, including table-level composite keys. */
|
|
6771
6835
|
const mysqlPrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig$2);
|
|
6772
|
-
const { prepareBuild,
|
|
6836
|
+
const { prepareBuild, forEachTable, finalizeBuild } = createSchemaBuilder({
|
|
6773
6837
|
tableClass: drizzle_orm_mysql_core.MySqlTable,
|
|
6774
6838
|
getTableConfig: getTableConfig$2,
|
|
6775
6839
|
primaryKeyPropNames: mysqlPrimaryKeyPropNames,
|
|
@@ -6780,9 +6844,9 @@ const { prepareBuild, addReadFields, finalizeBuild } = createSchemaBuilder({
|
|
|
6780
6844
|
}
|
|
6781
6845
|
});
|
|
6782
6846
|
const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
6783
|
-
const { prefixes
|
|
6847
|
+
const { prefixes } = options;
|
|
6784
6848
|
const ctx = prepareBuild(db, schema, relations, options);
|
|
6785
|
-
const {
|
|
6849
|
+
const { anyTable, filterCtx, policies, cacheCtx, mutationTxCtx, outputs } = ctx;
|
|
6786
6850
|
const mutationReturnType = new graphql.GraphQLObjectType({
|
|
6787
6851
|
name: cacheCtx.typeName({
|
|
6788
6852
|
kind: "shared",
|
|
@@ -6796,15 +6860,9 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6796
6860
|
"update",
|
|
6797
6861
|
"delete"
|
|
6798
6862
|
].some((feature) => anyTable(feature))) outputs["MutationReturn"] = mutationReturnType;
|
|
6799
|
-
|
|
6800
|
-
const
|
|
6801
|
-
const drizzleMeta = tableFieldExtensions(tableName, mysqlPrimaryKeyPropNames(schema[tableName]));
|
|
6802
|
-
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6803
|
-
const { selectSingleOutput } = tableTypes.outputs;
|
|
6804
|
-
const names = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
6863
|
+
forEachTable(ctx, ({ tableName, tableFeatures, names, types, softDeleteInfo }) => {
|
|
6864
|
+
const { insertInput, updateInput, tableFilters } = types.inputs;
|
|
6805
6865
|
const { typeName, createArrayFieldName, createSingleFieldName, upsertArrayFieldName, upsertSingleFieldName, updateFieldName, updateManyFieldName, updateSingleFieldName, updateCountFieldName, deleteFieldName, deleteSingleFieldName, restoreFieldName, restoreSingleFieldName, deleteCountFieldName } = names;
|
|
6806
|
-
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
6807
|
-
const { aggregateType, groupByType, havingInput } = addReadFields(ctx, tableName, names, tableTypes, drizzleMeta);
|
|
6808
6866
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray(db, tableName, schema[tableName], insertInput, createArrayFieldName, mutationTxCtx, policies) : void 0;
|
|
6809
6867
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(db, tableName, schema[tableName], insertInput, createSingleFieldName, mutationTxCtx, policies) : void 0;
|
|
6810
6868
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -6857,103 +6915,85 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6857
6915
|
txCtx: mutationTxCtx
|
|
6858
6916
|
}) : void 0;
|
|
6859
6917
|
const hardDeleteMeta = softDeleteInfo?.hardDelete ? { hardDelete: true } : {};
|
|
6860
|
-
const
|
|
6861
|
-
|
|
6862
|
-
operation: "insert",
|
|
6863
|
-
single: false,
|
|
6864
|
-
targetArg: "values"
|
|
6865
|
-
}],
|
|
6866
|
-
[insertSingleGenerated, {
|
|
6867
|
-
operation: "insert",
|
|
6868
|
-
single: true,
|
|
6869
|
-
targetArg: "values"
|
|
6870
|
-
}],
|
|
6871
|
-
[upsertArrGenerated, {
|
|
6872
|
-
operation: "upsert",
|
|
6873
|
-
single: false,
|
|
6874
|
-
targetArg: "values"
|
|
6875
|
-
}],
|
|
6876
|
-
[upsertSingleGenerated, {
|
|
6877
|
-
operation: "upsert",
|
|
6878
|
-
single: true,
|
|
6879
|
-
targetArg: "values"
|
|
6880
|
-
}],
|
|
6881
|
-
[updateGenerated, {
|
|
6882
|
-
operation: "update",
|
|
6883
|
-
single: false,
|
|
6884
|
-
targetArg: "where"
|
|
6885
|
-
}],
|
|
6886
|
-
[updateManyGenerated, {
|
|
6887
|
-
operation: "updateMany",
|
|
6888
|
-
single: false,
|
|
6889
|
-
targetArg: "updates"
|
|
6890
|
-
}],
|
|
6891
|
-
[updateSingleGenerated, {
|
|
6892
|
-
operation: "update",
|
|
6893
|
-
single: true,
|
|
6894
|
-
targetArg: "where"
|
|
6895
|
-
}],
|
|
6896
|
-
[deleteGenerated, {
|
|
6897
|
-
operation: "delete",
|
|
6898
|
-
single: false,
|
|
6899
|
-
targetArg: "where",
|
|
6900
|
-
...hardDeleteMeta
|
|
6901
|
-
}],
|
|
6902
|
-
[deleteSingleGenerated, {
|
|
6903
|
-
operation: "delete",
|
|
6904
|
-
single: true,
|
|
6905
|
-
targetArg: "where",
|
|
6906
|
-
...hardDeleteMeta
|
|
6907
|
-
}],
|
|
6908
|
-
[restoreGenerated, {
|
|
6909
|
-
operation: "restore",
|
|
6910
|
-
single: false,
|
|
6911
|
-
targetArg: "where"
|
|
6912
|
-
}],
|
|
6913
|
-
[restoreSingleGenerated, {
|
|
6914
|
-
operation: "restore",
|
|
6915
|
-
single: true,
|
|
6916
|
-
targetArg: "where"
|
|
6917
|
-
}]
|
|
6918
|
-
];
|
|
6919
|
-
for (const [generated, meta] of generatedMutations) if (generated) defineRootField(mutations, "mutation", generated.name, {
|
|
6918
|
+
const withMeta = (generated, meta) => ({
|
|
6919
|
+
generated,
|
|
6920
6920
|
type: mutationReturnType,
|
|
6921
|
-
|
|
6922
|
-
resolve: generated.resolver,
|
|
6923
|
-
extensions: { drizzle: drizzleMeta({
|
|
6924
|
-
kind: "mutation",
|
|
6925
|
-
...meta
|
|
6926
|
-
}) }
|
|
6927
|
-
});
|
|
6928
|
-
if (updateCountGenerated) defineRootField(mutations, "mutation", updateCountGenerated.name, {
|
|
6929
|
-
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
6930
|
-
args: updateCountGenerated.args,
|
|
6931
|
-
resolve: updateCountGenerated.resolver,
|
|
6932
|
-
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
6933
|
-
});
|
|
6934
|
-
if (deleteCountGenerated) defineRootField(mutations, "mutation", deleteCountGenerated.name, {
|
|
6935
|
-
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
6936
|
-
args: deleteCountGenerated.args,
|
|
6937
|
-
resolve: deleteCountGenerated.resolver,
|
|
6938
|
-
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
6921
|
+
meta
|
|
6939
6922
|
});
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6943
|
-
|
|
6944
|
-
|
|
6945
|
-
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6923
|
+
return {
|
|
6924
|
+
mutations: [
|
|
6925
|
+
withMeta(insertArrGenerated, {
|
|
6926
|
+
operation: "insert",
|
|
6927
|
+
single: false,
|
|
6928
|
+
targetArg: "values"
|
|
6929
|
+
}),
|
|
6930
|
+
withMeta(insertSingleGenerated, {
|
|
6931
|
+
operation: "insert",
|
|
6932
|
+
single: true,
|
|
6933
|
+
targetArg: "values"
|
|
6934
|
+
}),
|
|
6935
|
+
withMeta(upsertArrGenerated, {
|
|
6936
|
+
operation: "upsert",
|
|
6937
|
+
single: false,
|
|
6938
|
+
targetArg: "values"
|
|
6939
|
+
}),
|
|
6940
|
+
withMeta(upsertSingleGenerated, {
|
|
6941
|
+
operation: "upsert",
|
|
6942
|
+
single: true,
|
|
6943
|
+
targetArg: "values"
|
|
6944
|
+
}),
|
|
6945
|
+
withMeta(updateGenerated, {
|
|
6946
|
+
operation: "update",
|
|
6947
|
+
single: false,
|
|
6948
|
+
targetArg: "where"
|
|
6949
|
+
}),
|
|
6950
|
+
withMeta(updateManyGenerated, {
|
|
6951
|
+
operation: "updateMany",
|
|
6952
|
+
single: false,
|
|
6953
|
+
targetArg: "updates"
|
|
6954
|
+
}),
|
|
6955
|
+
withMeta(updateSingleGenerated, {
|
|
6956
|
+
operation: "update",
|
|
6957
|
+
single: true,
|
|
6958
|
+
targetArg: "where"
|
|
6959
|
+
}),
|
|
6960
|
+
withMeta(deleteGenerated, {
|
|
6961
|
+
operation: "delete",
|
|
6962
|
+
single: false,
|
|
6963
|
+
targetArg: "where",
|
|
6964
|
+
...hardDeleteMeta
|
|
6965
|
+
}),
|
|
6966
|
+
withMeta(deleteSingleGenerated, {
|
|
6967
|
+
operation: "delete",
|
|
6968
|
+
single: true,
|
|
6969
|
+
targetArg: "where",
|
|
6970
|
+
...hardDeleteMeta
|
|
6971
|
+
}),
|
|
6972
|
+
withMeta(restoreGenerated, {
|
|
6973
|
+
operation: "restore",
|
|
6974
|
+
single: false,
|
|
6975
|
+
targetArg: "where"
|
|
6976
|
+
}),
|
|
6977
|
+
withMeta(restoreSingleGenerated, {
|
|
6978
|
+
operation: "restore",
|
|
6979
|
+
single: true,
|
|
6980
|
+
targetArg: "where"
|
|
6981
|
+
}),
|
|
6982
|
+
{
|
|
6983
|
+
generated: updateCountGenerated,
|
|
6984
|
+
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
6985
|
+
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
6986
|
+
},
|
|
6987
|
+
{
|
|
6988
|
+
generated: deleteCountGenerated,
|
|
6989
|
+
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
6990
|
+
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
6991
|
+
}
|
|
6992
|
+
],
|
|
6993
|
+
onConflictInput,
|
|
6994
|
+
updateManyInput
|
|
6995
|
+
};
|
|
6996
|
+
});
|
|
6957
6997
|
return finalizeBuild(ctx);
|
|
6958
6998
|
};
|
|
6959
6999
|
//#endregion
|
|
@@ -6963,26 +7003,36 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6963
7003
|
* result, so the generator call sites read exactly as they did when the functions were local.
|
|
6964
7004
|
*/
|
|
6965
7005
|
const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
6966
|
-
|
|
6967
|
-
|
|
7006
|
+
/**
|
|
7007
|
+
* `insert<Table>` / `insert<Table>Single` — one generator for both shapes, the way
|
|
7008
|
+
* {@link generateUpsert} handles its pair. `single` decides the argument type, whether the
|
|
7009
|
+
* result is remapped as a row or a list, and whether an empty return is an error; the write
|
|
7010
|
+
* itself is the same multi-row statement either way, with the single variant supplying a
|
|
7011
|
+
* one-element list.
|
|
7012
|
+
*/
|
|
7013
|
+
const generateInsert = (build, opts) => {
|
|
7014
|
+
const { db, tables, relationMap, typeNameMapper, txCtx, nested, limits, policies, resolveName } = build;
|
|
7015
|
+
const { tableName, table, baseType, fieldName, typeName, single, conflictDoNothing = false } = opts;
|
|
7016
|
+
const queryArgs = { values: { type: single ? new graphql.GraphQLNonNull(baseType) : new graphql.GraphQLNonNull(new graphql.GraphQLList(new graphql.GraphQLNonNull(baseType))) } };
|
|
6968
7017
|
const pkNames = primaryKeyPropNames(table);
|
|
6969
7018
|
return writeResolver({
|
|
6970
7019
|
db,
|
|
6971
7020
|
tableName,
|
|
6972
7021
|
operation: "insert",
|
|
6973
|
-
single
|
|
7022
|
+
single,
|
|
6974
7023
|
fieldName,
|
|
6975
7024
|
txCtx,
|
|
6976
7025
|
policies,
|
|
6977
7026
|
args: queryArgs,
|
|
6978
7027
|
run: async ({ executor, args, context, info, before, after }) => {
|
|
6979
|
-
|
|
7028
|
+
const supplied = single ? [args.values] : args.values;
|
|
7029
|
+
if (!supplied.length) throw drizzleError("No values were provided!", { code: "DRIZZLE_NO_VALUES" });
|
|
6980
7030
|
await before();
|
|
6981
|
-
const entries = nested?.enabled(tableName) ?
|
|
7031
|
+
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
6982
7032
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6983
7033
|
const contextColumns = policies?.contextValues?.(tableName);
|
|
6984
7034
|
const scope = policies?.scope?.(context);
|
|
6985
|
-
const input = nestedEntries ? [] : applyContextValuesAll(remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) :
|
|
7035
|
+
const input = nestedEntries ? [] : applyContextValuesAll(remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table), contextColumns, context);
|
|
6986
7036
|
const { columns, hasRelations, withParams } = mutationSelection(info, {
|
|
6987
7037
|
relationMap,
|
|
6988
7038
|
tables,
|
|
@@ -7012,65 +7062,12 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7012
7062
|
context
|
|
7013
7063
|
}) : await runInsert(executor, input);
|
|
7014
7064
|
await after(result);
|
|
7015
|
-
|
|
7016
|
-
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
7017
|
-
}
|
|
7018
|
-
});
|
|
7019
|
-
};
|
|
7020
|
-
const generateInsertSingle = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies, resolveName) => {
|
|
7021
|
-
const queryArgs = { values: { type: new graphql.GraphQLNonNull(baseType) } };
|
|
7022
|
-
const pkNames = primaryKeyPropNames(table);
|
|
7023
|
-
return writeResolver({
|
|
7024
|
-
db,
|
|
7025
|
-
tableName,
|
|
7026
|
-
operation: "insert",
|
|
7027
|
-
single: true,
|
|
7028
|
-
fieldName,
|
|
7029
|
-
txCtx,
|
|
7030
|
-
policies,
|
|
7031
|
-
args: queryArgs,
|
|
7032
|
-
run: async ({ executor, args, context, info, before, after }) => {
|
|
7033
|
-
await before();
|
|
7034
|
-
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
7035
|
-
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
7036
|
-
const contextColumns = policies?.contextValues?.(tableName);
|
|
7037
|
-
const scope = policies?.scope?.(context);
|
|
7038
|
-
const input = nestedEntry ? {} : applyContextValues(remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table), contextColumns, context);
|
|
7039
|
-
const { columns, hasRelations, withParams } = mutationSelection(info, {
|
|
7040
|
-
relationMap,
|
|
7041
|
-
tables,
|
|
7042
|
-
tableName,
|
|
7043
|
-
typeName,
|
|
7044
|
-
typeNameMapper,
|
|
7045
|
-
resolveName,
|
|
7046
|
-
table,
|
|
7047
|
-
pkNames,
|
|
7048
|
-
limits,
|
|
7049
|
-
scope,
|
|
7050
|
-
defaultOrderBy: policies?.defaultOrderBy
|
|
7051
|
-
});
|
|
7052
|
-
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
7053
|
-
const runInsert = async (target, values) => {
|
|
7054
|
-
let query = target.insert(table).values(values).returning(returning);
|
|
7055
|
-
if (conflictDoNothing) query = query.onConflictDoNothing();
|
|
7056
|
-
return await query;
|
|
7057
|
-
};
|
|
7058
|
-
const result = nestedEntry ? await writeWithNestedOps({
|
|
7059
|
-
executor,
|
|
7060
|
-
runtime: nested,
|
|
7061
|
-
tableName,
|
|
7062
|
-
entries: [nestedEntry],
|
|
7063
|
-
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
7064
|
-
write: runInsert,
|
|
7065
|
-
context
|
|
7066
|
-
}) : await runInsert(executor, input);
|
|
7067
|
-
await after(result);
|
|
7068
|
-
if (!result[0]) {
|
|
7065
|
+
if (single && !result[0]) {
|
|
7069
7066
|
if (!conflictDoNothing) throw drizzleError("The insert returned no row.", { code: "DRIZZLE_NO_ROW_RETURNED" });
|
|
7070
7067
|
return;
|
|
7071
7068
|
}
|
|
7072
7069
|
const enriched = await withEagerRelations(executor, tableName, result, pkNames, withParams, hasRelations);
|
|
7073
|
-
return remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap);
|
|
7070
|
+
return single ? remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap) : remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
7074
7071
|
}
|
|
7075
7072
|
});
|
|
7076
7073
|
};
|
|
@@ -7080,7 +7077,9 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7080
7077
|
*
|
|
7081
7078
|
* Shares the insert input: an upsert supplies a whole row, same as a create.
|
|
7082
7079
|
*/
|
|
7083
|
-
const generateUpsert = (
|
|
7080
|
+
const generateUpsert = (build, opts) => {
|
|
7081
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7082
|
+
const { tableName, table, baseType, onConflictType, uniqueSets, fieldName, typeName, single } = opts;
|
|
7084
7083
|
const queryArgs = {
|
|
7085
7084
|
values: { type: single ? new graphql.GraphQLNonNull(baseType) : new graphql.GraphQLNonNull(new graphql.GraphQLList(new graphql.GraphQLNonNull(baseType))) },
|
|
7086
7085
|
onConflict: {
|
|
@@ -7157,7 +7156,9 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7157
7156
|
}
|
|
7158
7157
|
});
|
|
7159
7158
|
};
|
|
7160
|
-
const generateUpdate = (
|
|
7159
|
+
const generateUpdate = (build, opts) => {
|
|
7160
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7161
|
+
const { tableName, table, setArgs, filterArgs, fieldName, typeName, single, requireWhere } = opts;
|
|
7161
7162
|
const queryArgs = {
|
|
7162
7163
|
set: { type: new graphql.GraphQLNonNull(setArgs) },
|
|
7163
7164
|
where: { type: single || requireWhere ? new graphql.GraphQLNonNull(filterArgs) : filterArgs }
|
|
@@ -7240,7 +7241,10 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7240
7241
|
* `DELETE` — emptying the trash, reclaiming a unique key. It reads at `INCLUDE`, since the
|
|
7241
7242
|
* rows it mostly exists to remove are the ones already marked; a `scope` still confines it.
|
|
7242
7243
|
*/
|
|
7243
|
-
const generateDelete = (
|
|
7244
|
+
const generateDelete = (build, opts) => {
|
|
7245
|
+
const { db, filterCtx, txCtx, policies, resolveName } = build;
|
|
7246
|
+
const { tableName, table, filterArgs, fieldName, typeName, single, requireWhere, selectionCtx } = opts;
|
|
7247
|
+
const restore = opts.restore ?? false;
|
|
7244
7248
|
const softDelete = policies?.softDelete?.(tableName);
|
|
7245
7249
|
const operation = restore ? "restore" : "delete";
|
|
7246
7250
|
const canHardDelete = !restore && softDelete?.hardDelete === true;
|
|
@@ -7287,8 +7291,7 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7287
7291
|
});
|
|
7288
7292
|
};
|
|
7289
7293
|
return {
|
|
7290
|
-
|
|
7291
|
-
generateInsertSingle,
|
|
7294
|
+
generateInsert,
|
|
7292
7295
|
generateUpsert,
|
|
7293
7296
|
generateUpdate,
|
|
7294
7297
|
generateDelete
|
|
@@ -7305,23 +7308,46 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7305
7308
|
const createSchemaDataGenerator = (adapter) => {
|
|
7306
7309
|
const primaryKeyPropNames = adapter.primaryKeyPropNames;
|
|
7307
7310
|
const uniqueColumnSets = (table) => getUniqueColumnSets(table, adapter.getTableConfig);
|
|
7308
|
-
const {
|
|
7309
|
-
const { prepareBuild,
|
|
7311
|
+
const { generateInsert, generateUpsert, generateUpdate, generateDelete } = buildWriteResolvers(primaryKeyPropNames);
|
|
7312
|
+
const { prepareBuild, forEachTable, finalizeBuild } = createSchemaBuilder(adapter);
|
|
7310
7313
|
return (db, schema, relations, options) => {
|
|
7311
|
-
const { prefixes,
|
|
7314
|
+
const { prefixes, conflictDoNothing, typeNameMapper, limits } = options;
|
|
7312
7315
|
const ctx = prepareBuild(db, schema, relations, options);
|
|
7313
|
-
const { tables,
|
|
7314
|
-
|
|
7315
|
-
|
|
7316
|
-
|
|
7317
|
-
|
|
7318
|
-
|
|
7319
|
-
|
|
7316
|
+
const { tables, eagerRelations, filterCtx, policies, namedRelations, cacheCtx, nestedRuntime, mutationTxCtx } = ctx;
|
|
7317
|
+
const writeBuild = {
|
|
7318
|
+
db,
|
|
7319
|
+
tables,
|
|
7320
|
+
relationMap: eagerRelations,
|
|
7321
|
+
typeNameMapper,
|
|
7322
|
+
filterCtx,
|
|
7323
|
+
txCtx: mutationTxCtx,
|
|
7324
|
+
nested: nestedRuntime,
|
|
7325
|
+
limits,
|
|
7326
|
+
policies,
|
|
7327
|
+
resolveName: cacheCtx.typeName
|
|
7328
|
+
};
|
|
7329
|
+
forEachTable(ctx, ({ tableName, tableFeatures, names, types, softDeleteInfo }) => {
|
|
7330
|
+
const { insertInput, updateInput, tableFilters } = types.inputs;
|
|
7331
|
+
const { singleTableItemOutput, arrTableItemOutput } = types.outputs;
|
|
7320
7332
|
const { typeName, createArrayFieldName, createSingleFieldName, upsertArrayFieldName, upsertSingleFieldName, updateFieldName, updateManyFieldName, updateSingleFieldName, updateCountFieldName, deleteFieldName, deleteSingleFieldName, restoreFieldName, restoreSingleFieldName, deleteCountFieldName } = names;
|
|
7321
|
-
const
|
|
7322
|
-
|
|
7323
|
-
|
|
7324
|
-
|
|
7333
|
+
const insertArrGenerated = tableFeatures.insert ? generateInsert(writeBuild, {
|
|
7334
|
+
tableName,
|
|
7335
|
+
table: schema[tableName],
|
|
7336
|
+
baseType: insertInput,
|
|
7337
|
+
fieldName: createArrayFieldName,
|
|
7338
|
+
typeName,
|
|
7339
|
+
single: false,
|
|
7340
|
+
conflictDoNothing
|
|
7341
|
+
}) : void 0;
|
|
7342
|
+
const insertSingleGenerated = tableFeatures.insert ? generateInsert(writeBuild, {
|
|
7343
|
+
tableName,
|
|
7344
|
+
table: schema[tableName],
|
|
7345
|
+
baseType: insertInput,
|
|
7346
|
+
fieldName: createSingleFieldName,
|
|
7347
|
+
typeName,
|
|
7348
|
+
single: true,
|
|
7349
|
+
conflictDoNothing
|
|
7350
|
+
}) : void 0;
|
|
7325
7351
|
const uniqueSets = tableFeatures.upsert ? uniqueColumnSets(schema[tableName]) : [];
|
|
7326
7352
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
7327
7353
|
table: schema[tableName],
|
|
@@ -7332,10 +7358,46 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7332
7358
|
withTarget: true,
|
|
7333
7359
|
cacheCtx
|
|
7334
7360
|
}) : void 0;
|
|
7335
|
-
const upsertArrGenerated = onConflictInput ? generateUpsert(
|
|
7336
|
-
|
|
7337
|
-
|
|
7338
|
-
|
|
7361
|
+
const upsertArrGenerated = onConflictInput ? generateUpsert(writeBuild, {
|
|
7362
|
+
tableName,
|
|
7363
|
+
table: schema[tableName],
|
|
7364
|
+
baseType: insertInput,
|
|
7365
|
+
onConflictType: onConflictInput,
|
|
7366
|
+
uniqueSets,
|
|
7367
|
+
fieldName: upsertArrayFieldName,
|
|
7368
|
+
typeName,
|
|
7369
|
+
single: false
|
|
7370
|
+
}) : void 0;
|
|
7371
|
+
const upsertSingleGenerated = onConflictInput ? generateUpsert(writeBuild, {
|
|
7372
|
+
tableName,
|
|
7373
|
+
table: schema[tableName],
|
|
7374
|
+
baseType: insertInput,
|
|
7375
|
+
onConflictType: onConflictInput,
|
|
7376
|
+
uniqueSets,
|
|
7377
|
+
fieldName: upsertSingleFieldName,
|
|
7378
|
+
typeName,
|
|
7379
|
+
single: true
|
|
7380
|
+
}) : void 0;
|
|
7381
|
+
const updateGenerated = tableFeatures.update ? generateUpdate(writeBuild, {
|
|
7382
|
+
tableName,
|
|
7383
|
+
table: schema[tableName],
|
|
7384
|
+
setArgs: updateInput,
|
|
7385
|
+
filterArgs: tableFilters,
|
|
7386
|
+
fieldName: updateFieldName,
|
|
7387
|
+
typeName,
|
|
7388
|
+
single: false,
|
|
7389
|
+
requireWhere: tableFeatures.requireWhere
|
|
7390
|
+
}) : void 0;
|
|
7391
|
+
const updateSingleGenerated = tableFeatures.update ? generateUpdate(writeBuild, {
|
|
7392
|
+
tableName,
|
|
7393
|
+
table: schema[tableName],
|
|
7394
|
+
setArgs: updateInput,
|
|
7395
|
+
filterArgs: tableFilters,
|
|
7396
|
+
fieldName: updateSingleFieldName,
|
|
7397
|
+
typeName,
|
|
7398
|
+
single: true,
|
|
7399
|
+
requireWhere: tableFeatures.requireWhere
|
|
7400
|
+
}) : void 0;
|
|
7339
7401
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({
|
|
7340
7402
|
tableName,
|
|
7341
7403
|
typeName,
|
|
@@ -7344,27 +7406,73 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7344
7406
|
tableFilters,
|
|
7345
7407
|
cacheCtx
|
|
7346
7408
|
}) : void 0;
|
|
7347
|
-
const updateManyGenerated = updateManyInput ? adapter.generateUpdateMany(
|
|
7348
|
-
const deleteGenerated = tableFeatures.delete ? generateDelete(db, tableName, schema[tableName], tableFilters, deleteFieldName, typeName, false, tableFeatures.requireWhere, filterCtx, {
|
|
7409
|
+
const updateManyGenerated = updateManyInput ? adapter.generateUpdateMany(writeBuild, {
|
|
7349
7410
|
tableName,
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
|
|
7353
|
-
|
|
7411
|
+
table: schema[tableName],
|
|
7412
|
+
updateManyInput,
|
|
7413
|
+
fieldName: updateManyFieldName,
|
|
7414
|
+
typeName
|
|
7415
|
+
}) : void 0;
|
|
7416
|
+
const deleteGenerated = tableFeatures.delete ? generateDelete(writeBuild, {
|
|
7417
|
+
tableName,
|
|
7418
|
+
table: schema[tableName],
|
|
7419
|
+
filterArgs: tableFilters,
|
|
7420
|
+
fieldName: deleteFieldName,
|
|
7421
|
+
typeName,
|
|
7422
|
+
single: false,
|
|
7423
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7424
|
+
restore: false,
|
|
7425
|
+
selectionCtx: {
|
|
7426
|
+
tableName,
|
|
7427
|
+
relationMap: namedRelations,
|
|
7428
|
+
tables
|
|
7429
|
+
}
|
|
7430
|
+
}) : void 0;
|
|
7431
|
+
const deleteSingleGenerated = tableFeatures.delete ? generateDelete(writeBuild, {
|
|
7354
7432
|
tableName,
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7433
|
+
table: schema[tableName],
|
|
7434
|
+
filterArgs: tableFilters,
|
|
7435
|
+
fieldName: deleteSingleFieldName,
|
|
7436
|
+
typeName,
|
|
7437
|
+
single: true,
|
|
7438
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7439
|
+
restore: false,
|
|
7440
|
+
selectionCtx: {
|
|
7441
|
+
tableName,
|
|
7442
|
+
relationMap: namedRelations,
|
|
7443
|
+
tables
|
|
7444
|
+
}
|
|
7445
|
+
}) : void 0;
|
|
7446
|
+
const restoreGenerated = softDeleteInfo ? generateDelete(writeBuild, {
|
|
7359
7447
|
tableName,
|
|
7360
|
-
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7448
|
+
table: schema[tableName],
|
|
7449
|
+
filterArgs: tableFilters,
|
|
7450
|
+
fieldName: restoreFieldName,
|
|
7451
|
+
typeName,
|
|
7452
|
+
single: false,
|
|
7453
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7454
|
+
restore: true,
|
|
7455
|
+
selectionCtx: {
|
|
7456
|
+
tableName,
|
|
7457
|
+
relationMap: namedRelations,
|
|
7458
|
+
tables
|
|
7459
|
+
}
|
|
7460
|
+
}) : void 0;
|
|
7461
|
+
const restoreSingleGenerated = softDeleteInfo ? generateDelete(writeBuild, {
|
|
7364
7462
|
tableName,
|
|
7365
|
-
|
|
7366
|
-
|
|
7367
|
-
|
|
7463
|
+
table: schema[tableName],
|
|
7464
|
+
filterArgs: tableFilters,
|
|
7465
|
+
fieldName: restoreSingleFieldName,
|
|
7466
|
+
typeName,
|
|
7467
|
+
single: true,
|
|
7468
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7469
|
+
restore: true,
|
|
7470
|
+
selectionCtx: {
|
|
7471
|
+
tableName,
|
|
7472
|
+
relationMap: namedRelations,
|
|
7473
|
+
tables
|
|
7474
|
+
}
|
|
7475
|
+
}) : void 0;
|
|
7368
7476
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
7369
7477
|
db,
|
|
7370
7478
|
tableName,
|
|
@@ -7389,160 +7497,126 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7389
7497
|
filterCtx,
|
|
7390
7498
|
txCtx: mutationTxCtx
|
|
7391
7499
|
}) : void 0;
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
|
|
7395
|
-
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7405
|
-
|
|
7406
|
-
|
|
7407
|
-
|
|
7408
|
-
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
|
|
7414
|
-
|
|
7415
|
-
|
|
7416
|
-
|
|
7417
|
-
|
|
7418
|
-
|
|
7419
|
-
|
|
7420
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
|
|
7430
|
-
|
|
7431
|
-
|
|
7432
|
-
|
|
7433
|
-
|
|
7434
|
-
|
|
7435
|
-
|
|
7436
|
-
|
|
7437
|
-
|
|
7438
|
-
|
|
7439
|
-
|
|
7440
|
-
|
|
7441
|
-
|
|
7442
|
-
|
|
7443
|
-
|
|
7444
|
-
|
|
7445
|
-
|
|
7446
|
-
|
|
7447
|
-
|
|
7448
|
-
|
|
7449
|
-
|
|
7450
|
-
|
|
7451
|
-
|
|
7452
|
-
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
|
|
7458
|
-
|
|
7459
|
-
|
|
7460
|
-
|
|
7461
|
-
|
|
7462
|
-
|
|
7463
|
-
|
|
7464
|
-
|
|
7465
|
-
|
|
7466
|
-
|
|
7467
|
-
|
|
7468
|
-
|
|
7469
|
-
|
|
7470
|
-
|
|
7471
|
-
|
|
7472
|
-
|
|
7473
|
-
|
|
7474
|
-
|
|
7475
|
-
|
|
7476
|
-
|
|
7477
|
-
|
|
7478
|
-
|
|
7479
|
-
|
|
7480
|
-
|
|
7481
|
-
|
|
7482
|
-
|
|
7483
|
-
|
|
7484
|
-
|
|
7485
|
-
|
|
7486
|
-
|
|
7487
|
-
|
|
7488
|
-
|
|
7489
|
-
|
|
7490
|
-
|
|
7491
|
-
|
|
7492
|
-
|
|
7493
|
-
|
|
7494
|
-
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
|
|
7502
|
-
|
|
7503
|
-
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
|
|
7507
|
-
|
|
7508
|
-
|
|
7509
|
-
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
single: true,
|
|
7513
|
-
targetArg: "where"
|
|
7514
|
-
}) }
|
|
7515
|
-
});
|
|
7516
|
-
if (updateCountGenerated) defineRootField(mutations, "mutation", updateCountGenerated.name, {
|
|
7517
|
-
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
7518
|
-
args: updateCountGenerated.args,
|
|
7519
|
-
resolve: updateCountGenerated.resolver,
|
|
7520
|
-
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
7521
|
-
});
|
|
7522
|
-
if (deleteCountGenerated) defineRootField(mutations, "mutation", deleteCountGenerated.name, {
|
|
7523
|
-
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
7524
|
-
args: deleteCountGenerated.args,
|
|
7525
|
-
resolve: deleteCountGenerated.resolver,
|
|
7526
|
-
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
7527
|
-
});
|
|
7528
|
-
[
|
|
7529
|
-
...tableFeatures.insert || onConflictInput ? [insertInput] : [],
|
|
7530
|
-
...onConflictInput ? [onConflictInput] : [],
|
|
7531
|
-
...tableFeatures.update ? [updateInput] : [],
|
|
7532
|
-
...updateManyInput ? [updateManyInput] : [],
|
|
7533
|
-
tableFilters,
|
|
7534
|
-
tableOrder
|
|
7535
|
-
].forEach((e) => {
|
|
7536
|
-
inputs[e.name] = e;
|
|
7537
|
-
});
|
|
7538
|
-
outputs[selectSingleOutput.name] = selectSingleOutput;
|
|
7539
|
-
outputs[singleTableItemOutput.name] = singleTableItemOutput;
|
|
7540
|
-
if (aggregateType) outputs[aggregateType.name] = aggregateType;
|
|
7541
|
-
if (groupByType && havingInput) {
|
|
7542
|
-
outputs[groupByType.name] = groupByType;
|
|
7543
|
-
inputs[havingInput.name] = havingInput;
|
|
7544
|
-
}
|
|
7545
|
-
}
|
|
7500
|
+
const hardDeleteMeta = softDeleteInfo?.hardDelete ? { hardDelete: true } : {};
|
|
7501
|
+
return {
|
|
7502
|
+
mutations: [
|
|
7503
|
+
{
|
|
7504
|
+
generated: insertArrGenerated,
|
|
7505
|
+
type: arrTableItemOutput,
|
|
7506
|
+
meta: {
|
|
7507
|
+
operation: "insert",
|
|
7508
|
+
single: false,
|
|
7509
|
+
targetArg: "values"
|
|
7510
|
+
}
|
|
7511
|
+
},
|
|
7512
|
+
{
|
|
7513
|
+
generated: insertSingleGenerated,
|
|
7514
|
+
type: conflictDoNothing ? singleTableItemOutput : new graphql.GraphQLNonNull(singleTableItemOutput),
|
|
7515
|
+
meta: {
|
|
7516
|
+
operation: "insert",
|
|
7517
|
+
single: true,
|
|
7518
|
+
targetArg: "values"
|
|
7519
|
+
}
|
|
7520
|
+
},
|
|
7521
|
+
{
|
|
7522
|
+
generated: upsertArrGenerated,
|
|
7523
|
+
type: arrTableItemOutput,
|
|
7524
|
+
meta: {
|
|
7525
|
+
operation: "upsert",
|
|
7526
|
+
single: false,
|
|
7527
|
+
targetArg: "values"
|
|
7528
|
+
}
|
|
7529
|
+
},
|
|
7530
|
+
{
|
|
7531
|
+
generated: upsertSingleGenerated,
|
|
7532
|
+
type: singleTableItemOutput,
|
|
7533
|
+
meta: {
|
|
7534
|
+
operation: "upsert",
|
|
7535
|
+
single: true,
|
|
7536
|
+
targetArg: "values"
|
|
7537
|
+
}
|
|
7538
|
+
},
|
|
7539
|
+
{
|
|
7540
|
+
generated: updateGenerated,
|
|
7541
|
+
type: arrTableItemOutput,
|
|
7542
|
+
meta: {
|
|
7543
|
+
operation: "update",
|
|
7544
|
+
single: false,
|
|
7545
|
+
targetArg: "where"
|
|
7546
|
+
}
|
|
7547
|
+
},
|
|
7548
|
+
{
|
|
7549
|
+
generated: updateManyGenerated,
|
|
7550
|
+
type: new graphql.GraphQLNonNull(new graphql.GraphQLList(singleTableItemOutput)),
|
|
7551
|
+
meta: {
|
|
7552
|
+
operation: "updateMany",
|
|
7553
|
+
single: false,
|
|
7554
|
+
targetArg: "updates"
|
|
7555
|
+
},
|
|
7556
|
+
description: "Each entry's updated rows, in entry order. An entry whose `where` matched no rows contributes `null` in its slot; an entry that matched several contributes each of its rows."
|
|
7557
|
+
},
|
|
7558
|
+
{
|
|
7559
|
+
generated: updateSingleGenerated,
|
|
7560
|
+
type: singleTableItemOutput,
|
|
7561
|
+
meta: {
|
|
7562
|
+
operation: "update",
|
|
7563
|
+
single: true,
|
|
7564
|
+
targetArg: "where"
|
|
7565
|
+
}
|
|
7566
|
+
},
|
|
7567
|
+
{
|
|
7568
|
+
generated: deleteGenerated,
|
|
7569
|
+
type: arrTableItemOutput,
|
|
7570
|
+
meta: {
|
|
7571
|
+
operation: "delete",
|
|
7572
|
+
single: false,
|
|
7573
|
+
targetArg: "where",
|
|
7574
|
+
...hardDeleteMeta
|
|
7575
|
+
}
|
|
7576
|
+
},
|
|
7577
|
+
{
|
|
7578
|
+
generated: deleteSingleGenerated,
|
|
7579
|
+
type: singleTableItemOutput,
|
|
7580
|
+
meta: {
|
|
7581
|
+
operation: "delete",
|
|
7582
|
+
single: true,
|
|
7583
|
+
targetArg: "where",
|
|
7584
|
+
...hardDeleteMeta
|
|
7585
|
+
}
|
|
7586
|
+
},
|
|
7587
|
+
{
|
|
7588
|
+
generated: restoreGenerated,
|
|
7589
|
+
type: arrTableItemOutput,
|
|
7590
|
+
meta: {
|
|
7591
|
+
operation: "restore",
|
|
7592
|
+
single: false,
|
|
7593
|
+
targetArg: "where"
|
|
7594
|
+
}
|
|
7595
|
+
},
|
|
7596
|
+
{
|
|
7597
|
+
generated: restoreSingleGenerated,
|
|
7598
|
+
type: singleTableItemOutput,
|
|
7599
|
+
meta: {
|
|
7600
|
+
operation: "restore",
|
|
7601
|
+
single: true,
|
|
7602
|
+
targetArg: "where"
|
|
7603
|
+
}
|
|
7604
|
+
},
|
|
7605
|
+
{
|
|
7606
|
+
generated: updateCountGenerated,
|
|
7607
|
+
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
7608
|
+
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
7609
|
+
},
|
|
7610
|
+
{
|
|
7611
|
+
generated: deleteCountGenerated,
|
|
7612
|
+
type: new graphql.GraphQLNonNull(graphql.GraphQLInt),
|
|
7613
|
+
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
7614
|
+
}
|
|
7615
|
+
],
|
|
7616
|
+
onConflictInput,
|
|
7617
|
+
updateManyInput
|
|
7618
|
+
};
|
|
7619
|
+
});
|
|
7546
7620
|
return finalizeBuild(ctx);
|
|
7547
7621
|
};
|
|
7548
7622
|
};
|
|
@@ -7584,7 +7658,9 @@ const runUpdateManyBatch = ({ executor, entries, table, returning, nested, table
|
|
|
7584
7658
|
* @param runBatch how the entries execute; defaults to {@link runUpdateManyBatch}
|
|
7585
7659
|
*/
|
|
7586
7660
|
const createUpdateManyGenerator = (primaryKeyPropNames, runBatch = runUpdateManyBatch) => {
|
|
7587
|
-
return (
|
|
7661
|
+
return (build, opts) => {
|
|
7662
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7663
|
+
const { tableName, table, updateManyInput, fieldName, typeName } = opts;
|
|
7588
7664
|
const queryArgs = { updates: { type: new graphql.GraphQLNonNull(new graphql.GraphQLList(new graphql.GraphQLNonNull(updateManyInput))) } };
|
|
7589
7665
|
const pkNames = primaryKeyPropNames(table);
|
|
7590
7666
|
return writeResolver({
|
|
@@ -7627,11 +7703,12 @@ const createUpdateManyGenerator = (primaryKeyPropNames, runBatch = runUpdateMany
|
|
|
7627
7703
|
};
|
|
7628
7704
|
});
|
|
7629
7705
|
const anyNested = entries.some((entry) => entry.ops);
|
|
7706
|
+
const returning = anyNested ? nested.withJoinColumns(tableName, mergedOps(entries.map((entry) => ({ ops: entry.ops ?? {} }))), { ...columns }, table) : columns;
|
|
7630
7707
|
const perEntry = await runBatch({
|
|
7631
7708
|
executor,
|
|
7632
7709
|
entries,
|
|
7633
7710
|
table,
|
|
7634
|
-
returning
|
|
7711
|
+
returning,
|
|
7635
7712
|
anyNested,
|
|
7636
7713
|
nested,
|
|
7637
7714
|
tableName,
|