diff --git a/crates/pgt_workspace/src/workspace/server/parsed_document.rs b/crates/pgt_workspace/src/workspace/server/parsed_document.rs index dafd5697..e5c0eeb1 100644 --- a/crates/pgt_workspace/src/workspace/server/parsed_document.rs +++ b/crates/pgt_workspace/src/workspace/server/parsed_document.rs @@ -404,3 +404,27 @@ impl<'a> StatementFilter<'a> for IdFilter { *id == self.id } } + +#[cfg(test)] +mod tests { + use super::*; + + use pgt_fs::PgTPath; + + #[test] + fn sql_function_body() { + let input = "CREATE FUNCTION add(integer, integer) RETURNS integer + AS 'select $1 + $2;' + LANGUAGE SQL + IMMUTABLE + RETURNS NULL ON NULL INPUT;"; + + let path = PgTPath::new("test.sql"); + + let d = ParsedDocument::new(path, input.to_string(), 0); + + let stmts = d.iter(DefaultMapper).collect::>(); + + assert_eq!(stmts.len(), 2); + } +} diff --git a/crates/pgt_workspace/src/workspace/server/sql_function.rs b/crates/pgt_workspace/src/workspace/server/sql_function.rs index 3273466d..777210d5 100644 --- a/crates/pgt_workspace/src/workspace/server/sql_function.rs +++ b/crates/pgt_workspace/src/workspace/server/sql_function.rs @@ -5,6 +5,7 @@ use pgt_text_size::TextRange; use super::statement_identifier::StatementId; +#[derive(Debug, Clone)] pub struct SQLFunctionBody { pub range: TextRange, pub body: String, @@ -97,6 +98,16 @@ fn find_option_value( .find_map(|arg| { if let pgt_query_ext::NodeEnum::String(s) = arg { Some(s.sval.clone()) + } else if let pgt_query_ext::NodeEnum::List(l) = arg { + l.items.iter().find_map(|item_wrapper| { + if let Some(pgt_query_ext::NodeEnum::String(s)) = + item_wrapper.node.as_ref() + { + Some(s.sval.clone()) + } else { + None + } + }) } else { None }