@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 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
- addReadFields,
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, addReadFields, finalizeBuild } = createSchemaBuilder({
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, suffixes, typeNameMapper } = options;
6849
+ const { prefixes } = options;
6784
6850
  const ctx = prepareBuild(db, schema, relations, options);
6785
- const { featureOf, anyTable, filterCtx, policies, softDeleteOf, cacheCtx, mutationTxCtx, gqlSchemaTypes, mutations, inputs, outputs } = ctx;
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
- for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
6800
- const tableFeatures = featureOf(tableName);
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 generatedMutations = [
6861
- [insertArrGenerated, {
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
- args: generated.args,
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
- ...tableFeatures.insert || onConflictInput ? [insertInput] : [],
6942
- ...onConflictInput ? [onConflictInput] : [],
6943
- ...tableFeatures.update ? [updateInput] : [],
6944
- ...updateManyInput ? [updateManyInput] : [],
6945
- tableFilters,
6946
- tableOrder
6947
- ].forEach((e) => {
6948
- inputs[e.name] = e;
6949
- });
6950
- outputs[selectSingleOutput.name] = selectSingleOutput;
6951
- if (aggregateType) outputs[aggregateType.name] = aggregateType;
6952
- if (groupByType && havingInput) {
6953
- outputs[groupByType.name] = groupByType;
6954
- inputs[havingInput.name] = havingInput;
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
- const generateInsertArray = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies, resolveName) => {
6967
- const queryArgs = { values: { type: new graphql.GraphQLNonNull(new graphql.GraphQLList(new graphql.GraphQLNonNull(baseType))) } };
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: false,
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
- if (!args.values.length) throw drizzleError("No values were provided!", { code: "DRIZZLE_NO_VALUES" });
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) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
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) : args.values, table), contextColumns, context);
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
- const enriched = await withEagerRelations(executor, tableName, result, pkNames, withParams, hasRelations);
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 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName) => {
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 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName) => {
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 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies, restore = false, resolveName) => {
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
- generateInsertArray,
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 { generateInsertArray, generateInsertSingle, generateUpsert, generateUpdate, generateDelete } = buildWriteResolvers(primaryKeyPropNames);
7309
- const { prepareBuild, addReadFields, finalizeBuild } = createSchemaBuilder(adapter);
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, suffixes, conflictDoNothing, typeNameMapper, limits } = options;
7316
+ const { prefixes, conflictDoNothing, typeNameMapper, limits } = options;
7312
7317
  const ctx = prepareBuild(db, schema, relations, options);
