multisql/executor/query/
get_data.rs1use {
2 crate::{types::LabelsAndRows, Cast, Glue, Result, VIEW_TABLE_NAME},
3 sqlparser::ast::Select,
4};
5
6impl Glue {
7 pub async fn get_view_data(
8 &self,
9 view_name: &str,
10 database: &Option<String>,
11 ) -> Result<Option<LabelsAndRows>> {
12 if let Some(query) = self.get_view_query(view_name, database).await? {
13 self.select_query(query, vec![]).await.map(Some)
14 } else {
15 Ok(None)
16 }
17 }
18 pub async fn get_view_query(
19 &self,
20 view_name: &str,
21 database: &Option<String>,
22 ) -> Result<Option<Select>> {
23 let views = self.get_table_rows(VIEW_TABLE_NAME, database, &None).await;
24 if let Ok(views) = views {
25 let query = views.into_iter().find_map(|row| {
26 let name: String = row[0].clone().cast().unwrap();
27 if view_name == name {
28 Some(row[1].clone())
29 } else {
30 None
31 }
32 });
33 if let Some(query) = query {
34 let query: String = query.clone().cast()?;
35 let query = serde_yaml::from_str(&query).unwrap(); Ok(Some(query))
37 } else {
38 Ok(None)
39 }
40 } else {
41 Ok(None)
42 }
43 }
44}