Test macro argument list formatting errors
diff --git a/tests/sqlparser_duckdb.rs b/tests/sqlparser_duckdb.rs index 02d74c4..216d514 100644 --- a/tests/sqlparser_duckdb.rs +++ b/tests/sqlparser_duckdb.rs
@@ -947,3 +947,32 @@ .verified_stmt("CREATE OR REPLACE TEMPORARY MACRO nothing() AS TABLE SELECT 1"); duckdb().one_statement_parses_to("CREATE FUNCTION add() AS 1", "CREATE MACRO add() AS 1"); } + +#[test] +fn display_create_macro_propagates_argument_list_errors() { + use core::fmt::{self, Write}; + + struct RejectingWriter(char); + + impl Write for RejectingWriter { + fn write_str(&mut self, value: &str) -> fmt::Result { + if value.contains(self.0) { + Err(fmt::Error) + } else { + Ok(()) + } + } + } + + for sql in [ + "CREATE MACRO four() AS 4", + "CREATE MACRO add(a, b) AS a + b", + "CREATE MACRO nothing() AS TABLE SELECT 1", + ] { + let statement = duckdb_and_generic().verified_stmt(sql); + for rejected in ['(', ')'] { + let mut writer = RejectingWriter(rejected); + assert_eq!(write!(writer, "{statement}"), Err(fmt::Error)); + } + } +}