• unknown's avatar
    Bug#19111: TRIGGERs selecting from a VIEW on the firing base table fail. · 469ff92d
    unknown authored
    In a trigger or a function used in a statement it is possible to do
    SELECT from a table being modified by the statement.  However,
    encapsulation of such SELECT into a view and selecting from a view
    instead of direct SELECT was not possible.
    
    This happened because tables used by views (which in their turn
    were used from functions/triggers) were not excluded from checks
    in unique_table() routine as it happens for the rest of tables
    added to the statement table list for prelocking.
    
    With this fix we ignore all such tables in unique_table(), thus
    providing consistency: inside a trigger or a functions SELECT from
    a view may be used where plain SELECT is allowed.  Modification of
    the same table from function or trigger is still disallowed.  Also,
    this patch doesn't affect the case where SELECT from the table being
    modified is done outside of function of trigger, such SELECTs are
    still disallowed (this limitation and visibility problem when function
    select from a table being modified are subjects of bug 21326).  See
    also bug 22427.
    
    
    mysql-test/r/view.result:
      Add result for bug#19111: TRIGGERs selecting from a VIEW on the
      firing base table fail.
    mysql-test/t/view.test:
      Add test case for bug#19111: TRIGGERs selecting from a VIEW on the
      firing base table fail.
    sql/sql_base.cc:
      In unique_table() do not check tables that are used in a stored
      function or a trigger ('prelocking_placeholder' is set).  If such
      function or a trigger will attempt to modify a table, the error will
      be given, however select is allowed there.
    469ff92d
sql_base.cc 164 KB