119 releases (25 breaking)

0.26.1 Feb 21, 2025
0.25.6 Feb 8, 2025
0.24.7 Dec 27, 2024
0.23.2 Nov 26, 2024
0.1.3 Mar 30, 2023

#879 in Database interfaces

Download history 1247/week @ 2024-11-01 1084/week @ 2024-11-08 1144/week @ 2024-11-15 480/week @ 2024-11-22 387/week @ 2024-11-29 508/week @ 2024-12-06 326/week @ 2024-12-13 55/week @ 2024-12-20 164/week @ 2024-12-27 332/week @ 2025-01-03 148/week @ 2025-01-10 471/week @ 2025-01-17 176/week @ 2025-01-24 108/week @ 2025-01-31 355/week @ 2025-02-07 53/week @ 2025-02-14

759 downloads per month
Used in 5 crates

Apache-2.0

280KB
6.5K SLoC

Databend Driver

Databend unified SQL client for RestAPI and FlightSQL

crates.io License

usage

exec

use databend_driver::Client;

let dsn = "databend://root:@localhost:8000/default?sslmode=disable".to_string();
let client = Client::new(dsn);
let conn = client.get_conn().await.unwrap();

let sql_create = "CREATE TABLE books (
    title VARCHAR,
    author VARCHAR,
    date Date
);";
conn.exec(sql_create).await.unwrap();
let sql_insert = "INSERT INTO books VALUES ('The Little Prince', 'Antoine de Saint-Exupéry', '1943-04-06');";
conn.exec(sql_insert).await.unwrap();

query row

let row = conn.query_row("SELECT * FROM books;", ()).await.unwrap();
let (title,author,date): (String,String,i32) = row.unwrap().try_into().unwrap();
println!("{} {} {}", title, author, date);

query iter

let mut rows = conn.query_iter("SELECT * FROM books;").await.unwrap();
while let Some(row) = rows.next().await {
    let (title,author,date): (String,String,chrono::NaiveDate) = row.unwrap().try_into().unwrap();
    println!("{} {} {}", title, author, date);
}

Parameter bindings

let row = conn
    .query_row("SELECT $1, $2, $3, $4", (3, false, 4, "55"))
    .await
    .unwrap();

let params = params! {a => 3, b => false, c => 4, d => "55"};
let row = conn
    .query_row("SELECT :a, :b, :c, :d", params)
    .await
    .unwrap();

let row = conn
    .query_row("SELECT ?, ?, ?, ?", (3, false, 4, "55"))
    .await
    .unwrap();

Type Mapping

Databend Types

General Data Types

Databend Rust
BOOLEAN bool
TINYINT i8,u8
SMALLINT i16,u16
INT i32,u32
BIGINT i64,u64
FLOAT f32
DOUBLE f64
DECIMAL String
DATE chrono::NaiveDate
TIMESTAMP chrono::NaiveDateTime
VARCHAR String
BINARY Vec<u8>

Semi-Structured Data Types

Databend Rust
ARRAY[T] Vec<T>
TUPLE[T, U] (T, U)
MAP[K, V] HashMap<K, V>
VARIANT String
BITMAP String
GEOMETRY String
GEOGRAPHY String

Note: VARIANT is a json encoded string. Example:

CREATE TABLE example (
    data VARIANT
);
INSERT INTO example VALUES ('{"a": 1, "b": "hello"}');
let row = conn.query_row("SELECT * FROM example limit 1;", ()).await.unwrap();
let (data,): (String,) = row.unwrap().try_into().unwrap();
let value: serde_json::Value = serde_json::from_str(&data).unwrap();
println!("{:?}", value);

Dependencies

~30–46MB
~710K SLoC