# Simple mysql driver for WASI This crate offers: * MySql database driver in pure rust; * connection pool; * Compiles to WebAssembly and runs in the [WasmEdge Runtime](https://github.com/WasmEdge/WasmEdge#readme) as a lightweight alternative to Linux containers; * We do not yet support SSL / TLS connections to databases in the WASI driver For more details and usage examples, please see the upstream [rust-mysql-simple](https://github.com/blackbeam/rust-mysql-simple) source and [this example](https://github.com/WasmEdge/wasmedge-db-examples/tree/main/mysql). ### Installation Put the desired version of the crate into the `dependencies` section of your `Cargo.toml`: ```toml [dependencies] mysql_wasi = "23.0.1" ``` ### Example ```rust use mysql::*; use mysql::prelude::*; #[derive(Debug, PartialEq, Eq)] struct Payment { customer_id: i32, amount: i32, account_name: Option, } fn main() -> std::result::Result<(), Box> { let url = "mysql://root:password@localhost:3307/db_name"; # Opts::try_from(url)?; # let url = get_opts(); let pool = Pool::new(url)?; let mut conn = pool.get_conn()?; // Let's create a table for payments. conn.query_drop( r"CREATE TEMPORARY TABLE payment ( customer_id int not null, amount int not null, account_name text )")?; let payments = vec![ Payment { customer_id: 1, amount: 2, account_name: None }, Payment { customer_id: 3, amount: 4, account_name: Some("foo".into()) }, Payment { customer_id: 5, amount: 6, account_name: None }, Payment { customer_id: 7, amount: 8, account_name: None }, Payment { customer_id: 9, amount: 10, account_name: Some("bar".into()) }, ]; // Now let's insert payments to the database conn.exec_batch( r"INSERT INTO payment (customer_id, amount, account_name) VALUES (:customer_id, :amount, :account_name)", payments.iter().map(|p| params! { "customer_id" => p.customer_id, "amount" => p.amount, "account_name" => &p.account_name, }) )?; // Let's select payments from database. Type inference should do the trick here. let selected_payments = conn .query_map( "SELECT customer_id, amount, account_name from payment", |(customer_id, amount, account_name)| { Payment { customer_id, amount, account_name } }, )?; // Let's make sure, that `payments` equals to `selected_payments`. // Mysql gives no guaranties on order of returned rows // without `ORDER BY`, so assume we are lucky. assert_eq!(payments, selected_payments); println!("Yay!"); Ok(()) } ``` ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT) at your option. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.