• unknown's avatar
    Better fix for bug#22830 · 63030d76
    unknown authored
    Events: crash with procedure which alters events with function
    
    Post-review CS
    
    This fix also changes the handling of KILL command combined with
    subquery. It changes the error message given back to "not supported",
    from parse error. The error for CREATE|ALTER EVENT has also been changed
    to generate "not supported yet" instead of parse error.
    In case of a SP call, the error is "not supported yet". This change
    cleans the parser from code which should not belong to there. Still
    LEX::expr_allows_subselect is existant because it simplifies the handling
     of SQLCOM_HA_READ which forbids subselects.
    
    
    mysql-test/r/events_bugs.result:
      update resut
    mysql-test/r/events_grant.result:
      update result
    mysql-test/r/kill.result:
      the error message has been changed for KILL
    mysql-test/t/events_bugs.test:
      Update old tests with the new emitted error
      
      Add a test case for
      BUG#22830 Events: crash with procedure which alters events with function
    mysql-test/t/events_grant.test:
      add ORDER BY clause to keep the result deterministic.
    mysql-test/t/kill.test:
      use name of the error, and change the error
      from parse error, to not supported
    sql/sql_lex.cc:
      Add an auxiliary function that checks whether SP and/or
      tables are used in the statement. This function is helpful for
      statements that cannot handle subqueries ans SP calls. Adding out
      of the parser cleans the latter of handling of special cases and
      letting it do its job of parsing.
    sql/sql_lex.h:
      helper function to check whether a table or SP was used
    sql/sql_parse.cc:
      Use LEX::table_or_sp_used() for SQLCOM_CREATE_EVENT, SQLCOM_ALTER_EVENT
      and SQLCOM_KILL. SQLCOM_DROP event does not use `expr` rule and thus a check is
      not needed.
    sql/sql_yacc.yy:
      Remove usage of LEX::expr_allows_subselect for CREATE|ALTER EVENT
      and KILL. There is only one left occurence - SQLCOM_HAREAD, but it 
      adds one table to the list of tables
    63030d76
sql_parse.cc 231 KB