An error occurred fetching the project authors.
  1. 02 Aug, 2007 1 commit
    • unknown's avatar
      Addendum to bug 29325 · 8277581b
      unknown authored
      keep_files_on_create made a startup option
      
      
      sql/mysqld.cc:
        Addendum to bug #29325
        keep_files_on_create made a startup option
      8277581b
  2. 05 Jul, 2007 1 commit
    • unknown's avatar
      Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored · 32c6341e
      unknown authored
      Problem: logging queries not using indexes we check a special flag which 
      is set only at the server startup and is not changing with a corresponding
      server variable together.
      
      Fix: check the variable value instead of the flag.
      
      
      
      mysql-test/r/show_check.result:
        Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
          - test result.
      mysql-test/t/show_check.test:
        Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
          - test case.
      sql/mysqld.cc:
        Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
          - SPECIAL_LOG_QUERIES_NOT_USING_INDEXES is not used anymore.
      sql/sql_parse.cc:
        Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
          - check opt_log_queries_not_using_indexes instead of 
            SPECIAL_LOG_QUERIES_NOT_USING_INDEXES flag.
      sql/unireg.h:
        Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
          - SPECIAL_LOG_QUERIES_NOT_USING_INDEXES is not used anymore.
      32c6341e
  3. 21 Jun, 2007 1 commit
    • unknown's avatar
      Bug#24924: shared-memory-base-name that is too long causes buffer overflow · 4d9cc3db
      unknown authored
      long shared-memory-base-names could overflow a static internal buffer
      and thus crash mysqld and various clients.  change both to dynamic
      buffers, show everything but overflowing those buffers still works.
      
      The test case for this would pretty much amount to
      mysqld --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --shared-memory=1 &
      mysqladmin --no-defaults --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX shutdown
      
      Unfortunately, we can't just use an .opt file for the
      server. The .opt file is used at start-up, before any
      include in the actual test can tell mysqltest to skip
      this one on non-Windows. As a result, such a test would
      break on unices.
      
      Fixing mysql-test-run.pl to export full path for master
      and slave would enable us to start a server from within
      the test which is ugly and, what's more, doesn't work as
      the server blocks (mysqltest offers no fire-and-forget
      fork-and-exec), and mysqladmin never gets run.
      
      Making the test rpl_windows_shm or some such so we can
      is beyond ugly. As is introducing another file-name based
      special case (run "win*.test" only when on Windows). As is
      (yuck) coding half the test into mtr (as in, having it
      hand out a customized environment conductive to the shm-
      thing on Win only).
      
      Situation is exacerbated by the fact that .sh is not
      necessary run as expected on Win.
      
      In short, it's just not worth it. No test-case until we
      have a new-and-improved test framework.
      
      
      sql-common/client.c:
        Bug#24924: shared-memory-base-name that is too long causes buffer overflow
        
        compose shared memory name in dynamic rather than static buffer to prevent
        overflows (clients)
      sql/mysqld.cc:
        Bug#24924: shared-memory-base-name that is too long causes buffer overflow
        
        compose shared memory name in dynamic rather than static buffer to prevent
        overflows (server)
      4d9cc3db
  4. 14 Jun, 2007 1 commit
    • unknown's avatar
      Bug#21723: Should be able to dump core after setuid() under Linux · 4a009817
      unknown authored
      In many cases, binaries can no longer dump core after calling setuid().
      
      Where the PR_SET_DUMPABLE macro is set, use the prctl() system call 
      to tell the kernel that it's allowed to dump the core of the server.
      
      
      configure.in:
        Test system for "sys/prctl.h", to get access to prctl().
      sql/mysqld.cc:
        Add a process-control operation that tells the Linux kernel that it 
        is allowed to dump core after setuid().
      4a009817
  5. 09 Jun, 2007 1 commit
    • unknown's avatar
      Bug#28149 overflow in some "SHOW STATUS"-variables · 71aa571d
      unknown authored
      changed bytes_received, bytes_sent status variables to longlong
      
      
      sql/mysqld.cc:
        changed bytes_received, bytes_sent status variables to longlong
      sql/sql_class.h:
        changed bytes_received, bytes_sent status variables to longlong
      sql/sql_show.cc:
        changed bytes_received, bytes_sent status variables to longlong
      sql/structs.h:
        changed bytes_received, bytes_sent status variables to longlong
      71aa571d
  6. 29 May, 2007 1 commit
    • unknown's avatar
      Bug #28366: multiple load_file('a: ... ') causes entire mysqld process to hang · c00ad6c0
      unknown authored
      When a Windows console application that has an open console (e.g. mysqld-nt 
      started with the --console option) encounters certain type of errors 
      (like no floppy disk in a floppy drive) the OS will pop-up an 
      "abort/retry/ignore" dialog and block the application (depending on a 
      registry setting : see http://msdn2.microsoft.com/en-us/embedded/aa731206.aspx
      for details).
      Fixed by disabling the dialog popups for every error except a GPF and
      alignment errors. This is safe to do as the actual error gets reported
      (and handled) to mysqld.
      
      
      sql/mysqld.cc:
        Bug #28366: disable the system error messageboxes.
      c00ad6c0
  7. 28 May, 2007 2 commits
    • unknown's avatar
      Bug#24988 FLUSH PRIVILEGES causes brief unavailability · 96d16d96
      unknown authored
      - A race condition caused brief unavailablility when trying to acccess
        a table.
      - The unprotected variable 'grant_option' wasn't intended to alternate
        during normal execution. Variable initialization moved to grant_init
        a lines responsible for the alternation are removed. 
      
      
      sql/mysqld.cc:
        - Added documentation to describe grant_option flag.
      sql/sql_acl.cc:
        - This patch removes lines which causes grant_option to alternate and moves
          variable initialization to the grant_init()-function.
      96d16d96
    • unknown's avatar
      Fix for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits" · e3af3c21
      unknown authored
      When storing a large number to a FLOAT or DOUBLE field with fixed length, it could be incorrectly truncated if the field's length was greater than 31.
      
      This patch also does some code cleanups to be able to reuse code which is common between Field_float::store() and Field_double::store().
      
      
      include/m_string.h:
        Added declarations for log_10 and log_01 from strtod.c
      mysql-test/r/type_float.result:
        Added the testcase for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits"
      mysql-test/t/type_float.test:
        Added the testcase for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits"
      sql/field.cc:
        Moved common code from Field_float::store() and Field_double:store() to Field_real::truncate()
        Fixed the algorithm to not truncate large input numbers if the field length is greater than 31.
        Fixed rounding to not depend on FLT_MAX/DBL_MAX constants.
      sql/field.h:
        Moved not_fixed member from Field_double to Field_real to allow code reuse between Field_float::store() and Field_double::store()
        Added truncate() method to Field_real which is used by both Field_float and Field_double
      sql/init.cc:
        log_10[] and log_01[] are now defined as statical arrays in strtod.c, no need to pre-computed them.
      sql/item_cmpfunc.cc:
        log_01[] now starts from 1e0, not from 1e-1 for consistency.
      sql/mysql_priv.h:
        Moved log_10[] and log_01[] from mysqld.cc to libmystrings.
      sql/mysqld.cc:
        Moved log_10[] and log_01[] from mysqld.cc to libmystrings.
      strings/strtod.c:
        Define and use log_10[] and log_01[] as static arrays of constants instead of values pre-computed at startup.
      e3af3c21
  8. 25 May, 2007 1 commit
    • unknown's avatar
      Fix for bug #24611 "mysqld crashes when connecting from remote host, and compiled from source". · 36b183ee
      unknown authored
      On some Linux distributions with both LinuxThreads and NPTL glibc versions available, statically built binaries can crash, because linker defaults to LinuxThreads when linking statically, but calls to external libraries (like libnss) are resolved to NPTL versions.
      
      Since there is nothing we can do in the code to work that around, just give user an advice on how to fix that, if a crash happened on such a binary/OS combination.
      
      
      sql/mysqld.cc:
        Advise a user on possible solutions in case of a crash in a statically built binary on a system with both LinuxThreads and NPTL available.
      36b183ee
  9. 16 May, 2007 1 commit
    • unknown's avatar
      Bug#23068 - key_cache_block_size is not set or displayes correctly · b9ec849b
      unknown authored
      Command line and configuration file option 'key_cache_block_size'
      was reduced by MALLOC_OVERHEAD (8 in a production server, 36 in a
      debug server) from the user supplied value and restricted it to
      the greatest multiple of 512 less or equal to the reduced value.
      
      This patch changes option 'key_cache_block_size' to not deduce
      MALLOC_OVERHEAD from the input value. However, the restriction
      to a multiple of 512 is still done.
      
      
      sql/mysqld.cc:
        Bug#23068 - key_cache_block_size is not set or displayes correctly
        Changed option 'key_cache_block_size' to not deduce
        MALLOC_OVERHEAD from the input value.
      b9ec849b
  10. 02 May, 2007 1 commit
  11. 27 Apr, 2007 1 commit
  12. 23 Apr, 2007 1 commit
    • unknown's avatar
      Bug#25621 Error in my_thread_global_end(): 1 threads didn't exit · 800d74f2
      unknown authored
      - On Windows, connection handlers while exiting properly did not 
      decrement the server's thread count.
      
      
      sql/mysqld.cc:
        Bug#25621 Error in my_thread_global_end(): 1 threads didn't exit
        - Make sure that connection handlers decrement number of threads
        and handlers on Windows.
        - Signal condition variable before unlocking mutex.
      800d74f2
  13. 12 Apr, 2007 1 commit
    • unknown's avatar
      mysqld.cc: · 1992907b
      unknown authored
        Removing wrong MYF(0) argument.
      
      
      sql/mysqld.cc:
        Removing wrong MYF(0) argument.
      1992907b
  14. 11 Apr, 2007 1 commit
  15. 09 Apr, 2007 1 commit
    • unknown's avatar
      Bug#22648 LC_TIME_NAMES: Setting GLOBAL has no effect · 8e2b68c3
      unknown authored
      Problem: setting/displaying @@LC_TIME_NAMES didn't distinguish between
      GLOBAL and SESSION variable types - always SESSION variable
      was set/shonw.
      Fix: set either global or session value.
      Also, "mysqld --lc-time-names" was added to set "global default" value.
      
      
      mysql-test/r/variables.result:
        Adding test cases
      mysql-test/t/variables.test:
        Adding test cases
      sql/mysql_priv.h:
        Declaring variable for global default.
      sql/mysqld.cc:
        Adding --lc-time-names
      sql/set_var.cc:
        Distinguish between GLOBAL and SESSION variables.
      sql/sql_class.cc:
        Don't initialize to en_US, use global_system_variables value instead.
      8e2b68c3
  16. 24 Mar, 2007 1 commit
  17. 23 Mar, 2007 2 commits
    • unknown's avatar
      reverted linuxthreads thr_client_alarm fix (not future-proof) · d89329c6
      unknown authored
      fixed differently: wake up select_thread with THR_SERVER_ALARM instead
      
      
      mysys/thr_alarm.c:
        reverted linuxthreads thr_client_alarm fix (not future-proof)
      d89329c6
    • unknown's avatar
      move thr_client_alarm initialization to mysqld.cc · 6e1f446a
      unknown authored
      (in thr_alarm.cc it happened too late).
      
      
      mysys/thr_alarm.c:
        move thr_client_alarm initialization to mysqld.cc
        (here it happened too late)
      sql/mysqld.cc:
        move thr_client_alarm initialization to mysqld.cc
        (in thr_alarm.cc it happened too late).
        moved thr_kill_signal initialization to init_signals()
      6e1f446a
  18. 22 Mar, 2007 2 commits
    • unknown's avatar
      Fixed compiler warnings. · 7eb3881b
      unknown authored
      mysys/default.c:
        Fixed bug.
      ndb/src/mgmclient/CommandInterpreter.cpp:
        Added parenthesis around the expression.
      sql/mysqld.cc:
        Fixed compiler warnings.
        
        Added a missing component in options struct (bug).
      sql-common/my_time.c:
        Removed garbage.
      sql/sql_table.cc:
        A possible use of a variable uninitialized.
      support-files/compiler_warnings.supp:
        BitKeeper file /home/my/bk/mysql-4.1-main/support-files/compiler_warnings.supp
      7eb3881b
    • unknown's avatar
      - renaming TMP_TABLE to NON_TRANSACTIONAL_TMP_TABLE because this is · 685d21b7
      unknown authored
      what it actually means (Monty approved the renaming)
      - correcting description of transaction_alloc command-line options
      (our manual is correct)
      - fix for a failure of rpl_trigger.
      
      
      mysql-test/t/rpl_misc_functions.test:
        test was cleaning up only on slave, but it's also needed on master,
        otherwise it influences rpl_trigger.test
      sql/lock.cc:
        clearer name
      sql/mysqld.cc:
        I checked the code that those two variables are not about binlogging
        but about the size of the transaction's memroot which is used
        to create savepoint structures and to store list of tables to be invalidated
        (for NDB). The manual has a correct description, no need to fix it.
      sql/sql_base.cc:
        clearer name
      sql/sql_derived.cc:
        clearer name
      sql/sql_select.cc:
        clearer name
      sql/table.h:
        clearer name: TMP_TABLE is used for non-transactional tables.
      685d21b7
  19. 15 Mar, 2007 2 commits
    • unknown's avatar
      Fix for bug #25966 "2MB per second endless memory consumption after LOCK · cdd2a2e4
      unknown authored
      TABLE ... WRITE".
      
      Memory and CPU hogging occured when connection which had to wait for table
      lock was serviced by thread which previously serviced connection that was
      killed (note that connections can reuse threads if thread cache is enabled).
      One possible scenario which exposed this problem was when thread which
      provided binlog dump to replication slave was implicitly/automatically
      killed when the same slave reconnected and started pulling data through
      different thread/connection.
      The problem also occured when one killed particular query in connection
      (using KILL QUERY) and later this connection had to wait for some table
      lock.
      
      This problem was caused by the fact that thread-specific mysys_var::abort
      variable, which indicates that waiting operations on mysys layer should
      be aborted (this includes waiting for table locks), was set by kill
      operation but was never reset back. So this value was "inherited" by the
      following statements or even other connections (which reused the same
      physical thread). Such discrepancy between this variable and THD::killed
      flag broke logic on SQL-layer and caused CPU and memory hogging.
      
      This patch tries to fix this problem by properly resetting this member.
      
      There is no test-case associated with this patch since it is hard to test
      for memory/CPU hogging conditions in our test-suite.
      
      
      sql/mysqld.cc:
        We should not forget to reset THD::mysys_var::abort after kill operation
        if we are going to use thread to which this operation was applied for
        handling of other connections.
      sql/sp_head.cc:
        We should not forget to reset THD::mysys_var::abort after kill operation
        if we are going to use thread to which this operation was applied for
        handling of further statements.
      sql/sql_parse.cc:
        We should not forget to reset THD::mysys_var::abort after kill operation
        if we are going to use thread to which this operation was applied for
        handling of further statements.
      cdd2a2e4
    • unknown's avatar
      Fix for bug #25966 "2MB per second endless memory consumption after LOCK · db1d2f64
      unknown authored
      TABLE ... WRITE".
      
      CPU hogging occured when connection which had to wait for table lock was
      serviced by thread which previously serviced connection that was killed
      (note that connections can reuse threads if thread cache is enabled).
      One possible scenario which exposed this problem was when thread which
      provided binlog dump to replication slave was implicitly/automatically
      killed when the same slave reconnected and started pulling data through
      different thread/connection.
      In 5.* versions memory hogging was added to CPU hogging. Moreover in
      those versions the problem also occured when one killed particular query
      in connection (using KILL QUERY) and later this connection had to wait for
      some table lock.
      
      This problem was caused by the fact that thread-specific mysys_var::abort
      variable, which indicates that waiting operations on mysys layer should
      be aborted (this includes waiting for table locks), was set by kill
      operation but was never reset back. So this value was "inherited" by the
      following statements or even other connections (which reused the same
      physical thread). Such discrepancy between this variable and THD::killed
      flag broke logic on SQL-layer and caused CPU and memory hogging.
      
      This patch tries to fix this problem by properly resetting this member.
      
      There is no test-case associated with this patch since it is hard to test
      for memory/CPU hogging conditions in our test-suite.
      
      
      sql/mysqld.cc:
        We should not forget to reset THD::mysys_var::abort after kill operation
        if we are going to use thread to which this operation was applied for
        handling of other connections.
      db1d2f64
  20. 07 Mar, 2007 1 commit
    • unknown's avatar
      A fix for Bug#26750 "valgrind leak in sp_head" (and post-review · 053c6c01
      unknown authored
      fixes).
      
      The legend: on a replication slave, in case a trigger creation
      was filtered out because of application of replicate-do-table/
      replicate-ignore-table rule, the parsed definition of a trigger was not 
      cleaned up properly. LEX::sphead member was left around and leaked 
      memory. Until the actual implementation of support of 
      replicate-ignore-table rules for triggers by the patch for Bug 24478 it 
      was never the case that "case SQLCOM_CREATE_TRIGGER"
      was not executed once a trigger was parsed,
      so the deletion of lex->sphead there worked and the memory did not leak.
      
      The fix: 
      
      The real cause of the bug is that there is no 1 or 2 places where
      we can clean up the main LEX after parse. And the reason we 
      can not have just one or two places where we clean up the LEX is
      asymmetric behaviour of MYSQLparse in case of success or error. 
      
      One of the root causes of this behaviour is the code in Item::Item()
      constructor. There, a newly created item adds itself to THD::free_list
      - a single-linked list of Items used in a statement. Yuck. This code
      is unaware that we may have more than one statement active at a time,
      and always assumes that the free_list of the current statement is
      located in THD::free_list. One day we need to be able to explicitly
      allocate an item in a given Query_arena.
      Thus, when parsing a definition of a stored procedure, like
      CREATE PROCEDURE p1() BEGIN SELECT a FROM t1; SELECT b FROM t1; END;
      we actually need to reset THD::mem_root, THD::free_list and THD::lex
      to parse the nested procedure statement (SELECT *).
      The actual reset and restore is implemented in semantic actions
      attached to sp_proc_stmt grammar rule.
      The problem is that in case of a parsing error inside a nested statement
      Bison generated parser would abort immediately, without executing the
      restore part of the semantic action. This would leave THD in an 
      in-the-middle-of-parsing state.
      This is why we couldn't have had a single place where we clean up the LEX
      after MYSQLparse - in case of an error we needed to do a clean up
      immediately, in case of success a clean up could have been delayed.
      This left the door open for a memory leak.
      
      One of the following possibilities were considered when working on a fix:
      - patch the replication logic to do the clean up. Rejected
      as breaks module borders, replication code should not need to know the
      gory details of clean up procedure after CREATE TRIGGER.
      - wrap MYSQLparse with a function that would do a clean up.
      Rejected as ideally we should fix the problem when it happens, not
      adjust for it outside of the problematic code.
      - make sure MYSQLparse cleans up after itself by invoking the clean up
      functionality in the appropriate places before return. Implemented in 
      this patch.
      - use %destructor rule for sp_proc_stmt to restore THD - cleaner
      than the prevoius approach, but rejected
      because needs a careful analysis of the side effects, and this patch is 
      for 5.0, and long term we need to use the next alternative anyway
      - make sure that sp_proc_stmt doesn't juggle with THD - this is a 
      large work that will affect many modules.
      
      Cleanup: move main_lex and main_mem_root from Statement to its
      only two descendants Prepared_statement and THD. This ensures that
      when a Statement instance was created for purposes of statement backup,
      we do not involve LEX constructor/destructor, which is fairly expensive.
      In order to track that the transformation produces equivalent 
      functionality please check the respective constructors and destructors
      of Statement, Prepared_statement and THD - these members were
      used only there.
      This cleanup is unrelated to the patch.
      
      
      sql/log_event.cc:
        THD::main_lex is private and should not be used.
      sql/mysqld.cc:
        Move MYSQLerror to sql_yacc.yy as it depends on LEX headers now.
      sql/sql_class.cc:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_class.h:
        Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
      sql/sql_lex.cc:
        Implement st_lex::restore_lex()
      sql/sql_lex.h:
        Declare st_lex::restore_lex().
      sql/sql_parse.cc:
        Consolidate the calls to unit.cleanup() and deletion of lex->sphead
        in mysql_parse (COM_QUERY handler)
      sql/sql_prepare.cc:
        No need to delete lex->sphead to restore memory roots now in case of a 
        parse error - this is done automatically inside MYSQLparse
      sql/sql_trigger.cc:
        This code could lead to double deletion apparently, as in case
        of an error lex.sphead was never reset.
      sql/sql_yacc.yy:
        Trap all returns from the parser to ensure that MySQL-specific cleanup
        is invoked: we need to restore the global state of THD and LEX in 
        case of a parsing error. In case of a parsing success this happens as 
        part of normal grammar reduction process.
      053c6c01
  21. 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
  22. 05 Mar, 2007 1 commit
  23. 01 Mar, 2007 1 commit
    • unknown's avatar
      Fixes of compilation warnings and errors. · b3fafa40
      unknown authored
      sql/mysql_priv.h:
        Removing compiler warning "NULL used in arithmetic"
      sql/mysqld.cc:
        First argument to WARN_DEPRECATED is supposed to be a pointer (to THD structure)
      sql/sql_insert.cc:
        Removing compiler warning "unused variable". Apparently query is not used when compiling libmysqld.
      sql/sql_yacc.yy:
        Removing compiler error "Macro already defined"
      b3fafa40
  24. 28 Feb, 2007 1 commit
    • unknown's avatar
      Bug#24878 mysql server doesn't log incident time in "mysqld got signal 11" error messages · 87eee8fc
      unknown authored
       - Add printout of current time when mysqld is killed by an
         unhandled signal
      
      
      sql/mysqld.cc:
        Add printout of current time before the "mysqld got signal %d" message
        Hopefully we don't crash in the calls to 'time' or 'localtime_r'
        but if that should start to happen we can move the printout of
        time further down. At least it's now below the check for segfault
        inside of segfault handler.
      87eee8fc
  25. 22 Feb, 2007 1 commit
    • unknown's avatar
      Fixed compiler warnings (for linux and win32 and win64) · 50bd97a9
      unknown authored
      Fixed a couple of usage of not initialized warnings (unlikely cases)
      
      
      client/mysqldump.c:
        Fixed compiler warnings from 'max' build
      client/mysqltest.c:
        Removed compiler warnings
      cmd-line-utils/readline/xmalloc.c:
        Fixed compiler warnings from 'max' build
      extra/comp_err.c:
        Fixed compiler warnings from 'max' build
      extra/yassl/include/openssl/ssl.h:
        Changed prototype for SSL_set_fd() to fix compiler warnings (and possible errors) on windows 64 bit
      extra/yassl/include/socket_wrapper.hpp:
        Moved socket_t to ssl.h, to be able to removed compiler warnings on windows 64 bit
      extra/yassl/src/ssl.cpp:
        Changed prototype for SSL_set_fd() to fix compiler warnings (and possible errors) on windows 64 bit
      extra/yassl/taocrypt/src/integer.cpp:
        Fixed compiler warnings
      include/my_global.h:
        Added my_offsetof() macro from 5.1 to get rid of compiler warnings
      innobase/include/ut0byte.ic:
        Fixed compiler warnings on win64
      innobase/include/ut0ut.ic:
        Fixed compiler warnings on win64
      libmysql/libmysql.def:
        Fixed compiler warnings on win64
      myisam/mi_packrec.c:
        Fixed compiler warnings on win64
      myisam/myisamchk.c:
        Fixed compiler warnings from 'max' build
      mysys/base64.c:
        Fixed compiler warnings on win64
      mysys/mf_keycache.c:
        Fixed compiler warnings from 'max' build
      mysys/my_getopt.c:
        Fixed compiler warnings from 'max' build
      mysys/my_init.c:
        Fixed compiler warnings from 'max' build
      mysys/my_thr_init.c:
        Fixed compiler warnings
      mysys/ptr_cmp.c:
        Fixed compiler warnings from 'max' build
      ndb/include/kernel/signaldata/DictTabInfo.hpp:
        Fixed compiler warnings
      server-tools/instance-manager/mysql_connection.cc:
        Fixed compiler warnings
      server-tools/instance-manager/mysqlmanager.cc:
        Fixed compiler warnings
      sql/filesort.cc:
        Initalize variable that was used unitialized in error conditions
      sql/ha_berkeley.cc:
        Moved get_auto_primary_key() here as int5store() gives (wrong) compiler warnings in win64
      sql/ha_berkeley.h:
        Moved get_auto_primary_key() to ha_berkeley.cc
      sql/ha_innodb.cc:
        Fixed compiler warnings
      sql/item.cc:
        Fixed compiler warnings from 'max' build
      sql/item_timefunc.cc:
        Fixed compiler warnings
      sql/mysqld.cc:
        Fixed compiler warnings
      sql/sql_acl.cc:
        Fixed compiler warnings from 'max' build
      sql/sql_base.cc:
        Fixed compiler warnings from 'max' build
      sql/sql_insert.cc:
        Initialize variable that may be used unitialized on error conditions (not fatal)
      sql/sql_prepare.cc:
        Fixed compiler warnings from 'max' build
      sql/sql_select.cc:
        Fixed compiler warnings
      sql/sql_show.cc:
        Fixed compiler warnings
      sql/udf_example.def:
        Fixed compiler warnings on win64
      sql/unireg.cc:
        Initialize variable that may be used unitialized on error conditions
      strings/ctype-ucs2.c:
        Fixed compiler warnings
      strings/ctype-utf8.c:
        Fixed compiler warnings
      strings/decimal.c:
        Fixed compiler warnings
      support-files/compiler_warnings.supp:
        Ignore warnings from sql_yacc.cc that are hard to remove
        Ignore some not important warnings from windows 64 bit build
      tools/mysqlmanager.c:
        Fixed compiler warnings
      50bd97a9
  26. 20 Feb, 2007 1 commit
    • unknown's avatar
      Bug#20166 mysql-test-run.pl does not test system privilege tables creation · 629b9cf8
      unknown authored
       - Part 2, add @@hostname system variable
      
      
      mysql-test/r/variables.result:
        Add testcase for @@hostname
      mysql-test/t/variables.test:
        Add testcase for @@hostname
      sql/log.cc:
        Use pidfile_name as base when generating the default log name
      sql/mysqld.cc:
        Init "glob_hostname" to that of hostname, fallback to "localhost"
        if 'gethostname' should fail.
        Init "pidfile_name" to hostname.pid and fallback to "mysql.pid" if
        'gethostname' should fail
      sql/set_var.cc:
        Add new system variable "hostname"
      629b9cf8
  27. 19 Feb, 2007 1 commit
    • unknown's avatar
      Bug#18743: Several test cases fails if "classic" configuration in 5.0 · db36a2aa
      unknown authored
      The problem happened because those tests were using "cp932" and "ucs2" without checking whether these character sets are available. This fix moves test parts to make character set specific parts be tested only if they are:
      - some parts were moved to "ctype_ucs.test" and "ctype_cp932.test"
      - some parts were moved to the newly added tests "innodb-ucs2.test", "mysqlbinglog-cp932.test" and "sp-ucs2.test"
      
      
      mysql-test/r/ctype_cp932.result:
        Moved cp932-specific test case from mysql.test
      mysql-test/r/innodb.result:
        Moved ucs2-specific test cases to innodb-ucs2.test
      mysql-test/r/mysql.result:
        Move cp932-specific test cases to ctype_cp932.test
      mysql-test/r/mysqlbinlog.result:
        Moved cp932-specific test case to mysqlbinlog-cp932.test
      mysql-test/r/sp.result:
        Moved ucs2-specific test case to sp-ucs2.test
      mysql-test/t/ctype_cp932.test:
        Moved cp932-specific test case from mysql.test
      mysql-test/t/ctype_ucs2_def-master.opt:
        Use the comma-separated list of character sets to avoid mysql-test errors when ucs2 is not available in the server
      mysql-test/t/ctype_ucs2_def.test:
        Added requirement for ucs2 in the server
      mysql-test/t/innodb.test:
        Moved ucs2-specific test cases to innodb-ucs2.test
      mysql-test/t/mysql.test:
        Move cp932-specific test cases to ctype_cp932.test
      mysql-test/t/mysqlbinlog.test:
        Moved cp932-specific test case to mysqlbinlog-cp932.test
      mysql-test/t/sp.test:
        Moved ucs2-specific test case to sp-ucs2.test
      sql/mysqld.cc:
        Allow specifying several character sets for test purposes, to make "mysqld" start even if the character set being tested is not compiled:
        mysqld --default-character-set=ucs2,latin1
        The first available character set will be chosen.
      mysql-test/r/innodb-ucs2.result:
        New BitKeeper file ``mysql-test/r/innodb-ucs2.result''
      mysql-test/r/mysqlbinlog-cp932.result:
        New BitKeeper file ``mysql-test/r/mysqlbinlog-cp932.result''
      mysql-test/r/sp-ucs2.result:
        New BitKeeper file ``mysql-test/r/sp-ucs2.result''
      mysql-test/t/innodb-ucs2.test:
        New BitKeeper file ``mysql-test/t/innodb-ucs2.test''
      mysql-test/t/mysqlbinlog-cp932.test:
        New BitKeeper file ``mysql-test/t/mysqlbinlog-cp932.test''
      mysql-test/t/sp-ucs2.test:
        New BitKeeper file ``mysql-test/t/sp-ucs2.test''
      db36a2aa
  28. 15 Feb, 2007 1 commit
    • unknown's avatar
      Backport from the Falcon tree. · 9dfb1d90
      unknown authored
      When opening/creating the transaction coordinator's log, if binlog is
      used, the tc log is the binlog so we use the binlog's name; otherwise
      we use the mmap-based log, named after the mandatory argument of the
      --log-tc option (meant for that).
      
      
      sql/log.cc:
        fixing wrong order of arguments to my_create()
        (3rd param is the desired modes of the file; "0" lead to no rights
        for anybody on the file).
      sql/mysqld.cc:
        When opening/creating the transaction coordinator's log, if binlog is
        used, the tc log is the binlog so we use the binlog's name; otherwise
        we use the mmap-based log, named after the mandatory argument of the
        --log-tc option (meant for that).
      9dfb1d90
  29. 14 Feb, 2007 1 commit
    • unknown's avatar
      Bug#18628 mysql-test-run: security problem(part1) · c4ae01e6
      unknown authored
       - Implement --secure-file-priv=<dir> option that limits
        "load_file", "LOAD DATA" and "SELECT .. INTO OUTFILE" to work 
        with files in specified dir.
       - Use above option for mysqld in mysql-test-run.pl 
      
      
      mysql-test/mysql-test-run.pl:
        Add usage of --secure-file-priv=vardir when starting mysqld
      mysql-test/r/loaddata.result:
        Update test result after adding test to check that secure-file-priv
        works for "load data" and "load_file"
      mysql-test/r/outfile.result:
        Update result
      mysql-test/r/query_cache.result:
        Can't load from outside of vardir anymore
      mysql-test/r/type_blob.result:
        Can't load from outside of vardir anymore
      mysql-test/t/loaddata.test:
        Update test result after adding test to check that secure-file-priv 
        works for "load data" and "load_file"
      mysql-test/t/outfile.test:
        Update test result after adding test to check that secure-file-priv
        works for "SELECT .. INTO OUTFILE"
      mysql-test/t/query_cache.test:
        Can't load from outside of vardir anymore
      mysql-test/t/type_blob.test:
        Can't load from outside of vardir anymore
      sql/item_strfunc.cc:
        Check that the path "load_file" uses for the file is within 
        what's specified with --secure-file-priv
      sql/mysql_priv.h:
        Add secure_file_priv
      sql/mysqld.cc:
        Add "--secure_file_priv"
      sql/set_var.cc:
        Add variable "secure_file_priv" to "show variables"
      sql/sql_class.cc:
        Check that the path "load_file" uses for the file is within 
        what's specified with --secure-file-priv
      sql/sql_class.h:
        Fix spelling error
      sql/sql_load.cc:
        Check that the path "load_file" uses for the file is within 
        what's specified with --secure-file-priv
      sql/share/errmsg.txt:
        Fix swedish error message for ER_OPTION_PREVENTS_STATMENT wich was hardcoded
        to --skip-grant-tables
      c4ae01e6
  30. 09 Feb, 2007 1 commit
  31. 02 Feb, 2007 1 commit
  32. 01 Feb, 2007 1 commit
    • unknown's avatar
      Valgrind error fixes · 2df29225
      unknown authored
      Notes:
      This patch doesn't fix all issues in the tree and we need jani's fix for that
      This patch shoud not be merged into 5.0
      
      
      mysql-test/r/ps.result:
        result fix
      mysql-test/r/symlink.result:
        result fix
      mysql-test/t/ps.test:
        test is moved to 'symlink' test
      mysql-test/t/symlink.test:
        test from 'ps' test
      sql/field_conv.cc:
        valgrind error fix: backport from 5.0
      sql/mysqld.cc:
        release of ssl_context
      vio/viosslfactories.c:
        release of ssl_context
      mysql-test/valgrind.supp:
        New BitKeeper file ``mysql-test/valgrind.supp''
        This file is backported from 5.0, added suppressing of OpenSSL errors
      2df29225
  33. 31 Jan, 2007 1 commit
    • unknown's avatar
      fix for bug #19690: ORDER BY eliminates rows from the result · faad7355
      unknown authored
      Depending on the queries we use different data processing methods
      and can lose some data in case of double (and decimal in 4.1) fields.
      
      The fix consists of two parts:
      1. double comparison changed, now double a is equal to double b 
      if (a-b) is less than 5*0.1^(1 + max(a->decimals, b->decimals)). 
      For example, if a->decimals==1, b->decimals==2, a==b if (a-b)<0.005
      2. if we use a temporary table, store double values there as is 
      to avoid any data conversion (rounding).
      
      
      mysql-test/r/type_float.result:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - test result
      mysql-test/t/type_float.test:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - test case
      sql/field.cc:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - use not_fixed flag instead of dec to check bounds.
      sql/field.h:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - Field_Double::not_fixed flag introduced, which is set if dec == NOT_FIXED_DEC
            and is used in the ::store() to check bounds. 
          - new constructor introduced (with not_fixed_arg parameter).
      sql/init.cc:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - fill log_01[] array with 0.1 powers.
      sql/item_cmpfunc.cc:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - compare_real_fixed() and compare_e_real_fixed() introduced,
            they consider double a == double b if a-b is less than 'precision',
            'precision' is set to 5*0.1^(1 + max(a->decimals, b->decimals)), 
            for example, if a->decimals==1, b->decimals==2, 'precision' is 0.005
          - use the above functions if both arguments are fixed.
      sql/item_cmpfunc.h:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - Arg_comparator::presision introduced.
          - Arg_comparator::compare_real_fixed(), Arg_comparator::compare_e_real_fixed() introduced.
      sql/mysql_priv.h:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - log_01 array of 0.1 powers added.
      sql/mysqld.cc:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - log_01 array of 0.1 powers added.
      sql/sql_select.cc:
        fix for bug #19690: ORDER BY eliminates rows from the result
          - if we create double field in a temporary table, set not_fixed flag
            (use proper constructor) to avoid data conversion 
            in the Field_double::store(). Otherwise we can lose some data.
      faad7355
  34. 30 Jan, 2007 1 commit
    • unknown's avatar
      Cleanup of thread-type (linuxthread or NTPL) detection code · cdf6001a
      unknown authored
      Move get_thread_lib to mysys/my_pthread.c
      Set 'thr_client_alarm' to signal number used by thr_alarm to give alarms
      
      
      include/my_global.h:
        Fixed to be same as in 5.1
      include/my_pthread.h:
        Move things around to be more in line with rest of code
      mysys/default.c:
        Fixed two wrong pointer incrementations.
      mysys/my_pthread.c:
        Cleanup: Use variable thr_client_alarm
      mysys/my_thr_init.c:
        Detect thread library at startup.
        Set also thr_client_alarm signal here, so that we get
        it in init_signals() in mysqld
      mysys/thr_alarm.c:
        Set thr_client_alarm depending on which thread library we are using
      sql/mysqld.cc:
        Move get_thread_lib to mysys/my_pthread.c
      cdf6001a
  35. 29 Jan, 2007 1 commit
    • unknown's avatar
      Bug#22943 syscall pruning in libmysql · a195ad5e
      unknown authored
       - Set the timeout values only where needed
      
      
      sql/mysql_priv.h:
        Add new functions for setting read and write timeout on "net"
      sql/mysqld.cc:
        - Move the setting of "read_timeout" to the value of "connect_timeout" to
          just before 'check_connection' which is the function where we want
          to use the different timeout
        - With the new functions to set timeout on "net", there is no need to
          specifically set the default wait_timeout on windows.
      sql/net_serv.cc:
        Add new functions for setting read and write timeout of "net, when
        server is compiled not to use alarms it will set the write/read timeout
        directly on connection using 'vio_timeout'(using setsockopt if socket)
      sql/repl_failsafe.cc:
        Put unused code within "#if NOT_USED"
      sql/set_var.cc:
        Use 'net_set_*_timeout' when adjusting timeout value
        on the current connection
      sql/slave.cc:
        The read timeout used when connecting to master server is set
        using 'mysql_options' in 'connect_to_master' function
      sql/sql_parse.cc:
        - Set read and write timeout values to "connect_timeout" during
        connect phase
        - Use "read_timeout" value during sslaccept phase, since this is during
        connect phase it implies "connect-timeout"
        - Set read and write timeout value back to default after connect phase
        - Set "read_timeout" to "wait_timeout" while waiting for client.
      sql/sql_repl.cc:
        Set "read_timeout" to "wait_timeout" while ask other mysqld to send file
      sql-common/client.c:
        Call 'vio_timeout' to set up the read and write timeout's for the
        newly created connection. It only need to be done once at connect time.
      vio/vio.c:
        Use 'vio_timeout' for setting timeout also on an SSL connection
        since they both use sockets
      vio/viossl.c:
        Remove 'vio_ssl_timeout' function
      a195ad5e
  36. 25 Jan, 2007 1 commit
    • unknown's avatar
      Cleanup of thread-type (linuxthread or NTPL) detection code · 2ec2fa6d
      unknown authored
      Move get_thread_lib to mysys/my_pthread.c
      Set 'thr_client_alarm' to signal number used by thr_alarm to give alarms
      
      
      
      include/my_global.h:
        Fixed to be same as in 5.1
      include/my_pthread.h:
        Move things around to be more in line with rest of code
      include/thr_alarm.h:
        extern of thr_client_alarm
      mysys/default.c:
        Fixed two wrong pointer incrementations.
      mysys/my_pthread.c:
        Cleanup: Use variable thr_client_alarm
      mysys/my_thr_init.c:
        Detect thread library at startup
      mysys/thr_alarm.c:
        Set thr_client_alarm depending on which thread library we are using
      sql/mysqld.cc:
        Move get_thread_lib to mysys/my_pthread.c
      2ec2fa6d