#![allow(warnings)]
use dameng_rust_sdk::prelude::*;
use dameng_rust_sdk::ConnectionOptions;
use log::info;
use env_logger::Env;
fn main() -> dameng_rust_sdk::Result<()> {
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
info!("=== Dameng Rust SDK Demo ===");
let options = ConnectionOptions {
server: "localhost".to_string(),
port: 5236,
username: "SYSDBA".to_string(),
password: "Z@xcvbnm123".to_string(),
schema: "PRODUCTION".to_string(),
..Default::default()
};
let client = dameng_rust_sdk::DamengClient::new(options)?;
client.test_connection()?;
info!("✓ Connection test successful");
let db_info = client.database_info()?;
info!("✓ Database Information:");
info!(" DBMS: {}", db_info.dbms_name);
info!(" Database: {}", db_info.db_name);
info!(" Driver: {} {}", db_info.driver_name, db_info.driver_version);
use dameng_rust_sdk::prelude::parameter::InputParameter;
let mut conn = client.connect()?;
info!("✓ Connected to database");
let odbc_params: Vec<Box<dyn InputParameter>> = vec![
Box::new("红楼梦".into_parameter()),
];
let mut result = conn.query_with_param(r#"SELECT * FROM PRODUCTION.PRODUCT where NAME = ?"#,odbc_params.as_slice())?;
let rows = result.fetch_all()?;
if !rows.is_empty() {
for row in &rows{
for col in row {
match col {
DamengValue::Null =>print!("Null\t"),
DamengValue::Int(r) => print!("{r}\t"),
DamengValue::BigInt(r) => print!("{r}\t"),
DamengValue::Float(r) => print!("{r}\t"),
DamengValue::String(r) => print!("{r}\t"),
DamengValue::Bool(r) => print!("{r}\t"),
DamengValue::Decimal(a, b, c) => print!("{a}.{b}.{c}\t"),
DamengValue::Date(naive_date) => print!("{}\t",naive_date.to_string()),
DamengValue::DateTime(naive_date_time) => print!("{}\t",naive_date_time.to_string()),
DamengValue::Binary(items) => print!("{:?}\t",items),
}
}
println!("");
}
}
let execute_result = conn.execute(r#"UPDATE PRODUCTION.PRODUCT SET PRODUCTNO = '11' WHERE PRODUCTID = 1"#)?;
info!("✓ execute result: {}", execute_result);
let odbc_params: Vec<Box<dyn InputParameter>> = vec![
Box::new(500.into_parameter()),
Box::new(5.into_parameter()),
];
let execute_result = conn.execute_with_param(r#"
UPDATE PRODUCTION.PRODUCT_VENDOR SET STANDARDPRICE = ? WHERE PRODUCTID = 7 AND VENDORID = ?
"#,odbc_params.as_slice())?;
info!("✓ execute result: {}", execute_result);
info!("✓ Connection will be closed automatically");
info!("=== Demo completed successfully ===");
Ok(())
}