1. 28 Jan, 2011 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #707827. · d4929035
      Igor Babaev authored
      This bug could manifest itself when hash join over a varchar column
      with NULL values in some rows was used. It happened because the
      function key_buf_cmp erroneously returned FALSE when one of the joined
      key fields was null while the second was not.
      Also fixed two other bugs in the functions key_hashnr and key_buf_cmp 
      that could possibly lead to wrong results for some queries that
      used hash join over several columns with nulls.
      Also reverted the latest addition of the test case for bug #45092. It
      had been already backported earlier.
      d4929035
  2. 27 Jan, 2011 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #707848. · 3e868cd3
      Igor Babaev authored
      This was another bug in the patch for bug 698882. The new
      code from this patch did not ensured that substitutions
      of fields for best equal fields were performed on all
      AND-OR levels. As a result substitutions for best fields
      in some predicates that had been used by the range optimizer
      were not actually performed while range plans could employ
      these substitutions. This could lead to inconsistent data
      structures and ultimately to a crash.
      3e868cd3
  3. 26 Jan, 2011 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #707555. · a624f99e
      Igor Babaev authored
      The bug was in the code of the patch fixing bug 698882.
      With improper casting the method store_key_field::change_source_field
      was called for the elements of the array TABLE_REF::key_copy that
      were either of a different type or not allocated at all. This caused
      crashes in some queries. 
      a624f99e
  4. 23 Jan, 2011 1 commit
  5. 21 Jan, 2011 1 commit
  6. 14 Jan, 2011 10 commits
    • Sergei Golubchik's avatar
      6c907625
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      Optimize use of SEARCH_SAVE_BUFF in Aria · eec32a33
      Sergei Golubchik authored
      (less not-needed copies of key pages)
      
      storage/maria/ma_rkey.c:
        Fixed wrong test if SEARCH_SAVE_BUFF should be set.
        Now we assume that if we are doing HA_READ_KEY_EXACT,
        we don't have to copy the last key buffer
        (in other words, it's not likely this will be followed
        by a read-next call)
      eec32a33
    • Sergei Golubchik's avatar
      use bulk insert and repair by sort for unique keys in · 418df96d
      Sergei Golubchik authored
      Aria and MyISAM in create_internal_tmp_table_from_heap()
      (safe, as duplicates are impossible).
      This gives a HUGE speed boost!
      
      sql/opt_subselect.cc:
        Fixed problem with wrong recinfo in create_duplicate_weedout_tmp_tabl()
        Tagged the table with 'no_rows' so that when we create the table on disk,
        we only store the index data. This gave us a major speedup!
      sql/sql_select.cc:
        create_tmp_table_from_heap() now uses bulk_insert + repair_by_sort
        when creating Aria/MyISAM tables from HEAP tables.
        This gives a HUGE speed boost!
      storage/maria/ha_maria.cc:
        Extended bulk_insert() to recreate UNIQUE keys for
        internal temporary tables
      storage/maria/ma_open.c:
        Initialize m_info->lock.type properly for temporarly tables
        (needed for start_bulk_insert())
      storage/maria/ma_write.c:
        Don't check uniques that are disabled
      storage/myisam/ha_myisam.cc:
        Extended bulk_insert() to recreate UNIQUE keys for
        internal temporary tables.
      418df96d
    • Sergei Golubchik's avatar
      Added ha_write_tmp_row() for slightly faster write_row for internal temp tables. · 6554977f
      Sergei Golubchik authored
      This will also enable us in the future to collect statistics for
      writes to internal tmp tables.
      
      sql/handler.h:
        Added ha_write_tmp_row()
      sql/opt_subselect.cc:
        ha_write_row -> ha_write_tmp_row
      sql/sql_class.h:
        Added ha_write_tmp_row()
      sql/sql_select.cc:
        ha_write_row -> ha_write_tmp_row
      6554977f
    • Sergei Golubchik's avatar
      Added support for NO_RECORD record format (don't store any row data) for Aria. · f5ea301a
      Sergei Golubchik authored
      This makes the keys smaller (no row pointer) and gives us proper errors if we
      use the table wrongly.
      
      sql/sql_select.cc:
        Use NO_RECORD for tables that doesn't need row data.
      storage/maria/Makefile.am:
        Added ma_norec.c
      storage/maria/ma_check.c:
        Added support for NO_RECORD record format (don't store any row data)
      storage/maria/ma_norec.c:
        Added support for NO_RECORD record format
      storage/maria/ma_open.c:
        Added support for NO_RECORD record format
      storage/maria/ma_search.c:
        Added support for 0 size row pointers (used with NO_RECORD)
      storage/maria/ma_test1.c:
        Added testing of NO_RECORD record format.
      storage/maria/maria_chk.c:
        Added support for NO_RECORD
      storage/maria/maria_def.h:
        Added support for NO_RECORD
      storage/maria/unittest/ma_test_all-t:
        Added testing of NO_RECORD record format
      f5ea301a
    • Sergei Golubchik's avatar
      use normal unique (HA_NOSAME) keys for expression cache · 17c18877
      Sergei Golubchik authored
      temptables, not "uniques", that are hash-based keys.
      
      sql/sql_expression_cache.cc:
        Don't set uniques (we don't want or need an unique
        constraint on this table)
      17c18877
    • Sergei Golubchik's avatar
      Added to Aria better hash for packed numeric data for unique handling. · fba96f7c
      Sergei Golubchik authored
      This was needed as the old code caused us to have LOTS of duplicate
      hash values when used by optimizer.
      
      include/m_ctype.h:
        Made my_hash_sort_bin() exernal
      storage/maria/ma_unique.c:
        Better hash for packed numeric data for unique handling.
        This was needed as the old code caused us to have LOTS
        of duplicate hash values when used by optimizer.
      fba96f7c
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      Removed some old comments. · 563da78d
      Sergei Golubchik authored
      mysys/my_handler.c:
        Fixed typo
      563da78d
  7. 17 Jan, 2011 2 commits
  8. 16 Jan, 2011 1 commit
  9. 15 Jan, 2011 4 commits
    • Igor Babaev's avatar
      Merge · e32efc01
      Igor Babaev authored
      e32efc01
    • Igor Babaev's avatar
      Fixed LP bug #698882. · 84a0c9b2
      Igor Babaev authored
      Made sure that the optimal fields are used by TABLE_REF objects
      when building index access keys to joined tables.
      Fixed a bug in the template function that sorts the elements of
      a list using the bubble sort algorithm. The bug caused poor
      performance of the function. Also added an optimization that
      skips comparison with the most heavy elements that has been 
      already properly placed in the list.
      Made the comparison of the fields belonging to the same Item_equal
      more granular: fields belonging to the same table are also ordered
      according to some rules.
      84a0c9b2
    • Igor Babaev's avatar
      Merge · 92f2392e
      Igor Babaev authored
      92f2392e
    • Igor Babaev's avatar
      Ported the fix for LP bug #702310 / bug #59493. · 0aebdc11
      Igor Babaev authored
      An assertion failure was triggered for a 6-way join query that used two
      join buffers.
      The failure happened because every call of JOIN_CACHE::join_matching_records
      saved and restored status of all tables that were accessed before the table
      join_tab. It must do it only for those of them that follow the last table 
      using a join buffer.
      0aebdc11
  10. 14 Jan, 2011 8 commits
  11. 13 Jan, 2011 4 commits
  12. 12 Jan, 2011 1 commit
    • Sergey Petrunya's avatar
      BUG#665669: Result differences on query re-execution · ad78c24a
      Sergey Petrunya authored
      - Cause: handler::in_range_check_pushed_down was not reset when a 
        command would call handler->idx_cond_push() without later calling
        handler->index_end().
      - Fix: reset the variable in handler->reset(), too (like we do with other
        Index Condition Pushdown members).
      ad78c24a
  13. 05 Jan, 2011 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #697557. · cb4fa7f4
      Igor Babaev authored
      When stored in a key buffer any varchar field has a length prefix
      that always takes 2 bytes.
      cb4fa7f4
  14. 30 Dec, 2010 1 commit
  15. 29 Dec, 2010 2 commits
  16. 28 Dec, 2010 1 commit