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 kind: uqa_sql::SQLResultKind::Unknown,
42 command_tag: None,
43 columns: result.columns,
44 column_types,
45 rows: result.rows,
46 positional_rows: None,
47 affected_rows: result.affected_rows,
48 }
49 })
50 .collect();
51 Self {
52 results,
53 request_id: response.request_id,
54 }
55 }
56
57 pub fn results(&self) -> &[SQLResult] {
58 &self.results
59 }
60
61 pub fn request_id(&self) -> &str {
62 &self.request_id
63 }
64
65 pub fn into_results(self) -> Vec<SQLResult> {
66 self.results
67 }
68}
69
70impl fmt::Debug for SQLBatchExecution {
71 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
72 formatter
73 .debug_struct("SQLBatchExecution")
74 .field("request_id", &self.request_id)
75 .field("results", &"[REDACTED]")
76 .finish()
77 }
78}