multisql/executor/query/
get_data.rs

1use {
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(); // TODO: Handle
36				Ok(Some(query))
37			} else {
38				Ok(None)
39			}
40		} else {
41			Ok(None)
42		}
43	}
44}