uqa_client/
sql_batch_execution.rs1use std::collections::BTreeMap;
8use std::fmt;
9
10use serde::Deserialize;
11use uqa_core::Value;
12use uqa_sql::SQLResult;
13
14pub struct SQLBatchExecution {
16 results: Vec<SQLResult>,
17 request_id: String,
18}
19
20#[derive(Deserialize)]
21pub(crate) struct SQLBatchWireResponse {
22 results: Vec<SQLStatementWireResponse>,
23 pub request_id: String,
24}
25
26#[derive(Deserialize)]
27struct SQLStatementWireResponse {
28 columns: Vec<String>,
29 rows: Vec<BTreeMap<String, Value>>,
30 affected_rows: u64,
31}
32
33impl SQLBatchExecution {
34 pub(crate) fn from_wire(response: SQLBatchWireResponse) -> Self {
35 let results = response
36 .results
37 .into_iter()
38 .map(|result| {
39 let column_types = vec![None; result.columns.len()];
40 SQLResult {
41 columns: result.columns,
42 column_types,
43 rows: result.rows,
44 positional_rows: None,
45 affected_rows: result.affected_rows,
46 }
47 })
48 .collect();
49 Self {
50 results,
51 request_id: response.request_id,
52 }
53 }
54
55 pub fn results(&self) -> &[SQLResult] {
56 &self.results
57 }
58
59 pub fn request_id(&self) -> &str {
60 &self.request_id
61 }
62
63 pub fn into_results(self) -> Vec<SQLResult> {
64 self.results
65 }
66}
67
68impl fmt::Debug for SQLBatchExecution {
69 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
70 formatter
71 .debug_struct("SQLBatchExecution")
72 .field("request_id", &self.request_id)
73 .field("results", &"[REDACTED]")
74 .finish()
75 }
76}