• unknown's avatar
    Fix for Bug #9913 "udf_deinit is not called after execution of PS" · e6ce543f
    unknown authored
    (aka "deinit is not called when calling udf from trigger").
    
    We should call udf_deinit() function during cleanup phase after prepared
    (or ordinary) statement execution instead of calling it from Item's
    desctructor.
    
    No test case is provided since it is hard to test UDF's from our test
    suite.
    
    
    sql/item_func.cc:
      udf_handler:
       Moved all functionality from udf_handler::~udf_handler() to 
       udf_handler::cleanup() method which will be called after
       each PS execution, thus allowing udf_deinit() to be executed
       symetrically with udf_init() (which is executed for each
       execution of PS).
      Added Item_udf_func::cleanup() which performs proper cleanup after
      execution of PS with UDF function.
    sql/item_func.h:
      Added Item_udf_func::cleanup() method to perform cleanup properly after
      execution of PS with UDF function.
    sql/item_sum.cc:
      Added Item_udf_sum::cleanup() method to perform cleanup properly after
      execution of PS with aggregate UDF function.
    sql/item_sum.h:
      Added Item_udf_sum::cleanup() method to perform cleanup properly after
      execution of PS with aggregate UDF function.
    sql/sql_udf.h:
      Added udf_handler::cleanup() method declaration which is responsible
      for cleaning up UDF execution context at the end of execution of
      statement (using ~udf_handler() for this purprose did not worked for PS).
    e6ce543f
sql_udf.h 3.59 KB