An error occurred fetching the project authors.
  1. 23 Mar, 2007 1 commit
    • unknown's avatar
      Bug #26817: mysqldump fails to backup database containing view with invalid definer · b765a8af
      unknown authored
      give some leeway on required permissions for SHOW FIELDS on views so
      an unknonwn DEFINER will no longer break mysqldump
      
      
      client/client_priv.h:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        New option for mysqldump: redirect stderr to file ("2> for Windows")
      client/mysqldump.c:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        New option for mysqldump: redirect stderr to file ("2> for Windows")
      mysql-test/r/information_schema_db.result:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        New option for mysqldump: redirect stderr to file ("2> for Windows")
      mysql-test/t/information_schema_db.test:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        New option for mysqldump: redirect stderr to file ("2> for Windows")
      sql/sql_base.cc:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        be a little more lenient for SHOW FIELDS FROM
      sql/sql_parse.cc:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        be a little more lenient for SHOW FIELDS FROM on views on views
      sql/sql_view.cc:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        give SHOW FIELDS the same perks as SHOW CREATE
      sql/table.cc:
        Bug #26817: mysqldump fails to backup database containing view with invalid definer
        
        give SHOW FIELDS the same perks as SHOW CREATE
      b765a8af
  2. 06 Mar, 2007 1 commit
    • unknown's avatar
      Bug#8407 (Stored functions/triggers ignore exception handler) · 266a7fff
      unknown authored
      Bug 18914 (Calling certain SPs from triggers fail)
      Bug 20713 (Functions will not not continue for SQLSTATE VALUE '42S02')
      Bug 21825 (Incorrect message error deleting records in a table with a
        trigger for inserting)
      Bug 22580 (DROP TABLE in nested stored procedure causes strange dependency
        error)
      Bug 25345 (Cursors from Functions)
      
      
      This fix resolves a long standing issue originally reported with bug 8407,
      which affect the behavior of Stored Procedures, Stored Functions and Trigger
      in many different ways, causing symptoms reported by all the bugs listed.
      In all cases, the root cause of the problem traces back to 8407 and how the
      server locks tables involved with sub statements.
      
      Prior to this fix, the implementation of stored routines would:
      - compute the transitive closure of all the tables referenced by a top level
      statement
      - open and lock all the tables involved
      - execute the top level statement
      "transitive closure of tables" means collecting:
      - all the tables,
      - all the stored functions,
      - all the views,
      - all the table triggers
      - all the stored procedures
      involved, and recursively inspect these objects definition to find more
      references to more objects, until the list of every object referenced does
      not grow any more.
      This mechanism is known as "pre-locking" tables before execution.
      The motivation for locking all the tables (possibly) used at once is to
      prevent dead locks.
      
      One problem with this approach is that, if the execution path the code
      really takes during runtime does not use a given table, and if the table is
      missing, the server would not execute the statement.
      This in particular has a major impact on triggers, since a missing table
      referenced by an update/delete trigger would prevent an insert trigger to run.
      
      Another problem is that stored routines might define SQL exception handlers
      to deal with missing tables, but the server implementation would never give
      user code a chance to execute this logic, since the routine is never
      executed when a missing table cause the pre-locking code to fail.
      
      With this fix, the internal implementation of the pre-locking code has been
      relaxed of some constraints, so that failure to open a table does not
      necessarily prevent execution of a stored routine.
      
      In particular, the pre-locking mechanism is now behaving as follows:
      
      1) the first step, to compute the transitive closure of all the tables
      possibly referenced by a statement, is unchanged.
      
      2) the next step, which is to open all the tables involved, only attempts
      to open the tables added by the pre-locking code, but silently fails without
      reporting any error or invoking any exception handler is the table is not
      present. This is achieved by trapping internal errors with
      Prelock_error_handler
      
      3) the locking step only locks tables that were successfully opened.
      
      4) when executing sub statements, the list of tables used by each statements
      is evaluated as before. The tables needed by the sub statement are expected
      to be already opened and locked. Statement referencing tables that were not
      opened in step 2) will fail to find the table in the open list, and only at
      this point will execution of the user code fail.
      
      5) when a runtime exception is raised at 4), the instruction continuation
      destination (the next instruction to execute in case of SQL continue
      handlers) is evaluated.
      This is achieved with sp_instr::exec_open_and_lock_tables()
      
      6) if a user exception handler is present in the stored routine, that
      handler is invoked as usual, so that ER_NO_SUCH_TABLE exceptions can be
      trapped by stored routines. If no handler exists, then the runtime execution
      will fail as expected.
      
      With all these changes, a side effect is that view security is impacted, in
      two different ways.
      
      First, a view defined as "select stored_function()", where the stored
      function references a table that may not exist, is considered valid.
      The rationale is that, because the stored function might trap exceptions
      during execution and still return a valid result, there is no way to decide
      when the view is created if a missing table really cause the view to be invalid.
      
      Secondly, testing for existence of tables is now done later during
      execution. View security, which consist of trapping errors and return a
      generic ER_VIEW_INVALID (to prevent disclosing information) was only
      implemented at very specific phases covering *opening* tables, but not
      covering the runtime execution. Because of this existing limitation,
      errors that were previously trapped and converted into ER_VIEW_INVALID are
      not trapped, causing table names to be reported to the user.
      This change is exposing an existing problem, which is independent and will
      be resolved separately.
      
      
      mysql-test/r/information_schema_db.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/sp-error.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/sp.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/trigger.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/r/view.result:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/sp-error.test:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/sp.test:
        Revised the pre-locking code implementation, aligned the tests.
      mysql-test/t/trigger.test:
        Revised the pre-locking code implementation, aligned the tests.
      sql/lock.cc:
        table->placeholder now checks for schema_table
      sql/mysqld.cc:
        my_message_sql(): invoke internal exception handlers
      sql/sp_head.cc:
        exec_open_and_lock_tables(): open and lock tables, or return the
        continuation destination of this instruction
      sql/sp_head.h:
        exec_open_and_lock_tables(): open and lock tables, or return the
        continuation destination of this instruction
      sql/sql_base.cc:
        Prelock_error_handler: delay open table errors until execution
      sql/sql_class.cc:
        THD: add internal error handler, as an exception mechanism.
      sql/sql_class.h:
        THD: add internal error handler, as an exception mechanism.
      sql/sql_update.cc:
        table->placeholder now checks for schema_table
      sql/table.cc:
        st_table_list::hide_view_error(): masked more errors for view security
      sql/table.h:
        table->placeholder now checks for schema_table, and unopened tables
      266a7fff
  3. 08 Aug, 2006 1 commit
  4. 25 Jul, 2006 1 commit
    • unknown's avatar
      Bug#20543 select on information_schema strange warnings, view, different schemas/users · 9955388a
      unknown authored
      The fix is: if user has privileges to view fields and user has any
      (insert,select,delete,update) privileges on underlying view 
      then 'show fields' and select from I_S.COLUMNS table are sucsessful.
      
      
      mysql-test/r/information_schema_db.result:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        test result
      mysql-test/t/information_schema_db.test:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        test case
      sql/sql_acl.cc:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        checked that user has privileges on underlying view and if it's true
        set allowed_show to true for top view.
      sql/sql_show.cc:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        removed unnecessary rights check.'tables->allowed_show' check is used instead
      sql/sql_view.cc:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        skip the check of SHOW_VIEW_ACL privilege on underlying view. It is done later during
        execution of find_field_in_table_ref function.
      sql/table.h:
        Bug#20543 select on information_schema strange warnings, view, different schemas/users
        'allowed_show' is set during rights check for view. If true then user has privileges 
        for 'show create view', etc
      9955388a
  5. 30 May, 2006 1 commit
    • unknown's avatar
      Bug#17204 "second CALL to procedure crashes Server" · 128c3942
      unknown authored
      Bug#18282 "INFORMATION_SCHEMA.TABLES provides inconsistent info about invalid views"
      This bug caused crashes or resulted in wrong data being returned
      when one tried to obtain information from I_S tables about views
      using stored functions.
      
      It was caused by the fact that we were using LEX representing
      statement which were doing select from I_S tables as active LEX
      when contents of I_S table were built. So state of this LEX both
      affected and was affected by open_tables() calls which happened
      during this process. This resulted in wrong behavior and in
      violations of some of invariants which caused crashes.
      
      This fix tries to solve this problem by properly saving/resetting
      and restoring part of LEX which affects and is affected by the
      process of opening tables and views in get_all_tables() routine.
      To simplify things we separated this part of LEX in a new class
      and made LEX its descendant.
      
      
      mysql-test/r/information_schema_db.result:
        test case
      mysql-test/t/information_schema_db.test:
        test case
      sql/sql_lex.cc:
        To simplify saving/resetting and restoring part of LEX which
        affects and is affected by the process of opening tables and
        views we moved it to new class Query_tables_list and made LEX
        descendant of this class. Also introduced two LEX methods 
        which can be used to save and reset or to restore this state.
      sql/sql_lex.h:
        To simplify saving/resetting and restoring part of LEX which
        affects and is affected by the process of opening tables and
        views we moved it to new class Query_tables_list and made LEX
        descendant of this class. Also introduced two LEX methods 
        which can be used to save and reset or to restore this state.
      sql/sql_show.cc:
        Now in get_all_tables() routine we properly save/reset and
        restore part of LEX (statement table list and information
        about routines used) which affects and is affected by the
        process of opening tables and views.
      sql/sql_table.cc:
        Now we clean-up LEX after opening table (view) in two stages.
        In the first stage we call LEX::cleanup_after_one_table_open()
        to clean-up selects lists and derived tables state. In the
        second stage which happens after close_thread_tables() is
        invoked we call Query_tables_list::reset_query_tables_list(FALSE)
        to rollback changes in Query_tables_list.
      128c3942
  6. 20 Mar, 2006 1 commit
    • unknown's avatar
      Fix for bug #18113 "SELECT * FROM information_schema.xxx crashes server" · ce39d294
      unknown authored
      Crash happened when one selected data from one of INFORMATION_SCHEMA
      tables and in order to build its contents server had to open view which
      used stored function and table or view on which one had not global or
      database-level privileges (e.g. had only table-level or had no
      privileges at all).
      
      The crash was caused by usage of check_grant() function, which assumes
      that either number of tables to be inspected by it is limited explicitly
      or table list used and thd->lex->query_tables_own_last value correspond
      to each other (the latter should be either 0 or point to next_global
      member of one of elements of this table list), in conditions when
      above assumptions were not true. This fix just explicitly limits
      number of tables to be inspected. Other negative effects which are
      caused by the fact that thd->lex->query_tables_own_last might not
      be set properly during processing of I_S tables are less disastrous
      and will be reported and fixed separetely.
      
      
      
      mysql-test/r/information_schema_db.result:
        Fix for bug #18113 "SELECT * FROM information_schema.xxx crashes server"
          test case
      mysql-test/t/information_schema_db.test:
        Fix for bug #18113 "SELECT * FROM information_schema.xxx crashes server"
          test case
      sql/sql_acl.cc:
          added note
      ce39d294
  7. 29 Jan, 2006 1 commit
    • unknown's avatar
      information_schema_db.result, information_schema.result: · ef0cd2f5
      unknown authored
        Fix test result.
      table.h, sql_show.cc:
        Put I_S tables in lexical order.
      
      
      sql/sql_show.cc:
        Put I_S tables in lexical order.
      sql/table.h:
        Put I_S tables in lexical order.
      mysql-test/r/information_schema.result:
        Fix test result.
      mysql-test/r/information_schema_db.result:
        Fix test result.
      ef0cd2f5
  8. 05 Aug, 2005 1 commit
    • unknown's avatar
      fix for bug #12315 - SHOW TABLE STATUS FROM `information_schema`; does not sort tablenames · 7c3f55ec
      unknown authored
      mysql-test/r/information_schema.result:
        fix the test case for fix for bug #12315 - SHOW TABLE STATUS FROM `information_schema`; does not sort tablenames
      mysql-test/r/information_schema_db.result:
        fix the test case for fix for bug #12315 - SHOW TABLE STATUS FROM `information_schema`; does not sort tablenames
      sql/sql_show.cc:
        reorder the structure
        fix for bug #12315 - SHOW TABLE STATUS FROM `information_schema`; does not sort tablenames
      sql/table.h:
        reorder the enum
        fix for bug #12315 - SHOW TABLE STATUS FROM `information_schema`; does not sort tablenames
      7c3f55ec
  9. 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
  10. 24 May, 2005 1 commit
  11. 06 May, 2005 1 commit