dameng_rust_sdk 0.1.3

A Rust SDK for Dameng Database (DM8) with ODBC support
Documentation
#![allow(warnings)]
//! Dameng Rust SDK Demo

use dameng_rust_sdk::prelude::*;
use dameng_rust_sdk::ConnectionOptions;
use log::info;
use env_logger::Env;

fn main() -> dameng_rust_sdk::Result<()> {
    // Initialize logging
    env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
    
    info!("=== Dameng Rust SDK Demo ===");
    
    // Create connection options
    let options = ConnectionOptions {
        server: "localhost".to_string(),
        port: 5236,
        username: "SYSDBA".to_string(),
        password: "Z@xcvbnm123".to_string(),
        schema: "PRODUCTION".to_string(),
        ..Default::default()
    };
    
    // Create client
    let client = dameng_rust_sdk::DamengClient::new(options)?;
    
    // Test connection
    client.test_connection()?;
    info!("✓ Connection test successful");
    
    // Get database information
    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;
    // Connect to database
    let mut conn = client.connect()?;
    info!("✓ Connected to database");
    let odbc_params: Vec<Box<dyn InputParameter>> = vec![
        Box::new("红楼梦".into_parameter()),
    ];
    // Simple query test
    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);
    
    // Connection will be automatically closed when dropped
    info!("✓ Connection will be closed automatically");
    
    info!("=== Demo completed successfully ===");
    
    Ok(())
}