mz_testdrive/action/duckdb/
execute.rs1use anyhow::{Context, anyhow};
11
12use crate::action::duckdb::get_or_create_connection;
13use crate::action::{ControlFlow, State};
14use crate::parser::BuiltinCommand;
15
16pub async fn run_execute(
17 mut cmd: BuiltinCommand,
18 state: &mut State,
19) -> Result<ControlFlow, anyhow::Error> {
20 let name = cmd.args.string("name")?;
21 cmd.args.done()?;
22
23 let conn = get_or_create_connection(state, name).await?;
24
25 mz_ore::task::spawn_blocking(
26 || "duckdb_execute".to_string(),
27 move || {
28 let conn = conn.lock().map_err(|e| anyhow!("lock poisoned: {}", e))?;
29 for query in &cmd.input {
30 println!(">> {}", query);
31 conn.execute_batch(query)
32 .with_context(|| format!("executing DuckDB query: {}", query))?;
33 }
34 Ok::<_, anyhow::Error>(())
35 },
36 )
37 .await?;
38
39 Ok(ControlFlow::Continue)
40}