feat: add duckdb test
This commit is contained in:
1442
__database/duckdb-demo/Cargo.lock
generated
Normal file
1442
__database/duckdb-demo/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
__database/duckdb-demo/Cargo.toml
Normal file
10
__database/duckdb-demo/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "duckdb-demo"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
duckdb = { version = "0.10", features = ["bundled"] }
|
||||||
|
|
||||||
55
__database/duckdb-demo/src/main.rs
Normal file
55
__database/duckdb-demo/src/main.rs
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
use duckdb::{params, Connection, Result};
|
||||||
|
|
||||||
|
use duckdb::arrow::record_batch::RecordBatch;
|
||||||
|
use duckdb::arrow::util::pretty::print_batches;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Person {
|
||||||
|
id: i32,
|
||||||
|
name: String,
|
||||||
|
data: Option<Vec<u8>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let conn = Connection::open_in_memory()?;
|
||||||
|
|
||||||
|
conn.execute_batch(
|
||||||
|
r"CREATE SEQUENCE seq;
|
||||||
|
CREATE TABLE person (
|
||||||
|
id INTEGER PRIMARY KEY DEFAULT NEXTVAL('seq'),
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
data BLOB
|
||||||
|
);
|
||||||
|
")?;
|
||||||
|
|
||||||
|
let me = Person {
|
||||||
|
id: 0,
|
||||||
|
name: "Steven".to_string(),
|
||||||
|
data: None,
|
||||||
|
};
|
||||||
|
conn.execute(
|
||||||
|
"INSERT INTO person (name, data) VALUES (?, ?)",
|
||||||
|
params![me.name, me.data],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// query table by rows
|
||||||
|
let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;
|
||||||
|
let person_iter = stmt.query_map([], |row| {
|
||||||
|
Ok(Person {
|
||||||
|
id: row.get(0)?,
|
||||||
|
name: row.get(1)?,
|
||||||
|
data: row.get(2)?,
|
||||||
|
})
|
||||||
|
})?;
|
||||||
|
|
||||||
|
for person in person_iter {
|
||||||
|
let p = person.unwrap();
|
||||||
|
println!("ID: {}", p.id);
|
||||||
|
println!("Found person {:?}", p);
|
||||||
|
}
|
||||||
|
|
||||||
|
// query table by arrow
|
||||||
|
let rbs: Vec<RecordBatch> = stmt.query_arrow([])?.collect();
|
||||||
|
print_batches(&rbs).unwrap();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user