pub struct CallPlan {Show 13 fields
pub function: QualifiedIdentifier,
pub params: CallParams,
pub returns_scalar: bool,
pub return_type: Option<String>,
pub returns_set: bool,
pub returns_void: bool,
pub returns_composite: bool,
pub volatility: String,
pub param_types: Vec<(String, String)>,
pub media_type: Option<String>,
pub media_base_type: Option<String>,
pub output_columns: Vec<(String, String)>,
pub variadic_params: Vec<String>,
}Expand description
A plan for calling a stored function.
Fields§
§function: QualifiedIdentifierFunction identifier
params: CallParamsCall parameters
returns_scalar: boolWhether to return a scalar result
return_type: Option<String>The declared return type, as PostgreSQL spells it.
Used to decide whether this process can decode the result or whether the database should render it, exactly as for a table’s columns.
returns_set: boolWhether the function is set-returning
returns_void: boolWhether the function returns nothing at all.
A void function has no result to report, which is 204 rather than a
body of null – and RetType::Void has no type name, so asking for
one would never find it.
returns_composite: boolWhether the return type is composite (row type or record): its
columns are real output columns, never the function-name wrapper.
volatility: StringFunction volatility (for transaction handling)
param_types: Vec<(String, String)>Declared parameter types, in the routine’s own order, as
(name, pg_type).
Arguments arrive from the URL or a JSON body as strings. Binding them
as text leaves PostgreSQL unable to resolve any signature that isn’t
text – add_them(a => text, b => text) does not exist – so each one
is cast to its declared type at call time.
The type is the one an argument can be cast to without losing part of
itself: a char(4) parameter is stored as bare character, whose
length is one, and a parameter’s length is not enforced anyway.
media_type: Option<String>The media type the function’s value already is, where its return type is a domain that says so.
The result is that media type rather than something to serialise as JSON, so it is returned verbatim – but only where the client asked for it, since a function whose value is a PNG is still a value a client may want as JSON.
media_base_type: Option<String>The type that domain is a domain over – what says whether the value is bytes or text.
output_columns: Vec<(String, String)>The columns the result has, where the function declares its own.
RETURNS TABLE(a text, b colour) has no table to read the result’s
shape from, so SELECT * is all that can be asked for – and a column
of a type this process cannot decode comes back null. Knowing the
columns is what lets the database render those instead.
variadic_params: Vec<String>The names of the parameters declared VARIADIC.
Named notation spells one VARIADIC v := ...; v => ... finds no
function at all, because the array is the whole of the variadic tail
rather than one value of it.
Implementations§
Source§impl CallPlan
impl CallPlan
Sourcepub fn from_request(request: &ApiRequest, routine: &Routine) -> Result<Self>
pub fn from_request(request: &ApiRequest, routine: &Routine) -> Result<Self>
Create a call plan from an API request.
Sourcepub fn has_params(&self) -> bool
pub fn has_params(&self) -> bool
Check if this call has parameters.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for CallPlan
impl<'de> Deserialize<'de> for CallPlan
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>,
Auto Trait Implementations§
impl !Freeze for CallPlan
impl RefUnwindSafe for CallPlan
impl Send for CallPlan
impl Sync for CallPlan
impl Unpin for CallPlan
impl UnsafeUnpin for CallPlan
impl UnwindSafe for CallPlan
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<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