• Konstantin Osipov's avatar
    A fix for · 7b8bfb2a
    Konstantin Osipov authored
    Bug#12093 "SP not found on second PS execution if another thread 
    drops other SP in between" and
    Bug#21294 "executing a prepared statement that executes a stored 
    function which was recreat"
    
    Stored functions are resolved at prepared statement prepare only.
    If someone flushes the stored functions cache between prepare and
    execute, execution fails.
    
    The fix is to detect the situation of the cache flush and automatically
    reprepare the prepared statement after it.
    
    mysql-test/r/ps_ddl.result:
      Update results (Bug#12093 and Bug#21294, the test cases are already
      in the source tree).
    mysql-test/r/ps_ddl1.result:
      Update results (Bug#12093 and Bug#21294, the test cases are already
      in the source tree).
    mysql-test/r/sp-error.result:
      Update results (Bug#12093 and Bug#21294, the test cases are already
      in the source tree).
    mysql-test/t/ps_ddl.test:
      Modify the test to not expect an error where there is no error
      any more (Bug#12093, Bug#21294).
    mysql-test/t/ps_ddl1.test:
      Modify the test to not expect an error where there is no error
      any more (Bug#12093, Bug#21294).
    mysql-test/t/sp-error.test:
      Modify the test to not expect an error where there is no error
      any more (Bug#12093, Bug#21294).
    sql/sp_cache.cc:
      Implement sp_cache_version() -- returns the current version of 
      a stored routines cache.
    sql/sp_cache.h:
      Declare sp_cache_version().
    sql/sql_prepare.cc:
      Keep track of stored functions cache version, and invalidate
      the statement if it changed between prepared statement
      prepare and execute (and the statement actually uses stored routines).
    7b8bfb2a
ps_ddl.test 49.2 KB