Crates.io | domner_tech_sql_client |
lib.rs | domner_tech_sql_client |
version | 0.1.6 |
created_at | 2025-09-08 13:56:47.050223+00 |
updated_at | 2025-09-14 16:41:24.203125+00 |
description | DomnerTech-SqlClient is for connect to SQL like MSSQL and PostgreSQL |
homepage | |
repository | https://github.com/DomnerTech/DomnerTech-SqlClient |
max_upload_size | |
id | 1829326 |
size | 80,035 |
DomnerTech-SqlClient
DomnerTech-SqlClient is for connect to SQL like MSSQL and PostgreSQL
📦 Unified SQL Repo
A lightweight async SQL repository abstraction for MSSQL (Tiberius) and PostgreSQL (tokio-postgres). It provides a unified API for executing queries, commands, and bulk inserts across different databases using feature flags.
✨ Features
🚀 Installation
Add this crate to your Cargo.toml
:
[dependencies]
domner_tech_sql_client = { version = "0.1", features = ["mssql"] }
# or
domner_tech_sql_client = { version = "0.1", features = ["pgsql"] }
# or
domner_tech_sql_client = { version = "0.1", features = ["mssql, pgsql"] }
mssql
→ Enables tiberius for SQL Server
pgsql
→ Enables tokio-postgres for PostgreSQL
âš¡ Usage
use domner_tech_sql_client::pool_manager::DbManager;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let manager = DbManager::new();
// For PostgreSQL
manager.init_pool(
"pg_pool",
"postgresql://postgres:admin@localhost:5432/mydb",
5
).await?;
// For MSSQL
manager.init_pool(
"mssql_pool",
"server=tcp:localhost,1433;User Id=sa;Password=your_password;TrustServerCertificate=true;",
5
).await?;
Ok(())
}
use domner_tech_sql_client::{SqlRepo, CommandType};
use domner_tech_sql_client::pool_manager::{DbRow, DbManager};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let manager = DbManager::new();
manager.init_pool("pg_pool", "postgresql://postgres:admin@localhost:5432/mydb", 5).await?;
let mut client = manager.get_client("pg_pool").await?;
let rows = SqlRepo::execute_command_query(
&mut client,
"SELECT id, name FROM users WHERE id = $1",
&[&1],
CommandType::Text,
|row: &DbRow| {
#[cfg(feature = "pgsql")]
{
let id: i32 = row.get_pgsql(0).unwrap();
let name: String = row.get_pgsql(1).unwrap();
(id, name)
}
#[cfg(feature = "mssql")]
{
let id: Option<i32> = row.get_mssql("id").unwrap();
let name: Option<String> = row.get_mssql("name").unwrap();
(id, name)
}
}
).await?;
println!("{:?}", rows);
Ok(())
}
let entities: Vec<Vec<&dyn UnifiedToSql>> = vec![
vec![&1, &"Alice"],
vec![&2, &"Bob"],
];
let affected = SqlRepo::execute_bulk_insert(
&mut client,
"users",
&["id", "name"],
&entities.iter().map(|e| e.as_slice()).collect::<Vec<_>>(),
).await?;
🔧 Development
postgresql://
connection string.cargo test --features pgsql
cargo test --features mssql
📜 License
Licensed under either of: