aharpervc commented on code in PR #1836:
URL:
https://github.com/apache/datafusion-sqlparser-rs/pull/1836#discussion_r2073698163
##########
src/parser/mod.rs:
##########
@@ -13020,14 +13035,18 @@ impl<'a> Parser<'a> {
GranteesType::Share
} else if self.parse_keyword(Keyword::GROUP) {
GranteesType::Group
- } else if self.parse_keyword(Keyword::PUBLIC) {
- GranteesType::Public
} else if self.parse_keywords(&[Keyword::DATABASE, Keyword::ROLE])
{
GranteesType::DatabaseRole
} else if self.parse_keywords(&[Keyword::APPLICATION,
Keyword::ROLE]) {
GranteesType::ApplicationRole
} else if self.parse_keyword(Keyword::APPLICATION) {
GranteesType::Application
+ } else if self.peek_keyword(Keyword::PUBLIC) {
+ if dialect_of!(self is MsSqlDialect) {
+ grantee_type
+ } else {
+ GranteesType::Public
+ }
Review Comment:
> hmm not sure I followed the intention here, public is represented
differently for mssql? (we would want to describe that behavior without the
`dialect_of` macro I think)
My interpretation of the existing code is that "public" is being interpreted
as a keyword. With SQL Server, "public" is a built in role
([ref](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver16#public-database-role))
From a parsing perspective, there wouldn't be any difference between a
built-in role & any other role. The consideration here is "keyword" vs "not
keyword". The additional test case examples here cover this behavior.
Put simply, this (and GRANT) should be able to parse normally:
```mssql
DENY SELECT ON my_table TO public
```
---
With regards to the code, what is the preferred way to implement this
behavior? Brainstorming...
1. Use `dialect_of`
2. Copy/paste this entire method into the dialect so it's fully duplicated
except for this keyword
3. Implement a dialect function to describe "tokens that are listed as
keywords but should be treated as identifiers", or similar, and then it's blank
for most dialects but returns "public" for SQL Server
4. Something else...?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]