@vantreeseba/drizzle-graphql 12.0.0 → 12.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +443 -364
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +443 -364
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6506,6 +6506,72 @@ const createSchemaBuilder = (adapter) => {
|
|
|
6506
6506
|
havingInput
|
|
6507
6507
|
};
|
|
6508
6508
|
};
|
|
6509
|
+
/**
|
|
6510
|
+
* The per-table loop, run once for every table the build covers.
|
|
6511
|
+
*
|
|
6512
|
+
* The dialect's callback receives the values the loop has already worked out — the feature
|
|
6513
|
+
* flags, the extension factory, the field names, the table's generated types and its
|
|
6514
|
+
* soft-delete config — and answers with the mutations it generated. Registering them, and
|
|
6515
|
+
* registering the inputs and outputs those mutations reference, happens here: both sides
|
|
6516
|
+
* did it identically, down to the `description` strings on the count mutations, so a gate
|
|
6517
|
+
* changed on one side and forgotten on the other used to be a silent dialect divergence.
|
|
6518
|
+
*
|
|
6519
|
+
* What stays in the dialect is what genuinely differs — which generators run, what each
|
|
6520
|
+
* mutation returns, and (on MySQL) that a write cannot report the rows it touched.
|
|
6521
|
+
*/
|
|
6522
|
+
const forEachTable = (ctx, perTable) => {
|
|
6523
|
+
const { schema, featureOf, softDeleteOf, typeNameMapper, gqlSchemaTypes, mutations, inputs, outputs } = ctx;
|
|
6524
|
+
const { prefixes, suffixes } = ctx.options;
|
|
6525
|
+
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
6526
|
+
const tableFeatures = featureOf(tableName);
|
|
6527
|
+
const drizzleMeta = tableFieldExtensions(tableName, primaryKeyPropNames(schema[tableName]));
|
|
6528
|
+
const names = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
6529
|
+
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
6530
|
+
const readTypes = addReadFields(ctx, tableName, names, tableTypes, drizzleMeta);
|
|
6531
|
+
const built = perTable({
|
|
6532
|
+
tableName,
|
|
6533
|
+
table: schema[tableName],
|
|
6534
|
+
tableFeatures,
|
|
6535
|
+
drizzleMeta,
|
|
6536
|
+
names,
|
|
6537
|
+
types: tableTypes,
|
|
6538
|
+
softDeleteInfo
|
|
6539
|
+
});
|
|
6540
|
+
for (const { generated, type, meta, description } of built.mutations) if (generated) defineRootField(mutations, "mutation", generated.name, {
|
|
6541
|
+
type,
|
|
6542
|
+
args: generated.args,
|
|
6543
|
+
resolve: generated.resolver,
|
|
6544
|
+
...meta ? { extensions: { drizzle: drizzleMeta({
|
|
6545
|
+
kind: "mutation",
|
|
6546
|
+
...meta
|
|
6547
|
+
}) } } : {},
|
|
6548
|
+
...description ? { description } : {}
|
|
6549
|
+
});
|
|
6550
|
+
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6551
|
+
[
|
|
6552
|
+
...tableFeatures.insert || built.onConflictInput ? [insertInput] : [],
|
|
6553
|
+
...built.onConflictInput ? [built.onConflictInput] : [],
|
|
6554
|
+
...tableFeatures.update ? [updateInput] : [],
|
|
6555
|
+
...built.updateManyInput ? [built.updateManyInput] : [],
|
|
6556
|
+
tableFilters,
|
|
6557
|
+
tableOrder
|
|
6558
|
+
].forEach((e) => {
|
|
6559
|
+
inputs[e.name] = e;
|
|
6560
|
+
});
|
|
6561
|
+
const { selectSingleOutput } = tableTypes.outputs;
|
|
6562
|
+
outputs[selectSingleOutput.name] = selectSingleOutput;
|
|
6563
|
+
if (adapter.returnsRows) {
|
|
6564
|
+
const { singleTableItemOutput } = tableTypes.outputs;
|
|
6565
|
+
outputs[singleTableItemOutput.name] = singleTableItemOutput;
|
|
6566
|
+
}
|
|
6567
|
+
const { aggregateType, groupByType, havingInput } = readTypes;
|
|
6568
|
+
if (aggregateType) outputs[aggregateType.name] = aggregateType;
|
|
6569
|
+
if (groupByType && havingInput) {
|
|
6570
|
+
outputs[groupByType.name] = groupByType;
|
|
6571
|
+
inputs[havingInput.name] = havingInput;
|
|
6572
|
+
}
|
|
6573
|
+
}
|
|
6574
|
+
};
|
|
6509
6575
|
/** The relation field resolvers and the transaction roster, once every root field exists. */
|
|
6510
6576
|
const finalizeBuild = (ctx) => {
|
|
6511
6577
|
if (ctx.mutationTxCtx) for (const name of Object.keys(ctx.mutations)) ctx.mutationTxCtx.fieldNames.add(name);
|
|
@@ -6536,7 +6602,7 @@ const createSchemaBuilder = (adapter) => {
|
|
|
6536
6602
|
primaryKeyPropNames,
|
|
6537
6603
|
uniqueColumnSets,
|
|
6538
6604
|
prepareBuild,
|
|
6539
|
-
|
|
6605
|
+
forEachTable,
|
|
6540
6606
|
finalizeBuild
|
|
6541
6607
|
};
|
|
6542
6608
|
};
|
|
@@ -6745,7 +6811,7 @@ const generateDelete = (db, tableName, table, filterArgs, fieldName, single, req
|
|
|
6745
6811
|
const getTableConfig$5 = memoizeTableConfig(getTableConfig);
|
|
6746
6812
|
/** Primary-key property names for a MySQL table, including table-level composite keys. */
|
|
6747
6813
|
const mysqlPrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig$5);
|
|
6748
|
-
const { prepareBuild,
|
|
6814
|
+
const { prepareBuild, forEachTable, finalizeBuild } = createSchemaBuilder({
|
|
6749
6815
|
tableClass: MySqlTable,
|
|
6750
6816
|
getTableConfig: getTableConfig$5,
|
|
6751
6817
|
primaryKeyPropNames: mysqlPrimaryKeyPropNames,
|
|
@@ -6756,9 +6822,9 @@ const { prepareBuild, addReadFields, finalizeBuild } = createSchemaBuilder({
|
|
|
6756
6822
|
}
|
|
6757
6823
|
});
|
|
6758
6824
|
const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
6759
|
-
const { prefixes
|
|
6825
|
+
const { prefixes } = options;
|
|
6760
6826
|
const ctx = prepareBuild(db, schema, relations, options);
|
|
6761
|
-
const {
|
|
6827
|
+
const { anyTable, filterCtx, policies, cacheCtx, mutationTxCtx, outputs } = ctx;
|
|
6762
6828
|
const mutationReturnType = new GraphQLObjectType({
|
|
6763
6829
|
name: cacheCtx.typeName({
|
|
6764
6830
|
kind: "shared",
|
|
@@ -6772,15 +6838,9 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6772
6838
|
"update",
|
|
6773
6839
|
"delete"
|
|
6774
6840
|
].some((feature) => anyTable(feature))) outputs["MutationReturn"] = mutationReturnType;
|
|
6775
|
-
|
|
6776
|
-
const
|
|
6777
|
-
const drizzleMeta = tableFieldExtensions(tableName, mysqlPrimaryKeyPropNames(schema[tableName]));
|
|
6778
|
-
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6779
|
-
const { selectSingleOutput } = tableTypes.outputs;
|
|
6780
|
-
const names = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
6841
|
+
forEachTable(ctx, ({ tableName, tableFeatures, names, types, softDeleteInfo }) => {
|
|
6842
|
+
const { insertInput, updateInput, tableFilters } = types.inputs;
|
|
6781
6843
|
const { typeName, createArrayFieldName, createSingleFieldName, upsertArrayFieldName, upsertSingleFieldName, updateFieldName, updateManyFieldName, updateSingleFieldName, updateCountFieldName, deleteFieldName, deleteSingleFieldName, restoreFieldName, restoreSingleFieldName, deleteCountFieldName } = names;
|
|
6782
|
-
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
6783
|
-
const { aggregateType, groupByType, havingInput } = addReadFields(ctx, tableName, names, tableTypes, drizzleMeta);
|
|
6784
6844
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray(db, tableName, schema[tableName], insertInput, createArrayFieldName, mutationTxCtx, policies) : void 0;
|
|
6785
6845
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(db, tableName, schema[tableName], insertInput, createSingleFieldName, mutationTxCtx, policies) : void 0;
|
|
6786
6846
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -6833,103 +6893,85 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6833
6893
|
txCtx: mutationTxCtx
|
|
6834
6894
|
}) : void 0;
|
|
6835
6895
|
const hardDeleteMeta = softDeleteInfo?.hardDelete ? { hardDelete: true } : {};
|
|
6836
|
-
const
|
|
6837
|
-
|
|
6838
|
-
operation: "insert",
|
|
6839
|
-
single: false,
|
|
6840
|
-
targetArg: "values"
|
|
6841
|
-
}],
|
|
6842
|
-
[insertSingleGenerated, {
|
|
6843
|
-
operation: "insert",
|
|
6844
|
-
single: true,
|
|
6845
|
-
targetArg: "values"
|
|
6846
|
-
}],
|
|
6847
|
-
[upsertArrGenerated, {
|
|
6848
|
-
operation: "upsert",
|
|
6849
|
-
single: false,
|
|
6850
|
-
targetArg: "values"
|
|
6851
|
-
}],
|
|
6852
|
-
[upsertSingleGenerated, {
|
|
6853
|
-
operation: "upsert",
|
|
6854
|
-
single: true,
|
|
6855
|
-
targetArg: "values"
|
|
6856
|
-
}],
|
|
6857
|
-
[updateGenerated, {
|
|
6858
|
-
operation: "update",
|
|
6859
|
-
single: false,
|
|
6860
|
-
targetArg: "where"
|
|
6861
|
-
}],
|
|
6862
|
-
[updateManyGenerated, {
|
|
6863
|
-
operation: "updateMany",
|
|
6864
|
-
single: false,
|
|
6865
|
-
targetArg: "updates"
|
|
6866
|
-
}],
|
|
6867
|
-
[updateSingleGenerated, {
|
|
6868
|
-
operation: "update",
|
|
6869
|
-
single: true,
|
|
6870
|
-
targetArg: "where"
|
|
6871
|
-
}],
|
|
6872
|
-
[deleteGenerated, {
|
|
6873
|
-
operation: "delete",
|
|
6874
|
-
single: false,
|
|
6875
|
-
targetArg: "where",
|
|
6876
|
-
...hardDeleteMeta
|
|
6877
|
-
}],
|
|
6878
|
-
[deleteSingleGenerated, {
|
|
6879
|
-
operation: "delete",
|
|
6880
|
-
single: true,
|
|
6881
|
-
targetArg: "where",
|
|
6882
|
-
...hardDeleteMeta
|
|
6883
|
-
}],
|
|
6884
|
-
[restoreGenerated, {
|
|
6885
|
-
operation: "restore",
|
|
6886
|
-
single: false,
|
|
6887
|
-
targetArg: "where"
|
|
6888
|
-
}],
|
|
6889
|
-
[restoreSingleGenerated, {
|
|
6890
|
-
operation: "restore",
|
|
6891
|
-
single: true,
|
|
6892
|
-
targetArg: "where"
|
|
6893
|
-
}]
|
|
6894
|
-
];
|
|
6895
|
-
for (const [generated, meta] of generatedMutations) if (generated) defineRootField(mutations, "mutation", generated.name, {
|
|
6896
|
+
const withMeta = (generated, meta) => ({
|
|
6897
|
+
generated,
|
|
6896
6898
|
type: mutationReturnType,
|
|
6897
|
-
|
|
6898
|
-
resolve: generated.resolver,
|
|
6899
|
-
extensions: { drizzle: drizzleMeta({
|
|
6900
|
-
kind: "mutation",
|
|
6901
|
-
...meta
|
|
6902
|
-
}) }
|
|
6903
|
-
});
|
|
6904
|
-
if (updateCountGenerated) defineRootField(mutations, "mutation", updateCountGenerated.name, {
|
|
6905
|
-
type: new GraphQLNonNull(GraphQLInt),
|
|
6906
|
-
args: updateCountGenerated.args,
|
|
6907
|
-
resolve: updateCountGenerated.resolver,
|
|
6908
|
-
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
6909
|
-
});
|
|
6910
|
-
if (deleteCountGenerated) defineRootField(mutations, "mutation", deleteCountGenerated.name, {
|
|
6911
|
-
type: new GraphQLNonNull(GraphQLInt),
|
|
6912
|
-
args: deleteCountGenerated.args,
|
|
6913
|
-
resolve: deleteCountGenerated.resolver,
|
|
6914
|
-
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
6899
|
+
meta
|
|
6915
6900
|
});
|
|
6916
|
-
|
|
6917
|
-
|
|
6918
|
-
|
|
6919
|
-
|
|
6920
|
-
|
|
6921
|
-
|
|
6922
|
-
|
|
6923
|
-
|
|
6924
|
-
|
|
6925
|
-
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
6901
|
+
return {
|
|
6902
|
+
mutations: [
|
|
6903
|
+
withMeta(insertArrGenerated, {
|
|
6904
|
+
operation: "insert",
|
|
6905
|
+
single: false,
|
|
6906
|
+
targetArg: "values"
|
|
6907
|
+
}),
|
|
6908
|
+
withMeta(insertSingleGenerated, {
|
|
6909
|
+
operation: "insert",
|
|
6910
|
+
single: true,
|
|
6911
|
+
targetArg: "values"
|
|
6912
|
+
}),
|
|
6913
|
+
withMeta(upsertArrGenerated, {
|
|
6914
|
+
operation: "upsert",
|
|
6915
|
+
single: false,
|
|
6916
|
+
targetArg: "values"
|
|
6917
|
+
}),
|
|
6918
|
+
withMeta(upsertSingleGenerated, {
|
|
6919
|
+
operation: "upsert",
|
|
6920
|
+
single: true,
|
|
6921
|
+
targetArg: "values"
|
|
6922
|
+
}),
|
|
6923
|
+
withMeta(updateGenerated, {
|
|
6924
|
+
operation: "update",
|
|
6925
|
+
single: false,
|
|
6926
|
+
targetArg: "where"
|
|
6927
|
+
}),
|
|
6928
|
+
withMeta(updateManyGenerated, {
|
|
6929
|
+
operation: "updateMany",
|
|
6930
|
+
single: false,
|
|
6931
|
+
targetArg: "updates"
|
|
6932
|
+
}),
|
|
6933
|
+
withMeta(updateSingleGenerated, {
|
|
6934
|
+
operation: "update",
|
|
6935
|
+
single: true,
|
|
6936
|
+
targetArg: "where"
|
|
6937
|
+
}),
|
|
6938
|
+
withMeta(deleteGenerated, {
|
|
6939
|
+
operation: "delete",
|
|
6940
|
+
single: false,
|
|
6941
|
+
targetArg: "where",
|
|
6942
|
+
...hardDeleteMeta
|
|
6943
|
+
}),
|
|
6944
|
+
withMeta(deleteSingleGenerated, {
|
|
6945
|
+
operation: "delete",
|
|
6946
|
+
single: true,
|
|
6947
|
+
targetArg: "where",
|
|
6948
|
+
...hardDeleteMeta
|
|
6949
|
+
}),
|
|
6950
|
+
withMeta(restoreGenerated, {
|
|
6951
|
+
operation: "restore",
|
|
6952
|
+
single: false,
|
|
6953
|
+
targetArg: "where"
|
|
6954
|
+
}),
|
|
6955
|
+
withMeta(restoreSingleGenerated, {
|
|
6956
|
+
operation: "restore",
|
|
6957
|
+
single: true,
|
|
6958
|
+
targetArg: "where"
|
|
6959
|
+
}),
|
|
6960
|
+
{
|
|
6961
|
+
generated: updateCountGenerated,
|
|
6962
|
+
type: new GraphQLNonNull(GraphQLInt),
|
|
6963
|
+
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
6964
|
+
},
|
|
6965
|
+
{
|
|
6966
|
+
generated: deleteCountGenerated,
|
|
6967
|
+
type: new GraphQLNonNull(GraphQLInt),
|
|
6968
|
+
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
6969
|
+
}
|
|
6970
|
+
],
|
|
6971
|
+
onConflictInput,
|
|
6972
|
+
updateManyInput
|
|
6973
|
+
};
|
|
6974
|
+
});
|
|
6933
6975
|
return finalizeBuild(ctx);
|
|
6934
6976
|
};
|
|
6935
6977
|
//#endregion
|
|
@@ -6939,26 +6981,36 @@ const generateSchemaData$2 = (db, schema, relations, options) => {
|
|
|
6939
6981
|
* result, so the generator call sites read exactly as they did when the functions were local.
|
|
6940
6982
|
*/
|
|
6941
6983
|
const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
6942
|
-
|
|
6943
|
-
|
|
6984
|
+
/**
|
|
6985
|
+
* `insert<Table>` / `insert<Table>Single` — one generator for both shapes, the way
|
|
6986
|
+
* {@link generateUpsert} handles its pair. `single` decides the argument type, whether the
|
|
6987
|
+
* result is remapped as a row or a list, and whether an empty return is an error; the write
|
|
6988
|
+
* itself is the same multi-row statement either way, with the single variant supplying a
|
|
6989
|
+
* one-element list.
|
|
6990
|
+
*/
|
|
6991
|
+
const generateInsert = (build, opts) => {
|
|
6992
|
+
const { db, tables, relationMap, typeNameMapper, txCtx, nested, limits, policies, resolveName } = build;
|
|
6993
|
+
const { tableName, table, baseType, fieldName, typeName, single, conflictDoNothing = false } = opts;
|
|
6994
|
+
const queryArgs = { values: { type: single ? new GraphQLNonNull(baseType) : new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))) } };
|
|
6944
6995
|
const pkNames = primaryKeyPropNames(table);
|
|
6945
6996
|
return writeResolver({
|
|
6946
6997
|
db,
|
|
6947
6998
|
tableName,
|
|
6948
6999
|
operation: "insert",
|
|
6949
|
-
single
|
|
7000
|
+
single,
|
|
6950
7001
|
fieldName,
|
|
6951
7002
|
txCtx,
|
|
6952
7003
|
policies,
|
|
6953
7004
|
args: queryArgs,
|
|
6954
7005
|
run: async ({ executor, args, context, info, before, after }) => {
|
|
6955
|
-
|
|
7006
|
+
const supplied = single ? [args.values] : args.values;
|
|
7007
|
+
if (!supplied.length) throw drizzleError("No values were provided!", { code: "DRIZZLE_NO_VALUES" });
|
|
6956
7008
|
await before();
|
|
6957
|
-
const entries = nested?.enabled(tableName) ?
|
|
7009
|
+
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
6958
7010
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6959
7011
|
const contextColumns = policies?.contextValues?.(tableName);
|
|
6960
7012
|
const scope = policies?.scope?.(context);
|
|
6961
|
-
const input = nestedEntries ? [] : applyContextValuesAll(remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) :
|
|
7013
|
+
const input = nestedEntries ? [] : applyContextValuesAll(remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table), contextColumns, context);
|
|
6962
7014
|
const { columns, hasRelations, withParams } = mutationSelection(info, {
|
|
6963
7015
|
relationMap,
|
|
6964
7016
|
tables,
|
|
@@ -6988,65 +7040,12 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
6988
7040
|
context
|
|
6989
7041
|
}) : await runInsert(executor, input);
|
|
6990
7042
|
await after(result);
|
|
6991
|
-
|
|
6992
|
-
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
6993
|
-
}
|
|
6994
|
-
});
|
|
6995
|
-
};
|
|
6996
|
-
const generateInsertSingle = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies, resolveName) => {
|
|
6997
|
-
const queryArgs = { values: { type: new GraphQLNonNull(baseType) } };
|
|
6998
|
-
const pkNames = primaryKeyPropNames(table);
|
|
6999
|
-
return writeResolver({
|
|
7000
|
-
db,
|
|
7001
|
-
tableName,
|
|
7002
|
-
operation: "insert",
|
|
7003
|
-
single: true,
|
|
7004
|
-
fieldName,
|
|
7005
|
-
txCtx,
|
|
7006
|
-
policies,
|
|
7007
|
-
args: queryArgs,
|
|
7008
|
-
run: async ({ executor, args, context, info, before, after }) => {
|
|
7009
|
-
await before();
|
|
7010
|
-
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
7011
|
-
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
7012
|
-
const contextColumns = policies?.contextValues?.(tableName);
|
|
7013
|
-
const scope = policies?.scope?.(context);
|
|
7014
|
-
const input = nestedEntry ? {} : applyContextValues(remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table), contextColumns, context);
|
|
7015
|
-
const { columns, hasRelations, withParams } = mutationSelection(info, {
|
|
7016
|
-
relationMap,
|
|
7017
|
-
tables,
|
|
7018
|
-
tableName,
|
|
7019
|
-
typeName,
|
|
7020
|
-
typeNameMapper,
|
|
7021
|
-
resolveName,
|
|
7022
|
-
table,
|
|
7023
|
-
pkNames,
|
|
7024
|
-
limits,
|
|
7025
|
-
scope,
|
|
7026
|
-
defaultOrderBy: policies?.defaultOrderBy
|
|
7027
|
-
});
|
|
7028
|
-
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
7029
|
-
const runInsert = async (target, values) => {
|
|
7030
|
-
let query = target.insert(table).values(values).returning(returning);
|
|
7031
|
-
if (conflictDoNothing) query = query.onConflictDoNothing();
|
|
7032
|
-
return await query;
|
|
7033
|
-
};
|
|
7034
|
-
const result = nestedEntry ? await writeWithNestedOps({
|
|
7035
|
-
executor,
|
|
7036
|
-
runtime: nested,
|
|
7037
|
-
tableName,
|
|
7038
|
-
entries: [nestedEntry],
|
|
7039
|
-
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
7040
|
-
write: runInsert,
|
|
7041
|
-
context
|
|
7042
|
-
}) : await runInsert(executor, input);
|
|
7043
|
-
await after(result);
|
|
7044
|
-
if (!result[0]) {
|
|
7043
|
+
if (single && !result[0]) {
|
|
7045
7044
|
if (!conflictDoNothing) throw drizzleError("The insert returned no row.", { code: "DRIZZLE_NO_ROW_RETURNED" });
|
|
7046
7045
|
return;
|
|
7047
7046
|
}
|
|
7048
7047
|
const enriched = await withEagerRelations(executor, tableName, result, pkNames, withParams, hasRelations);
|
|
7049
|
-
return remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap);
|
|
7048
|
+
return single ? remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap) : remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
7050
7049
|
}
|
|
7051
7050
|
});
|
|
7052
7051
|
};
|
|
@@ -7056,7 +7055,9 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7056
7055
|
*
|
|
7057
7056
|
* Shares the insert input: an upsert supplies a whole row, same as a create.
|
|
7058
7057
|
*/
|
|
7059
|
-
const generateUpsert = (
|
|
7058
|
+
const generateUpsert = (build, opts) => {
|
|
7059
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7060
|
+
const { tableName, table, baseType, onConflictType, uniqueSets, fieldName, typeName, single } = opts;
|
|
7060
7061
|
const queryArgs = {
|
|
7061
7062
|
values: { type: single ? new GraphQLNonNull(baseType) : new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))) },
|
|
7062
7063
|
onConflict: {
|
|
@@ -7133,7 +7134,9 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7133
7134
|
}
|
|
7134
7135
|
});
|
|
7135
7136
|
};
|
|
7136
|
-
const generateUpdate = (
|
|
7137
|
+
const generateUpdate = (build, opts) => {
|
|
7138
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7139
|
+
const { tableName, table, setArgs, filterArgs, fieldName, typeName, single, requireWhere } = opts;
|
|
7137
7140
|
const queryArgs = {
|
|
7138
7141
|
set: { type: new GraphQLNonNull(setArgs) },
|
|
7139
7142
|
where: { type: single || requireWhere ? new GraphQLNonNull(filterArgs) : filterArgs }
|
|
@@ -7216,7 +7219,10 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7216
7219
|
* `DELETE` — emptying the trash, reclaiming a unique key. It reads at `INCLUDE`, since the
|
|
7217
7220
|
* rows it mostly exists to remove are the ones already marked; a `scope` still confines it.
|
|
7218
7221
|
*/
|
|
7219
|
-
const generateDelete = (
|
|
7222
|
+
const generateDelete = (build, opts) => {
|
|
7223
|
+
const { db, filterCtx, txCtx, policies, resolveName } = build;
|
|
7224
|
+
const { tableName, table, filterArgs, fieldName, typeName, single, requireWhere, selectionCtx } = opts;
|
|
7225
|
+
const restore = opts.restore ?? false;
|
|
7220
7226
|
const softDelete = policies?.softDelete?.(tableName);
|
|
7221
7227
|
const operation = restore ? "restore" : "delete";
|
|
7222
7228
|
const canHardDelete = !restore && softDelete?.hardDelete === true;
|
|
@@ -7263,8 +7269,7 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7263
7269
|
});
|
|
7264
7270
|
};
|
|
7265
7271
|
return {
|
|
7266
|
-
|
|
7267
|
-
generateInsertSingle,
|
|
7272
|
+
generateInsert,
|
|
7268
7273
|
generateUpsert,
|
|
7269
7274
|
generateUpdate,
|
|
7270
7275
|
generateDelete
|
|
@@ -7281,23 +7286,46 @@ const buildWriteResolvers = (primaryKeyPropNames) => {
|
|
|
7281
7286
|
const createSchemaDataGenerator = (adapter) => {
|
|
7282
7287
|
const primaryKeyPropNames = adapter.primaryKeyPropNames;
|
|
7283
7288
|
const uniqueColumnSets = (table) => getUniqueColumnSets(table, adapter.getTableConfig);
|
|
7284
|
-
const {
|
|
7285
|
-
const { prepareBuild,
|
|
7289
|
+
const { generateInsert, generateUpsert, generateUpdate, generateDelete } = buildWriteResolvers(primaryKeyPropNames);
|
|
7290
|
+
const { prepareBuild, forEachTable, finalizeBuild } = createSchemaBuilder(adapter);
|
|
7286
7291
|
return (db, schema, relations, options) => {
|
|
7287
|
-
const { prefixes,
|
|
7292
|
+
const { prefixes, conflictDoNothing, typeNameMapper, limits } = options;
|
|
7288
7293
|
const ctx = prepareBuild(db, schema, relations, options);
|
|
7289
|
-
const { tables,
|
|
7290
|
-
|
|
7291
|
-
|
|
7292
|
-
|
|
7293
|
-
|
|
7294
|
-
|
|
7295
|
-
|
|
7294
|
+
const { tables, eagerRelations, filterCtx, policies, namedRelations, cacheCtx, nestedRuntime, mutationTxCtx } = ctx;
|
|
7295
|
+
const writeBuild = {
|
|
7296
|
+
db,
|
|
7297
|
+
tables,
|
|
7298
|
+
relationMap: eagerRelations,
|
|
7299
|
+
typeNameMapper,
|
|
7300
|
+
filterCtx,
|
|
7301
|
+
txCtx: mutationTxCtx,
|
|
7302
|
+
nested: nestedRuntime,
|
|
7303
|
+
limits,
|
|
7304
|
+
policies,
|
|
7305
|
+
resolveName: cacheCtx.typeName
|
|
7306
|
+
};
|
|
7307
|
+
forEachTable(ctx, ({ tableName, tableFeatures, names, types, softDeleteInfo }) => {
|
|
7308
|
+
const { insertInput, updateInput, tableFilters } = types.inputs;
|
|
7309
|
+
const { singleTableItemOutput, arrTableItemOutput } = types.outputs;
|
|
7296
7310
|
const { typeName, createArrayFieldName, createSingleFieldName, upsertArrayFieldName, upsertSingleFieldName, updateFieldName, updateManyFieldName, updateSingleFieldName, updateCountFieldName, deleteFieldName, deleteSingleFieldName, restoreFieldName, restoreSingleFieldName, deleteCountFieldName } = names;
|
|
7297
|
-
const
|
|
7298
|
-
|
|
7299
|
-
|
|
7300
|
-
|
|
7311
|
+
const insertArrGenerated = tableFeatures.insert ? generateInsert(writeBuild, {
|
|
7312
|
+
tableName,
|
|
7313
|
+
table: schema[tableName],
|
|
7314
|
+
baseType: insertInput,
|
|
7315
|
+
fieldName: createArrayFieldName,
|
|
7316
|
+
typeName,
|
|
7317
|
+
single: false,
|
|
7318
|
+
conflictDoNothing
|
|
7319
|
+
}) : void 0;
|
|
7320
|
+
const insertSingleGenerated = tableFeatures.insert ? generateInsert(writeBuild, {
|
|
7321
|
+
tableName,
|
|
7322
|
+
table: schema[tableName],
|
|
7323
|
+
baseType: insertInput,
|
|
7324
|
+
fieldName: createSingleFieldName,
|
|
7325
|
+
typeName,
|
|
7326
|
+
single: true,
|
|
7327
|
+
conflictDoNothing
|
|
7328
|
+
}) : void 0;
|
|
7301
7329
|
const uniqueSets = tableFeatures.upsert ? uniqueColumnSets(schema[tableName]) : [];
|
|
7302
7330
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
7303
7331
|
table: schema[tableName],
|
|
@@ -7308,10 +7336,46 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7308
7336
|
withTarget: true,
|
|
7309
7337
|
cacheCtx
|
|
7310
7338
|
}) : void 0;
|
|
7311
|
-
const upsertArrGenerated = onConflictInput ? generateUpsert(
|
|
7312
|
-
|
|
7313
|
-
|
|
7314
|
-
|
|
7339
|
+
const upsertArrGenerated = onConflictInput ? generateUpsert(writeBuild, {
|
|
7340
|
+
tableName,
|
|
7341
|
+
table: schema[tableName],
|
|
7342
|
+
baseType: insertInput,
|
|
7343
|
+
onConflictType: onConflictInput,
|
|
7344
|
+
uniqueSets,
|
|
7345
|
+
fieldName: upsertArrayFieldName,
|
|
7346
|
+
typeName,
|
|
7347
|
+
single: false
|
|
7348
|
+
}) : void 0;
|
|
7349
|
+
const upsertSingleGenerated = onConflictInput ? generateUpsert(writeBuild, {
|
|
7350
|
+
tableName,
|
|
7351
|
+
table: schema[tableName],
|
|
7352
|
+
baseType: insertInput,
|
|
7353
|
+
onConflictType: onConflictInput,
|
|
7354
|
+
uniqueSets,
|
|
7355
|
+
fieldName: upsertSingleFieldName,
|
|
7356
|
+
typeName,
|
|
7357
|
+
single: true
|
|
7358
|
+
}) : void 0;
|
|
7359
|
+
const updateGenerated = tableFeatures.update ? generateUpdate(writeBuild, {
|
|
7360
|
+
tableName,
|
|
7361
|
+
table: schema[tableName],
|
|
7362
|
+
setArgs: updateInput,
|
|
7363
|
+
filterArgs: tableFilters,
|
|
7364
|
+
fieldName: updateFieldName,
|
|
7365
|
+
typeName,
|
|
7366
|
+
single: false,
|
|
7367
|
+
requireWhere: tableFeatures.requireWhere
|
|
7368
|
+
}) : void 0;
|
|
7369
|
+
const updateSingleGenerated = tableFeatures.update ? generateUpdate(writeBuild, {
|
|
7370
|
+
tableName,
|
|
7371
|
+
table: schema[tableName],
|
|
7372
|
+
setArgs: updateInput,
|
|
7373
|
+
filterArgs: tableFilters,
|
|
7374
|
+
fieldName: updateSingleFieldName,
|
|
7375
|
+
typeName,
|
|
7376
|
+
single: true,
|
|
7377
|
+
requireWhere: tableFeatures.requireWhere
|
|
7378
|
+
}) : void 0;
|
|
7315
7379
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({
|
|
7316
7380
|
tableName,
|
|
7317
7381
|
typeName,
|
|
@@ -7320,27 +7384,73 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7320
7384
|
tableFilters,
|
|
7321
7385
|
cacheCtx
|
|
7322
7386
|
}) : void 0;
|
|
7323
|
-
const updateManyGenerated = updateManyInput ? adapter.generateUpdateMany(
|
|
7324
|
-
const deleteGenerated = tableFeatures.delete ? generateDelete(db, tableName, schema[tableName], tableFilters, deleteFieldName, typeName, false, tableFeatures.requireWhere, filterCtx, {
|
|
7387
|
+
const updateManyGenerated = updateManyInput ? adapter.generateUpdateMany(writeBuild, {
|
|
7325
7388
|
tableName,
|
|
7326
|
-
|
|
7327
|
-
|
|
7328
|
-
|
|
7329
|
-
|
|
7389
|
+
table: schema[tableName],
|
|
7390
|
+
updateManyInput,
|
|
7391
|
+
fieldName: updateManyFieldName,
|
|
7392
|
+
typeName
|
|
7393
|
+
}) : void 0;
|
|
7394
|
+
const deleteGenerated = tableFeatures.delete ? generateDelete(writeBuild, {
|
|
7395
|
+
tableName,
|
|
7396
|
+
table: schema[tableName],
|
|
7397
|
+
filterArgs: tableFilters,
|
|
7398
|
+
fieldName: deleteFieldName,
|
|
7399
|
+
typeName,
|
|
7400
|
+
single: false,
|
|
7401
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7402
|
+
restore: false,
|
|
7403
|
+
selectionCtx: {
|
|
7404
|
+
tableName,
|
|
7405
|
+
relationMap: namedRelations,
|
|
7406
|
+
tables
|
|
7407
|
+
}
|
|
7408
|
+
}) : void 0;
|
|
7409
|
+
const deleteSingleGenerated = tableFeatures.delete ? generateDelete(writeBuild, {
|
|
7330
7410
|
tableName,
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
|
|
7334
|
-
|
|
7411
|
+
table: schema[tableName],
|
|
7412
|
+
filterArgs: tableFilters,
|
|
7413
|
+
fieldName: deleteSingleFieldName,
|
|
7414
|
+
typeName,
|
|
7415
|
+
single: true,
|
|
7416
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7417
|
+
restore: false,
|
|
7418
|
+
selectionCtx: {
|
|
7419
|
+
tableName,
|
|
7420
|
+
relationMap: namedRelations,
|
|
7421
|
+
tables
|
|
7422
|
+
}
|
|
7423
|
+
}) : void 0;
|
|
7424
|
+
const restoreGenerated = softDeleteInfo ? generateDelete(writeBuild, {
|
|
7335
7425
|
tableName,
|
|
7336
|
-
|
|
7337
|
-
|
|
7338
|
-
|
|
7339
|
-
|
|
7426
|
+
table: schema[tableName],
|
|
7427
|
+
filterArgs: tableFilters,
|
|
7428
|
+
fieldName: restoreFieldName,
|
|
7429
|
+
typeName,
|
|
7430
|
+
single: false,
|
|
7431
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7432
|
+
restore: true,
|
|
7433
|
+
selectionCtx: {
|
|
7434
|
+
tableName,
|
|
7435
|
+
relationMap: namedRelations,
|
|
7436
|
+
tables
|
|
7437
|
+
}
|
|
7438
|
+
}) : void 0;
|
|
7439
|
+
const restoreSingleGenerated = softDeleteInfo ? generateDelete(writeBuild, {
|
|
7340
7440
|
tableName,
|
|
7341
|
-
|
|
7342
|
-
|
|
7343
|
-
|
|
7441
|
+
table: schema[tableName],
|
|
7442
|
+
filterArgs: tableFilters,
|
|
7443
|
+
fieldName: restoreSingleFieldName,
|
|
7444
|
+
typeName,
|
|
7445
|
+
single: true,
|
|
7446
|
+
requireWhere: tableFeatures.requireWhere,
|
|
7447
|
+
restore: true,
|
|
7448
|
+
selectionCtx: {
|
|
7449
|
+
tableName,
|
|
7450
|
+
relationMap: namedRelations,
|
|
7451
|
+
tables
|
|
7452
|
+
}
|
|
7453
|
+
}) : void 0;
|
|
7344
7454
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
7345
7455
|
db,
|
|
7346
7456
|
tableName,
|
|
@@ -7365,160 +7475,126 @@ const createSchemaDataGenerator = (adapter) => {
|
|
|
7365
7475
|
filterCtx,
|
|
7366
7476
|
txCtx: mutationTxCtx
|
|
7367
7477
|
}) : void 0;
|
|
7368
|
-
|
|
7369
|
-
|
|
7370
|
-
|
|
7371
|
-
|
|
7372
|
-
|
|
7373
|
-
|
|
7374
|
-
|
|
7375
|
-
|
|
7376
|
-
|
|
7377
|
-
|
|
7378
|
-
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
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
|
-
single: true,
|
|
7489
|
-
targetArg: "where"
|
|
7490
|
-
}) }
|
|
7491
|
-
});
|
|
7492
|
-
if (updateCountGenerated) defineRootField(mutations, "mutation", updateCountGenerated.name, {
|
|
7493
|
-
type: new GraphQLNonNull(GraphQLInt),
|
|
7494
|
-
args: updateCountGenerated.args,
|
|
7495
|
-
resolve: updateCountGenerated.resolver,
|
|
7496
|
-
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
7497
|
-
});
|
|
7498
|
-
if (deleteCountGenerated) defineRootField(mutations, "mutation", deleteCountGenerated.name, {
|
|
7499
|
-
type: new GraphQLNonNull(GraphQLInt),
|
|
7500
|
-
args: deleteCountGenerated.args,
|
|
7501
|
-
resolve: deleteCountGenerated.resolver,
|
|
7502
|
-
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
7503
|
-
});
|
|
7504
|
-
[
|
|
7505
|
-
...tableFeatures.insert || onConflictInput ? [insertInput] : [],
|
|
7506
|
-
...onConflictInput ? [onConflictInput] : [],
|
|
7507
|
-
...tableFeatures.update ? [updateInput] : [],
|
|
7508
|
-
...updateManyInput ? [updateManyInput] : [],
|
|
7509
|
-
tableFilters,
|
|
7510
|
-
tableOrder
|
|
7511
|
-
].forEach((e) => {
|
|
7512
|
-
inputs[e.name] = e;
|
|
7513
|
-
});
|
|
7514
|
-
outputs[selectSingleOutput.name] = selectSingleOutput;
|
|
7515
|
-
outputs[singleTableItemOutput.name] = singleTableItemOutput;
|
|
7516
|
-
if (aggregateType) outputs[aggregateType.name] = aggregateType;
|
|
7517
|
-
if (groupByType && havingInput) {
|
|
7518
|
-
outputs[groupByType.name] = groupByType;
|
|
7519
|
-
inputs[havingInput.name] = havingInput;
|
|
7520
|
-
}
|
|
7521
|
-
}
|
|
7478
|
+
const hardDeleteMeta = softDeleteInfo?.hardDelete ? { hardDelete: true } : {};
|
|
7479
|
+
return {
|
|
7480
|
+
mutations: [
|
|
7481
|
+
{
|
|
7482
|
+
generated: insertArrGenerated,
|
|
7483
|
+
type: arrTableItemOutput,
|
|
7484
|
+
meta: {
|
|
7485
|
+
operation: "insert",
|
|
7486
|
+
single: false,
|
|
7487
|
+
targetArg: "values"
|
|
7488
|
+
}
|
|
7489
|
+
},
|
|
7490
|
+
{
|
|
7491
|
+
generated: insertSingleGenerated,
|
|
7492
|
+
type: conflictDoNothing ? singleTableItemOutput : new GraphQLNonNull(singleTableItemOutput),
|
|
7493
|
+
meta: {
|
|
7494
|
+
operation: "insert",
|
|
7495
|
+
single: true,
|
|
7496
|
+
targetArg: "values"
|
|
7497
|
+
}
|
|
7498
|
+
},
|
|
7499
|
+
{
|
|
7500
|
+
generated: upsertArrGenerated,
|
|
7501
|
+
type: arrTableItemOutput,
|
|
7502
|
+
meta: {
|
|
7503
|
+
operation: "upsert",
|
|
7504
|
+
single: false,
|
|
7505
|
+
targetArg: "values"
|
|
7506
|
+
}
|
|
7507
|
+
},
|
|
7508
|
+
{
|
|
7509
|
+
generated: upsertSingleGenerated,
|
|
7510
|
+
type: singleTableItemOutput,
|
|
7511
|
+
meta: {
|
|
7512
|
+
operation: "upsert",
|
|
7513
|
+
single: true,
|
|
7514
|
+
targetArg: "values"
|
|
7515
|
+
}
|
|
7516
|
+
},
|
|
7517
|
+
{
|
|
7518
|
+
generated: updateGenerated,
|
|
7519
|
+
type: arrTableItemOutput,
|
|
7520
|
+
meta: {
|
|
7521
|
+
operation: "update",
|
|
7522
|
+
single: false,
|
|
7523
|
+
targetArg: "where"
|
|
7524
|
+
}
|
|
7525
|
+
},
|
|
7526
|
+
{
|
|
7527
|
+
generated: updateManyGenerated,
|
|
7528
|
+
type: new GraphQLNonNull(new GraphQLList(singleTableItemOutput)),
|
|
7529
|
+
meta: {
|
|
7530
|
+
operation: "updateMany",
|
|
7531
|
+
single: false,
|
|
7532
|
+
targetArg: "updates"
|
|
7533
|
+
},
|
|
7534
|
+
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."
|
|
7535
|
+
},
|
|
7536
|
+
{
|
|
7537
|
+
generated: updateSingleGenerated,
|
|
7538
|
+
type: singleTableItemOutput,
|
|
7539
|
+
meta: {
|
|
7540
|
+
operation: "update",
|
|
7541
|
+
single: true,
|
|
7542
|
+
targetArg: "where"
|
|
7543
|
+
}
|
|
7544
|
+
},
|
|
7545
|
+
{
|
|
7546
|
+
generated: deleteGenerated,
|
|
7547
|
+
type: arrTableItemOutput,
|
|
7548
|
+
meta: {
|
|
7549
|
+
operation: "delete",
|
|
7550
|
+
single: false,
|
|
7551
|
+
targetArg: "where",
|
|
7552
|
+
...hardDeleteMeta
|
|
7553
|
+
}
|
|
7554
|
+
},
|
|
7555
|
+
{
|
|
7556
|
+
generated: deleteSingleGenerated,
|
|
7557
|
+
type: singleTableItemOutput,
|
|
7558
|
+
meta: {
|
|
7559
|
+
operation: "delete",
|
|
7560
|
+
single: true,
|
|
7561
|
+
targetArg: "where",
|
|
7562
|
+
...hardDeleteMeta
|
|
7563
|
+
}
|
|
7564
|
+
},
|
|
7565
|
+
{
|
|
7566
|
+
generated: restoreGenerated,
|
|
7567
|
+
type: arrTableItemOutput,
|
|
7568
|
+
meta: {
|
|
7569
|
+
operation: "restore",
|
|
7570
|
+
single: false,
|
|
7571
|
+
targetArg: "where"
|
|
7572
|
+
}
|
|
7573
|
+
},
|
|
7574
|
+
{
|
|
7575
|
+
generated: restoreSingleGenerated,
|
|
7576
|
+
type: singleTableItemOutput,
|
|
7577
|
+
meta: {
|
|
7578
|
+
operation: "restore",
|
|
7579
|
+
single: true,
|
|
7580
|
+
targetArg: "where"
|
|
7581
|
+
}
|
|
7582
|
+
},
|
|
7583
|
+
{
|
|
7584
|
+
generated: updateCountGenerated,
|
|
7585
|
+
type: new GraphQLNonNull(GraphQLInt),
|
|
7586
|
+
description: "How many rows the update touched. The rows themselves are not read back, which is the point of this mutation."
|
|
7587
|
+
},
|
|
7588
|
+
{
|
|
7589
|
+
generated: deleteCountGenerated,
|
|
7590
|
+
type: new GraphQLNonNull(GraphQLInt),
|
|
7591
|
+
description: "How many rows the delete removed. The rows themselves are not read back, which is the point of this mutation."
|
|
7592
|
+
}
|
|
7593
|
+
],
|
|
7594
|
+
onConflictInput,
|
|
7595
|
+
updateManyInput
|
|
7596
|
+
};
|
|
7597
|
+
});
|
|
7522
7598
|
return finalizeBuild(ctx);
|
|
7523
7599
|
};
|
|
7524
7600
|
};
|
|
@@ -7560,7 +7636,9 @@ const runUpdateManyBatch = ({ executor, entries, table, returning, nested, table
|
|
|
7560
7636
|
* @param runBatch how the entries execute; defaults to {@link runUpdateManyBatch}
|
|
7561
7637
|
*/
|
|
7562
7638
|
const createUpdateManyGenerator = (primaryKeyPropNames, runBatch = runUpdateManyBatch) => {
|
|
7563
|
-
return (
|
|
7639
|
+
return (build, opts) => {
|
|
7640
|
+
const { db, tables, relationMap, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName } = build;
|
|
7641
|
+
const { tableName, table, updateManyInput, fieldName, typeName } = opts;
|
|
7564
7642
|
const queryArgs = { updates: { type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(updateManyInput))) } };
|
|
7565
7643
|
const pkNames = primaryKeyPropNames(table);
|
|
7566
7644
|
return writeResolver({
|
|
@@ -7603,11 +7681,12 @@ const createUpdateManyGenerator = (primaryKeyPropNames, runBatch = runUpdateMany
|
|
|
7603
7681
|
};
|
|
7604
7682
|
});
|
|
7605
7683
|
const anyNested = entries.some((entry) => entry.ops);
|
|
7684
|
+
const returning = anyNested ? nested.withJoinColumns(tableName, mergedOps(entries.map((entry) => ({ ops: entry.ops ?? {} }))), { ...columns }, table) : columns;
|
|
7606
7685
|
const perEntry = await runBatch({
|
|
7607
7686
|
executor,
|
|
7608
7687
|
entries,
|
|
7609
7688
|
table,
|
|
7610
|
-
returning
|
|
7689
|
+
returning,
|
|
7611
7690
|
anyNested,
|
|
7612
7691
|
nested,
|
|
7613
7692
|
tableName,
|