Struct Connection

Source
pub struct Connection<C: SqlExecutorMut> { /* private fields */ }
Expand description

Connection abstraction that provides on possible implementation which uses the building blocks (State) provided by this crate.

For simplicity, it takes ownership of an existing type which implements SqlExecutor and initializes all the tracking infrastructure. The original type can still be accessed as Connection implements both Deref and DerefMut.

§Remarks

To make sure all changes are capture, it’s recommended to always call Connection::sync_watcher_tables() before any query/statement or transaction.

§Example

§Single Query/Statement

use sqlite_watcher::connection::Connection;
use sqlite_watcher::connection::SqlExecutor;
use sqlite_watcher::watcher::Watcher;

pub fn track_changes<C:SqlExecutor>(connection: C) {
    let watcher = Watcher::new().unwrap();
    let mut connection = Connection::new(connection, watcher).unwrap();

    // Sync tables so we are up to date.
    connection.sync_watcher_tables().unwrap();

    connection.sql_execute("sql query here").unwrap();

    // Publish changes to the watcher
    connection.publish_watcher_changes().unwrap();
}

§Transaction

use sqlite_watcher::connection::Connection;
use sqlite_watcher::connection::{SqlExecutor};
use sqlite_watcher::watcher::Watcher;

pub fn track_changes<C:SqlExecutor>(connection: C) {
    let watcher = Watcher::new().unwrap();
    let mut connection = Connection::new(connection, watcher).unwrap();

    // Sync tables so we are up to date.
    connection.sync_watcher_tables().unwrap();

    // Start a transaction
    connection.sql_execute("sql query here").unwrap();
    connection.sql_execute("sql query here").unwrap();
    // Commit transaction

    // Publish changes to the watcher
    connection.publish_watcher_changes().unwrap();
}

Implementations§

Source§

impl<C: SqlExecutorMut> Connection<C>

Source

pub fn new(connection: C, watcher: Arc<Watcher>) -> Result<Self, C::Error>

Create a new connection with connection and watcher.

See State::start_tracking() for more information about initialization.

§Errors

Returns error if the initialization failed.

Source

pub fn sync_watcher_tables(&mut self) -> Result<(), C::Error>

Sync tables from the Watcher and update tracking infrastructure.

See State::sync_tables() for more information.

§Errors

Returns error if we failed to sync the changes to the database.

Source

pub fn publish_watcher_changes(&mut self) -> Result<(), C::Error>

Check if any tables have changed and notify the Watcher

See State::publish_changes() for more information.

It is recommended to call this method

§Errors

Returns error if we failed to check for changes.

Source

pub fn stop_tracking(&mut self) -> Result<(), C::Error>

Disable all tracking on this connection.

See State::stop_tracking for more details.

§Errors

Returns error if the queries failed.

Source

pub fn take(self) -> C

Consume the current connection and take ownership of the real sql connection.

§Remarks

This does not stop the tracking infrastructure enabled on the connection. Use Self::stop_tracking() to disable it first.

Trait Implementations§

Source§

impl<C: SqlExecutor> AsMut<C> for Connection<C>

Source§

fn as_mut(&mut self) -> &mut C

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl<C: SqlExecutor> AsRef<C> for Connection<C>

Source§

fn as_ref(&self) -> &C

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<C: SqlExecutor> Deref for Connection<C>

Source§

type Target = C

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<C: SqlExecutor> DerefMut for Connection<C>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

Auto Trait Implementations§

§

impl<C> Freeze for Connection<C>
where C: Freeze,

§

impl<C> !RefUnwindSafe for Connection<C>

§

impl<C> Send for Connection<C>
where C: Send,

§

impl<C> Sync for Connection<C>
where C: Sync,

§

impl<C> Unpin for Connection<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Connection<C>

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.

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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