#mssql #sql-server #listener #broker #tiberius #real-time

tiberius-mssql-broker

Real time change listener for MSSQL

2 releases

0.1.3 Jul 25, 2023
0.1.2 Jul 25, 2023

#1679 in Database interfaces

Apache-2.0

62KB
1.5K SLoC

Rust 1.5K SLoC // 0.0% comments SQL 222 SLoC

Tiberius MSSQL Broker

Broker for MSSQL. Re-implementation of C# SQLDependencyEx.

Thanks to deadpool-tiberius repository.

Example:

broker example

let mssql = MssqlConnection::establish(&SqlConfig{
    host: ".".to_string(),
    instance: Some("SQLEXPRESS".to_string()),
    port: 1433,
    username: "sa".to_string(),
    password: "julfikar123@".to_string(),
    database: "AED_MOBILE".to_string(),
    trust_cert: true,
    allow_encrypt: true,
    max_pool: 1,
    sql_browser: false,
}).await;
match mssql {
    Ok(conn) => {
        let (sx, rx) = kanal::unbounded::<Vec<ListenEvent>>();
        println!("started listening...");
        tokio::spawn(async move {
            while let Ok(evs) = rx.recv() {
                println!("{} {:?}",evs.len(),evs);
            }
        });
        let broker = conn.listen(1,format!("IV"), sx).await;
        match broker {
            Ok(_) => { }
            Err(err) => {
                println!("{:?}",err);
            }
        }
    }
    Err(err) => {
        println!("{:?}",err);
    }
}

query example

let config = SqlConfig {
    host: ".".to_string(),
    instance: Some("SQLEXPRESS".to_string()),
    port: 1433,
    username: "sa".to_string(),
    password: "julfikar123@".to_string(),
    database: "AED_MOBILE".to_string(),
    trust_cert: true,
    allow_encrypt: true,
    max_pool: 1,
    sql_browser: false,
};

let mssql = MssqlConnection::establish(&config).await;
let mut mssql = mssql.unwrap();

let res = mssql.select("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';", vec![]).await;
let res: Vec<HashMap<String,Value>> = res.unwrap();

Dependencies

~21–32MB
~638K SLoC