Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix MySQL parsing of GRANT, REVOKE, and CREATE VIEW #1538

Open
wants to merge 20 commits into
base: main
Choose a base branch
from

Conversation

mvzink
Copy link
Contributor

@mvzink mvzink commented Nov 20, 2024

  • Support MySQL style 'user'@'host' syntax.
  • Support wildcards on grant objects: *.*.
  • Make CASCADE/RESTRICT in revoke statements optional since MySQL doesn't accept it.
  • Support optional MySQL parameters for create view: algorithm, definer (requires user@host syntax), and security context.

This is needed for parsing MySQL-style `'user'@'host'` grantee syntax.

As far as I can tell, no dialect allows quotes or backticks as part of
an identifier (regardless of whether it starts with `@`) without other
specific syntax (e.g. nested in another quote style and thus not
starting with `@`), so this shouldn't adversely affect non-MySQL
dialects.
Introduces a new `Grantee` enum to differentiate bare identifiers (every
other database: `root`) from user/host pairs (MySQL: `'root'@'%'`).

While we're here, make the CASCADE/RESTRICT syntax for REVOKE optional
since Postgres doesn't require it and MySQL doesn't allow it.

Add support for MySQL wildcard object syntax: `GRANT ALL ON *.* ...`
@mvzink
Copy link
Contributor Author

mvzink commented Nov 20, 2024

Would appreciate feedback on the naming the MySQL-specific params types (would a generic/non-branded name be better?) and the API change for wildcard support (didn't want to change all 107 parse_object_name callsites for an option that is so niche, but happy to be convinced otherwise).

tests/sqlparser_mysql.rs Show resolved Hide resolved
tests/sqlparser_mysql.rs Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
src/tokenizer.rs Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
tests/sqlparser_mysql.rs Show resolved Hide resolved
tests/sqlparser_mysql.rs Outdated Show resolved Hide resolved
src/ast/mod.rs Outdated Show resolved Hide resolved
src/tokenizer.rs Show resolved Hide resolved
src/ast/mod.rs Outdated Show resolved Hide resolved
Copy link
Contributor

@iffyio iffyio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @mvzink! Left some minor comments I think with those and resolving conflicts on the branch this looks good to me!

src/parser/mod.rs Outdated Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
src/parser/mod.rs Outdated Show resolved Hide resolved
Copy link
Contributor

@iffyio iffyio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks @mvzink
cc @alamb

@iffyio
Copy link
Contributor

iffyio commented Dec 27, 2024

@mvzink it seems there's a couple conflicts in the branch could you take a look when you have some time?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants