From d0bc41978d7c70c93c01bcc2f3d2995978a761fa Mon Sep 17 00:00:00 2001 From: filipriec Date: Sat, 15 Mar 2025 21:08:49 +0100 Subject: [PATCH] parser improvements --- server/src/steel/server/syntax_parser.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/server/src/steel/server/syntax_parser.rs b/server/src/steel/server/syntax_parser.rs index 5ea265f..3c7573b 100644 --- a/server/src/steel/server/syntax_parser.rs +++ b/server/src/steel/server/syntax_parser.rs @@ -3,7 +3,7 @@ use regex::Regex; use std::collections::HashSet; pub struct SyntaxParser { - same_table_column_re: Regex, + current_table_column_re: Regex, different_table_column_re: Regex, one_to_many_indexed_re: Regex, sql_integration_re: Regex, @@ -12,7 +12,7 @@ pub struct SyntaxParser { impl SyntaxParser { pub fn new() -> Self { SyntaxParser { - same_table_column_re: Regex::new(r"@(\w+)").unwrap(), + current_table_column_re: Regex::new(r"@(\w+)").unwrap(), different_table_column_re: Regex::new(r"@(\w+)\.(\w+)").unwrap(), one_to_many_indexed_re: Regex::new(r"@(\w+)\[(\d+)\]\.(\w+)").unwrap(), sql_integration_re: Regex::new(r#"@sql\((['"])(.*?)['"]\)"#).unwrap(), @@ -24,18 +24,18 @@ impl SyntaxParser { // Process indexed access first to avoid overlap with relationship matches transformed = self.one_to_many_indexed_re.replace_all(&transformed, |caps: ®ex::Captures| { - format!("(get_related_index \"{}\" {} \"{}\")", + format!("(steel_get_column_with_index \"{}\" {} \"{}\")", &caps[1], &caps[2], &caps[3]) }).to_string(); // Process relationships transformed = self.different_table_column_re.replace_all(&transformed, |caps: ®ex::Captures| { - format!("(get_related_value \"{}\" \"{}\")", &caps[1], &caps[2]) + format!("(steel_get_column \"{}\" \"{}\")", &caps[1], &caps[2]) }).to_string(); // Process basic column access - transformed = self.same_table_column_re.replace_all(&transformed, |caps: ®ex::Captures| { - format!("(steel_get_column \"{}\")", &caps[1]) + transformed = self.current_table_column_re.replace_all(&transformed, |caps: ®ex::Captures| { + format!("(steel_get_column \"{}\" \"{}\")", current_table, &caps[1]) }).to_string(); // Process SQL integration @@ -46,14 +46,15 @@ impl SyntaxParser { transformed } - pub fn extract_current_table(&self, script: &str) -> (HashSet, HashSet) { - - } - pub fn extract_dependencies(&self, script: &str) -> (HashSet, HashSet) { let mut tables = HashSet::new(); let mut columns = HashSet::new(); + for cap in self.current_table_column_re.captures_iter(script) { + tables.insert(current_table.to_string()); + columns.insert(cap[1].to_string()); + } + for cap in self.different_table_column_re.captures_iter(script) { tables.insert(cap[1].to_string()); columns.insert(cap[2].to_string());