hdbconnect_async

Crates.iohdbconnect_async
lib.rshdbconnect_async
version0.29.0
sourcesrc
created_at2023-02-02 16:07:22.392092
updated_at2024-10-23 22:42:24.728219
descriptionAn asynchronous pure rust database driver for SAP HANA(TM)
homepage
repositoryhttps://github.com/emabee/rust-hdbconnect
max_upload_size
id774891
size99,995
(emabee)

documentation

https://docs.rs/hdbconnect_async/

README

hdbconnect_async

Latest version Documentation License

An asynchronous pure rust SQL driver for SAP HANA(TM).

Use hdbconnect if you want a synchronous driver for SAP HANA.

Usage

Add hdbconnect_async to the dependencies section in your project's Cargo.toml:

[dependencies]
hdbconnect_async = "0.29"

Assuming you have

  • a HANA accessible at port 39013 on host hxehost,
  • and you can log on to it as user HORST with password SeCrEt,

then a first simple test which sets up some table, inserts data and reads them back might look like this:

use hdbconnect_async::{Connection, HdbResult};

#[tokio::main]
pub async fn main() -> HdbResult<()> {
    let mut connection = Connection::new("hdbsql://HORST:SeCrEt@hxehost:39013").await?;

    // Cleanup if necessary, and set up a test table
    connection.multiple_statements_ignore_err(vec![
        "drop table FOO_SQUARE"
    ]).await;
    connection.multiple_statements(vec![
        "create table FOO_SQUARE ( f1 INT primary key, f2 BIGINT)",
    ]).await?;

    // Insert some test data
    let mut insert_stmt = connection.prepare(
        "insert into FOO_SQUARE (f1, f2) values(?,?)"
    ).await?;

    for i in 0..100 {
        insert_stmt.add_batch(&(i, i * i))?;
    }
    insert_stmt.execute_batch().await?;

    // Read the table data directly into a rust data structure
    let stmt = "select * from FOO_SQUARE order by f1 asc";
    let n_square: Vec<(i32, u64)> =
        connection.query(stmt).await?.try_into().await?;

    // Verify ...
    for (idx, (n, square)) in n_square.into_iter().enumerate() {
        assert_eq!(idx as i32, n);
        assert_eq!((idx * idx) as u64, square);
    }
    Ok(())
}

Documentation

See https://docs.rs/hdbconnect_async/ for the full functionality of hdbconnect_async.

There you find also more code examples, especially in the description of module code_examples.

TLS

The TLS implementation is based on rustls.

rustls's flexibility to use non-default crypto providers is currently not (yet) exposed by hdbconnect. Nevertheless, the need of rustls to initialize crypto shines through. We thus recommend calling hdbconnect::initialize_crypto early in your main.

Features

rocket_pool

Adds an implementation of a rocket_db_pools database pool.

dist_tx

Adds support for distributed transactions, based on dist_tx.

Versions

See the change log.

Commit count: 432

cargo fmt