elefant-client 0.1.0

A pure rust implementation of a postgres client that is independent of the executor runtime
Documentation
use crate::pool::ConnectionFactory;
use crate::postgres_client::statements::Statement;
use crate::postgres_client::{PostgresClient, QueryResultSet};
use crate::{ElefantClientError, ToSql};

impl<F: ConnectionFactory> PostgresClient<F> {
    /// Execute a non-query statement using binary mode (with prepared statements)
    pub async fn execute_non_query<S>(
        &mut self,
        query: &S,
        parameters: &[&dyn ToSql],
    ) -> Result<(), ElefantClientError>
    where
        S: Statement + ?Sized,
    {
        let mut query_result = self.query(query, parameters).await?;

        loop {
            let result_set = query_result.next_result_set().await?;

            match result_set {
                QueryResultSet::QueryProcessingComplete => return Ok(()),
                QueryResultSet::RowDescriptionReceived(mut reader) => {
                    while reader.next_row().await?.is_some() {}
                }
            }
        }
    }

    /// Execute a non-query statement using simple query mode (text format, no parameters)
    pub async fn execute_non_query_simple(
        &mut self,
        query: &str,
    ) -> Result<(), ElefantClientError> {
        let mut query_result = self.query_simple(query).await?;

        loop {
            let result_set = query_result.next_result_set().await?;

            match result_set {
                QueryResultSet::QueryProcessingComplete => return Ok(()),
                QueryResultSet::RowDescriptionReceived(mut reader) => {
                    while reader.next_row().await?.is_some() {}
                }
            }
        }
    }
}