pub struct IntermediateMutation {Show 22 fields
pub name: String,
pub return_type: String,
pub returns_list: bool,
pub nullable: bool,
pub arguments: Vec<IntermediateArgument>,
pub description: Option<String>,
pub sql_source: Option<String>,
pub operation: Option<String>,
pub deprecated: Option<IntermediateDeprecation>,
pub inject: IndexMap<String, String>,
pub exclude_inject_defaults: Vec<String>,
pub requires_role: Option<String>,
pub requires_actor: Vec<String>,
pub invalidates_fact_tables: Vec<String>,
pub invalidates_views: Vec<String>,
pub changelog: bool,
pub input_style: InputStyle,
pub changelog_pre_image: bool,
pub cascade: bool,
pub success_fields: Vec<IntermediateField>,
pub cascade_source: CascadeSource,
pub rest: Option<IntermediateRest>,
}Expand description
Mutation definition in intermediate format
Fields§
§name: StringMutation name (e.g., “createUser”)
return_type: StringReturn type name (e.g., “User”)
returns_list: boolReturns a list?
nullable: boolResult is nullable?
arguments: Vec<IntermediateArgument>Mutation arguments
description: Option<String>Mutation description (from docstring)
sql_source: Option<String>SQL source (function name)
operation: Option<String>Operation type (CREATE, UPDATE, DELETE, CUSTOM)
deprecated: Option<IntermediateDeprecation>Deprecation info (from @deprecated directive)
inject: IndexMap<String, String>Server-injected parameters: SQL parameter name → source expression (e.g. "jwt:org_id").
Not exposed as GraphQL arguments.
Wire key is inject_params, matching the compiled schema. The two names were
unified because the split is what let three SDKs emit a key that bound to
nothing (#806); see the inject_params_serde module for the full reasoning.
exclude_inject_defaults: Vec<String>Project [inject_defaults] keys this operation opts out of (#1383).
Reviewable next to the operation it applies to: a catalogue query declares here
that the tenant default does not apply to it. Each key must name a default that
would otherwise apply, and must not also be declared in inject_params.
requires_role: Option<String>Role required to execute this mutation and see it in introspection.
Mirrors IntermediateQuery::requires_role. Enforced at runtime with the same
enumeration-hiding “not found” response as the query gate — a principal lacking
the role cannot distinguish a forbidden mutation from a nonexistent one.
requires_actor: Vec<String>Actor classes permitted to execute this mutation — an allow-list (#966).
Mirrors IntermediateQuery::requires_actor.
invalidates_fact_tables: Vec<String>Fact tables whose version counter should be bumped after this mutation succeeds.
Used for correct invalidation of analytic/aggregate cache entries.
invalidates_views: Vec<String>View names whose cached query results should be invalidated after this mutation succeeds.
changelog: boolWhether this mutation writes a Change-Spine change-log row (default true).
Set false (via the authoring SDK’s @fraiseql.mutation(changelog=False))
to opt a single mutation out of the in-transaction change-log outbox while
the rest of the schema keeps logging. Defaults to true so a schema
authored before this field existed keeps logging.
input_style: InputStyleHow the GraphQL input argument is passed to the SQL function:
"flatten" (positional columns, the default) or "jsonb" (the whole
input as one jsonb arg). See InputStyle.
Orthogonal to operation: set
"jsonb" (via the authoring SDK’s
@fraiseql.mutation(input_style="jsonb")) so a backend using the
single-jsonb-wrapper convention can register the real DML verb and
still receive the whole input as one argument. Defaults to "flatten",
byte-identical to a schema authored before this field existed.
changelog_pre_image: boolWhether a successful, state-changing run of this mutation also records the
changed entity’s pre-image (before-state) into the Change-Spine
object_data_before column, sourced from an optional entity_before on the
mutation’s app.mutation_response.
Set true (via the authoring SDK’s
@fraiseql.mutation(changelog_pre_image=True) or TOML
changelog_pre_image = true) to opt an audit-sensitive mutation into an
inline Debezium-style {before, after}. Defaults to false,
byte-identical to a schema authored before this field existed.
cascade: boolWhether this mutation exposes the typed graphql-cascade cascade field
on its success payload.
Set true via the authoring SDK’s @fraiseql.type(crud=True, cascade=True) / @fraiseql.mutation(cascade=True), or TOML
cascade = true. Defaults to false, byte-identical to a schema
authored before this field existed. Before this field, the compiler
silently dropped the SDK flag.
success_fields: Vec<IntermediateField>Typed facts about the operation, served on the cascade payload (#1397): the
function returns them in its response row’s result jsonb column. Only on a cascade
mutation, only leaf types (a scalar or an enum).
cascade_source: CascadeSourceWhere the cascade comes from (#1391): "function" (the default) or "pg_tviews",
which also merges the TVIEW rows pg_tviews reports the transaction changed. Only on a
cascade mutation.
rest: Option<IntermediateRest>REST route override for this mutation. See IntermediateRest.
Trait Implementations§
Source§impl Clone for IntermediateMutation
impl Clone for IntermediateMutation
Source§impl Debug for IntermediateMutation
impl Debug for IntermediateMutation
Source§impl Default for IntermediateMutation
impl Default for IntermediateMutation
Source§impl<'de> Deserialize<'de> for IntermediateMutation
impl<'de> Deserialize<'de> for IntermediateMutation
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for IntermediateMutation
Source§impl PartialEq for IntermediateMutation
impl PartialEq for IntermediateMutation
Source§impl Serialize for IntermediateMutation
impl Serialize for IntermediateMutation
impl StructuralPartialEq for IntermediateMutation
Auto Trait Implementations§
impl Freeze for IntermediateMutation
impl RefUnwindSafe for IntermediateMutation
impl Send for IntermediateMutation
impl Sync for IntermediateMutation
impl Unpin for IntermediateMutation
impl UnsafeUnpin for IntermediateMutation
impl UnwindSafe for IntermediateMutation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Send for Twhere
T: ?Sized,
impl<T> Sync for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.