An error occurred fetching the project authors.
  1. 23 Nov, 2005 1 commit
  2. 22 Nov, 2005 1 commit
    • unknown's avatar
      Fix for BUG#13549 "Server crash with nested stored procedures · 6574612d
      unknown authored
      if inner routine has more local variables than outer one, and
      one of its last variables was used as argument to NOT operator".
      
      THD::spcont was non-0 when we were parsing stored routine/trigger
      definition during execution of another stored routine. This confused
      methods of Item_splocal and forced them use wrong runtime context.
      Fix ensures that we always have THD::spcont equal to zero during
      routine/trigger body parsing. This also allows to avoid problems
      with errors which occur during parsing and SQL exception handlers.
      
      
      mysql-test/r/sp.result:
        Test suite for bug#13549.
      mysql-test/r/trigger.result:
        Test suite for bug#13549.
      mysql-test/t/sp.test:
        Test suite for bug#13549.
      mysql-test/t/trigger.test:
        Test suite for bug#13549.
      sql/item.cc:
        Protection against using wrong context by SP local variable.
      sql/item.h:
        Protection against using wrong context by SP local variable.
      sql/protocol.cc:
        An incorrect macro name fixed.
      sql/protocol.h:
        An incorrect macro name fixed.
      sql/sp.cc:
        Do not allow SP which we are parsing to use other SP
        context (BUG#13549).
      sql/sp_head.cc:
        Protection against using wrong context by SP local variable.
      sql/sp_rcontext.h:
        Protection against using wrong context by SP local variable.
      sql/sql_cache.h:
        An incorrect macro name fixed.
      sql/sql_class.cc:
        Protection against using wrong context by SP local variable.
      sql/sql_class.h:
        Protection against using wrong context by SP local variable.
      sql/sql_trigger.cc:
        Do not allow Trigger which we are parsing to use
        other SP context (BUG#13549).
      sql/sql_yacc.yy:
        Protection against using wrong context by SP local variable.
      6574612d
  3. 20 Nov, 2005 1 commit
    • unknown's avatar
      Inefficient usage of String::append() fixed. · fe63e095
      unknown authored
      Bad examples of usage of a string with its length fixed.
      The incorrect length in the trigger file configuration descriptor
        fixed (BUG#14090).
      A hook for unknown keys added to the parser to support old .TRG files.
      
      
      sql/field.cc:
        Inefficient usage of String::append() fixed.
        Bad examples of usage of a string with its length fixed.
      sql/ha_berkeley.cc:
        A bad example of usage of a string with its length fixed.
      sql/ha_federated.cc:
        Inefficient usage of String::append() fixed.
      sql/ha_myisammrg.cc:
        Bad examples of usage of a string with its length fixed.
      sql/handler.cc:
        Inefficient usage of String::append() fixed.
      sql/item.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item.h:
        A bad example of usage of a string with its length fixed.
      sql/item_cmpfunc.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_func.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_strfunc.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_subselect.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_sum.cc:
        Bad examples of usage of a string with its length fixed.
        Inefficient usage of String::append() fixed.
      sql/item_timefunc.cc:
        Inefficient using of String::append() fixed.
        Bad examples of usage of a string with its length fixed.
      sql/item_uniq.h:
        Bad examples of usage of a string with its length fixed.
      sql/key.cc:
        Bad examples of usage of a string with its length fixed.
      sql/log.cc:
        Bad examples of usage of a string with its length fixed.
      sql/log_event.cc:
        Bad examples of usage of a string with its length fixed.
      sql/mysqld.cc:
        The dummy parser hook allocated.
      sql/opt_range.cc:
        Inefficient usage of String::append() fixed.
      sql/parse_file.cc:
        Bad examples of usage of a string with its length fixed.
        A hook for unknown keys added to the parser.
      sql/parse_file.h:
        A hook for unknown keys added to the parser.
      sql/protocol.cc:
        A bad example of usage of a string with its length fixed.
      sql/repl_failsafe.cc:
        Bad examples of usage of a string with its length fixed.
      sql/share/errmsg.txt:
        A warning for old format config file.
      sql/slave.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sp.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sp_head.cc:
        Bad examples of usage of a string with its length fixed.
      sql/spatial.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_acl.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_analyse.cc:
        Bad examples of usage of a string with its length fixed.
        Inefficient usage of String::append() fixed.
      sql/sql_lex.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_load.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_parse.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_prepare.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_select.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_show.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_string.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_string.h:
        The macro definition moved to sql_string.h to
          be accessible in all parts of server.
      sql/sql_table.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_trigger.cc:
        Bad examples of usage of a string with its length fixed.
        The incorrect length in the trigger file configuration descriptor
          fixed (BUG#14090).
        The hook for processing incorrect sql_mode record added.
      sql/sql_view.cc:
        A dummy  hook used for parsing views.
      sql/structs.h:
        The macro definition moved to sql_string.h to be
          accessible in all parts of server.
      sql/table.cc:
        A bad example of usage of a string with its length fixed.
      sql/tztime.cc:
        A bad example of usage of a string with its length fixed.
      fe63e095
  4. 10 Nov, 2005 2 commits
    • unknown's avatar
      WL#2818 (Add creator to the trigger definition for privilege · 7dbea7df
      unknown authored
      checks on trigger activation)
      
      
      mysql-test/r/information_schema.result:
        Update result file: a new column DEFINER has been added to
        INFORMATION_SCHEMA.TRIGGERS.
      mysql-test/r/mysqldump.result:
        Update result file: a new column DEFINER has been added to
        INFORMATION_SCHEMA.TRIGGERS.
      mysql-test/r/rpl_ddl.result:
        Update result file: a new column DEFINER has been added to
        INFORMATION_SCHEMA.TRIGGERS.
      mysql-test/r/rpl_sp.result:
        Update result file: a new clause DEFINER has been added to
        CREATE TRIGGER statement.
      mysql-test/r/rpl_trigger.result:
        Results for new test cases were added.
      mysql-test/r/skip_grants.result:
        Error message has been changed.
      mysql-test/r/trigger.result:
        Added DEFINER column.
      mysql-test/r/view.result:
        Error messages have been changed.
      mysql-test/r/view_grant.result:
        Error messages have been changed.
      mysql-test/t/mysqldump.test:
        Drop created procedure to not affect further tests.
      mysql-test/t/rpl_trigger.test:
        Add tests for new column in information schema.
      mysql-test/t/skip_grants.test:
        Error tag has been renamed.
      mysql-test/t/view.test:
        Error tag has been renamed.
      mysql-test/t/view_grant.test:
        Error tag has been changed.
      sql/item_func.cc:
        Fix typo in comments.
      sql/mysql_priv.h:
        A try to minimize copy&paste:
          - introduce operations to be used from sql_yacc.yy;
          - introduce an operation to be used from trigger and
            view processing code.
      sql/share/errmsg.txt:
        - Rename ER_NO_VIEW_USER to ER_MALFORMED_DEFINER in order to
          be shared for view and trigger implementations;
        - Fix a typo;
        - Add a new error code for trigger warning.
      sql/sp.cc:
        set_info() was split into set_info() and set_definer().
      sql/sp_head.cc:
        set_info() was split into set_info() and set_definer().
      sql/sp_head.h:
        set_info() was split into set_info() and set_definer().
      sql/sql_acl.cc:
        Add a new check: exit from the cycle if the table is NULL.
      sql/sql_lex.h:
        - Rename create_view_definer to definer, since it is used for views
          and triggers;
        - Change st_lex_user to LEX_USER, since st_lex_user is a structure.
          So, formally, it should be "struct st_lex_user", which is longer
          than just LEX_USER;
        - Add trigger_definition_begin.
      sql/sql_parse.cc:
        - Add a new check: exit from the cycle if the table is NULL;
        - Implement definer-related functions.
      sql/sql_show.cc:
        Add DEFINER column.
      sql/sql_trigger.cc:
        Add DEFINER support for triggers.
      sql/sql_trigger.h:
        Add DEFINER support for triggers.
      sql/sql_view.cc:
        Rename create_view_definer to definer.
      sql/sql_yacc.yy:
        Add support for DEFINER-clause in CREATE TRIGGER statement.
        
        Since CREATE TRIGGER and CREATE VIEW can be similar at the start,
        yacc is unable to distinguish between them. So, had to modify both
        statements in order to make it parsable by yacc.
      mysql-test/r/trigger-compat.result:
        Result file for triggers backward compatibility test.
      mysql-test/r/trigger-grant.result:
        Result file of the test for WL#2818.
      mysql-test/t/trigger-compat.test:
        Triggers backward compatibility test: check that the server
        still can load triggers w/o definer attribute and modify
        tables with such triggers (add a new trigger, etc).
      mysql-test/t/trigger-grant.test:
        Test for WL#2818 -- check that DEFINER support in triggers
        works properly
      7dbea7df
    • unknown's avatar
      WL#2971 "change log-bin-trust-routine-creators=0 to apply only to functions". · 5d9c8e95
      unknown authored
      Indeed now that stored procedures CALL is not binlogged, but instead the invoked substatements are,
      the restrictions applied by log-bin-trust-routine-creators=0 are superfluous for procedures.
      They still need to apply to functions where function calls are written to the binlog (for example as "DO myfunc(3)").
      We rename the variable to log-bin-trust-function-creators but allow the old name until some future version (and issue a warning if old name is used).
      
      
      mysql-test/mysql-test-run.pl:
        update to new option name
      mysql-test/mysql-test-run.sh:
        update to new option name
      mysql-test/mysql_test_run_new.c:
        update to new option name
      mysql-test/r/rpl_sp.result:
        result update
      mysql-test/t/rpl_sp-slave.opt:
        we need to skip this error to not hit BUG#14769
      mysql-test/t/rpl_sp.test:
        Test update:
        1) as log-bin-trust-routine-creators now affects only functions, the testing of this option, which was
        mainly done on procedures, is moved to functions
        2) cleanup is simplified; and instead of many SHOW BINLOG EVENTS we do a big one in the end, which is more
        maintainable.
        3) we test a few more function and procedures cases to see how they replicate.
        4) removing out-of-date comments
      sql/item_func.cc:
        This warning is wrong since binlogging of functions was changed in August. If a function fails
        in the middle, it will be binlogged with its error code (i.e. properly).
      sql/mysql_priv.h:
        variable name changed
      sql/mysqld.cc:
        option name changes. A precision about --read-only.
      sql/set_var.cc:
        a new class sys_var_trust_routine_creators to be able to issue a "this is a deprecated variable" warning if used.
      sql/set_var.h:
        new class to be able to issue a "this is a deprecated variable" warning if used.
      sql/share/errmsg.txt:
        routine -> function
      sql/sp.cc:
        log-bin-trust-routine-creators now applies only to functions.
      sql/sql_parse.cc:
        1) sending ER_FAILED_ROUTINE_BREAK_BINLOG is wrong since August as we don't binlog CALL anymore but instead binlog the substatements;
        the clear_error() goes away too as it was necessary only when we created a binlog event from the "CALL" statement.
        2) log-bin-trust-routine-creators now applies only to functions.
      sql/sql_trigger.cc:
        comments.
      5d9c8e95
  5. 17 Oct, 2005 1 commit
    • unknown's avatar
      Fix for bug #12739 "Deadlock in multithreaded environment during creating/ · dd02b98d
      unknown authored
      droping trigger on InnoDB table".
      
      Deadlock occured in cases when we were trying to create two triggers for
      the same InnoDB table concurrently and both threads were able to reach
      close_cached_table() simultaneously. Bugfix implements new approach to
      table locking and table cache invalidation during creation/dropping
      of trigger.
      
      No testcase is supplied since bug was repeatable only under high concurrency.
      
      
      sql/mysql_priv.h:
        reopen_name_locked_table():
          Changed function signature to make it more robust against erroneous usage.
      sql/sql_base.cc:
        reopen_name_locked_table():
          Changed function signature to make it more robust against erroneous usage.
          Obtaining LOCK_open lock is now resposibility of caller.
          When searching for the table to open we should not prefer connection's current
          database over database which was explicitly specified in TABLE_LIST::db member
          (even if database is not explicitly specified for table in original query
          TABLE_LIST::db will be set properly at parsing stage).
          Fixed behavior of function in cases when error occurs during opening of table.
      sql/sql_table.cc:
        prepare_for_restore()/prepare_for_repair():
          We should not prefer connection's current database over database which was
          specified in TABLE_LIST::db member (even if database is not explicitly
          specified for table in original query TABLE_LIST::db will be set properly
          at parsing stage). Fixed behavior in unlikely case when we are unable
          to open table which we are restoring/reparing at the end of preparation
          stage.
      sql/sql_trigger.cc:
        mysql_create_or_drop_trigger():
          Now instead of opening and locking table, creating trigger, and then trying
          to invalidate all instances of this table in table cache, we obtain name
          lock on table first (thus ensuring that no other thread has this table
          open), open it, create trigger and then close table therefore releasing lock.
          New approach is more in line with other places where change .frm files
          (i.e. change table meta-data).
          With this change we also get rid of deadlock which occured in cases when we
          were trying to create two triggers for the same InnoDB table concurrently
          and both threads were able to reach close_cached_table() simultaneously.
          (Alternative was to forbid to InnoDB downgrade locks for CREATE/DROP
           TRIGGER statements in one way or another but I think that proposed
           solution is better long term).
      dd02b98d
  6. 15 Sep, 2005 1 commit
    • unknown's avatar
      WL#2787 (part 2, ver 3 (merged)) changed securety context switching · 84f029a4
      unknown authored
      libmysqld/lib_sql.cc:
        changed securety context switching
      mysql-test/r/rpl_sp.result:
        now it show real information from changed security context of SP (checked)
      sql/ha_innodb.cc:
        changed securety context switching
      sql/item.cc:
        changed securety context switching
      sql/item_func.cc:
        changed securety context switching
      sql/item_strfunc.cc:
        changed securety context switching
      sql/log.cc:
        changed securety context switching
      sql/mysql_priv.h:
        changed securety context switching
      sql/mysqld.cc:
        changed securety context switching
      sql/repl_failsafe.cc:
        changed securety context switching
      sql/set_var.cc:
        changed securety context switching
      sql/slave.cc:
        changed securety context switching
      sql/sp.cc:
        changed securety context switching
      sql/sp_head.cc:
        changed securety context switching
        in case of inability to switch context  we return error now
      sql/sp_head.h:
        changed securety context switching
      sql/sql_acl.cc:
        changed securety context switching
      sql/sql_acl.h:
        changed securety context switching
      sql/sql_base.cc:
        changed securety context switching
      sql/sql_class.cc:
        changed securety context switching
      sql/sql_class.h:
        changed securety context switching
      sql/sql_db.cc:
        changed securety context switching
      sql/sql_insert.cc:
        changed securety context switching
      sql/sql_parse.cc:
        changed securety context switching
      sql/sql_show.cc:
        changed securety context switching
      sql/sql_trigger.cc:
        changed securety context switching
      sql/sql_view.cc:
        changed securety context switching
      sql/sql_yacc.yy:
        changed securety context switching
      84f029a4
  7. 14 Sep, 2005 1 commit
    • unknown's avatar
      Fix for bug #12704 "Server crashes during trigger execution". · d5303b8a
      unknown authored
      This bug occurs when some trigger for table used by DML statement is created
      or changed while statement was waiting in lock_tables(). In this situation
      prelocking set which we have calculated becames invalid which can easily lead
      to errors and even in some cases to crashes.
      
      With proposed patch we no longer silently reopen tables in lock_tables(),
      instead caller of lock_tables() becomes responsible for reopening tables and
      recalculation of prelocking set.
      
      
      mysql-test/t/trigger.test:
        Added tests for bug #12704 "Server crashes during trigger execution".
        Unfortunately these tests rely on the order in which tables are locked
        by statement so they are non-determenistic and therefore should be disabled.
      sql/lock.cc:
        mysql_lock_tables():
          Now instead of always reopening altered or dropped tables by itself
          mysql_lock_tables() can notify upper level and rely on caller doing this.
      sql/mysql_priv.h:
        Now mysql_lock_tables() can either reopen deleted or altered tables by itself
        or notify caller about such situation through 'need_reopen' argument and rely
        on it in this.
        Also lock_tables() has new 'need_reopen' out parameter through which it
        notifies caller that some tables were altered or dropped so he needs to reopen
        them (and rebuild prelocking set some triggers may change or simply appear).
      sql/sp.cc:
        sp_add_used_routine():
          To be able to restore LEX::sroutines_list to its state right after parsing
          we now adjust  LEX::sroutines_list_own_last/sroutines_list_own_elements when
          we add directly used routine.
        sp_remove_not_own_routines():
          Added procedure for restoring LEX::sroutines/sroutines_list to their state
          right after parsing (by throwing out non-directly used routines).
        sp_cache_routines_and_add_tables_for_view()/sp_update_stmt_used_routines():
          We should use LEX::sroutines_list instead of LEX::sroutines as source of
          routines used by view, since LEX::sroutines is not availiable for view
          on second attempt to open it (see comment in open_tables() about it).
      sql/sp.h:
        sp_remove_not_own_routines():
          Added procedure for restoring LEX::sroutines/sroutines_list to their state
          right after parsing (by throwing out non-directly used routines).
      sql/sp_head.cc:
        Removed assert which is no longer always true.
      sql/sql_base.cc:
        reopen_table():
          When we re-open table and do shallow copy of TABLE object we should adjust
          pointers to it in associated Table_triggers_list object. Removed nil
          operation.
        open_tables():
          Now this function is able to rebuild prelocking set for statement if it is
          needed. It also correctly handles FLUSH TABLES which may occur during its
          execution.
        lock_tables():
          Instead of allowing mysql_lock_tables() to silently reopen altered or dropped
          tables let us notify caller and rely on that it will do reopen itself.
          This solves the problem when trigger suddenly appears or changed during
          mysq_lock_tables().
        close_tables_for_reopen():
          Added routine for properly preparing for reopening of tables and recalculation
          of set of prelocked tables.
      sql/sql_handler.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_insert.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_lex.cc:
        LEX:
          Added 'sroutines_list_own_last' and 'sroutines_list_own_elements' members
          which are used for keeping state in which 'sroutines_list' was right after
          statement parsing (and for restoring of this list to this state).
      sql/sql_lex.h:
        LEX:
          Added 'sroutines_list_own_last' and 'sroutines_list_own_elements' members
          which are used for keeping state in which 'sroutines_list' was right after
          statement parsing (and for restoring of this list to this state).
          Added chop_off_not_own_tables() method to simplify throwing away list
          of implicitly used (prelocked) tables.
      sql/sql_prepare.cc:
        Now instead of silently reopening altered or dropped tables in
        lock_tables() we notify caller and rely on that the caller will
        reopen tables.
      sql/sql_table.cc:
        Here we let mysql_lock_tables() to reopen dropped or altered tables by itself.
      sql/sql_trigger.cc:
        Added Table_triggers_list::set_table() method to adjust Table_triggers_list
        to new pointer to TABLE instance.
      sql/sql_trigger.h:
        Added Table_triggers_list::set_table() method to adjust Table_triggers_list
        to new pointer to TABLE instance.
      sql/sql_update.cc:
        Now instead of silently reopening altered or dropped tables in
        lock_tables() we notify caller and rely on that the caller will
        reopen tables.
      d5303b8a
  8. 15 Aug, 2005 1 commit
    • unknown's avatar
      Save and clear run context before executing a stored function or trigger and restore it afterwards. · a914b527
      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''
      a914b527
  9. 31 Jul, 2005 1 commit
    • unknown's avatar
      Fixes during review of new pushed code · 6b3478ec
      unknown authored
      Change bool in C code to my_bool
      Added to mysqltest --enable_parsning and --disable_parsing to avoid to have to comment parts of tests
      Added comparison of LEX_STRING's and use this to compare file types for view and trigger files.
      
      
      client/client_priv.h:
        Added OPT_TRIGGERS (to get rid of compiler warning)
      client/mysql.cc:
        Added cast to get rid of compiler warning
      client/mysqldump.c:
        Added OPT_TRIGGERS (to get rid of compiler warning)
        Abort if we can't write to outfile (even if --ignore-errors is given)
      client/mysqltest.c:
        Added --enable_parsning and --disable_parsing to avoid to have to comment parts of tests
      include/my_sys.h:
        Make my_progname const
      include/my_time.h:
        Avoid using 'bool' in C programs
      mysql-test/lib/init_db.sql:
        Align with mysql_create_system_tables
        (Ideally this file should be auto-generated from the above script)
      mysql-test/r/mysqltest.result:
        Test for --enable_parsing
      mysql-test/r/variables.result:
        Update results after fix for overflow checking of max_heap_table_size
      mysql-test/t/information_schema.test:
        USe --enable/disable parsing instead of comments
      mysql-test/t/mysqltest.test:
        Test for --enable_parsing
      mysql-test/t/sp.test:
        USe --enable/disable parsing instead of comments
      mysql-test/t/variables.test:
        Portability fix for 64 bit systems
      mysql-test/t/view.test:
        USe --enable/disable parsing instead of comments
      mysys/my_init.c:
        May my_progname const
      mysys/my_static.c:
        May my_progname const
      mysys/thr_lock.c:
        Remove not needed casts
      sql-common/my_time.c:
        Change bool -> my_bool as bool is not portable in C programs
      sql/field.cc:
        Test number_to_datetime() for -1 instead of < 0 (Safety fix)
        New prototype for TIME_to_timestamp()
      sql/item.h:
        Don't have prototypes for both uint32 and ulong as these 'may' be the same thing
      sql/item_timefunc.cc:
        New prototype for TIME_to_timestamp()
      sql/log.cc:
        Remove compiler warnings
      sql/mysql_priv.h:
        New prototype for TIME_to_timestamp()
        Added function for comparing LEX_STRING
      sql/set_var.cc:
        Added overflow checking when setting ulong variable
      sql/sql_base.cc:
        Added function is_equal()
        Changed strncmp -> is_equal() as strncmp() to not match "V" (instead of "VIEW")
      sql/sql_class.cc:
        Added comment
      sql/sql_select.cc:
        Portability fixes
        After review fixes
      sql/sql_trigger.cc:
        Use 'tables_alias_charset' for comparing database name
        Use 'is_equal()' to compare file type. (Old code didn't do the comparison correctly)
      sql/sql_view.cc:
        Use 'is_equal()' to compare file type. (Old code didn't do the comparison correctly)
      sql/time.cc:
        New prototype for TIME_to_timestamp() to allow easyer mapping to C function
      sql/tztime.cc:
        bool -> my_bool (to allow calling C code from C++ code)
      sql/tztime.h:
        bool -> my_bool (to allow calling C code from C++ code)
      6b3478ec
  10. 28 Jul, 2005 2 commits
    • unknown's avatar
      store/restore sql_mode which was in force during ctrigger creation (BUG#5891) · a66928bb
      unknown authored
      other sql_mode fixes
      
      
      mysql-test/r/information_schema.result:
        changes in information schema
      mysql-test/r/trigger.result:
        storing and restoring sql modes for triggers
      mysql-test/t/trigger.test:
        storing and restoring parsing modes for triggers
      sql/mysqld.cc:
        add length of mode names
      sql/parse_file.cc:
        new type of list (ulonglong)
      sql/parse_file.h:
        new type of list (ulonglong)
      sql/set_var.cc:
        mode output made as static method
      sql/set_var.h:
        mode output made as static method
      sql/sp_head.cc:
        added sql_mode storing/restoring during SP execution
        optimised sql_mode printing
      sql/sp_head.h:
        comment fixed according this changes
      sql/sql_show.cc:
        added sql_mode field
      sql/sql_trigger.cc:
        store/restore sql_mode which was in force during ctrigger creation
      sql/sql_trigger.h:
        store/restore sql_mode which was in force during ctrigger creation
      sql/sql_view.cc:
        fixed sql_mode
      a66928bb
    • unknown's avatar
      Cleanups during review of new code · 79f75d8f
      unknown authored
      Ensure mysql_close() is called if mysql_set_character_set() fails
      
      
      libmysql/libmysql.c:
        Indentation cleanup
      mysql-test/r/select.result:
        Fix bad merge & align code with 4.1
      mysql-test/r/type_newdecimal.result:
        Added test of extreme case
      mysql-test/t/select.test:
        Fix bad merge & align code with 4.1
      mysql-test/t/type_newdecimal.test:
        Added test of extreme case
      mysys/charset.c:
        Removed not used variable
      mysys/default.c:
        Simplify code
      sql-common/client.c:
        Ensure mysql_close() is called if mysql_set_character_set() fails
      sql/log.cc:
        strmov(strmov())  -> strxmov()
      sql/sp.cc:
        Indentation fixes
      sql/sql_acl.cc:
        Indentation fixes
      sql/sql_base.cc:
        Added commments
        Moved variable to inner block
      sql/sql_show.cc:
        Simple optimization (removed loop variable)
      sql/sql_trigger.cc:
        strmov(strmov())  -> strxmov()
      strings/decimal.c:
        Indentation fixes
      79f75d8f
  11. 27 Jul, 2005 1 commit
  12. 19 Jul, 2005 1 commit
    • unknown's avatar
      Fix for bugs #5892/6182/8751/8758/10994 (based on Antony's patch) · a32bf7fb
      unknown authored
        "Triggers have the wrong namespace"
        "Triggers: duplicate names allowed"
        "Triggers: CREATE TRIGGER does not accept fully qualified names"
        "SHOW TRIGGERS"
      
      
      mysql-test/r/information_schema.result:
        Added tests for new INFORMATION_SCHEMA.TRIGGERS view and SHOW TRIGGERS command.
      mysql-test/r/information_schema_db.result:
        INFORMATION_SCHEMA.TRIGGERS view was added.
      mysql-test/r/rpl_sp.result:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
      mysql-test/r/trigger.result:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
        Added test checking that triggers have database wide namespace.
        Added test for bug #8791 "Triggers: Allowed to create triggers on a subject
        table in a different DB".
      mysql-test/r/view.result:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
      mysql-test/t/information_schema.test:
        Added tests for new INFORMATION_SCHEMA.TRIGGERS view and SHOW TRIGGERS command.
      mysql-test/t/rpl_sp.test:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
      mysql-test/t/trigger.test:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
        Added test checking that triggers have database wide namespace.
        Added test for bug #8791 "Triggers: Allowed to create triggers on a subject
        table in a different DB".
      mysql-test/t/view.test:
        Now DROP TRIGGER interprets first part of trigger identifier as database
        name and not as table name. Adjusted tests properly.
      sql/handler.cc:
        Added .TRN tho the list of known file extensions assoicated with tables.
      sql/item.h:
        trg_action_time_type/trg_event_type enums:
          Added TRG_ACTION_MAX/TRG_EVENT_MAX elements which should be used instead of
          magical values in various loops where we iterate through all types of trigger
          action times or/and trigger event types.
      sql/lex.h:
        Added new symbol "TRIGGERS".
      sql/mysql_priv.h:
        Added declaration of constant holding extension for trigger name (.TRN) files.
      sql/mysqld.cc:
        Added statistical variable for SHOW TRIGGERS command.
      sql/share/errmsg.txt:
        Added error message saying that one attempts to create trigger in wrong schema.
      sql/sp.cc:
        Replaced magical values with TRG_EVENT_MAX/TRG_ACTION_MAX constants.
      sql/sql_base.cc:
        open_unireg_entry():
          Now Table_triggers_list::check_n_load() has one more argument which
          controls whether we should prepare Table_triggers_list with fully functional
          triggers or load only their names.
      sql/sql_lex.h:
        Added element for new SHOW TRIGGERS command to enum_sql_command enum.
      sql/sql_parse.cc:
        prepare_schema_table():
          Added support for SHOW TRIGGERS statement.
      sql/sql_show.cc:
        Added new INFORMATION_SCHEMA.TRIGGERS view and SHOW TRIGGERS command.
      sql/sql_table.cc:
        mysql_rm_table_part2():
          Replaced simple deletion of .TRG file with call to
          Table_triggers_list::drop_all_triggers which will also delete .TRN files
          for all triggers associated with table.
      sql/sql_trigger.cc:
        Now triggers have database wide namespace. To support it we create special .TRN
        file with same name as trigger for each trigger. This file contains name of
        trigger's table so one does not need to specify it explicitly in DROP TRIGGER.
        Moreover DROP TRIGGER treats first part of trigger identifier as database name
        now. Updated mysql_create_or_drop_trigger() routine and
        Table_triggers_list::create_trigger()/drop_trigger()/check_n_load() methods
        accordingly. Added add_table_for_trigger() routine and
        Table_triggers_list::drop_all_triggers() method.
        
        Added Table_triggers_list::get_trigger_info() for obtaining trigger metadata.
      sql/sql_trigger.h:
        Table_triggers_list:
          Use TRG_EVENT_MAX, TRG_ACTION_MAX instead of magic values.
          Added get_trigger_info() method for obtaining trigger's meta-data.
          Added drop_all_triggers() method which drops all triggers for table.
          Added declarations of trg_action_time_type_names/trg_event_type_names
          arrays which hold names of triggers action time types  and event types.
      sql/sql_yacc.yy:
        Changed grammar for CREATE/DROP TRIGGER to support database wide trigger
        namespace. Added new SHOW TRIGGERS statement.
      sql/table.h:
        enum enum_schema_tables:
          Added constant for new INFORMATION_SCHEMA.TRIGGERS view.
      a32bf7fb
  13. 13 Jul, 2005 1 commit
    • unknown's avatar
      Now when we create or drop trigger we will open only subject table and not · 4c197d99
      unknown authored
      all tables suggested by prelocking algorithm.
      Added test for bug #11889 "Server crashes when dropping trigger using stored
      routine" (which was fixed by previous patch).
      
      
      mysql-test/r/trigger.result:
        Since we are using open_ltable() now to open table for trigger creation, code
        for error when we try to create trigger on view has changed to equivalent one.
        Added test for bug #11889 "Server crashes when dropping trigger using stored
        routine".
      mysql-test/t/trigger.test:
        Since we are using open_ltable() now to open table for trigger creation, code
        for error when we try to create trigger on view has changed to equivalent one.
        Added test for bug #11889 "Server crashes when dropping trigger using stored
        routine".
      sql/sql_trigger.cc:
        mysql_create_or_drop_trigger():
          It is better to open only table for which we are going to create or drop
          trigger with open_ltable() since we don't really need working prelocking
          in this case.
      4c197d99
  14. 09 Jul, 2005 1 commit
    • unknown's avatar
      Enable support of access to tables from triggers. Thus fix bug #8406 "Triggers · 14b1f91b
      unknown authored
      crash if referencing a table" and several other related bugs.
      Fix for bug #11834 "Re-execution of prepared statement with dropped function
      crashes server." which was spotted during work on previous bugs.
      
      Also couple of nice cleanups:
      - Replaced two separate hashes for stored routines used by statement with one.
      - Now instead of doing one pass through all routines used in statement for
        caching them and then doing another pass for adding their tables to table
        list, we do only one pass during which do both things.
      
      
      mysql-test/r/sp-error.result:
        Added test for bug #11834 "Re-execution of prepared statement with dropped
        function crashes server" also covering handling of prepared statements
        which use stored functions but does not require prelocking.
      mysql-test/r/sp.result:
        Updated test for LOCK TABLES with views in table list.
        (Old version of statement used in this test will work ok now, since prelocking
         algorithm was tuned and will lock only one multi-set of tables for each routine
         even if this routine is used in several different views).
      mysql-test/r/trigger.result:
        Added several tests for triggers using tables.
      mysql-test/t/sp-error.test:
        Added test for bug #11834 "Re-execution of prepared statement with dropped
        function crashes server" also covering handling of prepared statements
        which use stored functions but does not require prelocking.
      mysql-test/t/sp.test:
        Updated comment about recursive views to reflect current situation.
        Updated test for LOCK TABLES with views in table list.
        (Old version of statement used in this test will work ok now, since prelocking
         algorithm was tuned and will lock only one multi-set of tables for each routine
         even if this routine is used in several different views).
      mysql-test/t/trigger.test:
        Added several tests for triggers using tables.
      sql/item_func.cc:
        Item_func_sp::cleanup():
          By next statement execution stored function can be dropped or altered so
          we can't assume that sp_head object for it will be still valid.
      sql/sp.cc:
        - Added Sroutine_hash_entry structure that represents element in the set of
          stored routines used by statement or routine. We can't as before use
          LEX_STRING for this purprose because we want link all elements of this set
          in list.
        - Replaced sp_add_to_hash() with sp_add_used_routine() which takes into account
          that now we use one hash for stored routines used by statement instead of two
          and which mantains list linking all elelemnts in this hash.
        - Renamed sp_merge_hash() to sp_update_sp_used_routines().
        - Introduced sp_update_stmt_used_routines() for adding elements to the set of
          routines used by statement from another similar set for statement or routine.
          This function will also mantain list linking elements of destination set.
        - Now instead of one sp_cache_routines() function we have family of 
          sp_cache_routines_and_add_tables() functions which are also responsible for
          adding tables used by routines being cached to statement table list. Nice
          optimization - thanks to list linking all elements in the hash of routines
          used by statement we don't need to perform several iterations over this hash
          (as it was before in cases when we have added new elements to it).
      sql/sp.h:
        Added declarations of functions used for manipulations with set (hash) of stored
        routines used by statement.
      sql/sp_head.cc:
        sp_name::init_qname():
          Now sp_name also holds key identifying routine in the set (hash) of
          stored routines used by statement. 
        sp_head:
          Instead of two separate hashes sp_funs/m_spprocs representing sets of stored
          routines used by this routine we use one hash - m_sroutines. 
        sp_instr_set_trigger_field:
          Added support for subqueries in assignments to row accessors in triggers.
        Removed definition of sp_add_sp_tables_to_table_list() and auxilary functions 
        since now we don't have separate stage on which we add tables used by routines
        used by statement to table list for prelocking. We do it on the same stage as
        we load those routines in SP cache. So all this functionality moved to
        sp_cache_routines_and_add_tables() family of functions.
      sql/sp_head.h:
        sp_name:
          Now this class also holds key identifying routine in the set (hash) of stored
          routines used by statement. 
        sp_head:
          Instead of two separate hashes sp_funs/m_spprocs representing sets of stored
          routines used by this routine we use one hash - m_sroutines. 
        sp_instr_set_trigger_field:
          Added support for subqueries in assignments to row accessors in triggers.
        Removed declaration of sp_add_sp_tables_to_table_list() since now we don't have
        separate stage on which we add tables used by routines used by statement to
        table list for prelocking. We do it on the same stage as we load those routines
        in SP cache.
      sql/sql_base.cc:
        open_tables():
        - LEX::spfuns/spprocs hashes were replaced with one LEX::sroutines hash.
        - Now instead of doing one pass through all routines used in statement for
          caching them and then doing another pass for adding their tables to table
          list, we do only one pass during which do both things. It is easy to do
          since all routines in the set of routines used by statement are linked in
          the list. This also allows us to calculate table list for prelocking more
          precisely.
        - Now triggers properly inform prelocking algorithm about tables they use.
      sql/sql_lex.cc:
        lex_start():
          Replaced LEX::spfuns/spprocs with with one LEX::sroutines hash.
          Added LEX::sroutines_list list linking all elements in this hash.
        st_lex::st_lex():
          Moved definition of LEX constructor to sql_lex.cc file to be able
          use sp_sroutine_key declaration from sp.h in it.
      sql/sql_lex.h:
        LEX:
          Replaced two separate hashes for stored routines used by statement with one.
          Added list linking all elements in this hash to be able to iterate through all
          elements and add new elements to this hash at the same time.
          Moved constructor definition to sql_lex.cc.
      sql/sql_parse.cc:
        mysql_execute_command():
          Replaced LEX::spfuns/spprocs with one LEX::sroutines hash.
      sql/sql_trigger.cc:
        Added missing GNU GPL notice.
        Table_triggers_list::check_n_load()
          Added initialization of sroutines_key which stores key representing
          triggers of this table in the set (hash) of routines used by this statement.
      sql/sql_trigger.h:
        Added missing GNU GPL notice.
        Table_triggers_list:
          Added sroutines_key member to store key representing triggers of this
          table in the set (hash) of routines used by this statement.
          Declared sp_cache_routines_and_add_tables_for_triggers() as friend since
          it needs access to sroutines_key and trigger bodies.
      sql/sql_yacc.yy:
        - Now we use sp_add_used_routine() instead of sp_add_to_hash() for adding
          elements to the set of stored routines used in statement.
        - Enabled support of subqueries as right sides in assignments to triggers' row
          accessors.
      14b1f91b
  15. 01 Jul, 2005 1 commit
    • unknown's avatar
      Name resolution context added (BUG#6443) · b4f595b9
      unknown authored
      include/my_bitmap.h:
        new bitmap operation
      mysql-test/r/view.result:
        added warnings
        Correct inserting data check (absence of default value) for view underlying tables (BUG#6443)
      mysql-test/t/view.test:
        Correct inserting data check (absence of default value) for view underlying tables (BUG#6443)
      mysys/my_bitmap.c:
        new bitmap operation
      sql/field.h:
        index of field in table added
      sql/item.cc:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/item.h:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/item_cmpfunc.cc:
        table list removed from fix_fields() arguments
      sql/item_cmpfunc.h:
        table list removed from fix_fields() arguments
      sql/item_func.cc:
        table list removed from fix_fields() arguments
      sql/item_func.h:
        table list removed from fix_fields() arguments
      sql/item_row.cc:
        table list removed from fix_fields() arguments
      sql/item_row.h:
        table list removed from fix_fields() arguments
      sql/item_strfunc.cc:
        fixed server crash on NULL argument
      sql/item_strfunc.h:
        table list removed from fix_fields() arguments
      sql/item_subselect.cc:
        table list removed from fix_fields() arguments
      sql/item_subselect.h:
        table list removed from fix_fields() arguments
      sql/item_sum.cc:
        table list removed from fix_fields() arguments
      sql/item_sum.h:
        table list removed from fix_fields() arguments
      sql/item_timefunc.cc:
        table list removed from fix_fields() arguments
      sql/item_timefunc.h:
        table list removed from fix_fields() arguments
      sql/item_uniq.h:
        table list removed from fix_fields() arguments
      sql/log_event.cc:
        Name resolution context added
      sql/log_event.h:
        Name resolution context added
      sql/mysql_priv.h:
        Name resolution context added
      sql/set_var.cc:
        table list removed from fix_fields() arguments
      sql/share/errmsg.txt:
        new error message
      sql/sp.cc:
        Name resolution context added
      sql/sp_head.cc:
        table list removed from fix_fields() arguments
      sql/sp_head.h:
        Name resolution context added
      sql/sql_base.cc:
        table list removed from fix_fields() arguments
        Name resolution context added
      sql/sql_class.cc:
        renamed variable
      sql/sql_delete.cc:
        Name resolution context added
      sql/sql_derived.cc:
        Name resolution context added
      sql/sql_do.cc:
        table list removed from fix_fields() arguments
      sql/sql_handler.cc:
        Name resolution context added
      sql/sql_help.cc:
        Name resolution context added
      sql/sql_insert.cc:
        Name resolution context added
        table list removed from fix_fields() arguments
      sql/sql_lex.cc:
        Name resolution context added
      sql/sql_lex.h:
        removed resolve mode (information stored into name resolution context)
      sql/sql_load.cc:
        table list removed from fix_fields() arguments
      sql/sql_olap.cc:
        Name resolution context added
      sql/sql_parse.cc:
        Name resolution context added
      sql/sql_prepare.cc:
        table list removed from fix_fields() arguments
      sql/sql_select.cc:
        table list removed from fix_fields() arguments
      sql/sql_show.cc:
        Name resolution context added
      sql/sql_trigger.cc:
        table list removed from fix_fields() arguments
      sql/sql_udf.h:
        table list removed from fix_fields() arguments
      sql/sql_union.cc:
        Name resolution context added
      sql/sql_update.cc:
        Name resolution context added
      sql/sql_view.cc:
        Name resolution context added
      sql/sql_view.h:
        table list removed from fix_fields() arguments
      sql/sql_yacc.yy:
        Name resolution context added
      sql/table.cc:
        Name resolution context added
        merged view processing moved
      sql/table.h:
        merged view processing moved
      b4f595b9
  16. 24 May, 2005 1 commit
    • unknown's avatar
      Fix for bugs: · 1fa7c69d
      unknown authored
       #5860 "Multi-table UPDATE does not activate update triggers"
       #6812 "Triggers are not activated for INSERT ... SELECT"
       #8755 "Trigger is not activated by LOAD DATA".
      This patch also implements proper handling of triggers for special forms
      of insert like REPLACE or INSERT ... ON DUPLICATE KEY UPDATE. 
      Also now we don't call after trigger in case when we have failed to
      inserted/update or delete row. Trigger failure should stop statement
      execution.
      
      I have not properly tested handling of errors which happen inside of
      triggers in this patch, since it is simplier to do this once we will be
      able to access tables from triggers.
      
      
      mysql-test/r/trigger.result:
        Added tests for triggers behavior for various non-standard forms of
        INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
        Also added tests for bugs #5860 "Multi-table UPDATE does not activate
        update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
        and #8755 "Trigger is not activated by LOAD DATA".
      mysql-test/t/trigger.test:
        Added tests for triggers behavior for various non-standard forms of
        INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
        Also added tests for bugs #5860 "Multi-table UPDATE does not activate
        update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
        and #8755 "Trigger is not activated by LOAD DATA".
      sql/item.cc:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Item_trigger_field::setup_field()/fix_fields() were changed to implement
        this approach.
      sql/item.h:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Item_trigger_field:
        - Added field_idx member to store index of Field object corresponding to
          this Item in TABLE::field array.
        - Added triggers member to be able to access to parent Table_trigger_list
          object from fix_fields() method.
        - setup_field() no longer needs to know for which type of event this
          trigger is, since it does not make decision Field for which buffer
          (record[0] or record[1] is appropriate for this Item_trigger_field)
      sql/mysql_priv.h:
        Added fill_record_n_invoke_before_triggers() methods. They are simple
        wrappers around fill_record() which invoke proper before trigger right
        after filling record with values.
      sql/sql_base.cc:
        Added fill_record_n_invoke_before_triggers() methods. They are simple
        wrappers around fill_record() which invoke proper before trigger right
        after filling record with values.
      sql/sql_delete.cc:
        mysql_delete():
          Now we stop statement execution if one of triggers failed, we also
          don't execute after delete trigger if we failed to delete row from
          the table (We also pass information about which buffer contains old
          version of row to process_triggers()).
        multi_delete::send_data()/do_deletes():
          Now we also invoke triggers in case of multi-delete.
      sql/sql_insert.cc:
        mysql_insert():
          Moved invocation of before triggers to fill_record_n_invoke_before_triggers()
          method. After triggers are now executed as part of write_record().
          (as nice side effect now we also stop statement execution if one of
          triggers fail).
        write_record():
          Invoke after insert trigger after performing insert. Also invoke proper
          triggers if insert is converted to update or conflicting row is deleted.
          Cleaned up error handling a bit - no sense to report error via
          handler::print_error if it was not generated by handler method and
          was reported before.
          Also now we will execute after trigger only if we really have written
          row to the table. 
        select_insert::send_data()/store_values():
          We should also execute INSERT triggers for INSERT ... SELECT statement.
      sql/sql_load.cc:
        read_fixed_length()/read_sep_field():
          We should execute INSERT triggers when processing LOAD DATA statement.
          Small cleanup in auto-increment related code. Also moved check for
          thd->killed which is used to abort LOAD DATA in case of problems
          in 'traditional' mode to better place..
      sql/sql_trigger.cc:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Table_triggers_list methods were changed to implement this approach
        (see also comments for sql_trigger.h).
      sql/sql_trigger.h:
        Since it turned out that at trigger loading time we can't say in which
        buffer TABLE::record[0] or record[1] old version of row will be stored
        we have to change our approach to binding of Item_trigger_field to
        Field instances.
        Now after trigger parsing (in Item_trigger_field::setup_table()) we only
        find index of proper Field in the TABLE::field array. Then before trigger
        is invoked we set Table_triggers_list::old_field/new_field so they point
        to arrays holding Field instances bound to buffers with proper row
        versions. And as last step in Item_trigger_field::fix_fields() we get
        pointer to Field from those arrays using saved field index.
        
        Changed Table_triggers_list to implement this new approach:
        - Added record1_field member to store array of Field objects bound
          to TABLE::record[1] buffer (instead of existing old_field member)
        - Added new_field member and changed meaning of old_field member.
          During trigger execution they should point to arrays of Field objects
          bound to buffers holding new and old versions of row respectively.
        - Added 'table' member to be able to get access to TABLE instance
          (for which this trigger list object was created) from process_triggers()
          method.
        - Now process_triggers() method sets old_field and new_field members
          properly before executing triggers body (basing on new 
          old_row_is_record1 parameter value).
        - Renamed prepare_old_row_accessors_method() to prepare_record1_accessors()
        
        Also added has_before_update_triggers() method which allows to check
        whenever any before update triggers exist for table.
      sql/sql_update.cc:
        mysql_update():
          Now we invoke before triggers in fill_record_n_invoke_before_triggers()
          method. Also now we abort statement execution when one of triggers fail.
        safe_update_on_fly():
          When we are trying to understand if we can update first table in multi
          update on the fly we should take into account that BEFORE UPDATE
          trigger can change field values.
        multi_update::send_data()/do_updates()
          We should execute proper triggers when doing multi-update
          (in both cases when we do it on the fly and using temporary tables).
      1fa7c69d
  17. 06 May, 2005 2 commits
    • unknown's avatar
      Dmitri please review. Fix for BUG#10417 "CREATE TRIGGER not written to binlog": · 6f83de16
      unknown authored
      writing DROP and CREATE TRIGGER to binlog, disabling binlogging
      of substatements, testing.
      
      
      mysql-test/r/rpl_sp.result:
        result update
      mysql-test/t/rpl_sp.test:
        removing useless lines, plus testing replication of triggers
      sql/sql_trigger.cc:
        trigger can be used to destroy slave, so only SUPER can create it by default.
        If create|drop goes ok, binlog CREATE TRIGGER and DROP TRIGGER.
      sql/sql_trigger.h:
        disable binlogging of substatements of triggers (even if now triggers
        can't do updates)
      6f83de16
    • unknown's avatar
      Fixes while reviewing new code · ab54e167
      unknown authored
      Added option --count to mysqlshow (to show number of rows)
      Fixed possible core dump in information schema
      
      
      client/client_priv.h:
        --count for mysqlshow
      client/mysqlshow.c:
        Added option --count to be used when the user want's number of rows per table in the output
        (We shouldn't use count(*) as default as this can be a slow operation)
      mysys/my_thr_init.c:
        Correct comment
      sql/ha_berkeley.cc:
        Remove not used variable
      sql/ha_berkeley.h:
        Remove not used variable
      sql/ha_innodb.cc:
        Remove not used function
      sql/ha_ndbcluster.cc:
        false -> FALSE
        true -> TRUE
      sql/handler.cc:
        Added and fixed comments
        Remove 'strange' code to remove compiler warnings (better to do things like this with attribute)
      sql/item.cc:
        false -> FALSE
      sql/item_cmpfunc.cc:
        Fixed indentation
      sql/item_cmpfunc.h:
        marked BETWEEN as a bool function
      sql/item_func.cc:
        Simple optimzation
      sql/key.cc:
        Removed wrong code
      sql/log.cc:
        Check result from open_index_file()
      sql/mysql_priv.h:
        Simplyfy some test of netware
      sql/mysqld.cc:
        Fixed indentation
        Check result form open_index_file()
        Simplify code with IF_NETWARE()
      sql/opt_range.cc:
        false -> FALSE
        true -> TRUE
        Fixed indentation
      sql/opt_sum.cc:
        Fixed comments
      sql/sp_head.cc:
        Simple optimzation
        Move variable declarations to begining of blocks
      sql/sql_acl.cc:
        Fix long lines
        Rename xx -> column
        Move declaration to beginning of block
      sql/sql_parse.cc:
        Removed comment
      sql/sql_select.cc:
        Indentation fixes
      sql/sql_show.cc:
        Fixed reference outside of array (possible core dump)
      sql/sql_table.cc:
        Simplify code
        Combine common code
      sql/sql_test.cc:
        false -> FALSE
      sql/sql_trigger.cc:
        false -> false
        true -> TRUE
      sql/sql_yacc.yy:
        Simpler test
      sql/unireg.cc:
        Added comment
      ab54e167
  18. 27 Mar, 2005 1 commit
    • unknown's avatar
      Fix for bugs #5859 "DROP TABLE does not drop triggers" and · 2c5d427c
      unknown authored
      #6559 "DROP DATABASE forgets to drop triggers".
      
      If we drop table we should also drop all triggers associated with it.
      To do this we have to check for existence of .TRG file when we are 
      dropping table and delete it too.
      
      
      mysql-test/r/trigger.result:
        Added tests for bugs #5859 "DROP TABLE does not drop triggers"
        and #6559 "DROP DATABASE forgets to drop triggers".
      mysql-test/t/trigger.test:
        Added tests for bugs #5859 "DROP TABLE does not drop triggers"
        and #6559 "DROP DATABASE forgets to drop triggers".
      sql/handler.cc:
        Added .TRG to the list of known extensions of files associated with 
        tables.
      sql/mysql_priv.h:
        Added declaration of constant holding extension for trigger files.
      sql/sql_table.cc:
        mysql_rm_table_part2():
          If we drop table we should also drop all triggers associated with it.
          To do this we have to check for existence of .TRG file and delete it
          (until the moment when we will store trigger definitions in the same
           .FRM file as table description).
      sql/sql_trigger.cc:
        Made constant holding extension for trigger files externally visible.
      2c5d427c
  19. 05 Mar, 2005 1 commit
    • unknown's avatar
      Fix for yet another memleak caused by SP-locking patch. · e3bc9d82
      unknown authored
      Improved handling of situations when we encounter error during
      CREATE PROCEDURE (FUNCTION/TRIGGER/...) and bail out of yyparse()
      without restoring proper THD::lex.
      
      
      sql/sp.cc:
        We do not need to call sp_head::restore_lex() explicitly to restore right
        value of THD::lex in case when we have encountered error during parsing.
        Now we do this in sp_head::~sp_head() instead.
      sql/sp_head.cc:
        sp_head::destroy():
         Fixed cleaning up of stack of auxilary LEXes. 
         We also restore right value of THD::lex during this process now.
      sql/sql_parse.cc:
        We do not need to call sp_head::restore_lex() explicitly to restore right
        value of THD::lex in case when we have encountered error during parsing.
        Now we do this in sp_head::~sp_head() instead.
      sql/sql_prepare.cc:
        We do not need to call sp_head::restore_lex() explicitly to restore right
        value of THD::lex in case when we have encountered error during parsing.
        Now we do this in sp_head::~sp_head() instead.
      sql/sql_trigger.cc:
        We do not need to call sp_head::restore_lex() explicitly to restore right
        value of THD::lex in case when we have encountered error during parsing.
        Now we do this in sp_head::~sp_head() instead.
      e3bc9d82
  20. 08 Feb, 2005 1 commit
    • unknown's avatar
      Precision Math implementation · 91db48e3
      unknown authored
      BitKeeper/etc/ignore:
        Added client/decimal.c client/my_decimal.cc client/my_decimal.h to the ignore list
      91db48e3
  21. 16 Jan, 2005 1 commit
    • unknown's avatar
      XA (not completely polished out yet) · 88bd301d
      unknown authored
      include/my_pthread.h:
        cleanup. don't use gcc extensions
      innobase/include/trx0sys.ic:
        Jan's fix for innobase_xa_prepare
      innobase/read/read0read.c:
        Jan's fix for innobase_xa_prepare
      innobase/trx/trx0trx.c:
        Jan's fix for innobase_xa_prepare
      mysql-test/include/varchar.inc:
        test fix
      mysql-test/r/ctype_ucs.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/drop_temp_table.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/insert_select.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/mix_innodb_myisam_binlog.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/myisam.result:
        test fix
      mysql-test/r/rpl000015.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_change_master.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_charset.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_error_ignored_table.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_flush_log_loop.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_flush_tables.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_loaddata.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_loaddata_rule_m.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_loaddata_rule_s.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_log.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_log_pos.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_max_relay_size.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_relayrotate.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_replicate_do.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_reset_slave.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_rotate_logs.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_server_id1.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_server_id2.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_temporary.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_timezone.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_until.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/rpl_user_variables.result:
        new log event - all binlog positions are changed :(
      mysql-test/r/user_var.result:
        new log event - all binlog positions are changed :(
      mysql-test/t/ctype_ucs.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/mix_innodb_myisam_binlog.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/mysqlbinlog.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/mysqlbinlog2.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_charset.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_error_ignored_table.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_loaddata_rule_m.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_loaddata_rule_s.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_log.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_log_pos.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/rpl_user_variables.test:
        new log event - all binlog positions are changed :(
      mysql-test/t/user_var.test:
        new log event - all binlog positions are changed :(
      mysys/hash.c:
        typo fixed
      sql/ha_berkeley.cc:
        handlerton framework
      sql/ha_berkeley.h:
        handlerton framework
      sql/ha_innodb.cc:
        handlerton framework
      sql/ha_innodb.h:
        handlerton framework
      sql/handler.cc:
        new transaction handling, handlerton framework, two-phase commit, XA support
      sql/handler.h:
        new transaction handling, handlerton framework, two-phase commit, XA support
      sql/lex.h:
        XA commands
      sql/log.cc:
        new transaction handling, handlerton framework, two-phase commit,
        XA support, tc-logging, TC_LOG_MMAP class
      sql/log_event.cc:
        Xid_log_event
      sql/log_event.h:
        Xid_log_event, LOG_EVENT_BINLOG_CLOSED_F flag
      sql/mysql_priv.h:
        wrapper for query_id++
      sql/mysqld.cc:
        new command-line options --log-tc, --log-tc-size, --tc-heuristic-recover,
        new status variables Tc_log_page_size, Tc_log_max_pages_used, Tc_log_page_waits.
        init/stop tc logging
      sql/set_var.h:
        warning fixed
      sql/share/errmsg.txt:
        XA error messages
      sql/sp_head.cc:
        s/query_id++/next_query_id()/
      sql/sql_base.cc:
        typo fixed. new transaction handling.
      sql/sql_class.cc:
        cleanup of THD.transaction
      sql/sql_class.h:
        TC_LOG classes, new status variables, new savepoint handling, XA support
      sql/sql_insert.cc:
        comments
      sql/sql_lex.cc:
        s/found_colon/found_semicolon/
      sql/sql_lex.h:
        SQLCOM_XA_xxx, XA related changes in Lex
      sql/sql_parse.cc:
        cleanup, XA commands, new savepoint handling
      sql/sql_repl.cc:
        two functions moved to log.cc
      sql/sql_repl.h:
        two functions moved to log.cc
      sql/sql_trigger.cc:
        s/lex.name_and_length/lex.ident/
      sql/sql_yacc.yy:
        XA commands, cleanup
      88bd301d
  22. 06 Jan, 2005 1 commit
    • unknown's avatar
      First stage of table definition cache · acf76e3b
      unknown authored
      Split TABLE to TABLE and TABLE_SHARE (TABLE_SHARE is still allocated as part of table, will be fixed soon)
      Created Field::make_field() and made Field_num::make_field() to call this
      Added 'TABLE_SHARE->db' that points to database name; Changed all usage of table_cache_key as database name to use this instead
      Changed field->table_name to point to pointer to alias. This allows us to change alias for a table by just updating one pointer.
      Renamed TABLE_SHARE->real_name to table_name
      Renamed TABLE->table_name to alias
      Renamed TABLE_LIST->real_name to table_name
      
      
      include/myisam.h:
        Added const before names
      mysql-test/r/group_min_max.result:
        Make results repeatable
      mysql-test/t/group_min_max.test:
        Make results repeatable
      sql/field.cc:
        Created Field::make_field() and made Field_num::make_field() to call this
        Use TABLE_SHARE
        Use sql_strmake() instead of sql_memdup() to simplify code
      sql/field.h:
        Changed table_name to be pointer to table_name. This allows us to change alias for all fields by just changing one pointer.
        Use TABLE_SHARE
      sql/field_conv.cc:
        Use TABLE_SHARE
      sql/filesort.cc:
        Use TABLE_SHARE
      sql/ha_berkeley.cc:
        Use TABLE_SHARE
      sql/ha_heap.cc:
        Use TABLE_SHARE
      sql/ha_innodb.cc:
        Use TABLE_SHARE
      sql/ha_myisam.cc:
        Use TABLE_SHARE
      sql/ha_myisammrg.cc:
        Use TABLE_SHARE
        Change some pointer handling to use const char*
      sql/ha_ndbcluster.cc:
        Use TABLE_SHARE
      sql/handler.cc:
        Use TABLE_SHARE
      sql/item.cc:
        Use TABLE_SHARE
      sql/item_func.cc:
        Use TABLE_SHARE
      sql/item_subselect.cc:
        Use TABLE_SHARE
      sql/item_sum.cc:
        Use TABLE_SHARE
      sql/key.cc:
        Use TABLE_SHARE
      sql/lock.cc:
        Use TABLE_SHARE
      sql/log_event.cc:
        real_name -> table_name
      sql/mysql_priv.h:
        Use TABLE_SHARE
      sql/opt_range.cc:
        Use TABLE_SHARE
      sql/opt_sum.cc:
        Use TABLE_SHARE
      sql/records.cc:
        Use TABLE_SHARE
      sql/repl_failsafe.cc:
        real_name -> table_name
      sql/slave.cc:
        Use TABLE_SHARE
      sql/sp.cc:
        Use TABLE_SHARE
      sql/sp_head.cc:
        real_name -> table_name
      sql/sql_acl.cc:
        Use TABLE_SHARE
        removed unnecessary assert
        fixed indentation
        changed some char * -> const char*
      sql/sql_acl.h:
        changed some char* -> const char*
      sql/sql_base.cc:
        Use TABLE_SHARE
      sql/sql_cache.cc:
        Use TABLE_SHARE
      sql/sql_class.cc:
        Use TABLE_SHARE
      sql/sql_db.cc:
        real_name -> table_name
      sql/sql_delete.cc:
        Use TABLE_SHARE
      sql/sql_derived.cc:
        Use TABLE_SHARE
      sql/sql_handler.cc:
        Use TABLE_SHARE
      sql/sql_help.cc:
        Use TABLE_SHARE
      sql/sql_insert.cc:
        Use TABLE_SHARE
      sql/sql_load.cc:
        Use TABLE_SHARE
      sql/sql_parse.cc:
        Use TABLE_SHARE
      sql/sql_rename.cc:
        real_name -> table_name
      sql/sql_select.cc:
        Use TABLE_SHARE
        table->blob_fields now points to field offsets, not fields
        tmp_table->table_name now points to alias name
      sql/sql_show.cc:
        Use TABLE_SHARE
      sql/sql_table.cc:
        Use TABLE_SHARE
      sql/sql_test.cc:
        Use TABLE_SHARE
      sql/sql_trigger.cc:
        Use TABLE_SHARE
      sql/sql_udf.cc:
        Use TABLE_SHARE
      sql/sql_union.cc:
        real_name -> table_name
      sql/sql_update.cc:
        Use TABLE_SHARE
      sql/sql_view.cc:
        Use TABLE_SHARE
      sql/table.cc:
        Split TABLE to TABLE and TABLE_SHARE
        Changed blob_field to be field offsets instead of pointer to fields
        Only initialize table->s->default_values with default record (not all table->record[#])
        Some indentation changes
      sql/table.h:
        Split TABLE to TABLE and TABLE_SHARE
      sql/tztime.cc:
        real_name -> table_name
      sql/unireg.cc:
        Use TABLE_SHARE
      sql/unireg.h:
        Use TABLE_SHARE
      acf76e3b
  23. 30 Dec, 2004 1 commit
    • unknown's avatar
      After merge fixes · 2e8d13c7
      unknown authored
      config/ac-macros/character_sets.m4:
        Added latin1_spanish_ci
      dbug/dbug_analyze.c:
        Remove compiler warnings
      include/my_handler.h:
        Reorder structure arguments to be more optimal
      innobase/dict/dict0load.c:
        Fixed wrong define tag (for MySQL 5.0)
      innobase/fil/fil0fil.c:
        Fixed compiler warning
      innobase/os/os0file.c:
        Fixed compiler warning
      myisam/ft_boolean_search.c:
        Fixed compiler warning
      myisam/ft_static.c:
        Update to use new HA_KEYSEG structure
      myisam/mi_open.c:
        Simple optimization
      myisammrg/myrg_static.c:
        Removed compiler warning
      mysql-test/r/grant.result:
        Update results after merge
      mysql-test/r/index_merge.result:
        Update results after merge
      mysql-test/r/information_schema_inno.result:
        Add missing drop table
      mysql-test/r/lowercase_table.result:
        safety fix
      mysql-test/r/multi_update.result:
        safety fix
      mysql-test/r/ps_1general.result:
        safety fix
      mysql-test/r/ps_2myisam.result:
        Update results after merge
        (set is not anymore of binary type)
      mysql-test/r/ps_3innodb.result:
        Update results after merge
      mysql-test/r/ps_4heap.result:
        Update results after merge
      mysql-test/r/ps_5merge.result:
        Update results after merge
      mysql-test/r/ps_6bdb.result:
        Update results after merge
      mysql-test/r/show_check.result:
        Update results after merge
      mysql-test/r/subselect.result:
        Update results after merge
        (added missing quotes)
      mysql-test/r/timezone2.result:
        Update results after merge
      mysql-test/r/view.result:
        Update results after merge
        (note that INSERT IGNORE will work again after next merge from 4.1)
      mysql-test/t/derived.test:
        Removed empty line
      mysql-test/t/grant.test:
        Update results after merge
      mysql-test/t/information_schema_inno.test:
        added missing drop table
      mysql-test/t/lowercase_table.test:
        safety fix
      mysql-test/t/multi_update.test:
        safety fix
      mysql-test/t/ps_1general.test:
        safety fix
      mysql-test/t/view.test:
        update error codes after merge
      ndb/src/mgmsrv/main.cpp:
        after merge fix
      ndb/tools/ndb_test_platform.cpp:
        removed compiler warnings
      regex/main.c:
        remove compiler warnings
      sql/field.cc:
        Remove compiler warning
      sql/gen_lex_hash.cc:
        Added DBUG support
      sql/ha_myisam.cc:
        Removed warning from valgrind
      sql/ha_ndbcluster.cc:
        Remove compiler warning
      sql/item_cmpfunc.cc:
        Better to use val_int() instead of val_real() as we don't want Item_func_nop_all to return different value than the original ref element
      sql/mysqld.cc:
        Remove compiler warning
      sql/sql_acl.cc:
        More debugging
      sql/sql_lex.cc:
        Remove unnecessary 'else'
      sql/sql_parse.cc:
        After merge fixes
        Simplify reset of thd->server_status for SQLCOM_CALL
      sql/sql_prepare.cc:
        After merge fixes
        Removed possible core dump in mysql_stmt_fetch()
      sql/sql_update.cc:
        After merge fixes (together with Sanja)
      strings/ctype-czech.c:
        Remove compiler warning
      strings/ctype-ucs2.c:
        Remove compiler warning
      strings/ctype-win1250ch.c:
        Remove compiler warning
      strings/xml.c:
        Remove compiler warning
      tests/client_test.c:
        Fix test to work with 5.0
      vio/test-sslserver.c:
        Portability fix
      2e8d13c7
  24. 24 Nov, 2004 1 commit
    • unknown's avatar
      Fix for bug #5888 "Triggers with nonexistent columns cause packets · c3da2d12
      unknown authored
      out of order". (final version)
      
      Now instead of binding Item_trigger_field to TABLE objects during
      trigger definition parsing at table open, we perform pass through
      special list of all such objects in trigger. This allows easily check
      all references to fields in old/new version of row in trigger during
      execution of CREATE TRIGGER statement (this is more courtesy for users
      since we can't check everything anyway).
      We also report that such reference is bad by returning error from
      Item_trigger_field::fix_fields() method (instead of setup_field())
      This means that if trigger is broken we will bark during trigger
      execution instead of trigger definition parsing at table open.
      (i.e. now we allow to open tables with broken triggers).
      
      
      mysql-test/r/trigger.result:
        Added test which attempts to create trigger for table referencing to
        field which does not exist in this table.
      mysql-test/t/trigger.test:
        Added test which attempts to create trigger for table referencing to
        field which does not exist in this table.
      sql/item.cc:
        Item_trigger_field::setup_field() now returns void. If any error
        will occur we will report it at fix_fields() stage.
      sql/item.h:
        Item_trigger_field:
        - Added next_trg_field member for linking all such objects in trigger
          in one list.
        - Also setup_field() now returns void. If any error will occur we will
          report it at fix_fields() stage.
      sql/mysql_priv.h:
        Added SQL_LIST::push_back() method which allows to add another SQL_LIST
        to the end of this SQL_LIST.
      sql/sp_head.cc:
        sp_head::init()/reset_lex()/restore_lex():
         In order to fill global LEX::trg_table_fields (list of all 
         Item_trigger_field objects for trigger) we should init the same list
         in LEX of substatement before its parsing and merge it to global list
         after parsing.
      sql/sp_head.h:
        sp_instr_trigger_field:
          Made trigger_field member public to be able to add it more easily to
          global list of all Item_trigger_field objects in trigger.
      sql/sql_lex.cc:
        LEX::trg_table was removed.
      sql/sql_lex.h:
        Now we are binding Item_trigger_field's to TABLE object by passing
        through specially constructed list of all such objects in this trigger
        instead of doing this during trigger definition parsing at table open.
        So we no longer need LEX::trg_table, we use LEX::trg_table_fields list
        instead.
      sql/sql_parse.cc:
        mysql_execute_command():
          Since now we use trigger body for some checks in
          mysql_create_or_drop_trigger() we should destroy it only
          after calling this function.
      sql/sql_trigger.cc:
        Now instead of binding Item_trigger_field to TABLE objects during
        trigger definition parsing at table open, we perform pass through
        special list of all such objects in trigger. This allows easily check
        all references to fields in old/new version of row in trigger during
        execution of CREATE TRIGGER statement (this is more courtesy for users
        since we can't check everything anyway).
        We also report that such reference is bad by returning error from
        Item_trigger_field::fix_fields() method (instead of setup_field())
        This means that if trigger is broken we will bark during trigger
        execution instead of trigger definition parsing at table open.
        (i.e. now we allow to open tables with broken triggers).
        
        Table_triggers_list::prepare_old_row_accessors() method was added to be
        able to reuse code creating Field objects referencing TABLE::record[1]
        buffer instead of TABLE::record[0].
      sql/sql_trigger.h:
        Added Table_triggers_list::prepare_old_row_accessors() method to be
        able to reuse code creating Field objects referencing to TABLE::record[1]
        instead of record[0].
      sql/sql_yacc.yy:
        Now instead of performing binding of Item_trigger_field objects
        to TABLE object during trigger definition parsing at table open,
        we perform this binding by passing through specially constructed
        list of all such items in trigger.
        We also check value returned from memory allocation functions.
      c3da2d12
  25. 13 Nov, 2004 1 commit
    • unknown's avatar
      now my_printf_error is not better then my_error, but my_error call is shorter · 8d71bcec
      unknown authored
      used only one implementation of format parser of (printf)
      fixed multistatement
      
      
      include/mysqld_error.h:
        newerror messages
      mysql-test/t/key.test:
        unknown error replaced with real error
      mysys/my_error.c:
        my_error & my_printf_error use my_vsprintf
      sql/field_conv.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/ha_innodb.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/handler.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/item.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/item_cmpfunc.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/item_func.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/item_strfunc.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/lock.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/log.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/parse_file.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/procedure.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/protocol.cc:
        no need reset thd->lex->found_colon to break multiline sequance now, send_error called too late
      sql/repl_failsafe.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/set_var.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/share/czech/errmsg.txt:
        new errors converted from unknown error
      sql/share/danish/errmsg.txt:
        new errors converted from unknown error
      sql/share/dutch/errmsg.txt:
        new errors converted from unknown error
      sql/share/english/errmsg.txt:
        new errors converted from unknown error
      sql/share/estonian/errmsg.txt:
        new errors converted from unknown error
      sql/share/french/errmsg.txt:
        new errors converted from unknown error
      sql/share/german/errmsg.txt:
        new errors converted from unknown error
      sql/share/greek/errmsg.txt:
        new errors converted from unknown error
      sql/share/hungarian/errmsg.txt:
        new errors converted from unknown error
      sql/share/italian/errmsg.txt:
        new errors converted from unknown error
      sql/share/japanese/errmsg.txt:
        new errors converted from unknown error
      sql/share/korean/errmsg.txt:
        new errors converted from unknown error
      sql/share/norwegian-ny/errmsg.txt:
        new errors converted from unknown error
      sql/share/norwegian/errmsg.txt:
        new errors converted from unknown error
      sql/share/polish/errmsg.txt:
        new errors converted from unknown error
      sql/share/portuguese/errmsg.txt:
        new errors converted from unknown error
      sql/share/romanian/errmsg.txt:
        new errors converted from unknown error
      sql/share/russian/errmsg.txt:
        new errors converted from unknown error
      sql/share/serbian/errmsg.txt:
        new errors converted from unknown error
      sql/share/slovak/errmsg.txt:
        new errors converted from unknown error
      sql/share/spanish/errmsg.txt:
        new errors converted from unknown error
      sql/share/swedish/errmsg.txt:
        new errors converted from unknown error
      sql/share/ukrainian/errmsg.txt:
        new errors converted from unknown error
      sql/slave.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sp.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sp_head.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_acl.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_analyse.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_base.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_class.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_db.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_delete.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_handler.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_insert.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_load.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_map.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_parse.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
        multi-row command fixed
      sql/sql_prepare.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
        remover send_error ingected from 4.1
      sql/sql_rename.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_repl.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_select.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_show.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_table.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_trigger.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_udf.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_update.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_view.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/sql_yacc.yy:
        now my_printf_error is not better then my_error, but my_error call is shorter
      sql/table.cc:
        now my_printf_error is not better then my_error, but my_error call is shorter
      strings/my_vsnprintf.c:
        * format support added to my_vsprint
      8d71bcec
  26. 12 Nov, 2004 1 commit
    • unknown's avatar
      post-review fixes · 9e921615
      unknown authored
      mysql-test/r/rpl_rotate_logs.result:
        removed host dependence in error messages
      mysql-test/t/rpl_rotate_logs.test:
        removed host dependence in error messages
      mysys/my_error.c:
        comment about using my_error family functions
      sql/filesort.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/ha_innodb.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/handler.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item_cmpfunc.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item_func.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item_strfunc.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item_subselect.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/item_sum.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/lock.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/log.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/mysql_priv.h:
        error check moved to fill_record
      sql/mysqld.cc:
        fixed error messages
      sql/parse_file.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/protocol.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/protocol_cursor.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/repl_failsafe.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/set_var.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/slave.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sp.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sp_head.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sp_rcontext.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_acl.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_analyse.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_base.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
        error check moved to fill_record
      sql/sql_class.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_class.h:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_db.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_delete.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
        error check moved to fill_record
      sql/sql_handler.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_help.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_insert.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
        error check moved to fill_record
      sql/sql_lex.cc:
        layout fixed
      sql/sql_load.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_map.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_parse.cc:
        error check moved to fill_record
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_prepare.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_rename.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_repl.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_select.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_show.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_table.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_trigger.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_udf.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_union.cc:
        error check moved to fill_record
      sql/sql_update.cc:
        error check moved to fill_record
      sql/sql_view.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/sql_yacc.yy:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/table.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      sql/unireg.cc:
        changing my_error on my_message and my_printf_error where if they are prefered
      9e921615
  27. 09 Nov, 2004 1 commit
    • unknown's avatar
      After merge fixes · db676261
      unknown authored
      Added push_back(void *, MEM_ROOT *) to make some list-handling code easier that needs to be allocated in a different mem-root
      (Before one had to change thd->mem_root ; push_back(); restore mem_root.
      
      
      mysql-test/t/range.test:
        After merge fixRecR
      sql/item_func.cc:
        After merge fix
      sql/item_sum.cc:
        After merge fix
      sql/opt_range.cc:
        After merge fix
      sql/parse_file.cc:
        After merge fix
      sql/sp.cc:
        After merge fix
      sql/sp_head.cc:
        After merge fix
      sql/sp_head.h:
        After merge fix
      sql/sql_base.cc:
        After merge fix
      sql/sql_class.h:
        After merge fix
      sql/sql_list.h:
        Added push_back(void *, MEM_ROOT *) to make some list-handling code easier that needs to be allocated in a different mem-root
        (Before one had to change thd->mem_root ; push_back(); restore mem_root.
      sql/sql_prepare.cc:
        After merge fix
      sql/sql_select.cc:
        After merge fix
      sql/sql_table.cc:
        After merge fix
        Fixed problem with OPTIMIZE on INNODB tables
      sql/sql_trigger.cc:
        After merge fix
      sql/sql_union.cc:
        After merge fix
      sql/sql_view.cc:
        After merge fix
      sql/sql_yacc.yy:
        After merge fix
      sql/table.cc:
        After merge fix
      db676261
  28. 03 Nov, 2004 1 commit
    • unknown's avatar
      Fixes after merge with 4.1 · f5a47f15
      unknown authored
      FOUND is not a reserved keyword anymore
      Added Item_field::set_no_const_sub() to be able to mark fields that can't be substituted
      Added 'simple_select' method to be able to quickly determinate if a select_result is a normal SELECT
      Note that the 5.0 tree is not yet up to date: Sanja will have to fix multi-update-locks for this merge to be complete
      
      
      BUILD/SETUP.sh:
        Portability fix
      client/mysqltest.c:
        Portability fix
      mysql-test/r/drop.result:
        updated results
      mysql-test/r/func_str.result:
        New warnings (after merge)
      mysql-test/r/insert.result:
        Updated tests
      mysql-test/r/join_nested.result:
        Updated results (because of new column types in 5.0)
      mysql-test/r/lock_multi.result:
        Temporarly wrong results until Sanja fixes multi-update-lock in 5.0
      mysql-test/r/multi_update.result:
        Temporary fix until Sanja fixes multi-update locking
      mysql-test/r/ps_1general.result:
        Update of results after merge
      mysql-test/r/ps_2myisam.result:
        Update of results after merge
      mysql-test/r/ps_3innodb.result:
        Update of results after merge
      mysql-test/r/ps_4heap.result:
        Update of results after merge
      mysql-test/r/ps_5merge.result:
        Update of results after merge
      mysql-test/r/ps_6bdb.result:
        Update of results after merge
      mysql-test/r/query_cache.result:
        Update of results after merge
      mysql-test/r/range.result:
        New results for new tests
      mysql-test/r/rpl_auto_increment.result:
        Update with new 4.0 information
      mysql-test/r/rpl_charset.result:
        After merge fixes
      mysql-test/r/subselect.result:
        After merge fixes
      mysql-test/r/view.result:
        Temporary fix until multi-update-locking is fixed
      mysql-test/t/drop.test:
        Safety fix
      mysql-test/t/multi_update.test:
        Temporary fix until multi-update-locking is fixed
      mysql-test/t/rpl_charset.test:
        More comments
      mysql-test/t/sp-error.test:
        Updated comments
      mysql-test/t/view.test:
        Temporary fix until multi-update-locking is fixed
      scripts/mysql_fix_privilege_tables.sh:
        Better error message
      sql-common/client.c:
        More debugging
      sql/ha_ndbcluster.cc:
        After merge fixes
      sql/handler.cc:
        After merge fixes
      sql/item.cc:
        Simple optimization of creating item
        After merge fixed
        Added Item_field::set_no_const_sub() to be able to mark fields that can't be substituted
        The problem is that if you compare a string field to a binary string, you can't replace the field with a string constant as the binary comparison may then fail (The original field value may be in a different case)
      sql/item.h:
        Added Item::set_no_const_sub() to be able to mark fields that can't be substituted
      sql/item_cmpfunc.cc:
        Mark fields compared as binary to not be substituted.
      sql/item_func.cc:
        After merge fix
      sql/log_event.cc:
        After merge fix
      sql/mysql_priv.h:
        After merge fix
      sql/opt_range.cc:
        After merge fix
      sql/protocol.cc:
        Made flags uint instead of int (as it's used as a bit mask)
      sql/protocol.h:
        Made flags uint instead of int (as it's used as a bit mask)
      sql/protocol_cursor.cc:
        Made flags uint instead of int (as it's used as a bit mask)
        Indentation cleanups
      sql/sp.cc:
        After merge fixes
        Removed compiler warnings
      sql/sp_head.cc:
        After merge fixes
      sql/sql_base.cc:
        After merge fixes
        Removed 'send_error' from 'insert_fields()' as the error is sent higher up
      sql/sql_class.cc:
        Give assert if set_n_backup_item_arena is used twice
      sql/sql_class.h:
        Give assert if set_n_backup_item_arena is used twice
        After merge fixes
        Added 'simple_select' method to be able to quickly determinate if a select_result is a normal SELECT
      sql/sql_handler.cc:
        After merge fixes
      sql/sql_parse.cc:
        After merge fixes
      sql/sql_prepare.cc:
        After merge fixes
      sql/sql_select.cc:
        After merge fixes
        Moved 'build_equal_items' to optimize_cond() (logical place)
      sql/sql_table.cc:
        After merge fixes
      sql/sql_trigger.cc:
        After merge fixes
      sql/sql_update.cc:
        After merge fixes
        (This should be fixed by Sanja to have lower granuality locking of tables in multi-update)
      sql/sql_view.cc:
        After merge fixes
      sql/sql_yacc.yy:
        After merge fixes
        Don't have FOUND as a reserved keyword
      f5a47f15
  29. 20 Oct, 2004 1 commit
    • unknown's avatar
      errors without code removed · 066c9056
      unknown authored
      net_printf/send_error calls replaced by my_error family functions
      -1/1 (sent/unsent) error reporting removed
      (WL#2133)
      
      
      include/mysqld_error.h:
        new errors added.
      mysql-test/r/rpl_charset.result:
        new error
      mysql-test/r/rpl_timezone.result:
        new error
      mysql-test/r/sp-security.result:
        more clean error message
      mysql-test/r/sp.result:
        now error state intercepted correctly
      mysql-test/t/connect.test:
        new error message
      mysql-test/t/rpl_charset.test:
        new error message
      mysql-test/t/rpl_timezone.test:
        new error
      mysql-test/t/sp-security.test:
        more correct error handling
      mysql-test/t/sp.test:
        now error state intercepted correctly
      sql/ha_innodb.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/ha_innodb.h:
        -1/1 (sent/unsent) error reporting removed
      sql/item.cc:
        only boolean values should be returned by fix_fields()
      sql/item_cmpfunc.cc:
        only boolean values should be returned by fix_fields()
      sql/item_func.cc:
        only boolean values should be returned by fix_fields()
        net_printf/send_error calls replaced by my_error family functions
      sql/item_row.cc:
        only boolean values should be returned by fix_fields()
      sql/item_subselect.cc:
        only boolean values should be returned by fix_fields()
        -1/1 (sent/unsent) error reporting removed
      sql/item_subselect.h:
        -1/1 (sent/unsent) error reporting removed
      sql/item_sum.cc:
        only boolean values should be returned by fix_fields()
      sql/item_timefunc.cc:
        only boolean values should be returned by fix_fields()
      sql/item_uniq.h:
        only boolean values should be returned by fix_fields()
      sql/mysql_priv.h:
        -1/1 (sent/unsent) error reporting removed
      sql/mysqld.cc:
        net_printf/send_error calls replaced by my_error family functions
        changes in my_message_sql to support error handling correctly
      sql/protocol.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/protocol_cursor.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/repl_failsafe.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/repl_failsafe.h:
        -1/1 (sent/unsent) error reporting removed
      sql/set_var.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/share/czech/errmsg.txt:
        new error messages
      sql/share/danish/errmsg.txt:
        new error messages
      sql/share/dutch/errmsg.txt:
        new error messages
      sql/share/english/errmsg.txt:
        new error messages
      sql/share/estonian/errmsg.txt:
        new error messages
      sql/share/french/errmsg.txt:
        new error messages
      sql/share/german/errmsg.txt:
        new error messages
      sql/share/greek/errmsg.txt:
        new error messages
      sql/share/hungarian/errmsg.txt:
        new error messages
      sql/share/italian/errmsg.txt:
        new error messages
      sql/share/japanese/errmsg.txt:
        new error messages
      sql/share/korean/errmsg.txt:
        new error messages
      sql/share/norwegian-ny/errmsg.txt:
        new error messages
      sql/share/norwegian/errmsg.txt:
        new error messages
      sql/share/polish/errmsg.txt:
        new error messages
      sql/share/portuguese/errmsg.txt:
        new error messages
      sql/share/romanian/errmsg.txt:
        new error messages
      sql/share/russian/errmsg.txt:
        new error messages
      sql/share/serbian/errmsg.txt:
        new error messages
      sql/share/slovak/errmsg.txt:
        new error messages
      sql/share/spanish/errmsg.txt:
        new error messages
      sql/share/swedish/errmsg.txt:
        new error messages
      sql/share/ukrainian/errmsg.txt:
        new error messages
      sql/slave.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/slave.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sp.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/sp_head.cc:
        new eror handling support
        net_printf/send_error calls replaced by my_error family functions
      sql/sp_rcontext.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_acl.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/sql_acl.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_base.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_class.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_class.h:
        my_messhage_sql now set/reset query_error flag
      sql/sql_db.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_delete.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_do.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_error.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_handler.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_help.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/sql_insert.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_lex.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_load.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_map.cc:
        errors without code removed
      sql/sql_parse.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed from mysql_execute_command
      sql/sql_prepare.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/sql_repl.cc:
        error messages fixed
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/sql_repl.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_select.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_select.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_show.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_table.cc:
        net_printf/send_error calls replaced by my_error family functions
        -1/1 (sent/unsent) error reporting removed
      sql/sql_trigger.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_udf.cc:
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_union.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_update.cc:
        -1/1 (sent/unsent) error reporting removed
        net_printf/send_error calls replaced by my_error family functions
      sql/sql_view.cc:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_view.h:
        -1/1 (sent/unsent) error reporting removed
      sql/sql_yacc.yy:
        net_printf/send_error calls replaced by my_error family functions
      066c9056
  30. 24 Sep, 2004 1 commit
  31. 09 Sep, 2004 1 commit
    • unknown's avatar
      After merge fixes for WL#1218 "Triggers" · 97cbcbb0
      unknown authored
      mysql-test/t/trigger.test:
        After merge fix, error codes corrected.
      sql/sp_head.cc:
        After mrege fix. Fixed typo.
      sql/sql_trigger.cc:
        After merge fix. wait_if_gloabl_read_lock has one more argument now.
      97cbcbb0
  32. 08 Sep, 2004 1 commit
    • unknown's avatar
      WL#1218 "Triggers" · 12ce293a
      unknown authored
      After review and after merge fixes.
      
      
      mysql-test/t/trigger.test:
        After merge fix. Updated error codes.
      sql/sp_head.cc:
        After merge fix.
        To give some chances for functions/triggers we have to close tables during sp_instr_* 
        execution only if we have opened them before.
      sql/sp_head.h:
        After merge fix. sp_instr constructor now takes one more argument.
      sql/sql_trigger.cc:
        After merge and review fixes.
        Some variable renaming and optimizations.
      sql/sql_yacc.yy:
        After merge fixes.
        sp_instr_* classes now require sp context as constructor parameter.
        Also we should be careful with adding table for which we are creating trigger to table 
        list. Some elements in trigger body can damage LEX::query_tables and so we should add this
        table to list only after parsing trigger body.
      12ce293a
  33. 07 Sep, 2004 1 commit
    • unknown's avatar
      WL#1218 "Triggers". Some very preliminary version of patch. · 52ac4935
      unknown authored
      Mostly needed for Monty for him getting notion what needed for triggers 
      from new .FRM format. 
      
      Things to be done:
      - Right placement of trigger's invocations
      - Right handling of errors in triggers (including transaction rollback)
      - Support for priviliges
      - Right handling of DROP/RENAME table (hope that it will be handled automatically
        with merging of .TRG into .FRM file)
      - Saving/restoring some information critical for trigger creation and replication
        with their definitions (e.g. sql_mode, creator, ...)
      - Replication
      
      Already has some known bugs so probably not for general review.
      
      
      include/mysqld_error.h:
        Added trigger related error codes.
      sql/Makefile.am:
        Added sql_trigger.* files to list of sources from which mysqld is built.
      sql/item.cc:
        Added Item_trigger_field class representing field of new/old version of row which is 
        inserted/updated/deleted and for which trigger is invoked.
      sql/item.h:
        Added enums for describing trigger properties. (Here because of dependencies).
        Added Item_trigger_field class representing field of new/old version of row which is 
        inserted/updated/deleted and for which trigger is invoked.
      sql/item_func.cc:
        Added Item_func_set_user_var::print_as_stmt() for printing of assignment to ser variable
        from stored procedures.
        Added comment clarifying why we don't need set no_send_ok when calling stored functions.
      sql/item_func.h:
        Added Item_func_set_user_var::print_as_stmt() for printing of assignment to ser variable
        from stored procedures.
      sql/lex.h:
        Symbols used in statements defining triggers were added.
      sql/mysql_priv.h:
        Exported some functions needed for triggers implementation.
      sql/parse_file.cc:
        Cleaned up FILE_OPTIONS_STRLIST handling (needed for triggers).
      sql/parse_file.h:
        Cleaned up FILE_OPTIONS_STRLIST handling (needed for triggers).
      sql/share/czech/errmsg.txt:
        Added trigger related error messages.
      sql/share/danish/errmsg.txt:
        Added trigger related error messages.
      sql/share/dutch/errmsg.txt:
        Added trigger related error messages.
      sql/share/english/errmsg.txt:
        Added trigger related error messages.
      sql/share/estonian/errmsg.txt:
        Added trigger related error messages.
      sql/share/french/errmsg.txt:
        Added trigger related error messages.
      sql/share/german/errmsg.txt:
        Added trigger related error messages.
      sql/share/greek/errmsg.txt:
        Added trigger related error messages.
      sql/share/hungarian/errmsg.txt:
        Added trigger related error messages.
      sql/share/italian/errmsg.txt:
        Added trigger related error messages.
      sql/share/japanese/errmsg.txt:
        Added trigger related error messages.
      sql/share/korean/errmsg.txt:
        Added trigger related error messages.
      sql/share/norwegian-ny/errmsg.txt:
        Added trigger related error messages.
      sql/share/norwegian/errmsg.txt:
        Added trigger related error messages.
      sql/share/polish/errmsg.txt:
        Added trigger related error messages.
      sql/share/portuguese/errmsg.txt:
        Added trigger related error messages.
      sql/share/romanian/errmsg.txt:
        Added trigger related error messages.
      sql/share/russian/errmsg.txt:
        Added trigger related error messages.
      sql/share/serbian/errmsg.txt:
        Added trigger related error messages.
      sql/share/slovak/errmsg.txt:
        Added trigger related error messages.
      sql/share/spanish/errmsg.txt:
        Added trigger related error messages.
      sql/share/swedish/errmsg.txt:
        Added trigger related error messages.
      sql/share/ukrainian/errmsg.txt:
        Added trigger related error messages.
      sql/sp_head.cc:
        sp_head::init_strings(): added support for triggers 
          (we don't have most of strings for them)
        sp_head::execute_function(): triggers don't require RETURN
        sp_head::reset_lex(): added propagation of trigger properties to LEX used for 
         parsing of statements composing trigger body.
        Added two more SP instructions:
        - sp_instr_set_user_var for setting user variables in stored functions and triggers
          (we can't use sp_instr_stmt and "SET @A:=..." statement since it will close open 
          tables and thus break execution of calling statement.
        - sp_instr_set_trigger_field for assignment to fields of row being updated/inserted in
          triggers
      sql/sp_head.h:
        Added new type of sp_head object - TYPE_ENUM_TRIGGER
        Added two more SP instructions:
        - sp_instr_set_user_var for setting user variables in stored functions and triggers
          (we can't use sp_instr_stmt and "SET @A:=..." statement since it will close open 
          tables and thus break execution of calling statement.
        - sp_instr_set_trigger_field for assignment to fields of row being updated/inserted in
          triggers
      sql/sql_base.cc:
        Now freeing memory occupied by trigger related structures when closing tables.
        open_unireg_entry(): added loading of triggers for table.
        find_field_in_real_table() is now public since it required by Item_trigger_field in item.cc
      sql/sql_delete.cc:
        Added triggers invocation for DELETE (should be fixed for sure :))
      sql/sql_insert.cc:
        Added triggers invocation for INSERT (should be fixed for sure :))
      sql/sql_lex.cc:
        Added trg_new_row_fake_var variable pointer to which is used for distinguishing between
        assignment to NEW row field (when parsing trigger definition) and structured variable.
        Added initialization of LEX->trg_table to lex_start(). (When triggers are parsed during
        opening of table it points to table object.)
      sql/sql_lex.h:
        Added trigger related commands.
        Added st_trg_chistics structure describing properties of trigger being created
        (as struct and as LEX member).
        Added trg_new_row_fake_var variable pointer to which is used for
        distinguishing between assignment to NEW row field (when parsing trigger definition)
        and structured variable.
        Added LEX::trg_table which points to table being opened when we are parsing trigger
        definition while opening table.
      sql/sql_parse.cc:
        Added support for CREATE/DROP TRIGGER commands.
      sql/sql_table.cc:
        Cleanup. close_cached_table() always returns 0 and its result is not analyzed in most
        places so chenged its return type to void.
      sql/sql_update.cc:
        Added triggers invocation for UPDATE (should be fixed for sure :))
      sql/sql_yacc.yy:
        Added support for CREATE/DROP TRIGGER statements.
        Added support for OLD/NEW row identifiers in trigger.
        Made assignment to user variables not to break execution of stored function or trigger.
      sql/table.h:
        Added TABLE::triggers member representing triggers for this table.
      52ac4935