Struct FcInfo

Source
pub struct FcInfo<'fcx>(/* private fields */);

Implementations§

Source§

impl<'fcx> FcInfo<'fcx>

Source

pub unsafe fn from_ptr(fcinfo: FunctionCallInfo) -> FcInfo<'fcx>

Constructor, used to wrap a raw FunctionCallInfo provided by Postgres.

§Safety

This function is unsafe as we cannot ensure the fcinfo argument is a valid pg_sys::FunctionCallInfo pointer. This is your responsibility.

Source

pub fn raw_args(&self) -> &[NullableDatum]

Retrieve the arguments to this function call as a slice of pgrx_pg_sys::NullableDatum

Source

pub unsafe fn as_mut_ptr(&self) -> FunctionCallInfo

Retrieves the internal pg_sys::FunctionCallInfo wrapped by this type. A FunctionCallInfo is a mutable pointer to a FunctionCallInfoBaseData already, and so that type is sufficient.

Source

pub unsafe fn set_return_is_null(&mut self) -> &mut bool

Accessor for the “is null” flag

§Safety

If this flag is set to “false”, then the resulting return must be a valid Datum for the function call’s result type.

Source

pub fn return_null(&mut self) -> Datum<'fcx>

Modifies the function call’s return to be null

Returns a null-pointer Datum for use as the calling function’s return value.

If this flag is set, regardless of what your function actually returns, Postgres will presume it is null and discard it. This means that, if you call this method and then return a value anyway, your extension will leak memory. Please ensure this method is only called for functions which, very definitely, return null.

§Examples
use pgrx::callconv::FcInfo;
use pgrx::datum::Datum;
use pgrx::prelude::*;
fn foo<'a>(mut fcinfo: FcInfo<'a>) -> Datum<'a> {
    unsafe { fcinfo.return_null() }
}
Source

pub unsafe fn return_raw_datum(&mut self, datum: Datum) -> Datum<'fcx>

Set the return to be non-null and assign a raw Datum the correct lifetime.

§Safety
  • If the function call expects a by-reference return, and the pg_sys::Datum does not point to a valid object of the correct type, this is undefined behavior.
  • If the function call expects a by-reference return, and the pg_sys::Datum points to an object that will not last for the caller’s lifetime, this is undefined behavior.
  • If the function call expects a by-value return, and the pg_sys::Datum is not a valid instance of that type when interpreted as such, this is undefined behavior.
  • If the return must be the SQL null, then calling this function is undefined behavior.

Functionally, this can be thought of as a convenience for a mem::transmute from pg_sys::Datum to pgrx::datum::Datum<'fcx>. This gives it similar constraints.

Source

pub fn get_collation(&self) -> Option<Oid>

Get the collation the function call should use. If the OID is 0 (invalid or no-type) this method will return None, otherwise it will return Some(oid).

Source

pub fn get_arg_type(&self, num: usize) -> Option<Oid>

Retrieve the type (as an Oid) of argument number num. In other words, the type of self.raw_args()[num]

Source

pub fn get_or_init_func_extra<DefaultValue: FnOnce() -> *mut FuncCallContext>( &self, default: DefaultValue, ) -> NonNull<FuncCallContext>

Retrieve the .flinfo.fn_extra pointer (as a PgBox’d type) from pg_sys::FunctionCallInfo. If it was not already initialized, initialize it with default

Source

pub fn srf_is_initialized(&self) -> bool

Source

pub unsafe fn init_multi_func_call(&mut self) -> &'fcx mut FuncCallContext

Thin wrapper around pg_sys::init_MultiFuncCall, made necessary because this structure’s FunctionCallInfo is a private field.

This should initialize self.0.flinfo.fn_extra

Source

pub unsafe fn srf_return_next(&mut self)

Safety: Assumes self.0.flinfo.fn_extra is non-null i.e. FcInfo::srf_is_initialized() would be true.

Source

pub unsafe fn srf_return_done(&mut self)

Safety: Assumes self.0.flinfo.fn_extra is non-null i.e. FcInfo::srf_is_initialized() would be true.

Source

pub unsafe fn get_result_info(&self) -> ReturnSetInfoWrapper<'fcx>

§Safety

Do not corrupt the pg_sys::ReturnSetInfo struct’s data.

Source

pub fn args<'arg>(&'arg self) -> Args<'arg, 'fcx>

Trait Implementations§

Source§

impl<'fcx> Clone for FcInfo<'fcx>

Source§

fn clone(&self) -> FcInfo<'fcx>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<'fcx> Freeze for FcInfo<'fcx>

§

impl<'fcx> RefUnwindSafe for FcInfo<'fcx>

§

impl<'fcx> !Send for FcInfo<'fcx>

§

impl<'fcx> !Sync for FcInfo<'fcx>

§

impl<'fcx> Unpin for FcInfo<'fcx>

§

impl<'fcx> !UnwindSafe for FcInfo<'fcx>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithTypeIds for T
where T: ?Sized,

Source§

const ITEM_ID: Lazy<TypeId> = const ITEM_ID: Lazy<TypeId> = Lazy::new(|| nonstatic_typeid::<T>());

Source§

const OPTION_ID: Lazy<Option<TypeId>> = const OPTION_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const VEC_ID: Lazy<Option<TypeId>> = const VEC_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const VEC_OPTION_ID: Lazy<Option<TypeId>> = const VEC_OPTION_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const OPTION_VEC_ID: Lazy<Option<TypeId>> = const OPTION_VEC_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const OPTION_VEC_OPTION_ID: Lazy<Option<TypeId>> = const OPTION_VEC_OPTION_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const ARRAY_ID: Lazy<Option<TypeId>> = const ARRAY_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const OPTION_ARRAY_ID: Lazy<Option<TypeId>> = const OPTION_ARRAY_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const VARIADICARRAY_ID: Lazy<Option<TypeId>> = const VARIADICARRAY_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const OPTION_VARIADICARRAY_ID: Lazy<Option<TypeId>> = const OPTION_VARIADICARRAY_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const VARLENA_ID: Lazy<Option<TypeId>> = const VARLENA_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

const OPTION_VARLENA_ID: Lazy<Option<TypeId>> = const OPTION_VARLENA_ID: Lazy<Option<TypeId>> = Lazy::new(|| None);

Source§

fn register_with_refs(map: &mut HashSet<RustSqlMapping>, single_sql: String)

Source§

fn register_sized_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String, )

Source§

fn register_sized(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)

Source§

fn register_varlena_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String, )

Source§

fn register_varlena(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)

Source§

fn register_array_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String, )

Source§

fn register_array(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)

Source§

fn register(set: &mut HashSet<RustSqlMapping>, single_sql: String)