@@ -103,6 +103,7 @@ namespace
103103 const Flags & getDictionaryFlags () const { return all_flags_for_target[DICTIONARY]; }
104104 const Flags & getTableEngineFlags () const { return all_flags_for_target[TABLE_ENGINE]; }
105105 const Flags & getUserNameFlags () const { return all_flags_for_target[USER_NAME]; }
106+ const Flags & getDefinerFlags () const { return all_flags_for_target[DEFINER]; }
106107 const Flags & getNamedCollectionFlags () const { return all_flags_for_target[NAMED_COLLECTION]; }
107108 const Flags & getAllFlagsGrantableOnGlobalLevel () const { return getAllFlags (); }
108109 const Flags & getAllFlagsGrantableOnGlobalWithParameterLevel () const { return getGlobalWithParameterFlags (); }
@@ -124,6 +125,7 @@ namespace
124125 NAMED_COLLECTION = 5 ,
125126 USER_NAME = 6 ,
126127 TABLE_ENGINE = 7 ,
128+ DEFINER = 8 ,
127129 };
128130
129131 struct Node ;
@@ -302,7 +304,7 @@ namespace
302304 collectAllFlags (child.get ());
303305
304306 all_flags_grantable_on_table_level = all_flags_for_target[TABLE] | all_flags_for_target[DICTIONARY] | all_flags_for_target[COLUMN];
305- all_flags_grantable_on_global_with_parameter_level = all_flags_for_target[NAMED_COLLECTION] | all_flags_for_target[USER_NAME] | all_flags_for_target[TABLE_ENGINE];
307+ all_flags_grantable_on_global_with_parameter_level = all_flags_for_target[NAMED_COLLECTION] | all_flags_for_target[USER_NAME] | all_flags_for_target[TABLE_ENGINE] | all_flags_for_target[DEFINER] ;
306308 all_flags_grantable_on_database_level = all_flags_for_target[DATABASE] | all_flags_grantable_on_table_level;
307309 }
308310
@@ -353,7 +355,7 @@ namespace
353355 std::unordered_map<std::string_view, Flags> keyword_to_flags_map;
354356 std::vector<Flags> access_type_to_flags_mapping;
355357 Flags all_flags;
356- Flags all_flags_for_target[static_cast <size_t >(TABLE_ENGINE ) + 1 ];
358+ Flags all_flags_for_target[static_cast <size_t >(DEFINER ) + 1 ];
357359 Flags all_flags_grantable_on_database_level;
358360 Flags all_flags_grantable_on_table_level;
359361 Flags all_flags_grantable_on_global_with_parameter_level;
@@ -377,11 +379,15 @@ std::unordered_map<AccessFlags::ParameterType, AccessFlags> AccessFlags::splitIn
377379 if (user_flags)
378380 result.emplace (ParameterType::USER_NAME, user_flags);
379381
382+ auto definer_flags = AccessFlags::allDefinerFlags () & *this ;
383+ if (definer_flags)
384+ result.emplace (ParameterType::DEFINER, definer_flags);
385+
380386 auto table_engine_flags = AccessFlags::allTableEngineFlags () & *this ;
381387 if (table_engine_flags)
382388 result.emplace (ParameterType::TABLE_ENGINE, table_engine_flags);
383389
384- auto other_flags = (~named_collection_flags & ~user_flags & ~table_engine_flags) & *this ;
390+ auto other_flags = (~named_collection_flags & ~user_flags & ~definer_flags & ~ table_engine_flags) & *this ;
385391 if (other_flags)
386392 result.emplace (ParameterType::NONE, other_flags);
387393
@@ -400,6 +406,9 @@ AccessFlags::ParameterType AccessFlags::getParameterType() const
400406 if (AccessFlags::allUserNameFlags ().contains (*this ))
401407 return AccessFlags::USER_NAME;
402408
409+ if (AccessFlags::allDefinerFlags ().contains (*this ))
410+ return AccessFlags::DEFINER;
411+
403412 // / All flags refer to TABLE ENGINE access type.
404413 if (AccessFlags::allTableEngineFlags ().contains (*this ))
405414 return AccessFlags::TABLE_ENGINE;
@@ -423,6 +432,7 @@ AccessFlags AccessFlags::allColumnFlags() { return Helper::instance().getColumnF
423432AccessFlags AccessFlags::allDictionaryFlags () { return Helper::instance ().getDictionaryFlags (); }
424433AccessFlags AccessFlags::allNamedCollectionFlags () { return Helper::instance ().getNamedCollectionFlags (); }
425434AccessFlags AccessFlags::allUserNameFlags () { return Helper::instance ().getUserNameFlags (); }
435+ AccessFlags AccessFlags::allDefinerFlags () { return Helper::instance ().getDefinerFlags (); }
426436AccessFlags AccessFlags::allTableEngineFlags () { return Helper::instance ().getTableEngineFlags (); }
427437AccessFlags AccessFlags::allFlagsGrantableOnGlobalLevel () { return Helper::instance ().getAllFlagsGrantableOnGlobalLevel (); }
428438AccessFlags AccessFlags::allFlagsGrantableOnGlobalWithParameterLevel () { return Helper::instance ().getAllFlagsGrantableOnGlobalWithParameterLevel (); }
0 commit comments