MySQL 8.0.40
Source Code Documentation
View_error_handler Class Reference

An Internal_error_handler that suppresses errors regarding views' underlying tables that occur during privilege checking. More...

#include <error_handler.h>

Inheritance diagram for View_error_handler:
[legend]

Public Member Functions

 View_error_handler (Table_ref *top_view)
 
bool handle_condition (THD *thd, uint sql_errno, const char *, Sql_condition::enum_severity_level *level, const char *message) override
 Handle a sql condition. More...
 

Private Attributes

Table_refm_top_view
 

Additional Inherited Members

- Protected Member Functions inherited from Internal_error_handler
 Internal_error_handler ()
 
Internal_error_handlerprev_internal_handler () const
 
virtual ~Internal_error_handler ()=default
 

Detailed Description

An Internal_error_handler that suppresses errors regarding views' underlying tables that occur during privilege checking.

It hides errors which show view underlying table information. This happens in the cases when

  • A view's underlying table (e.g. referenced in its SELECT list) does not exist or columns of underlying table are altered. There should not be an error as no attempt was made to access it per se.
  • Access is denied for some table, column, function or stored procedure such as mentioned above. This error gets raised automatically, since we can't untangle its access checking from that of the view itself.

    There are currently two mechanisms at work that handle errors for views based on an Internal_error_handler. This one and another one is Show_create_error_handler. The latter handles errors encountered during execution of SHOW CREATE VIEW, while this mechanism using this method is handles SELECT from views. The two methods should not clash.

Constructor & Destructor Documentation

◆ View_error_handler()

View_error_handler::View_error_handler ( Table_ref top_view)
inline

Member Function Documentation

◆ handle_condition()

bool View_error_handler::handle_condition ( THD thd,
uint  sql_errno,
const char *  sqlstate,
Sql_condition::enum_severity_level level,
const char *  msg 
)
overridevirtual

Handle a sql condition.

This method can be implemented by a subclass to achieve any of the following:

  • mask a warning/error internally, prevent exposing it to the user,
  • mask a warning/error and throw another one instead. When this method returns true, the sql condition is considered 'handled', and will not be propagated to upper layers. It is the responsibility of the code installing an internal handler to then check for trapped conditions, and implement logic to recover from the anticipated conditions trapped during runtime.

This mechanism is similar to C++ try/throw/catch:

  • 'try' correspond to THD::push_internal_handler(),
  • 'throw' correspond to my_error(), which invokes my_message_sql(),
  • 'catch' correspond to checking how/if an internal handler was invoked, before removing it from the exception stack with THD::pop_internal_handler().
Parameters
thdthe calling thread
sql_errnothe error number for the condition raised.
sqlstatethe SQLSTATE for the condition raised.
levelthe severity level for the condition raised.
msgthe error message for the condition raised.
Returns
true if the condition is handled

Implements Internal_error_handler.

Member Data Documentation

◆ m_top_view

Table_ref* View_error_handler::m_top_view
private

The documentation for this class was generated from the following files: