Skip to content

Commit 0379995

Browse files
committed
BREAKING! Parse BigQuery REVOKE as RevokePrivilegeStmt
1 parent e7c5eec commit 0379995

File tree

3 files changed

+21
-56
lines changed

3 files changed

+21
-56
lines changed

src/cst/Dcl.ts

+4-21
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ export type AllDclNodes =
1919
| GranteeGroup
2020
| GranteePublic;
2121

22-
export type AllDclStatements =
23-
| GrantPrivilegeStmt
24-
| RevokeRoleStmt
25-
| RevokePrivilegeStmt;
22+
export type AllDclStatements = GrantPrivilegeStmt | RevokePrivilegeStmt;
2623

2724
// GRANT privilege ON resource TO roles
2825
export interface GrantPrivilegeStmt extends BaseNode {
@@ -215,32 +212,18 @@ export interface GrantedByClause extends BaseNode {
215212
role: Grantee;
216213
}
217214

218-
// REVOKE role ON resource FROM user
219-
export interface RevokeRoleStmt extends BaseNode {
220-
type: "revoke_role_stmt";
221-
revokeKw: Keyword<"REVOKE">;
222-
roles: ListExpr<Identifier>;
223-
onKw: Keyword<"ON">;
224-
resourceType:
225-
| Keyword<"SCHEMA" | "TABLE" | "VIEW">
226-
| [Keyword<"EXTERNAL">, Keyword<"TABLE">];
227-
resourceName: EntityName;
228-
fromKw: Keyword<"FROM">;
229-
users: ListExpr<StringLiteral>;
230-
}
231-
232215
// REVOKE privilege ON resource FROM roles
233216
export interface RevokePrivilegeStmt extends BaseNode {
234217
type: "revoke_privilege_stmt";
235218
revokeKw: Keyword<"REVOKE">;
236219
grantOptionForKw?: [Keyword<"GRANT">, Keyword<"OPTION">, Keyword<"FOR">];
237-
privileges: ListExpr<Privilege> | AllPrivileges;
220+
privileges: ListExpr<Privilege> | ListExpr<Identifier> | AllPrivileges;
238221
onKw: Keyword<"ON">;
239222
resource: GrantResource;
240223
fromKw: Keyword<"FROM">;
241-
roles: ListExpr<Grantee>;
224+
roles: ListExpr<Grantee> | ListExpr<StringLiteral>;
242225
grantedBy?: GrantedByClause;
243-
behaviorKw: Keyword<"CASCADE" | "RESTRICT">;
226+
behaviorKw?: Keyword<"CASCADE" | "RESTRICT">;
244227
}
245228

246229
type Grantee = Identifier | FuncCall | GranteeGroup | GranteePublic;

src/parser.pegjs

+17-25
Original file line numberDiff line numberDiff line change
@@ -4732,8 +4732,7 @@ release_savepoint_stmt
47324732
* ------------------------------------------------------------------------------------ *
47334733
*/
47344734
dcl_statement
4735-
= &bigquery x:(grant_privilege_stmt / revoke_role_stmt) { return x; }
4736-
/ &postgres x:(grant_privilege_stmt / revoke_privilege_stmt) { return x; }
4735+
= (&bigquery / &postgres) x:(grant_privilege_stmt / revoke_privilege_stmt) { return x; }
47374736

47384737
grant_privilege_stmt
47394738
= &postgres
@@ -4868,30 +4867,9 @@ granted_by_clause
48684867
return loc({ type: "granted_by_clause", grantedByKw: read(kw), role });
48694868
}
48704869

4871-
revoke_role_stmt
4872-
= kw:(REVOKE __) roles:(list$ident __)
4873-
onKw:(ON __) resType:(resource_type_kw __) resName:(entity_name __)
4874-
fromKw:(FROM __) users:(list$string_literal) {
4875-
return loc({
4876-
type: "revoke_role_stmt",
4877-
revokeKw: read(kw),
4878-
roles: read(roles),
4879-
onKw: read(onKw),
4880-
resourceType: read(resType),
4881-
resourceName: read(resName),
4882-
fromKw: read(fromKw),
4883-
users,
4884-
});
4885-
}
4886-
4887-
resource_type_kw
4888-
= SCHEMA
4889-
/ TABLE
4890-
/ VIEW
4891-
/ kw:(EXTERNAL __ TABLE) { return read(kw); }
4892-
48934870
revoke_privilege_stmt
4894-
= kw:(REVOKE __) grantOptionForKw:(GRANT __ OPTION __ FOR __)?
4871+
= &postgres
4872+
kw:(REVOKE __) grantOptionForKw:(GRANT __ OPTION __ FOR __)?
48954873
privileges:((list$privilege / all_privileges) __)
48964874
onKw:(ON __) resource:(grant_resource_postgres __)
48974875
fromKw:(FROM __) roles:list$grantee
@@ -4910,6 +4888,20 @@ revoke_privilege_stmt
49104888
behaviorKw: read(behaviorKw),
49114889
});
49124890
}
4891+
/ &bigquery
4892+
kw:(REVOKE __) privileges:(list$ident __)
4893+
onKw:(ON __) resource:(grant_resource_bigquery __)
4894+
fromKw:(FROM __) roles:list$string_literal {
4895+
return loc({
4896+
type: "revoke_privilege_stmt",
4897+
revokeKw: read(kw),
4898+
privileges: read(privileges),
4899+
onKw: read(onKw),
4900+
resource: read(resource),
4901+
fromKw: read(fromKw),
4902+
roles,
4903+
});
4904+
}
49134905

49144906
/**
49154907
* ------------------------------------------------------------------------------------ *

src/showNode/dcl.ts

-10
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,6 @@ export const dclMap: FullTransformMap<string, AllDclNodes> = {
4242
grant_resource_view: (node) => show([node.viewKw, node.views]),
4343
granted_by_clause: (node) => show([node.grantedByKw, node.role]),
4444

45-
revoke_role_stmt: (node) =>
46-
show([
47-
node.revokeKw,
48-
node.roles,
49-
node.onKw,
50-
node.resourceType,
51-
node.resourceName,
52-
node.fromKw,
53-
node.users,
54-
]),
5545
revoke_privilege_stmt: (node) =>
5646
show([
5747
node.revokeKw,

0 commit comments

Comments
 (0)