7313
- const { tables, featureOf, eagerRelations, filterCtx, policies, softDeleteOf, namedRelations, cacheCtx, nestedRuntime, mutationTxCtx, gqlSchemaTypes, mutations, inputs, outputs } = ctx;
7314
- for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
7315
- const tableFeatures = featureOf(tableName);
7316
- const drizzleMeta = tableFieldExtensions(tableName, primaryKeyPropNames(schema[tableName]));
7317
- const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
7318
- const { selectSingleOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
7319
- const names = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
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 softDeleteInfo = softDeleteOf?.(tableName);
7322
- const { aggregateType, groupByType, havingInput } = addReadFields(ctx, tableName, names, tableTypes, drizzleMeta);
7323
- const insertArrGenerated = tableFeatures.insert ? generateInsertArray(db, tableName, schema[tableName], tables, eagerRelations, insertInput, createArrayFieldName, typeName, typeNameMapper, conflictDoNothing, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
7324
- const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(db, tableName, schema[tableName], tables, eagerRelations, insertInput, createSingleFieldName, typeName, typeNameMapper, conflictDoNothing, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
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(db, tableName, schema[tableName], tables, eagerRelations, insertInput, onConflictInput, uniqueSets, upsertArrayFieldName, typeName, false, typeNameMapper, filterCtx, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
7336
- const upsertSingleGenerated = onConflictInput ? generateUpsert(db, tableName, schema[tableName], tables, eagerRelations, insertInput, onConflictInput, uniqueSets, upsertSingleFieldName, typeName, true, typeNameMapper, filterCtx, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
7337
- const updateGenerated = tableFeatures.update ? generateUpdate(db, tableName, schema[tableName], tables, eagerRelations, updateInput, tableFilters, updateFieldName, typeName, false, tableFeatures.requireWhere, typeNameMapper, filterCtx, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
7338
- const updateSingleGenerated = tableFeatures.update ? generateUpdate(db, tableName, schema[tableName], tables, eagerRelations, updateInput, tableFilters, updateSingleFieldName, typeName, true, tableFeatures.requireWhere, typeNameMapper, filterCtx, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
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(db, tableName, schema[tableName], tables, eagerRelations, updateManyInput, updateManyFieldName, typeName, typeNameMapper, filterCtx, mutationTxCtx, nestedRuntime, limits, policies, cacheCtx.typeName) : void 0;
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
- relationMap: namedRelations,
7351
- tables
7352
- }, mutationTxCtx, policies, false, cacheCtx.typeName) : void 0;
7353
- const deleteSingleGenerated = tableFeatures.delete ? generateDelete(db, tableName, schema[tableName], tableFilters, deleteSingleFieldName, typeName, true, tableFeatures.requireWhere, filterCtx, {
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
- relationMap: namedRelations,
7356
- tables
7357
- }, mutationTxCtx, policies, false, cacheCtx.typeName) : void 0;
7358
- const restoreGenerated = softDeleteInfo ? generateDelete(db, tableName, schema[tableName], tableFilters, restoreFieldName, typeName, false, tableFeatures.requireWhere, filterCtx, {
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
- relationMap: namedRelations,
7361
- tables
7362
- }, mutationTxCtx, policies, true, cacheCtx.typeName) : void 0;
7363
- const restoreSingleGenerated = softDeleteInfo ? generateDelete(db, tableName, schema[tableName], tableFilters, restoreSingleFieldName, typeName, true, tableFeatures.requireWhere, filterCtx, {
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
- relationMap: namedRelations,
7366
- tables
7367
- }, mutationTxCtx, policies, true, cacheCtx.typeName) : void 0;
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
- if (insertArrGenerated) defineRootField(mutations, "mutation", insertArrGenerated.name, {
7393
- type: arrTableItemOutput,
7394
- args: insertArrGenerated.args,
7395
- resolve: insertArrGenerated.resolver,
7396
- extensions: { drizzle: drizzleMeta({
7397
- kind: "mutation",
7398
- operation: "insert",
7399
- single: false,
7400
- targetArg: "values"
7401
- }) }
7402
- });
7403
- if (insertSingleGenerated) defineRootField(mutations, "mutation", insertSingleGenerated.name, {
7404
- type: conflictDoNothing ? singleTableItemOutput : new graphql.GraphQLNonNull(singleTableItemOutput),
7405
- args: insertSingleGenerated.args,
7406
- resolve: insertSingleGenerated.resolver,
7407
- extensions: { drizzle: drizzleMeta({
7408
- kind: "mutation",
7409
- operation: "insert",
7410
- single: true,
7411
- targetArg: "values"
7412
- }) }
7413
- });
7414
- if (upsertArrGenerated) defineRootField(mutations, "mutation", upsertArrGenerated.name, {
7415
- type: arrTableItemOutput,
7416
- args: upsertArrGenerated.args,
7417
- resolve: upsertArrGenerated.resolver,
7418
- extensions: { drizzle: drizzleMeta({
7419
- kind: "mutation",
7420
- operation: "upsert",
7421
- single: false,
7422
- targetArg: "values"
7423
- }) }
7424
- });
7425
- if (upsertSingleGenerated) defineRootField(mutations, "mutation", upsertSingleGenerated.name, {
7426
- type: singleTableItemOutput,
7427
- args: upsertSingleGenerated.args,
7428
- resolve: upsertSingleGenerated.resolver,
7429
- extensions: { drizzle: drizzleMeta({
7430
- kind: "mutation",
7431
- operation: "upsert",
7432
- single: true,
7433
- targetArg: "values"
7434
- }) }
7435
- });
7436
- if (updateGenerated) defineRootField(mutations, "mutation", updateGenerated.name, {
7437
- type: arrTableItemOutput,
7438
- args: updateGenerated.args,
7439
- resolve: updateGenerated.resolver,
7440
- extensions: { drizzle: drizzleMeta({
7441
- kind: "mutation",
7442
- operation: "update",
7443
- single: false,
7444
- targetArg: "where"
7445
- }) }
7446
- });
7447
- if (updateManyGenerated) defineRootField(mutations, "mutation", updateManyGenerated.name, {
7448
- type: new graphql.GraphQLNonNull(new graphql.GraphQLList(singleTableItemOutput)),
7449
- args: updateManyGenerated.args,
7450
- resolve: updateManyGenerated.resolver,
7451
- extensions: { drizzle: drizzleMeta({
7452
- kind: "mutation",
7453
- operation: "updateMany",
7454
- single: false,
7455
- targetArg: "updates"
7456
- }) },
7457
- 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."
7458
- });
7459
- if (updateSingleGenerated) defineRootField(mutations, "mutation", updateSingleGenerated.name, {
7460
- type: singleTableItemOutput,
7461
- args: updateSingleGenerated.args,
7462
- resolve: updateSingleGenerated.resolver,
7463
- extensions: { drizzle: drizzleMeta({
7464
- kind: "mutation",
7465
- operation: "update",
7466
- single: true,
7467
- targetArg: "where"
7468
- }) }
7469
- });
7470
- if (deleteGenerated) defineRootField(mutations, "mutation", deleteGenerated.name, {
7471
- type: arrTableItemOutput,
7472
- args: deleteGenerated.args,
7473
- resolve: deleteGenerated.resolver,
7474
- extensions: { drizzle: drizzleMeta({
7475
- kind: "mutation",
7476
- operation: "delete",
7477
- single: false,
7478
- targetArg: "where",
7479
- ...softDeleteInfo?.hardDelete ? { hardDelete: true } : {}
7480
- }) }
7481
- });
7482
- if (deleteSingleGenerated) defineRootField(mutations, "mutation", deleteSingleGenerated.name, {
7483
- type: singleTableItemOutput,
7484
- args: deleteSingleGenerated.args,
7485
- resolve: deleteSingleGenerated.resolver,
7486
- extensions: { drizzle: drizzleMeta({
7487
- kind: "mutation",
7488
- operation: "delete",
7489
- single: true,
7490
- targetArg: "where",
7491
- ...softDeleteInfo?.hardDelete ? { hardDelete: true } : {}
7492
- }) }
7493
- });
7494
- if (restoreGenerated) defineRootField(mutations, "mutation", restoreGenerated.name, {
7495
- type: arrTableItemOutput,
7496
- args: restoreGenerated.args,
7497
- resolve: restoreGenerated.resolver,
7498
- extensions: { drizzle: drizzleMeta({
7499
- kind: "mutation",
7500
- operation: "restore",
7501
- single: false,
7502
- targetArg: "where"
7503
- }) }
7504
- });
7505
- if (restoreSingleGenerated) defineRootField(mutations, "mutation", restoreSingleGenerated.name, {
7506
- type: singleTableItemOutput,
7507
- args: restoreSingleGenerated.args,
7508
- resolve: restoreSingleGenerated.resolver,
7509
- extensions: { drizzle: drizzleMeta({
7510
- kind: "mutation",
7511
- operation: "restore",
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 (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies, resolveName) => {
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: anyNested ? nested.withJoinColumns(tableName, mergedOps(entries.map((entry) => ({ ops: entry.ops ?? {} }))), { ...columns }, table) : columns,
7713
+ returning,
7635
7714
  anyNested,
7636
7715
  nested,
7637
7716
  tableName,