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