From dbe29a105124e4b5befa6114a4f17ac947b2e1e7 Mon Sep 17 00:00:00 2001 From: Vaibhave Sekar Date: Mon, 6 Jul 2026 17:27:16 +0000 Subject: [PATCH] positional parameter $n should render as @Pn. --- crates/polyglot-sql/src/generator.rs | 21 ++++++++++++++----- .../polyglot-sql/tests/fabric_regression.rs | 5 +++++ crates/polyglot-sql/tests/tsql_regression.rs | 5 +++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/crates/polyglot-sql/src/generator.rs b/crates/polyglot-sql/src/generator.rs index 64600ec..0f83239 100644 --- a/crates/polyglot-sql/src/generator.rs +++ b/crates/polyglot-sql/src/generator.rs @@ -22122,12 +22122,23 @@ impl Generator { match f.style { ParameterStyle::Question => self.write("?"), ParameterStyle::Dollar => { - self.write("$"); if let Some(idx) = f.index { - self.write(&idx.to_string()); - } else if let Some(ref name) = f.name { - // Session variable like $x or $query_id - self.write(name); + if matches!( + self.config.dialect, + Some(DialectType::TSQL) | Some(DialectType::Fabric) + ) { + self.write("@P"); + self.write(&idx.to_string()); + } else { + self.write("$"); + self.write(&idx.to_string()); + } + } else { + self.write("$"); + if let Some(ref name) = f.name { + // Session variable like $x or $query_id + self.write(name); + } } } ParameterStyle::DollarBrace => { diff --git a/crates/polyglot-sql/tests/fabric_regression.rs b/crates/polyglot-sql/tests/fabric_regression.rs index 20b5d38..17ec7cc 100644 --- a/crates/polyglot-sql/tests/fabric_regression.rs +++ b/crates/polyglot-sql/tests/fabric_regression.rs @@ -18,6 +18,11 @@ fn tsql_to_fabric(sql: &str) -> String { .expect("expected at least one statement") } +#[test] +fn postgres_positional_parameters_render_as_tsql_style_placeholders_for_fabric() { + assert_eq!(pg_to_fabric("SELECT $1, $2"), "SELECT @P1, @P2"); +} + // --------------------------------------------------------------------------- // PostgreSQL LATERAL joins -> Fabric APPLY // --------------------------------------------------------------------------- diff --git a/crates/polyglot-sql/tests/tsql_regression.rs b/crates/polyglot-sql/tests/tsql_regression.rs index c511e3e..a9e7dfd 100644 --- a/crates/polyglot-sql/tests/tsql_regression.rs +++ b/crates/polyglot-sql/tests/tsql_regression.rs @@ -135,6 +135,11 @@ fn tsql_max_length_types_parse_generate_and_transpile() { assert!(!postgres[0].is_empty()); } +#[test] +fn postgres_positional_parameters_render_as_tsql_style_placeholders() { + assert_eq!(pg_to_tsql("SELECT $1, $2"), "SELECT @P1, @P2"); +} + #[test] fn tsql_datepart_dayofweek_generates_valid_tsql_datepart() { let cases = [