14 releases

new 0.2.12 Dec 17, 2024
0.2.11 Oct 18, 2024
0.2.10 Jul 20, 2024
0.2.9 Jun 30, 2024
0.1.0 Mar 15, 2024

#1393 in Database interfaces

Download history 5/week @ 2024-08-25 2/week @ 2024-09-01 2/week @ 2024-09-08 60/week @ 2024-09-15 36/week @ 2024-09-22 31/week @ 2024-09-29 186/week @ 2024-10-13 75/week @ 2024-10-20 8/week @ 2024-10-27 2/week @ 2024-11-03 26/week @ 2024-11-10 7/week @ 2024-11-17 1/week @ 2024-11-24 58/week @ 2024-12-01 11/week @ 2024-12-08

77 downloads per month
Used in 2 crates

MIT/Apache

21KB
535 lines

rqlite-rs

build status Test Coverage Crates.io Documentation License Crates.io Rust

rqlite-rs is a Rust client for rqlite, the distributed relational database built on SQLite, providing an async interface for seamless integration with Rust's async ecosystems. Utilizing reqwest for efficient connection management, it offers a Rustic, high-level API for easy and efficient interaction with rqlite clusters.

Features

  • Asynchronous Interface: Fully async, compatible with Tokio, async-std, and smol.
  • Connection Pooling: Efficient management of connections to the rqlite cluster.
  • High-Level API: Simplifies interactions with the rqlite API.
  • Resilience: Automatic failover to a secondary node on connectivity issues.
  • Cluster Management: Full control over the cluster with node query and management features.

Installation

Add to your Cargo.toml:

[dependencies]
...
+ rqlite-rs = "0.4.1"

Quick Start

Ensure you have a running rqlite cluster. Replace localhost:4001 and localhost:4002 with your node addresses:

use rqlite_rs::prelude::*;

#[derive(FromRow)]
pub struct Table {
    name: String,
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let client = RqliteClientBuilder::new()
        .known_host("localhost:4001")
        .build()?;

    let query = rqlite_rs::query!(
        "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'"
    )?;

    let rows = client.fetch(query).await?;

    let tables = rows.into_typed::<Table>()?;

    for table in tables {
        println!("Table: {}", table.name);
    }

    Ok(())
}

Resilience

The client supports automatic failover, attempting to connect to the next known node if a connection error or timeout occurs, ensuring high availability.

Documentation

For detailed API documentation and advanced usage, visit rqlite-rs documentation.

Contributing

Contributions are welcome!

License

rqlite-rs is licensed under either of

at your option.

Dependencies

~0.7–1.6MB
~35K SLoC