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 std::str::FromStr; use crate::lang::{Lang, LangType}; use crate::planner; use crate::sql::Sql; use crate::value::PqlValue; pub fn evaluate(sql: &str, input: &str, from: &str, to: &str) -> anyhow::Result<String> { let from_lang_type = LangType::from_str(&from)?; let to_lang_type = LangType::from_str(&to)?; let mut lang = Lang::from_as(&input, from_lang_type)?; let sql = Sql::from_str(&sql)?; let result = planner::evaluate(sql, lang.data); lang.to = to_lang_type; lang.data = result; let output = lang.to_string(true)?; Ok(output) } pub fn loads(input: &str, from: &str) -> anyhow::Result<PqlValue> { let from_lang_type = LangType::from_str(&from)?; let lang = Lang::from_as(&input, from_lang_type)?; let value = lang.data; Ok(value) } pub fn dumps(data: PqlValue, to: &str) -> anyhow::Result<String> { let to_lang_type = LangType::from_str(&to)?; let mut lang = Lang::default(); lang.data = data; lang.to = to_lang_type; let output = lang.to_string(true)?; Ok(output) } pub fn query_evaluate(data: PqlValue, sql: &str) -> anyhow::Result<PqlValue> { let sql = Sql::from_str(&sql)?; let data = PqlValue::from(data); let value = planner::evaluate(sql, data); Ok(value) }