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