SQL Server: parameter values inlined as DECLARE/SET statements (so SQL Server's per-save variable naming for batched saves works), with an EXEC line that consumes the variables.
Comma-joined @CodeName=@x_<suffix>, ... for the EXEC line.
DECLARE @x_<suffix> type, @y_<suffix> type — empty if no params. Suffix: GenericDatabaseProvider.allocateSaveCallSuffix.
SET @x_<suffix> = N'value'\nSET @y_<suffix> = 1 — empty if no params.
Back-compat inline single-line @CodeName=N'value', ... form.
PostgreSQL positional-arg shape: typed $N placeholders bound via
values at execution time.
p_name => $1, p_other => $2 for the call site.
Parameter values bound in $N order.
PostgreSQL JSON-arg shape for wide entities — single $1::jsonb arg
with field values JSON-encoded. Used when the typed-arg shape would
exceed ProcedureParamLimit.
Always p_data => $1::jsonb.
Single-element [jsonString].
Dialect-specific binding shape produced by
RenderSaveCallBinding. Treated as opaque byGenerateSaveSQL— the same provider'sWrapSaveCallForResult/WrapSaveCallWithRecordChangepattern-match the variant they produced.Adding a new dialect (e.g. MySQL) adds a new variant here — touches this file once, no provider-side changes elsewhere.