pub struct MutationDefinition {Show 13 fields
pub name: String,
pub return_type: String,
pub arguments: Vec<ArgumentDefinition>,
pub description: Option<String>,
pub operation: MutationOperation,
pub deprecation: Option<DeprecationInfo>,
pub sql_source: Option<String>,
pub inject_params: IndexMap<String, InjectedParamSource>,
pub invalidates_fact_tables: Vec<String>,
pub invalidates_views: Vec<String>,
pub rest_path: Option<String>,
pub rest_method: Option<String>,
pub upsert_function: Option<String>,
}Expand description
A mutation definition compiled from @fraiseql.mutation.
Mutations are declarative bindings to database functions. They describe which function to call, not arbitrary logic.
§Example
use fraiseql_core::schema::{MutationDefinition, MutationOperation};
let mutation = MutationDefinition::new("createUser", "User");Fields§
§name: StringMutation name (e.g., “createUser”).
return_type: StringReturn type name.
arguments: Vec<ArgumentDefinition>Input arguments.
description: Option<String>Description.
operation: MutationOperationSQL operation type.
deprecation: Option<DeprecationInfo>Deprecation information (from @deprecated directive). When set, this mutation is marked as deprecated in the schema.
sql_source: Option<String>PostgreSQL function name to call for this mutation.
When set, the runtime calls SELECT * FROM {sql_source}($1, $2, ...) with the
mutation arguments in ArgumentDefinition order, and parses the result as an
app.mutation_response composite row.
inject_params: IndexMap<String, InjectedParamSource>Server-side parameters injected from JWT claims at runtime.
Keys are SQL parameter names. Values describe where to source the runtime value. These params are NOT exposed as GraphQL arguments.
For mutations: injected params are appended to the positional function call args after client-provided arguments, in map insertion order. The SQL function signature must declare the injected parameters last.
Works on PostgreSQL, SQL Server, and MySQL. SQLite has no stored-routine mechanism and will return an error if inject is configured on a mutation.
invalidates_fact_tables: Vec<String>Fact tables whose version counter should be bumped after this mutation succeeds.
When the mutation PostgreSQL function returns successfully, the runtime calls
SELECT bump_tf_version($1) for each listed table, incrementing the version used
in fact-table cache keys. This ensures that analytic/aggregate queries backed by
FactTableVersionStrategy::VersionTable are automatically invalidated.
Each entry must be a valid SQL identifier validated at compile time.
§Example
@fraiseql.mutation(
sql_source="fn_create_order",
invalidates_fact_tables=["tf_sales", "tf_order_count"],
)
def create_order(amount: Decimal) -> Order: ...invalidates_views: Vec<String>View names whose cached query results should be invalidated after this mutation succeeds.
When the CachedDatabaseAdapter is active, the runtime calls
invalidate_views() with these names, clearing all cache entries that
read from the specified views.
If empty and the mutation return type has a sql_source, the runtime
infers the primary view from the return type.
Each entry must be a valid SQL identifier validated at compile time.
rest_path: Option<String>Custom REST path override (e.g., "/users/{id}").
rest_method: Option<String>REST HTTP method override (e.g., "POST", "PUT", "PATCH").
upsert_function: Option<String>PostgreSQL upsert function name for PUT semantics (insert-or-update).
Implementations§
Source§impl MutationDefinition
impl MutationDefinition
Sourcepub fn new(name: impl Into<String>, return_type: impl Into<String>) -> Self
pub fn new(name: impl Into<String>, return_type: impl Into<String>) -> Self
Create a new mutation definition.
Sourcepub fn deprecated(self, reason: Option<String>) -> Self
pub fn deprecated(self, reason: Option<String>) -> Self
Mark this mutation as deprecated.
§Example
use fraiseql_core::schema::MutationDefinition;
let mutation = MutationDefinition::new("oldCreateUser", "User")
.deprecated(Some("Use 'createUser' instead".to_string()));
assert!(mutation.is_deprecated());Sourcepub const fn is_deprecated(&self) -> bool
pub const fn is_deprecated(&self) -> bool
Check if this mutation is deprecated.
Sourcepub fn deprecation_reason(&self) -> Option<&str>
pub fn deprecation_reason(&self) -> Option<&str>
Get the deprecation reason if deprecated.
Trait Implementations§
Source§impl Clone for MutationDefinition
impl Clone for MutationDefinition
Source§fn clone(&self) -> MutationDefinition
fn clone(&self) -> MutationDefinition
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MutationDefinition
impl Debug for MutationDefinition
Source§impl<'de> Deserialize<'de> for MutationDefinition
impl<'de> Deserialize<'de> for MutationDefinition
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>,
Source§impl PartialEq for MutationDefinition
impl PartialEq for MutationDefinition
Source§impl Serialize for MutationDefinition
impl Serialize for MutationDefinition
impl StructuralPartialEq for MutationDefinition
Auto Trait Implementations§
impl Freeze for MutationDefinition
impl RefUnwindSafe for MutationDefinition
impl Send for MutationDefinition
impl Sync for MutationDefinition
impl Unpin for MutationDefinition
impl UnsafeUnpin for MutationDefinition
impl UnwindSafe for MutationDefinition
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,
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 more