@@ -86,6 +86,10 @@ pub enum UserPrivilegeType {
8686 CreateSequence = 1 << 24 ,
8787 // Privilege to Access Sequence
8888 AccessSequence = 1 << 25 ,
89+ // Privilege to Create Procedure
90+ CreateProcedure = 1 << 26 ,
91+ // Privilege to Access Procedure
92+ AccessProcedure = 1 << 27 ,
8993 // Discard Privilege Type
9094 Set = 1 << 4 ,
9195}
@@ -147,6 +151,8 @@ impl Display for UserPrivilegeType {
147151 UserPrivilegeType :: AccessConnection => "ACCESS CONNECTION" ,
148152 UserPrivilegeType :: CreateSequence => "CREATE SEQUENCE" ,
149153 UserPrivilegeType :: AccessSequence => "ACCESS SEQUENCE" ,
154+ UserPrivilegeType :: CreateProcedure => "CREATE PROCEDURE" ,
155+ UserPrivilegeType :: AccessProcedure => "ACCESS PROCEDURE" ,
150156 } )
151157 }
152158}
@@ -199,6 +205,12 @@ impl From<databend_common_ast::ast::UserPrivilegeType> for UserPrivilegeType {
199205 databend_common_ast:: ast:: UserPrivilegeType :: AccessSequence => {
200206 UserPrivilegeType :: AccessSequence
201207 }
208+ databend_common_ast:: ast:: UserPrivilegeType :: CreateProcedure => {
209+ UserPrivilegeType :: CreateProcedure
210+ }
211+ databend_common_ast:: ast:: UserPrivilegeType :: AccessProcedure => {
212+ UserPrivilegeType :: AccessProcedure
213+ }
202214 databend_common_ast:: ast:: UserPrivilegeType :: Set => UserPrivilegeType :: Set ,
203215 }
204216 }
@@ -235,7 +247,7 @@ impl UserPrivilegeSet {
235247 let wh_privs_without_ownership = Self :: available_privileges_on_warehouse ( false ) ;
236248 let connection_privs_without_ownership = Self :: available_privileges_on_connection ( false ) ;
237249 let seq_privs_without_ownership = Self :: available_privileges_on_sequence ( false ) ;
238- let privs = make_bitflags ! ( UserPrivilegeType :: { Usage | Super | CreateUser | DropUser | CreateRole | DropRole | CreateDatabase | Grant | CreateDataMask | CreateWarehouse | CreateConnection | CreateSequence } ) ;
250+ let privs = make_bitflags ! ( UserPrivilegeType :: { Usage | Super | CreateUser | DropUser | CreateRole | DropRole | CreateDatabase | Grant | CreateDataMask | CreateWarehouse | CreateConnection | CreateSequence | CreateProcedure } ) ;
239251 ( database_privs. privileges
240252 | privs
241253 | stage_privs_without_ownership. privileges
@@ -297,6 +309,14 @@ impl UserPrivilegeSet {
297309 }
298310 }
299311
312+ pub fn available_privileges_on_procedure ( available_ownership : bool ) -> Self {
313+ if available_ownership {
314+ make_bitflags ! ( UserPrivilegeType :: { AccessProcedure | Ownership } ) . into ( )
315+ } else {
316+ make_bitflags ! ( UserPrivilegeType :: { AccessProcedure } ) . into ( )
317+ }
318+ }
319+
300320 pub fn available_privileges_on_udf ( available_ownership : bool ) -> Self {
301321 if available_ownership {
302322 make_bitflags ! ( UserPrivilegeType :: { Usage | Ownership } ) . into ( )
0 commit comments