• unknown's avatar
    Save and clear run context before executing a stored function or trigger and restore it afterwards. · 262075d1
    unknown authored
    This allows us to use statement replication with functions and triggers
    The following things are fixed with this patch:
    - NOW() and automatic timestamps takes the value from the main event for functions and triggers (which allows these to replicate with statement level logging)
    - No side effects for triggers or functions with auto-increment values(), last_insert_id(), rand() or found_rows()
    - Triggers can't return result sets
    
    Fixes bugs:
    #12480: NOW() is not constant in a trigger
    #12481: Using NOW() in a stored function breaks statement based replication
    #12482: Triggers has side effects with auto_increment values
    #11587: trigger causes lost connection error
    
    
    mysql-test/r/trigger.result:
      Added test fpr big
    mysql-test/t/sp-error.test:
      Changed error message numbers
    mysql-test/t/trigger.test:
      Added test for trigger returning result (#11587)
    sql/item_func.cc:
      Store the first used seed value for RAND() value.
      (This makes rand() replicatable in functions and triggers)
      Save and clear run context before executing a stored function and restore it afterwards.
      This removes side effects of stored functions for RAND(), auto-increment values and NOW() and makes most stored function replicatable
    sql/share/errmsg.txt:
      Reuse error message also for triggers
    sql/sp_head.cc:
      If in function or trigger, don't change value of NOW()
      (This allows us to use statement replication with functions that directly or indirectly uses timestamps)
    sql/sql_class.cc:
      Added framework for storing and retrieving run context while exceuting triggers or stored functions.
    sql/sql_class.h:
      Added framework for storing and retrieving run context while exceuting triggers or stored functions.
    sql/sql_parse.cc:
      If in function or trigger, don't change value of NOW()
      (This allows us to use statement replication with functions that directly or indirectly uses timestamps)
    sql/sql_trigger.cc:
      Moved process_triggers function from sql_trigger.h
      Use reset/restore sub_statement_state while executing triggers to avoid side effects and make them replicatable
    sql/sql_trigger.h:
      Moved process_triggers function from sql_trigger.h
      Use reset/restore sub_statement_state while executing triggers to avoid side effects and make them replicatable
    sql/sql_yacc.yy:
      Give error message if trigger can return a result set (Bug #11587)
    tests/fork_big2.pl:
      Removed return from end of lines
    mysql-test/r/rpl_trigger.result:
      New BitKeeper file ``mysql-test/r/rpl_trigger.result''
    mysql-test/t/rpl_trigger.test:
      New BitKeeper file ``mysql-test/t/rpl_trigger.test''
    262075d1
sql_trigger.h 3.85 KB