An error occurred fetching the project authors.
  1. 26 Oct, 2009 1 commit
    • Michael Widenius's avatar
      Fixed compiler warning message · a46bb97d
      Michael Widenius authored
      - Added checking of return value for system(), freopen(), fgets() and chown()
      - Ensure that calls that require a format strings gets a format string
      - Other trivial things
      Updated test suite results (especially for pbxt and embedded server)
      Removed warning for "Invalid (old?) table or database name 'mysqld.1'" from pbxt tests
      Speed up some pbxt tests by inserting begin ; commit; around "while loops with inserts"
      Added mysqld startup option '--debug-flush'
      Create maria_recovery.trace in data directory instead of current directory
      
      client/mysql.cc:
        Check return value from system()
      client/mysql_upgrade.c:
        Check return value from fgets()
      client/mysqladmin.cc:
        Check return value from fgets()
      client/mysqlslap.c:
        Check return value from system() (but ignore it, as it's not critical)
      extra/yassl/src/crypto_wrapper.cpp:
        Check return value from fgets() (but ignore it, as it's internal file)
      extra/yassl/taocrypt/src/aes.cpp:
        Added extra {} to remove compiler warning
      extra/yassl/taocrypt/src/blowfish.cpp:
        Added extra {} to remove compiler warning
      extra/yassl/taocrypt/src/misc.cpp:
        Ifdef not used code
      include/mysys_err.h:
        Added error message for failing chown()
      mysql-test/mysql-test-run.pl:
        Don't give warning for skipping ndbcluster (never enabled in MariaDB)
      mysql-test/suite/funcs_1/r/is_columns_is_embedded.result:
        Update with new information schema information
      mysql-test/suite/funcs_1/r/is_tables_is_embedded.result:
        New test
      mysql-test/suite/funcs_1/r/is_tables_myisam_embedded.result:
        Update test results (has not been tested for a long time)
      mysql-test/suite/funcs_1/r/is_tables_mysql_embedded.result:
        Update test results (has not been tested for a long time)
      mysql-test/suite/funcs_1/t/is_tables_is.test:
        Don't run with embedded server (as results differ)
        I added a new test for embedded server
      mysql-test/suite/funcs_1/t/is_tables_is_embedded.test:
        New test
      mysql-test/suite/pbxt/my.cnf:
        Allow one to run pbxt tests without having to specify --mysqld=--default-storage-engine=pbxt
      mysql-test/suite/pbxt/t/count_distinct3.test:
        Speed up test by inserting begin; ... commit;
      mysql-test/suite/pbxt/t/subselect.test:
        Speed up test by inserting begin; ... commit;
      mysys/errors.c:
        Added error message for failing chown()
      mysys/my_copy.c:
        Added error message for failing chown()
      mysys/my_redel.c:
        Added error message for failing chown()
      mysys/safemalloc.c:
        Added cast to get rid of compiler warning
      sql/ha_partition.cc:
        Fixed wrong argument to sql_print_error() (it requires a format string)
      sql/log.cc:
        Test return value of freopen()
      sql/mysqld.cc:
        Test return value of freopen()
        Added startup option '--debug-flush' to be used when one gets a core dump (easy to explain to people on IRC)
      sql/rpl_rli.cc:
        Fixed wrong argument to sql_print_error() (it requires a format string)
      sql/set_var.cc:
        Added {} to get rid of compiler warnings
      sql/slave.cc:
        Fixed wrong argument to mi->report() and sql_print...() (they require a format string)
      sql/sql_cache.cc:
        Fixed wrong argument to sql_printinformation() (it requires a format string)
      sql/sql_parse.cc:
        Test return value of fgets()
      sql/sql_plugin.cc:
        Fixed wrong argument to sql_print_error() (it requires a format string)
      sql/sql_select.cc:
        Use unique table name for internal temp tables instead of full path
        (Simple speed & space optimization)
      sql/udf_example.c:
        Removed compiler warning about not used variable
      storage/maria/ha_maria.cc:
        Fixed wrong argument to sql_print_error() and ma_check_print_error() (they require a format string)
      storage/maria/ma_recovery.c:
        Create maria_recovery.trace in data directory instead of current directory
      storage/maria/unittest/ma_test_loghandler-t.c:
        Fixed wrong argument to ok();  Requires a format string
      storage/pbxt/src/strutil_xt.cc:
        Detect temporary tables by checking if that path for the table is in the mysql data directory.
        The database for temporary tables is after this patch, from PBXT point of view, ""
        This is needed to stop PBXT from calling filename_to_tablename() with the base directory as an argument, which caused
        ERROR: Invalid (old?) table or database name 'mysqld.1'" in the log when running the test suite.
      tests/mysql_client_test.c:
        Fixed compiler warnings
      unittest/mysys/base64-t.c:
        Fixed wrong argument to diag() (it requires a format string)
        Added a comment that the current 'print' of differing buffers doesn't print the right thing,
        but didn't fix this as it's not important (unless we find a bug in the real code)
      a46bb97d
  2. 30 Sep, 2009 1 commit
  3. 11 Sep, 2009 1 commit
    • unknown's avatar
      After-merge fixes for merge of MySQL-5.1.38. · 2b440ba3
      unknown authored
      mysql-test/r/innodb.result:
        Fix wrong merge of result file conflicts.
      mysql-test/t/bug46080-master.opt:
        Fix memory limit to take into account extra storage engines in MariaDB.
      mysql-test/t/innodb.test:
        Add comment clarifying tricky --replace_result.
      sql/sql_select.cc:
        Restore fix of Bug#34374, accudentally lost during MySQL 5.1.38 merge.
      support-files/build-tags:
        Fix missing -R option for bzr, accidentally lost in MySQL-5.1.38 merge.
      2b440ba3
  4. 03 Sep, 2009 1 commit
    • Michael Widenius's avatar
      Updated documentation files to reflect MariaDB and not the Maria storage engine or MySQL · 24ed0ad3
      Michael Widenius authored
      Added (rewritten) patch from Percona to get extended statistics in slow.log:
      - Added handling of 'set' variables to set_var.cc. Changed sql_mode to use this
      - Added extra logging to slow log of 'Thread_id, Schema, Query Cache hit, Rows sent and Rows examined'
      - Added optional logging to slow log, through log_slow_verbosity, of query plan statistics
      - Added new user variables log_slow_rate_limit, log_slow_verbosity, log_slow_filter
      - Added log-slow-file as synonym for 'slow-log-file', as most slow-log variables starts with 'log-slow'
      - Added log-slow-time as synonym for long-query-time
      Some trivial MyISAM optimizations:
      - In prepare for drop, flush key blocks
      - Don't call mi_lock_database if my_disable_locking is used
      
      KNOWN_BUGS.txt:
        Updated file to reflect MariaDB and not the Maria storage engine
      README:
        Updated file to reflect MariaDB
      mysql-test/r/log_slow.result:
        Test new options for slow query log
      mysql-test/r/variables.result:
        Updated result (old version cut of things at 79 characters)
      mysql-test/t/log_slow.test:
        Test new options for slow query log
      sql/Makefile.am:
        Added log_slow.h
      sql/event_data_objects.cc:
        Removed not needed test for enable_slow_log (is done when the flag is tested elsewhere)
      sql/events.cc:
        Use the general make_set() function instead of 'symbolic_mode_representation'
      sql/filesort.cc:
        Added status for used query plans
      sql/log.cc:
        Reset counters if no query_length (from Percona's patch; Not sure if needed, but can do no harm)
        Added extra logging to slow log of 'Thread_id, Schema, Query Cache hit, Rows sent and Rows examined'
        Added optional logging to slow log, through log_slow_verbosity, of query plan statistics
        Fixed wrong test of error condition
      sql/log_slow.h:
        Defines and variables for log_slow_verbosity and log_slow_filter
      sql/mysql_priv.h:
        Include log_slow.h
      sql/mysqld.cc:
        Added new user variables log_slow_rate_limit, log_slow_verbosity, log_slow_filter
        Added log-slow-file as synonym for 'slow-log-file', as most slow-log variables starts with 'log-slow'
        Added log-slow-time as synonym for long-query-time
        Added note that one should use log-slow-filter instead of log-slow-admin-statements
        Updated comment from 'slow_query_log_file'
      sql/set_var.cc:
        Added long_slow_time as synonym for long_query_time
        Added new user variables log_slow_rate_limit, log_slow_verbosity, log_slow_filter
        dded handling of 'set' variables to set_var.cc. Changed sql_mode to use this
      sql/set_var.h:
        - Added handling of 'set' variables. Changed sql_mode to use this
      sql/slave.cc:
        Use global filter also for slaves
      sql/sp_head.cc:
        Simplify saving of general_slow_log state
        Use the general make_set() function instead of 'symbolic_mode_representation'
      sql/sql_cache.cc:
        Added status for used query plans
      sql/sql_class.cc:
        Remember/restore query_plan_flags over complex statements
      sql/sql_class.h:
        Added variables to handle extended slow log statistics
      sql/sql_parse.cc:
        Added status for used query plans
        Added test for filtering slow_query_log
      sql/sql_select.cc:
        Added status for used query plans
      sql/sql_show.cc:
        Use the general make_set() function instead of 'symbolic_mode_representation'
      sql/strfunc.cc:
        Report first error (not last) if something is wrong in a set
        Removed compiler warning
      storage/myisam/mi_extra.c:
        In prepare for drop, flush key blocks (speed optimization)
      storage/myisam/mi_locking.c:
        Don't call mi_lock_database if my_disable_locking is used (speed optimization)
      24ed0ad3
  5. 31 Aug, 2009 1 commit
    • Sergey Petrunya's avatar
      MWL#17: Table-elimination · 3c3d0919
      Sergey Petrunya authored
      - Addressing review feedback, generation 4.
      
      include/my_global.h:
        Make ALIGN_PTR's action correspond to that of ALIGN_SIZE
      sql/item.cc:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      sql/item.h:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      sql/item_cmpfunc.cc:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      sql/item_subselect.cc:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      sql/item_subselect.h:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      sql/opt_table_elimination.cc:
        MWL#17: Table-elimination
        - Addressing review feedback, generation 4: abstract everything in case
          we would need to change it for something else in the future.
      sql/sql_list.h:
        MWL#17: Table-elimination
        - Introduce exchange_sort(List<T> ...) template function
      sql/sql_select.cc:
        MWL#17: Table-elimination
        - Review feedback: function renames, better comments
      3c3d0919
  6. 16 Aug, 2009 1 commit
  7. 13 Aug, 2009 2 commits
    • Sergey Petrunya's avatar
      MWL#17: Table elimination · 23ba4fbc
      Sergey Petrunya authored
      - Better comments
      
      sql/sql_select.cc:
        MWL#17: Table elimination
        - Fix buildbot failure: do set correct value to nested_join::n_tables
      23ba4fbc
    • Sergey Petrunya's avatar
      MWL#17: Table elimination · c4ff20fb
      Sergey Petrunya authored
      - Post-postreview changes fix: Do set NESTED_JOIN::n_tables to number of 
        tables left after elimination.
      c4ff20fb
  8. 12 Aug, 2009 1 commit
    • Sergey Petrunya's avatar
      MWL#17: Table elimination · 54c4bd36
      Sergey Petrunya authored
      - Continue addressing review feedback: remove "unusable KEYUSEs" 
        extension as it is no longer needed.
      
      sql/item.h:
        MWL#17: Table elimination
        - Code cleanup
      sql/opt_table_elimination.cc:
        MWL#17: Table elimination
        - Code cleanup
      54c4bd36
  9. 07 Aug, 2009 1 commit
    • Martin Hansson's avatar
      Bug#46454: MySQL wrong index optimisation leads to incorrect result & crashes · 1164f8a6
      Martin Hansson authored
      Problem 1:
      When the 'Using index' optimization is used, the optimizer may still - after
      cost-based optimization - decide to use another index in order to avoid using
      a temporary table. But when this happens, the flag to the storage engine to 
      read index only (not table) was still set. Fixed by resetting the flag in the 
      storage engine and TABLE structure in the above scenario, unless the new index
      allows for the same optimization.
      Problem 2:
      When a 'ref' access method was employed by cost-based optimizer, (when the column
      is non-NULLable), it was assumed that it needed no initialization if 'quick' access
      methods (since they are based on range scan). When ORDER BY optimization overrides 
      the decision, however, it expects to have this initialized and hence crashes. 
      Fixed in 5.1 (was fixed in 6.0 already) by initializing 'quick' even when there's 
      'ref' access. 
      
      mysql-test/r/order_by.result:
        Bug#46454: Test result.
      mysql-test/t/order_by.test:
        Bug#46454: Test case.
      sql/sql_select.cc:
        Bug#46454: 
        Problem 1 fixed in make_join_select()
        Problem 2 fixed in test_if_skip_sort_order()
      sql/table.h:
        Bug#46454: Added comment to field.
      1164f8a6
  10. 24 Jul, 2009 1 commit
    • Alexey Kopytov's avatar
      Bug #46075: Assertion failed: 0, file .\protocol.cc, line 416 · df9eac9e
      Alexey Kopytov authored
      In create_myisam_from_heap() mark all errors as fatal except 
      HA_ERR_RECORD_FILE_FULL for a HEAP table.
      
      Not doing so could lead to problems, e.g. in a case when a
      temporary MyISAM table gets overrun due to its MAX_ROWS limit
      while executing INSERT/REPLACE IGNORE ... SELECT. 
      The SELECT execution was aborted, but the error was 
      converted to a warning due to IGNORE clause, so neither 'ok' 
      nor 'error' packet could be sent back to the client. This 
      condition led to hanging client when using 5.0 server, or 
      assertion failure in 5.1.
      
      
      mysql-test/r/insert_select.result:
        Added a test case for bug #46075.
      mysql-test/t/insert_select.test:
        Added a test case for bug #46075.
      sql/sql_select.cc:
        In create_myisam_from_heap() mark all errors as fatal except 
        HA_ERR_RECORD_FILE_FULL for a HEAP table.
      df9eac9e
  11. 21 Jul, 2009 2 commits
    • MySQL Build Team's avatar
      Backport into build-200907211706-5.0.82sp1 · 05a52ac7
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 2772
      > revision-id: joro@sun.com-20090615133815-eb007p5793in33p5
      > parent: joro@sun.com-20090612140659-4hj1tta9p8wvcw4k
      > committer: Georgi Kodinov <joro@sun.com>
      > branch nick: B44810-5.0-bugteam
      > timestamp: Mon 2009-06-15 16:38:15 +0300
      > message:
      >   Bug #44810: index merge and order by with low sort_buffer_size
      >   crashes server!
      >   
      >   The problem affects the scenario when index merge is followed by a filesort
      >   and the sort buffer is not big enough for all the sort keys.
      >   In this case the filesort function will read the data to the end through the 
      >   index merge quick access method (and thus closing the cursor etc), 
      >   but will leave the pointer to the quick select method in place.
      >   It will then create a temporary file to hold the results of the filesort and
      >   will add it as a sort output file (in sort.io_cache).
      >   Note that filesort will copy the original 'sort' structure in an automatic
      >   variable and restore it after it's done.
      >   As a result at exiting filesort() we have a sort.io_cache filled in and 
      >   nothing else (as a result of close of the cursors at end of reading data 
      >   through index merge).
      >   Now create_sort_index() will note that there is a select and will clean it up
      >   (as it's been used already by filesort() reading the data in). While doing that
      >   a special case in the index merge destructor will clean up the sort.io_cache,
      >   assuming it's an output of the index merge method and is not needed anymore.
      >   As a result the code that tries to read the data back from the filesort output 
      >   will get no data in both memory and disk and will crash.
      >         
      >   Fixed similarly to how filesort() does it : by copying the sort.io_cache structure
      >   to a local variable, removing the pointer to the io_cache (so that it's not freed 
      >   by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original 
      >   structure (together with the valid pointer) after the cleanup is done.
      >   This is a safe thing to do because all the structures are already cleaned up by
      >   hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) 
      >   and the cleanup code being written in a way that tolerates repeating cleanups.
      05a52ac7
    • MySQL Build Team's avatar
      Backport into build-200907211706-5.0.82sp1 · 342b5f2e
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 2733
      > revision-id: gshchepa@mysql.com-20090430192037-9p1etcynkglte2j3
      > parent: aelkin@mysql.com-20090430143246-zfqaz0t7uoluzdz2
      > committer: Gleb Shchepa <gshchepa@mysql.com>
      > branch nick: mysql-5.0-bugteam
      > timestamp: Fri 2009-05-01 00:20:37 +0500
      > message:
      >   Bug #37362: Crash in do_field_eq
      >   
      >   EXPLAIN EXTENDED of nested query containing a error:
      >   
      >      1054 Unknown column '...' in 'field list'
      >   
      >   may cause a server crash.
      >   
      >   
      >   Parse error like described above forces a call to
      >   JOIN::destroy() on malformed subquery.
      >   That JOIN::destroy function closes and frees temporary
      >   tables. However, temporary fields of these tables
      >   may be listed in st_select_lex::group_list of outer
      >   query, and that st_select_lex may not cleanup them
      >   properly. So, after the JOIN::destroy call that
      >   st_select_lex::group_list may have Item_field
      >   objects with dangling pointers to freed temporary
      >   table Field objects. That caused a crash.
      342b5f2e
  12. 16 Jul, 2009 1 commit
  13. 07 Jul, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #36259 (Optimizing with ORDER BY) and bug#45828 (Optimizer won't · e670c71e
      Georgi Kodinov authored
      use partial primary key if another index can prevent filesort
      
      The fix for bug #28404 causes the covering ordering indexes to be 
      preferred unconditionally over non-covering and ref indexes.
      
      Fixed by comparing the cost of using a covering index to the cost of
      using a ref index even for covering ordering indexes.
      Added an assertion to clarify the condition the local variables should
      be in.
      
      mysql-test/include/mix1.inc:
        Bug #36259: fixed a non-stable test case
      mysql-test/r/innodb_mysql.result:
        Bug #36259 and #45828 : test case
      mysql-test/t/innodb_mysql.test:
        Bug #36259 and #45828 : test case
      sql/sql_select.cc:
        Bug #36259 and #45828 : don't consider covering indexes supperior to
        ref keys.
      e670c71e
  14. 03 Jul, 2009 1 commit
    • Alexey Kopytov's avatar
      Bug #45262: Bad effects with CREATE TABLE and DECIMAL · dd7fa1d2
      Alexey Kopytov authored
       
      Using DECIMAL constants with more than 65 digits in CREATE 
      TABLE ... SELECT led to bogus errors in release builds or 
      assertion failures in debug builds. 
       
      The problem was in inconsistency in how DECIMAL constants and 
      fields are handled internally. We allow arbitrarily long 
      DECIMAL constants, whereas DECIMAL(M,D) columns are limited to 
      M<=65 and D<=30. my_decimal_precision_to_length() was used in 
      both Item and Field code and truncated precision to 
      DECIMAL_MAX_PRECISION when calculating value length without 
      adjusting precision and decimals. As a result, a DECIMAL 
      constant with more than 65 digits ended up having length less 
      than precision or decimals which led to assertion failures. 
       
      Fixed by modifying my_decimal_precision_to_length() so that 
      precision is truncated to DECIMAL_MAX_PRECISION only for Field 
      object which is indicated by the new 'truncate' parameter. 
       
      Another inconsistency fixed by this patch is how DECIMAL 
      constants and expressions are handled for CREATE ... SELECT. 
      create_tmp_field_from_item() (which is used for constants) was 
      changed as a part of the bugfix for bug #24907 to handle long 
      DECIMAL constants gracefully. Item_func::tmp_table_field() 
      (which is used for expressions) on the other hand was still 
      using a simplistic approach when creating a Field_new_decimal 
      from a DECIMAL expression. 
      
      mysql-test/r/type_newdecimal.result:
        Added a test case for bug #45262.
      mysql-test/t/type_newdecimal.test:
        Added a test case for bug #45262.
      sql/item.cc:
        Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
      sql/item_cmpfunc.cc:
        Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
      sql/item_func.cc:
        1. Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
        
        2. Do not truncate decimal precision to DECIMAL_MAX_PRECISION
        for additive expressions involving long DECIMAL constants.
        
        3. Fixed an incosistency in how DECIMAL constants and 
        expressions are handled for CREATE ... SELECT.
      sql/item_func.h:
        Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
      sql/item_sum.cc:
        Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
      sql/my_decimal.h:
        Do not truncate precision to DECIMAL_MAX_PRECISION
        when calculating length in 
        my_decimal_precision_to_length() if 'truncate' parameter
        is FALSE.
      sql/sql_select.cc:
        1. Use the new 'truncate' parameter in 
        my_decimal_precision_to_length().
        
        2. Use a more correct logic when adjusting value's length.
      dd7fa1d2
  15. 30 Jun, 2009 1 commit
    • Sergey Petrunya's avatar
      MWL#17: Table elimination · 5ab01b64
      Sergey Petrunya authored
      - Last fixes
      
      sql/item.cc:
        MWL#17: Table elimination
        - Don't make multiple calls of ::walk(check_column_usage_processor),
          call once and cache the value
      sql/item.h:
        MWL#17: Table elimination
        - s/KEYUSE::usable/KEYUSE::type/, more comments
      sql/opt_table_elimination.cc:
        MWL#17: Table elimination
        - Don't make multiple calls of ::walk(check_column_usage_processor),
          call once and cache the value
      sql/sql_select.cc:
        MWL#17: Table elimination
        - s/KEYUSE::usable/KEYUSE::type/, more comments
      sql/sql_select.h:
        MWL#17: Table elimination
        - s/KEYUSE::usable/KEYUSE::type/, more comments
      sql/table.h:
        MWL#17: Table elimination
        - Better comments
      5ab01b64
  16. 29 Jun, 2009 2 commits
    • Michael Widenius's avatar
      Added some changes inspired by Zardosht Kasheff: · 7b25cef4
      Michael Widenius authored
      - Added a handler call (prepare_index_scan()) to inform storage engines that an index scan is about to take place.
      - Extended the maximun key parts for an index from 16 to 32
      - Extended MyISAM and Maria engines to support up to 32 parts
      
      Added checks for return value from ha_index_init()
      
      
      
      include/my_handler.h:
        Extended number of key parts for MyISAM and Maria from 16 to 32
      include/my_pthread.h:
        Ensure we always have 256M of stack.
        (Required to be able to handle the current number of keys and key parts in MyISAM)
      mysql-test/r/create.result:
        Extended to test for 32 key parts
      mysql-test/r/myisam.result:
        Test that we can create 32 but not 33 key parts
      mysql-test/r/ps_1general.result:
        Length of ref is now 2048 as we can have more key parts
      mysql-test/r/ps_2myisam.result:
        Length of ref is now 2048 as we can have more key parts
      mysql-test/r/ps_3innodb.result:
        Length of ref is now 2048 as we can have more key parts
      mysql-test/r/ps_4heap.result:
        Length of ref is now 2048 as we can have more key parts
      mysql-test/r/ps_5merge.result:
        Length of ref is now 2048 as we can have more key parts
      mysql-test/suite/maria/r/maria.result:
        Max key length is now 1208 bytes
      mysql-test/suite/maria/r/maria3.result:
        Max key length is now 1208 bytes
      mysql-test/suite/maria/r/ps_maria.result:
        Max key length is now 1208 byte
      mysql-test/t/create.test:
        Extended to test for 32 key parts
      mysql-test/t/myisam.test:
        Test that we can create 32 but not 33 key parts
      sql/handler.cc:
        Check return value from ha_index_init()
      sql/handler.h:
        Added a handler call (prepare_index_scan()) to inform storage engines that an index scan is about to take place.
      sql/sql_select.cc:
        Checks all return values from ha_index_init()
        Call prepare_index_scan()) to inform storage engines that an index scan is about to take place.
        Fixed indentation
      sql/table.cc:
        Fixed wrong types for key_length (rest of code assumed this was 32 bit)
      sql/unireg.h:
        Extended the maximun key parts for an index from 16 to 32
      storage/maria/ha_maria.cc:
        Don't allocate HA_CHECK on the stack in functions where we call repair() as HA_CHECK is HUGE and will overflow stack
      storage/myisam/ha_myisam.cc:
        Don't allocate HA_CHECK on the stack in functions where we call repair() as HA_CHECK is HUGE and will overflow stack
      storage/myisam/mi_check.c:
        Fixed wrong check if value overflow
      tests/mysql_client_test.c:
        Added fflush() to fix output in case of error
        Fixed wrong check of 'ref' length in EXPLAIN
      7b25cef4
    • Sergey Petrunya's avatar
      MWL#17: Table elimination · 618442de
      Sergey Petrunya authored
      mysql-test/r/table_elim.result:
        MWL#17: Table elimination
        - More tests
      mysql-test/t/table_elim.test:
        MWL#17: Table elimination
        - More tests
      sql/opt_table_elimination.cc:
        MWL#17: Table elimination
        - Code cleanup
      sql/sql_select.cc:
        MWL#17: Table elimination
        - Code cleanup
      sql/sql_select.h:
        MWL#17: Table elimination
        - Code cleanup
      sql/table.h:
        MWL#17: Table elimination
        - Code cleanup
      618442de
  17. 26 Jun, 2009 1 commit
    • Evgeny Potemkin's avatar
      Bug#45266: Uninitialized variable lead to an empty result. · 72d020a2
      Evgeny Potemkin authored
      The TABLE::reginfo.impossible_range is used by the optimizer to indicate
      that the condition applied to the table is impossible. It wasn't initialized
      at table opening and this might lead to an empty result on complex queries:
      a query might set the impossible_range flag on a table and when the query finishes,
      all tables are returned back to the table cache. The next query that uses the table
      with the impossible_range flag set and an index over the table will see the flag
      and thus return an empty result.
      
      The open_table function now initializes the TABLE::reginfo.impossible_range
      variable.
      
      mysql-test/r/select.result:
        A test case for the bug#45266: Uninitialized variable lead to an empty result.
      mysql-test/t/select.test:
        A test case for the bug#45266: Uninitialized variable lead to an empty result.
      sql/sql_base.cc:
        Bug#45266: Uninitialized variable lead to an empty result.
        The open_table function now initializes the TABLE::reginfo.impossible_range
        variable.
      sql/sql_select.cc:
        Bug#45266: Uninitialized variable lead to an empty result.
        The open_table function now initializes the TABLE::reginfo.impossible_range
        variable.
      sql/structs.h:
        Bug#45266: Uninitialized variable lead to an empty result.
        A comment is added.
      72d020a2
  18. 25 Jun, 2009 2 commits
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · ed3d778d
      Sergey Petrunia authored
      - Better comments, variable/function renames 
      ed3d778d
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 3ffa60fe
      Sergey Petrunia authored
      - Moved table elimination code to sql/opt_table_elimination.cc
      - Added comments 
      
      .bzrignore:
        MWL#17: Table elimination
        - Moved table elimination code to sql/opt_table_elimination.cc
      libmysqld/Makefile.am:
        MWL#17: Table elimination
        - Moved table elimination code to sql/opt_table_elimination.cc
      sql/CMakeLists.txt:
        MWL#17: Table elimination
        - Moved table elimination code to sql/opt_table_elimination.cc
      sql/Makefile.am:
        MWL#17: Table elimination
        - Moved table elimination code to sql/opt_table_elimination.cc
      3ffa60fe
  19. 24 Jun, 2009 2 commits
    • MySQL Build Team's avatar
      Backport into build-200906240007-5.1.34sp1 · 64de95d8
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 2852.12.6
      > tags: clone-5.1.35-build, mysql-5.1.35
      > revision-id: gshchepa@mysql.com-20090513075139-g50shsfjaf1dstdn
      > parent: joerg@mysql.com-20090508190407-ymqxmp6daeta6fdj
      > committer: Gleb Shchepa <gshchepa@mysql.com>
      > branch nick: mysql-5.1
      > timestamp: Wed 2009-05-13 12:51:39 +0500
      > message:
      >   Bug #44290: explain crashes for subquery with distinct in
      >               SQL_SELECT::test_quick_select
      >   
      >   The crash was caused by an incomplete cleanup of JOIN_TAB::select
      >   during the filesort of rows for GROUP BY clause inside a subquery.
      >   Queries where a quick index access is replaced with filesort was
      >   was affected. For example:
      >   
      >     SELECT 1 FROM
      >       (SELECT COUNT(DISTINCT c1) FROM t1
      >          WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x
      >   
      >   Quick index access related data in the SQL_SELECT::test_quick_select
      >   function was inconsistent after an incomplete cleanup.
      >   This function has been completed to prevent crashes in the
      >   SQL_SELECT::test_quick_select function.
      64de95d8
    • Sergey Petrunia's avatar
      More comments · faf9a6d3
      Sergey Petrunia authored
      faf9a6d3
  20. 23 Jun, 2009 1 commit
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · f3de399d
      Sergey Petrunia authored
      - More testcases
      - Let add_ft_key() set keyuse->usable
      
      mysql-test/r/table_elim.result:
        MWL#17: Table elimination
        - More testcases
      mysql-test/t/table_elim.test:
        MWL#17: Table elimination
        - More testcases
      sql/sql_select.cc:
        MWL#17: Table elimination
        - Let add_ft_key() set keyuse->usable
      f3de399d
  21. 22 Jun, 2009 1 commit
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · fbd81630
      Sergey Petrunia authored
      - Make elimination check to be able detect cases like  t.primary_key_col1=othertbl.col AND t.primary_key_col2=func(t.primary_key_col1).
        These are needed to handle e.g. the case of func() being a correlated subquery that selects the latest value.
      - If we've removed a condition with subquery predicate, EXPLAIN [EXTENDED] won't show the subquery anymore
      
      sql/item.cc:
        MWL#17: Table elimination
        - Add tem_field::check_column_usage_processor(). it allows to check which key parts a condition depends on.
      sql/item.h:
        MWL#17: Table elimination
        - Add tem_field::check_column_usage_processor(). it allows to check which key parts a condition depends on.
      sql/item_subselect.cc:
        MWL#17: Table elimination
        - Item_subselect got 'eliminated' attribute. It is used only to determine if the subselect should be printed by EXPLAIN.
        - Item_subselect got List<Item> refers_to - a list of item in the current select that are referred to from within the subselect.
        - Added Item_*::check_column_usage_processor(). it allows to check which key parts a condition depends on.
        - Added a comment about possible problem in Item_subselect::walk
      sql/item_subselect.h:
        MWL#17: Table elimination
        - Item_subselect got 'eliminated' attribute. It is used only to determine if the subselect should be printed by EXPLAIN.
        - Item_subselect got List<Item> refers_to - a list of item in the current select that are referred to from within the subselect.
        - Added Item_*::check_column_usage_processor(). it allows to check which key parts a condition depends on.
      sql/item_sum.cc:
        MWL#17: Table elimination
      sql/sql_lex.cc:
        MWL#17: Table elimination
      sql/sql_lex.h:
        MWL#17: Table elimination
      sql/sql_select.h:
        MWL#17: Table elimination
      fbd81630
  22. 17 Jun, 2009 2 commits
  23. 16 Jun, 2009 1 commit
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 351958ad
      Sergey Petrunia authored
      - Move eliminate_tables() to before constant table detection. 
      - First code for benchmark
      
      sql-bench/test-table-elimination.sh:
        MWL#17: Table elimination
        - sql-bench "Benchmark", incomplete
      sql/sql_select.cc:
        MWL#17: Table elimination
        - Move eliminate_tables() to before constant table detection, this will allow
          to spare const table reads (at a cost of not being able to take advantage of 
          tables that are constant because they have no records, but this case is of 
          lesser importance)
      351958ad
  24. 15 Jun, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #44810: index merge and order by with low sort_buffer_size · 10c61461
      Georgi Kodinov authored
      crashes server!
      
      The problem affects the scenario when index merge is followed by a filesort
      and the sort buffer is not big enough for all the sort keys.
      In this case the filesort function will read the data to the end through the 
      index merge quick access method (and thus closing the cursor etc), 
      but will leave the pointer to the quick select method in place.
      It will then create a temporary file to hold the results of the filesort and
      will add it as a sort output file (in sort.io_cache).
      Note that filesort will copy the original 'sort' structure in an automatic
      variable and restore it after it's done.
      As a result at exiting filesort() we have a sort.io_cache filled in and 
      nothing else (as a result of close of the cursors at end of reading data 
      through index merge).
      Now create_sort_index() will note that there is a select and will clean it up
      (as it's been used already by filesort() reading the data in). While doing that
      a special case in the index merge destructor will clean up the sort.io_cache,
      assuming it's an output of the index merge method and is not needed anymore.
      As a result the code that tries to read the data back from the filesort output 
      will get no data in both memory and disk and will crash.
            
      Fixed similarly to how filesort() does it : by copying the sort.io_cache structure
      to a local variable, removing the pointer to the io_cache (so that it's not freed 
      by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original 
      structure (together with the valid pointer) after the cleanup is done.
      This is a safe thing to do because all the structures are already cleaned up by
      hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) 
      and the cleanup code being written in a way that tolerates repeating cleanups.
      
      mysql-test/r/index_merge.result:
        Bug #44810: test case
      mysql-test/t/index_merge.test:
        Bug #44810: test case
      sql/sql_select.cc:
        Bug #44810: preserve the io_cache produced by filesort while cleaning up
        the index merge quick access method (QUICK_INDEX_MERGE_SELECT).
      10c61461
  25. 14 Jun, 2009 3 commits
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 09a6718a
      Sergey Petrunia authored
      - Fix print_join() to work both for EXPLAIN EXTENDED (after table elimination) and for 
        CREATE VIEW (after join->prepare() but without any optimization).
      
      mysql-test/r/union.result:
        MWL#17: Table elimination
        - Adjust test results
      09a6718a
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 246d045b
      Sergey Petrunia authored
      - Fix the previous cset: take into account that select_lex may be printed when 
       1. There is no select_lex->join at all (in that case, assume that no tables were eliminated)
       2. select_lex->join exists but there was no JOIN::optimize() call yet. handle this by initializing join->eliminated really early. 
      
      246d045b
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 652a1673
      Sergey Petrunia authored
      - Do not show eliminated tables in the output of EXPLAIN EXTENDED
      652a1673
  26. 10 Jun, 2009 1 commit
    • Staale Smedseng's avatar
      Bug #43414 Parenthesis (and other) warnings compiling MySQL · 9e7c9d10
      Staale Smedseng authored
      with gcc 4.3.2
      
      Compiling MySQL with gcc 4.3.2 and later produces a number of 
      warnings, many of which are new with the recent compiler
      versions.
                  
      This bug will be resolved in more than one patch to limit the
      size of changesets. This is the second patch, fixing more
      of the warnings.
      9e7c9d10
  27. 07 Jun, 2009 2 commits
    • Gleb Shchepa's avatar
      Bug #44886: SIGSEGV in test_if_skip_sort_order() - · 5f55d521
      Gleb Shchepa authored
                  uninitialized variable used as subscript
      
      Grouping select from a "constant" InnoDB table (a table
      of a single row) joined with other tables caused a crash.
      
      
      mysql-test/r/innodb_mysql.result:
        Added test case for bug bug #44886.
      mysql-test/t/innodb_mysql.test:
        Added test case for bug bug #44886.
      sql/sql_select.cc:
        Bug #44886: SIGSEGV in test_if_skip_sort_order() -
                    uninitialized variable used as subscript
        
        1. The test_if_order_by_key function returned unitialized
           used_key_parts parameter in case of a "constant" InnoDB
           table. Calling function uses this parameter values as
           an array index, thus sometimes it caused a crash.
           The test_if_order_by_key function has been modified
           to set used_key_parts to 0 (no need for ordering).
        
        2. The test_if_skip_sort_order function has been
           modified to accept zero used_key_parts value and
           to prevent an array access by negative index.
      5f55d521
    • Sergey Petrunia's avatar
      MWL#17: Table Elimination · 584a13fa
      Sergey Petrunia authored
      - Fix trivial valgrind warning
      584a13fa
  28. 04 Jun, 2009 1 commit
    • Tatiana A. Nurnberg's avatar
      Bug#32149: Long semaphore wait for adaptive hash latch · fde8c493
      Tatiana A. Nurnberg authored
      Holding on to the temporary inno hash index latch is an optimization in
      many cases, but a pessimization in some others.
      
      Release temporary latches for those corner cases we (or rather, or customers,
      thanks!) have identified, that is, when we are about to do something that
      might take a really long time, like REPAIR or filesort.
      
      sql/ha_myisam.cc:
        Let go of (inno, for now) latch when doing MyISAM-repair.
        (optimize passes through repair.) ("Stuck" in "Repair with
        keycache".)
      sql/sql_insert.cc:
        Let go of (inno, for now) latch when doing CREATE...SELECT
        in select_insert::send_data() -- it might take a while.
        ("stuck" in "Sending data")
      sql/sql_select.cc:
        Release temporary (inno, for now) latch on
        - free_tmp_table() (this can take surprisingly long, "removing tmp table")
        - create_myisam_from_heap() (HEAP table overflowing onto disk as MyISAM,
          "converting HEAP to MyISAM")
      fde8c493
  29. 03 Jun, 2009 1 commit
    • Sergey Petrunia's avatar
      MWL#17: Table elimination · 7fef8cdd
      Sergey Petrunia authored
      - First code. Elimination works for simple cases, passes the testsuite.
      - Known issues:
        = No elimination is done for aggregate functions.
        = EXPLAIN EXTENDED shows eliminated tables (I think it better not)
        = No benchmark yet
        = The code needs some polishing.
      
      mysql-test/r/table_elim.result:
        MWL#17: Table elimination
        - Testcases
      mysql-test/t/table_elim.test:
        MWL#17: Table elimination
        - Testcases
      sql/sql_select.cc:
        MWL#17: Table elimination
      sql/sql_select.h:
        MWL#17: Table elimination
        - Added JOIN_TAB::eliminated (is JOIN_TAB the best place to store this flag?)
      sql/table.h:
        MWL#17: Table elimination
        - ADded NESTED_JOIN::n_tables. We need to have the number of real tables remaining in an outer join nest.
      7fef8cdd
  30. 25 May, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #44399 : crash with statement using TEXT columns, aggregates, GROUP BY, and · 1b3c88e5
      Georgi Kodinov authored
      HAVING
                  
      When calculating GROUP BY the server caches some expressions. It does
      that by allocating a string slot (Item_copy_string) and assigning the 
      value of the expression to it. This effectively means that the result
      type of the expression can be changed from whatever it was to a string.
      As this substitution takes place after the compile-time result type 
      calculation for IN but before the run-time type calculations, 
      it causes the type calculations in the IN function done at run time 
      to get unexpected results different from what was prepared at compile time.
                        
      In the CASE ... WHEN ... THEN ... statement there was a similar problem
      and it was solved by artificially adding a STRING argument to the set of 
      types of the IN/CASE arguments at compile time, so if any of the 
      arguments of the CASE function changes its type to a string it will 
      still be covered by the information prepared at compile time.
      
      mysql-test/include/mix1.inc:
        Bug #44399: extended the test to cover the different types
      mysql-test/r/func_in.result:
        Bug #44399: test case
      mysql-test/r/innodb_mysql.result:
        Bug #44399: extended the test to cover the different types
      mysql-test/t/func_in.test:
        Bug #44399: test case
      sql/item.cc:
        Bug #44399: Implement typed caching for GROUP BY
      sql/item.h:
        Bug #44399: Implement typed caching for GROUP BY
      sql/item_cmpfunc.cc:
        Bug #44399: remove the special case
      sql/sql_select.cc:
        Bug #44399: Implement typed caching for GROUP BY
      1b3c88e5
  31. 13 May, 2009 1 commit
    • Gleb Shchepa's avatar
      Bug #44290: explain crashes for subquery with distinct in · d91679a8
      Gleb Shchepa authored
                  SQL_SELECT::test_quick_select
      
      The crash was caused by an incomplete cleanup of JOIN_TAB::select
      during the filesort of rows for GROUP BY clause inside a subquery.
      Queries where a quick index access is replaced with filesort was
      was affected. For example:
      
        SELECT 1 FROM
          (SELECT COUNT(DISTINCT c1) FROM t1
             WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x
      
      Quick index access related data in the SQL_SELECT::test_quick_select
      function was inconsistent after an incomplete cleanup.
      This function has been completed to prevent crashes in the
      SQL_SELECT::test_quick_select function.
      
      
      mysql-test/include/mix1.inc:
        Add test case for bug #44290.
      mysql-test/r/innodb_mysql.result:
        Add test case for bug #44290.
      sql/sql_select.cc:
        Bug #44290: explain crashes for subquery with distinct in
                    SQL_SELECT::test_quick_select
        
        Quick index access related data in the SQL_SELECT::test_quick_select
        function was inconsistent after an incomplete cleanup.
        This function has been completed to prevent crashes in the
        SQL_SELECT::test_quick_select function.
      d91679a8