fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut conn = zero_mysql::sync::Conn::new("mysql://test:1234@localhost:3306/test")?;
conn.query_drop(
"CREATE TABLE IF NOT EXISTS example_types (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tiny_val TINYINT,
small_val SMALLINT,
int_val INT,
big_val BIGINT,
float_val FLOAT,
double_val DOUBLE,
varchar_val VARCHAR(255),
text_val TEXT,
blob_val BLOB,
bool_val BOOLEAN,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)",
)?;
conn.query_drop("TRUNCATE TABLE example_types")?;
let mut insert_stmt = conn.prepare(
"INSERT INTO example_types (tiny_val, small_val, int_val, big_val, float_val, double_val, varchar_val, text_val, blob_val, bool_val)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
)?;
conn.exec_drop(
&mut insert_stmt,
(
1_i8,
100_i16,
1000_i32,
10000_i64,
3.12_f32,
2.81_f64,
"hello",
"This is some text",
b"binary data".as_slice(),
true,
),
)?;
conn.exec_drop(
&mut insert_stmt,
(
-1_i8,
-100_i16,
-1000_i32,
-10000_i64,
-3.12_f32,
-2.81_f64,
"world",
"More text content",
b"\x00\x01\x02\x03".as_slice(),
false,
),
)?;
conn.exec_drop(
&mut insert_stmt,
(
127_i8,
0x7FFF_i16,
0x7FFF_FFFF_i32,
0x7FFF_FFFF_FFFF_FFFF_i64,
1.0e38_f32,
1.0e308_f64,
"max values",
"Testing maximum values",
b"".as_slice(),
true,
),
)?;
let mut select_stmt = conn.prepare(
"SELECT id, tiny_val, small_val, int_val, big_val, float_val, double_val, varchar_val FROM example_types",
)?;
type ExampleRow = (u32, i8, i16, i32, i64, f32, f64, String);
let mut handler: zero_mysql::handler::CollectHandler<ExampleRow> =
zero_mysql::handler::CollectHandler::default();
conn.exec(&mut select_stmt, (), &mut handler)?;
let rows = handler.into_rows();
println!("Fetched {} rows:", rows.len());
for (id, tiny, small, int, big, float, double, varchar) in &rows {
println!(
" id={}, tiny={}, small={}, int={}, big={}, float={:.2}, double={:.5}, varchar={}",
id, tiny, small, int, big, float, double, varchar
);
}
let mut select_positive_stmt =
conn.prepare("SELECT id, varchar_val FROM example_types WHERE int_val > ?")?;
let mut handler2: zero_mysql::handler::CollectHandler<(u32, String)> =
zero_mysql::handler::CollectHandler::default();
conn.exec(&mut select_positive_stmt, (0_i32,), &mut handler2)?;
let positive_rows = handler2.into_rows();
println!(
"\nRows with positive int_val ({} rows):",
positive_rows.len()
);
for (id, varchar) in &positive_rows {
println!(" id={}, varchar={}", id, varchar);
}
let first_row: Option<(u32, String)> = conn.exec_first(&mut select_positive_stmt, (0_i32,))?;
if let Some((id, varchar)) = first_row {
println!("\nFirst positive row: id={}, varchar={}", id, varchar);
}
println!("\nExample completed successfully!");
Ok(())
}