pub struct QueryResponse { /* private fields */ }
Expand description

The result of SQL that returns rows

The first partition is included immediately, but additional partitions are streamed lazily and incur additional IO.

You might consider using QueryResponse::only_partition if you only need one partition.

Implementations§

source§

impl QueryResponse

source

pub fn num_rows(&self) -> usize

Get the number of rows across all partitions

source

pub fn num_columns(&self) -> usize

Get the number of columns

source

pub fn num_partitions(&self) -> usize

Get the number of columns in the response

source

pub fn column_types(&self) -> &[ColumnType]

Column types in the result set

In most cases Cell should already expose the data you need, but if you use the raw strings or want information about nullability, etc, this can be useful.

source

pub fn only_partition(self) -> SnowflakeResult<Partition>

A convenience method to assert that there is only one partition and return it

This never causes IO, is not async, and can only error with SnowflakeError::MultiplePartitions

source

pub async fn partition( &self, index: usize ) -> SnowflakeResult<Option<Partition>>

Get a single partition from the response

If this is the first partition, you get it immediately, otherwise it will incur an additional request to get the partition

Returns an error if the requested partition does not exist.

source

pub fn partitions( &self ) -> impl TryStream<Ok = Partition, Error = SnowflakeError> + '_

Stream over all partitions in the response

This incurs IO, so try to only use this once.

In order to improve concurrency, this will buffer one partition, so you can have one partition in flight while processing another.

source

pub async fn concat_partitions(&self) -> SnowflakeResult<Partition>

Concatenate all partitions into a single partition

This incurs IO, so try to only use this once.

This could use an unbounded amount of memory, but it could save time for uses cases requiring multiple passes.

source

pub fn rows( &self ) -> impl TryStream<Ok = Vec<Cell>, Error = SnowflakeError> + '_

Stream over all rows in the response

This incurs IO, so try to only use this once.

In order to improve concurrency, this will buffer one partition, so you can have one partition in flight while processing another.

If you only need one partition, it may be simpler to use partition and then stream over the rows in that partition.

source

pub fn json_tables( &self ) -> impl TryStream<Ok = Vec<Value>, Error = SnowflakeError> + '_

Stream over all rows in the response as JSON tables

This incurs IO, so try to only use this once.

In order to improve concurrency, this will buffer one partition, so you can have one partition in flight while processing another.

source

pub fn json_objects( &self ) -> impl TryStream<Ok = Value, Error = SnowflakeError> + '_

Stream over all rows in the response as JSON objects

This incurs IO, so try to only use this once.

In order to improve concurrency, this will buffer one partition, so you can have one partition in flight while processing another.

Trait Implementations§

source§

impl Debug for QueryResponse

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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