1
- import { dialect , parse , testWc } from "../test_utils" ;
1
+ import { dialect , includeAll , parse , testWc } from "../test_utils" ;
2
2
3
3
describe ( "REVOKE" , ( ) => {
4
4
dialect ( "bigquery" , ( ) => {
@@ -21,15 +21,158 @@ describe("REVOKE", () => {
21
21
} ) ;
22
22
} ) ;
23
23
24
- dialect ( [ "mysql" , "mariadb" , "sqlite" ] , ( ) => {
25
- it ( "does not support REVOKE" , ( ) => {
26
- expect ( ( ) => parse ( "REVOKE `role` ON TABLE foo FROM 'user:blah'" ) ) . toThrowError ( ) ;
24
+ dialect ( "postgresql" , ( ) => {
25
+ [
26
+ "SELECT" ,
27
+ "INSERT" ,
28
+ "UPDATE" ,
29
+ "DELETE" ,
30
+ "TRUNCATE" ,
31
+ "REFERENCES" ,
32
+ "TRIGGER" ,
33
+ "MAINTAIN" ,
34
+ ] . forEach ( ( privilege ) => {
35
+ it ( `supports REVOKE ${ privilege } ON TABLE ... FROM role` , ( ) => {
36
+ testWc ( `REVOKE ${ privilege } ON TABLE schm.tbl FROM john_doe` ) ;
37
+ } ) ;
38
+ } ) ;
39
+
40
+ it ( `supports revoking multiple privileges` , ( ) => {
41
+ testWc ( `REVOKE SELECT, UPDATE, INSERT ON TABLE tbl FROM john` ) ;
42
+ } ) ;
43
+
44
+ it ( `supports REVOKE ALL PRIVILEGES ON TABLE ... FROM role` , ( ) => {
45
+ testWc ( `REVOKE ALL ON TABLE schm.tbl FROM john_doe` ) ;
46
+ testWc ( `REVOKE ALL PRIVILEGES ON TABLE schm.tbl FROM john_doe` ) ;
47
+ } ) ;
48
+
49
+ it ( `supports ALL TABLES IN SCHEMA` , ( ) => {
50
+ testWc ( `REVOKE INSERT ON ALL TABLES IN SCHEMA my_schema FROM peter_pan` ) ;
51
+ testWc ( `REVOKE INSERT ON ALL TABLES IN SCHEMA schm1, schm2 FROM peter_pan` ) ;
52
+ } ) ;
53
+
54
+ it ( `supports multiple tables and roles` , ( ) => {
55
+ testWc ( `REVOKE UPDATE ON TABLE tbl1, tbl2, tbl3 FROM john_doe, mary_jane` ) ;
56
+ } ) ;
57
+
58
+ it ( `supports optional TABLE keyword` , ( ) => {
59
+ testWc ( `REVOKE DELETE ON tbl FROM johnny` ) ;
60
+ } ) ;
61
+
62
+ [ "SELECT" , "INSERT" , "UPDATE" , "REFERENCES" ] . forEach ( ( privilege ) => {
63
+ it ( `supports REVOKE ${ privilege } (cols) ON TABLE ... FROM role` , ( ) => {
64
+ testWc ( `REVOKE ${ privilege } (col1, col2) ON TABLE my_tbl FROM john` ) ;
65
+ } ) ;
66
+ } ) ;
67
+
68
+ it ( `supports granting multiple privileges per column` , ( ) => {
69
+ testWc ( `REVOKE SELECT (col1, col2), UPDATE (col1, col2) ON TABLE my_tbl FROM john` ) ;
70
+ } ) ;
71
+
72
+ it ( `supports granting all privileges on columns` , ( ) => {
73
+ testWc ( `REVOKE ALL (col1, col2) ON TABLE my_tbl FROM john` ) ;
74
+ testWc ( `REVOKE ALL PRIVILEGES (col1) ON TABLE my_tbl FROM john` ) ;
75
+ } ) ;
76
+
77
+ [ "USAGE" , "SELECT" , "UPDATE" ] . forEach ( ( privilege ) => {
78
+ it ( `supports REVOKE ${ privilege } ON SEQUENCE ... FROM role` , ( ) => {
79
+ testWc ( `REVOKE ${ privilege } ON SEQUENCE schm.seq1, seq2 FROM john_doe` ) ;
80
+ } ) ;
81
+ } ) ;
82
+
83
+ it ( `supports ALL SEQUENCES IN SCHEMA` , ( ) => {
84
+ testWc ( `REVOKE USAGE ON ALL SEQUENCES IN SCHEMA my_schema FROM peter_pan` ) ;
85
+ testWc ( `REVOKE USAGE, UPDATE ON ALL SEQUENCES IN SCHEMA schm1, schm2 FROM peter_pan` ) ;
86
+ } ) ;
87
+
88
+ [ "CREATE" , "CONNECT" , "TEMPORARY" , "TEMP" ] . forEach ( ( privilege ) => {
89
+ it ( `supports REVOKE ${ privilege } ON DATABASE ... FROM role` , ( ) => {
90
+ testWc ( `REVOKE ${ privilege } ON DATABASE db1, db2 FROM john_doe` ) ;
91
+ } ) ;
92
+ } ) ;
93
+
94
+ it ( `supports REVOKE USAGE ON DOMAIN ... FROM role` , ( ) => {
95
+ testWc ( `REVOKE USAGE ON DOMAIN schm.dom1, dom2 FROM john_doe` ) ;
96
+ } ) ;
97
+
98
+ it ( `supports REVOKE USAGE ON FOREIGN DATA WRAPPER ... FROM role` , ( ) => {
99
+ testWc ( `REVOKE USAGE ON FOREIGN DATA WRAPPER wrap1, wrap2 FROM john_doe` ) ;
100
+ } ) ;
101
+
102
+ it ( `supports REVOKE USAGE ON FOREIGN SERVER ... FROM role` , ( ) => {
103
+ testWc ( `REVOKE USAGE ON FOREIGN SERVER serv1, serv2 FROM john_doe` ) ;
104
+ } ) ;
105
+
106
+ [ "FUNCTION" , "PROCEDURE" , "ROUTINE" ] . forEach ( ( functionKw ) => {
107
+ it ( `supports REVOKE EXECUTE ON ${ functionKw } ... FROM role` , ( ) => {
108
+ testWc ( `REVOKE EXECUTE ON ${ functionKw } fibo, fobo FROM john` ) ;
109
+ testWc ( `REVOKE EXECUTE ON ${ functionKw } fn() FROM john` ) ;
110
+ testWc ( `REVOKE EXECUTE ON ${ functionKw } schm.fn (INT, FLOAT) FROM john` ) ;
111
+ testWc ( `REVOKE EXECUTE ON ${ functionKw } fn(a INT, b INT) FROM john` ) ;
112
+ testWc ( `REVOKE EXECUTE ON ${ functionKw } fn(IN a INT, OUT b INT, INOUT c INT) FROM john` ) ;
113
+ } ) ;
114
+ } ) ;
115
+
116
+ [ "FUNCTIONS" , "PROCEDURES" , "ROUTINES" ] . forEach ( ( functionKw ) => {
117
+ it ( `supports REVOKE EXECUTE ON ALL ${ functionKw } IN SCHEMA ... FROM role` , ( ) => {
118
+ testWc ( `REVOKE EXECUTE ON ALL ${ functionKw } IN SCHEMA my_schema FROM john` ) ;
119
+ testWc ( `REVOKE EXECUTE ON ALL ${ functionKw } IN SCHEMA schm1, schm2 FROM john` ) ;
120
+ } ) ;
121
+ } ) ;
122
+
123
+ it ( `supports REVOKE USAGE ON LANGUAGE ... FROM role` , ( ) => {
124
+ testWc ( `REVOKE USAGE ON LANGUAGE php, perl FROM script_kiddie` ) ;
125
+ } ) ;
126
+
127
+ [ "SELECT" , "UPDATE" ] . forEach ( ( privilege ) => {
128
+ it ( `supports REVOKE ${ privilege } ON LARGE OBJECT ... FROM role` , ( ) => {
129
+ testWc ( `REVOKE ${ privilege } ON LARGE OBJECT 128, 920 FROM john_doe` ) ;
130
+ } ) ;
131
+ } ) ;
132
+ it ( `supports REVOKE ... ON LARGE OBJECT with parameter` , ( ) => {
133
+ testWc ( `REVOKE UPDATE ON LARGE OBJECT :oid FROM john_doe` , {
134
+ ...includeAll ,
135
+ paramTypes : [ ":name" ] ,
136
+ } ) ;
137
+ } ) ;
138
+
139
+ [ "SET" , "ALTER SYSTEM" ] . forEach ( ( privilege ) => {
140
+ it ( `supports REVOKE ${ privilege } ON PARAMETER ... FROM role` , ( ) => {
141
+ testWc ( `REVOKE ${ privilege } ON PARAMETER foo, bar FROM john_doe` ) ;
142
+ } ) ;
143
+ } ) ;
144
+
145
+ [ "CREATE" , "USAGE" ] . forEach ( ( privilege ) => {
146
+ it ( `supports REVOKE ${ privilege } ON SCHEMA ... FROM role` , ( ) => {
147
+ testWc ( `REVOKE ${ privilege } ON SCHEMA foo, bar FROM john_doe` ) ;
148
+ } ) ;
149
+ } ) ;
150
+
151
+ it ( `supports REVOKE CREATE ON TABLESPACE ... FROM role` , ( ) => {
152
+ testWc ( `REVOKE CREATE ON TABLESPACE spc1, spc2 FROM john_doe` ) ;
153
+ } ) ;
154
+
155
+ it ( `supports REVOKE USAGE ON TYPE ... FROM role` , ( ) => {
156
+ testWc ( `REVOKE USAGE ON TYPE schm.typ1, typ2 FROM john_doe` ) ;
157
+ } ) ;
158
+
159
+ it ( `supports GRANT OPTION FOR clause` , ( ) => {
160
+ testWc ( `REVOKE GRANT OPTION FOR DELETE ON tbl FROM johnny` ) ;
161
+ } ) ;
162
+
163
+ it ( `supports GRANTED BY clause` , ( ) => {
164
+ testWc ( `REVOKE DELETE ON tbl FROM johnny GRANTED BY happy_admin` ) ;
165
+ } ) ;
166
+
167
+ it ( `supports RESTRICT/CASCADE` , ( ) => {
168
+ testWc ( `REVOKE DELETE ON tbl FROM johnny RESTRICT` ) ;
169
+ testWc ( `REVOKE DELETE ON tbl FROM johnny GRANTED BY foo CASCADE` ) ;
27
170
} ) ;
28
171
} ) ;
29
172
30
- dialect ( "postgresql" , ( ) => {
31
- it . skip ( "TODO:postgres ", ( ) => {
32
- expect ( true ) . toBe ( true ) ;
173
+ dialect ( [ "mysql" , "mariadb" , "sqlite" ] , ( ) => {
174
+ it ( "does not support REVOKE ", ( ) => {
175
+ expect ( ( ) => parse ( "REVOKE `role` ON TABLE foo FROM 'user:blah'" ) ) . toThrowError ( ) ;
33
176
} ) ;
34
177
} ) ;
35
178
} ) ;
0 commit comments