Skip to content

MsSql: Preserve ALTER ROLE ... WITH NAME = on display - #2709

Open
princejain756 wants to merge 2 commits into
apache:mainfrom
princejain756:fix-mssql-alter-role-with-name
Open

princejain756 wants to merge 2 commits into
apache:mainfrom
princejain756:fix-mssql-alter-role-with-name

Conversation

@princejain756

Copy link
Copy Markdown

ALTER ROLE old_name WITH NAME = new_name, the only rename form T-SQL accepts [1], parses into AlterRoleOperation::RenameRole, which Display renders as RENAME TO - syntax T-SQL cannot parse back:

Parser::parse_sql(&MsSqlDialect {}, "ALTER ROLE a WITH NAME = b")
    .unwrap()[0].to_string()
// "ALTER ROLE a RENAME TO b"  <- fails on reparse under MsSqlDialect

RenameRole now carries a use_with_name flag set by the mssql parse path, so the statement renders back as WITH NAME =. The RENAME TO parse path (Postgres/Generic) is unchanged.

Verified against the T-SQL grammar [1]: ALTER ROLE offers only ADD MEMBER, DROP MEMBER, and WITH NAME =; RENAME TO does not exist there.

[1] https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-role-transact-sql

Written with AI assistance (SWE-2 Max via Devin).

A field access whose target identifier starts with a digit, as in
SELECT [dbo]. 1te_sk in Hive, displayed without the space as
[dbo].1te_sk. On re-lexing, .1 is read as a number, so the output
parsed as a different statement or failed to parse.

AccessExpr::Dot now writes ' . ' before an unquoted identifier
starting with a digit, extending the existing handling for numeric
literals from apache#2463.

Fixes apache#2589
The T-SQL parser maps ALTER ROLE x WITH NAME = y to
AlterRoleOperation::RenameRole, which Display renders as
RENAME TO - syntax T-SQL cannot parse. Track the surface form
with a use_with_name flag so the mssql parse emits
WITH NAME = back. RENAME TO still renders for dialects that
parsed it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant