Struct pgrx::stringinfo::StringInfo

source ·
pub struct StringInfo<AllocatedBy: WhoAllocated = AllocatedByRust> { /* private fields */ }
Expand description

StringInfoData holds information about an extensible string that is allocated by Postgres’ memory system, but generally follows Rust’s drop semantics

Implementations§

source§

impl StringInfo<AllocatedByRust>

source

pub fn new() -> Self

Construct a new StringInfo of its default size, allocated in CurrentMemoryContext

Note that Postgres can only represent up to 1 gigabyte of data in a StringInfo

source

pub fn with_capacity(len: i32) -> Self

Construct a new StringInfo, allocated by Postgres in CurrentMemoryContext, ensuring it has a capacity of the specified len.

Note that Postgres can only represent up to 1 gigabyte of data in a StringInfo

source§

impl StringInfo<AllocatedByPostgres>

source

pub unsafe fn from_pg(sid: StringInfo) -> Option<Self>

Construct a StringInfo from a Postgres-allocated pg_sys::StringInfo.

The backing pg_sys::StringInfo structure will be freed whenever the memory context in which it was originally allocated is reset.

Safety

This function is unsafe as it cannot confirm the provided pg_sys::StringInfo pointer is valid

source§

impl<AllocatedBy: WhoAllocated> StringInfo<AllocatedBy>

source

pub fn len(&self) -> usize

What is the length, excluding the trailing null byte

source

pub fn is_empty(&self) -> bool

Do we have any characters?

source

pub fn push(&mut self, ch: char)

Push a Rust character onto the end. A Rust char could be 4 bytes in total, so it is converted into a String first to ensure unicode correctness

source

pub fn push_str(&mut self, s: &str)

Push a String reference onto the end

source

pub fn push_bytes(&mut self, bytes: &[u8])

Push arbitrary bytes onto the end. Any byte sequence is allowed, including those with embedded NULLs

Panics

This function will panic if the length of bytes is larger than an i32

source

pub unsafe fn push_raw(&mut self, ptr: *const c_char, len: i32)

Push the bytes behind a raw pointer of a given length onto the end

Safety

This function is unsafe as we cannot ensure the specified ptr and len arguments are what you say that are and otherwise in agreement

source

pub fn reset(&mut self)

Reset the size of the StringInfo back to zero-length. This does/// not* free any previously-allocated memory

source

pub fn enlarge(&mut self, needed: i32)

Ensure that this StringInfo is at least needed bytes long

source

pub fn as_str(&self) -> Result<&str, Utf8Error>

A &str representation.

Errors

If the contained bytes aren’t valid UTF8, a [UTF8Error] is returned. Postgres StringInfo is allowed to contain non-UTF8 byte sequences, so this is a real possibility.

source

pub fn as_ptr(&self) -> *const c_char

A pointer to the backing bytes

source

pub fn as_mut_ptr(&self) -> *mut c_char

A mutable pointer to the backing bytes

source

pub fn as_bytes(&self) -> &[u8]

A &[u8] byte slice representation

source

pub fn as_bytes_mut(&mut self) -> &mut [u8]

A mutable &[u8] byte slice representation

source

pub fn into_pg(self) -> *mut StringInfoData

Convert this StringInfo into one that is wholly owned and now managed by Postgres

source

pub fn into_char_ptr(self) -> *const c_char

Convert this StringInfo into a "char *" that is wholly owned and now managed by Postgres

Trait Implementations§

source§

impl Default for StringInfo<AllocatedByRust>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<AllocatedBy: WhoAllocated> Display for StringInfo<AllocatedBy>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Convert this StringInfo into a Rust string. This uses String::from_utf8_lossy as it’s fine for a Postgres StringInfo to contain null bytes and also not even be proper UTF8.

source§

impl<AllocatedBy: WhoAllocated> Drop for StringInfo<AllocatedBy>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl From<&[u8]> for StringInfo<AllocatedByRust>

source§

fn from(v: &[u8]) -> Self

Converts to this type from the input type.
source§

impl From<&str> for StringInfo<AllocatedByRust>

source§

fn from(s: &str) -> Self

Converts to this type from the input type.
source§

impl From<String> for StringInfo<AllocatedByRust>

source§

fn from(s: String) -> Self

Converts to this type from the input type.
source§

impl<AllocatedBy: WhoAllocated> From<StringInfo<AllocatedBy>> for &'static CStr

source§

fn from(val: StringInfo<AllocatedBy>) -> Self

Converts to this type from the input type.
source§

impl From<Vec<u8, Global>> for StringInfo<AllocatedByRust>

source§

fn from(v: Vec<u8>) -> Self

Converts to this type from the input type.
source§

impl<AllocatedBy: WhoAllocated> Write for StringInfo<AllocatedBy>

source§

fn write(&mut self, buf: &[u8]) -> Result<usize, Error>

Write a buffer into this writer, returning how many bytes were written. Read more
source§

fn flush(&mut self) -> Result<(), Error>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · source§

fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · source§

fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more
source§

impl<AllocatedBy: WhoAllocated> Write for StringInfo<AllocatedBy>

source§

fn write_str(&mut self, s: &str) -> Result

Writes a string slice into this writer, returning whether the write succeeded. Read more
1.1.0 · source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more

Auto Trait Implementations§

§

impl<AllocatedBy> RefUnwindSafe for StringInfo<AllocatedBy>where AllocatedBy: RefUnwindSafe,

§

impl<AllocatedBy = AllocatedByRust> !Send for StringInfo<AllocatedBy>

§

impl<AllocatedBy = AllocatedByRust> !Sync for StringInfo<AllocatedBy>

§

impl<AllocatedBy> Unpin for StringInfo<AllocatedBy>where AllocatedBy: Unpin,

§

impl<AllocatedBy> UnwindSafe for StringInfo<AllocatedBy>where AllocatedBy: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

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

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

impl<T> FmtForward for T

§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Twhere 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.

§

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

§

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

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

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

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

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

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

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

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

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

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

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

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

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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

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

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

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

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

impl<T> Tap for T

§

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

Immutable access to a value. Read more
§

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

Mutable access to a value. Read more
§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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 Twhere T: 'static + ?Sized,

source§

const ITEM_ID: Lazy<TypeId, fn() -> TypeId> =

source§

const OPTION_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const VEC_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const VEC_OPTION_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const OPTION_VEC_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const OPTION_VEC_OPTION_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const ARRAY_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const OPTION_ARRAY_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const VARIADICARRAY_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const OPTION_VARIADICARRAY_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const VARLENA_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

const OPTION_VARLENA_ID: Lazy<Option<TypeId>, fn() -> Option<TypeId>> =

source§

fn register_with_refs(map: &mut HashSet<RustSqlMapping>, single_sql: String)where Self: 'static,

source§

fn register_sized_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String )where Self: 'static,

source§

fn register_sized(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)where Self: 'static,

source§

fn register_varlena_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String )where Self: 'static,

source§

fn register_varlena(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)where Self: 'static,

source§

fn register_array_with_refs( _map: &mut HashSet<RustSqlMapping>, _single_sql: String )where Self: 'static,

source§

fn register_array(_map: &mut HashSet<RustSqlMapping>, _single_sql: String)where Self: 'static,

source§

fn register(set: &mut HashSet<RustSqlMapping>, single_sql: String)where Self: 'static,