Skip to main content

Insert

Struct Insert 

Source
pub struct Insert<T> { /* private fields */ }
Expand description

Performs one INSERT.

The Insert::end must be called to finalize the INSERT. Otherwise, the whole INSERT will be aborted.

Rows are sent progressively to spread network load.

§Note: Metadata is Cached

If validation is enabled, this helper will query the metadata for the target table to learn the column names and types.

To avoid querying this metadata every time, it is cached within the Client.

Any concurrent changes to the table schema may cause insert failures if the metadata is no longer correct. For correct functioning, call Client::clear_cached_metadata() after any changes to the current database schema.

Implementations§

Source§

impl<T> Insert<T>

Source

pub fn into_any(self) -> Insert<()>

Converts this typed insert into a type-erased Insert<()>, preserving any row metadata (and thus schema validation) that was fetched for T.

This lets you to store Insert<()> in a container, for example HashMap<std::any::TypeId, Insert<()>>.

let mut insert = client.insert::<MyRow>("table").await?.into_any();
insert.write_any(&MyRow { ... }).await?;
insert.end().await?;
Source

pub fn with_timeouts( self, send_timeout: Option<Duration>, end_timeout: Option<Duration>, ) -> Self

Sets timeouts for different operations.

send_timeout restricts time on sending a data chunk to a socket. None disables the timeout, it’s a default. It’s roughly equivalent to tokio::time::timeout(insert.write(...)).

end_timeout restricts time on waiting for a response from the CH server. Thus, it includes all work needed to handle INSERT by the CH server, e.g. handling all materialized views and so on. None disables the timeout, it’s a default. It’s roughly equivalent to tokio::time::timeout(insert.end(...)).

These timeouts are much more performant (~x10) than wrapping write() and end() calls into tokio::time::timeout().

Source

pub fn with_roles( self, roles: impl IntoIterator<Item = impl Into<String>>, ) -> Self

Configure the roles to use when executing INSERT statements.

Overrides any roles previously set by this method, Insert::with_option, Client::with_roles or Client::with_option.

An empty iterator may be passed to clear the set roles.

§Panics

If called after the request is started, e.g., after Insert::write.

Source

pub fn with_default_roles(self) -> Self

Clear any explicit roles previously set on this Insert or inherited from Client.

Overrides any roles previously set by Insert::with_roles, Insert::with_option, Client::with_roles or Client::with_option.

§Panics

If called after the request is started, e.g., after Insert::write.

Source

pub fn with_option( self, name: impl Into<String>, value: impl Into<String>, ) -> Self

Similar to Client::with_option, but for this particular INSERT statement only.

§Panics

If called after the request is started, e.g., after Insert::write.

Source

pub fn write<'a>( &'a mut self, row: &T::Value<'_>, ) -> impl Future<Output = Result<()>> + 'a + Send
where T: RowWrite,

Serializes the provided row into an internal buffer. Once the buffer is full, it’s sent to a background task writing to the socket.

Close to:

async fn write<T>(&self, row: &T) -> Result<usize>;

A returned future doesn’t depend on the row’s lifetime.

Returns an error if the row cannot be serialized or the background task failed. Once failed, the whole INSERT is aborted and cannot be used anymore.

§Panics

If called after the previous call that returned an error.

Source

pub fn write_any<'a, R>( &'a mut self, row: &R, ) -> impl Future<Output = Result<()>> + 'a + Send
where R: Row + Serialize,

Writes a row of any type R into this insert.

Unlike Insert::write, the row type R is inferred directly from the argument, no turbofish needed:

insert.write_any(&MyRow { ... }).await?;

This is the primary write method for type-erased Insert<()> obtained from Client::insert_any.

Source

pub async fn end(self) -> Result<()>

Ends INSERT, the server starts processing the data.

Succeeds if the server returns 200, that means the INSERT was handled successfully, including all materialized views and quorum writes.

NOTE: If it isn’t called, the whole INSERT is aborted.

Auto Trait Implementations§

§

impl<T> Freeze for Insert<T>

§

impl<T> !RefUnwindSafe for Insert<T>

§

impl<T> Send for Insert<T>

§

impl<T> Sync for Insert<T>

§

impl<T> Unpin for Insert<T>

§

impl<T> UnsafeUnpin for Insert<T>

§

impl<T> !UnwindSafe for Insert<T>

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<U> As for U

Source§

fn as_<T>(self) -> T
where T: CastFrom<U>,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Is for T
where T: ?Sized,

Source§

type EqTo = T

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> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more