IdentifierBracketing.IncludeBrackets brackets aggregate function name in PIVOT (SUM becomes [SUM]), producing invalid T-SQL
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 67/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Bereich
- backend-api-design
Rechercherichtung
Read SqlScriptGeneratorVisitor.PivotedTableReference.cs and trace how AggregateFunctionIdentifier is emitted; then inspect SqlScriptGeneratorVisitor.Identifier.cs and the casing options mentioned in the issue. Reproduce with the supplied PIVOT query and IdentifierBracketing = IncludeBrackets. Done when the aggregate name remains unbracketed and uses built-in function casing while ordinary identifiers still follow their configured behavior.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
With IdentifierBracketing.IncludeBrackets, the script generator wraps the aggregate function name inside a PIVOT clause in square brackets. The output is invalid T-SQL and fails to parse.
This shows up in SSMS 22.7+ (built-in SQL formatter with identifier_bracketing = IncludeBrackets), because the formatter is built on ScriptDOM.
Repro
Input:
SELECT [p].[2024], [p].[2025]
FROM [#chk] PIVOT (SUM([volume]) FOR [year] IN ([2024], [2025])) AS [p];
Format with IdentifierBracketing = IncludeBrackets (SSMS: Tools > Options > SQL Formatter, or identifier_bracketing = IncludeBrackets in .editorconfig).
Actual output:
... PIVOT ([SUM] ([volume]) FOR [year] IN ([2024], [2025])) AS [p];
Executing the result fails with:
Msg 102, Level 15, State 1
Incorrect syntax near '('.
Expected output: SUM stays unbracketed:
... PIVOT (SUM([volume]) FOR [year] IN ([2024], [2025])) AS [p];
Likely cause
PivotedTableReference.AggregateFunctionIdentifier is a MultiPartIdentifier, and SqlScriptGeneratorVisitor.PivotedTableReference.cs emits it with GenerateFragmentIfNotNull(node.AggregateFunctionIdentifier). That sends it through the normal identifier path in SqlScriptGeneratorVisitor.Identifier.cs, so IncludeBrackets applies to it like a column or table name.
The aggregate name should probably be exempt from bracketing. built_in_function_casing should apply to it instead of identifier_casing, so that with identifier_casing = Lowercase we don't get [sum].
Workaround
Use IdentifierBracketing.Preserve, or rewrite the PIVOT as conditional aggregation (SUM(CASE WHEN [year] = 2024 THEN [volume] END) AS [2024]).
Environment
- SSMS 22.7+ built-in SQL formatter (ScriptDOM-based)
- Vorherrschende Sprache
- GAP
- Sterne
- 284
- Forks
- 47
- Ø Merge
- 1 T. 23 Std.
- Gemergte PRs (30 T.)
- 3
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus microsoft/SqlScriptDOM
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
microsoft/SqlScriptDOM#228 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
microsoft/SqlScriptDOM#183 ·
-
Add a Multiline option for CASE expressions (WHEN/THEN/ELSE on their own lines)Evtl. vergeben @trg-alasdair hat das vor 40 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 56/100
microsoft/SqlScriptDOM#226 · 1 Reaktion ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
microsoft/SqlScriptDOM#225 ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 58/100
microsoft/SqlScriptDOM#224 ·
Alle Issues in microsoft/SqlScriptDOM
Ähnliche Issues
-
Runner API: GET /api/jobs/<id> returns branch: null; the branch only appears under input.branchOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
radiancelux/prgenie#204 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
WalletConnect/walletconnect-monorepo#7392 · 1 Kommentar ·
-
area: app type: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
rohit746/pdf-view.nvim#109 ·
Maintainer antworten meist innerhalb von 1 Tag