1. 29 Nov, 2010 1 commit
  2. 28 Nov, 2010 2 commits
  3. 27 Nov, 2010 2 commits
    • Michael Widenius's avatar
      Added TRASH() to table->record[0] to find out if we access not initialzed data. · a5cf2030
      Michael Widenius authored
      - Changed Cached_item_field not copy data for fields with NULL value
      - In key_copy() and key_restore() don't copy data for fields with NULL value
      
      Fixed code to avoid valgrind warnings
      - Use c_ptr_safe instead of c_ptr()
      
      Removed "QQ" from comments (QQ was ment to be used for internal comments that should be removed before pushing)
      Fixed wrong alias used (from previous patch)
      
      
      sql/event_db_repository.cc:
        Update testing if event table is valid (to avoid valgrind errors)
      sql/ha_partition.cc:
        m_ordered_scan_ongoing was not initialized
        Reset null bits in record to avoid valgrind errors
      sql/handler.h:
        Added flag if storage engine will write row verbatim and the row contains varchar or null fields
        (in which case we must clear the row to avoid valgrind warnings)
      sql/item_buff.cc:
        Changed Cached_item_field not copy data for fields with NULL value
        (Optimization and avoids valgrind warnings)
      sql/item_func.cc:
        c_ptr() -> c_ptr_safe()
      sql/key.cc:
        In key_copy() and key_restore() don't copy data for fields with NULL value
      sql/opt_range.cc:
        c_ptr() -> c_ptr_safe()
      sql/sql_base.cc:
        Added TRASH() to table->record[0] to find out if we access not initialzed data.
        Initialize null_bytes to:
        - Get consistent tests
        - Ensure we don't get valgrind warnings for null fields (as we may only update a couple of bits in a byte)
      sql/sql_class.cc:
        Removed "QQ" from comments
      sql/sql_insert.cc:
        Initialize row to default values if we are using valgrind and row will be copied verbatim to disk in storage engine.
      sql/sql_load.cc:
        QQ -> TODO
      sql/sql_parse.cc:
        Removed old not used code marked QQ and withing "#ifdef REMOVED"
      sql/sql_select.cc:
        QQ -> TODO
        Initialize some variables that was used uninitialized
        Added DBUG_ASSERT() to find out if thd was not properly initialized for sub queries
      sql/sql_test.cc:
        Fixed format for printing to DBUG file
        Fixed wrong alias used (from previous patch)
      sql/sql_trigger.h:
        QQ -> TODO
      sql/table.cc:
        QQ -> TODO
      storage/maria/ha_maria.cc:
        Mark table with HA_RECORD_MUST_BE_CLEAN_ON_WRITE, if row is written verbatim to disk and contains varchar or null fields.
      storage/maria/ma_open.c:
        Added flags if table has varchar or null fields
      storage/maria/maria_def.h:
        Added flags if table has varchar or null fields
      storage/myisam/ha_myisam.cc:
        Mark table with HA_RECORD_MUST_BE_CLEAN_ON_WRITE, if row is written verbatim to disk and contains varchar or null fields.
      storage/myisam/mi_open.c:
        Fixed memory overrun bug when using fulltext keys
      storage/xtradb/row/row0sel.c:
        Removed initialization of null bits. (not needed anymore)
      a5cf2030
    • Michael Widenius's avatar
  4. 25 Nov, 2010 1 commit
    • unknown's avatar
      Fix LP BUG#611622 · 6616e53a
      unknown authored
      Fix MySQL BUG#52344 - Subquery materialization: Assertion if subquery in on-clause of outer join
      
      Original fix and comments from Oysten, adjusted for the different
      subquery optimization in MariaDB.
      "
      Problem: If tables of an outer join are constant tables,
      the associated on-clause will be evaluated in the optimization
      phase. If the on-clause contains a query that is to be
      executed with subquery materialization, this will not work
      since the infrastructure for such execution is not yet set up.
            
      Solution: Do not evaluate on-clause in optimization phase if
      is_expensive() returns true for this clause.  This is how the
      problem is currently avoided for where-clauses.  This works
      because, Item_in_subselect::is_expensive_processor returns true
      if query is to be executed with subquery materialization.
      "
      In addition, after MWL#89, in MariaDB if the IN-EXISTS strategy
      is chosen, the in-to-exists predicates are insterted after
      join_read_const_table() is called, resulting in evaluation of
      the subquery without the in-to-exists predicates.
      6616e53a
  5. 24 Nov, 2010 1 commit
    • unknown's avatar
      Fix LP BUG#680058 · bda37434
      unknown authored
        
      Analysis:
      The send_data method of the result sink class used to collect
      data statistics about materialized subqueries incorrectly assumed
      that duplicate rows are removed prior to calling send_data. As
      a result the collected statistics was wrong, which resulted in
      an incorrect maximal number of keys in the Ordered_key buffer.
        
      Solution:
      Try to insert each row into the materialized temp table before
      collecting statistics, and if the insertion results in a duplicate
      row, do not count the current row.
      bda37434
  6. 23 Nov, 2010 2 commits
    • Michael Widenius's avatar
      Code cleanup to get fewer reallocs() during execution. · 1ace5937
      Michael Widenius authored
      - Changed TABLE->alias to String to get fewer reallocs when alias are used.
      - Preallocate some buffers
      
      Changed some String->c_ptr() -> String->ptr() when \0 is not needed.
      Fixed wrong usage of String->ptr() when we need a \0 terminated string.
      Use my_strtod() instead of my_atof() to avoid having to add \0 to string.
      c_ptr() -> c_ptr_safe() to avoid warnings from valgrind.
      zr 
      
      sql/event_db_repository.cc:
        Update usage of TABLE->alias
      sql/event_scheduler.cc:
        c_ptr() -> c_ptr_safe()
      sql/events.cc:
        c_ptr() -> ptr() as \0 was not needed
      sql/field.cc:
        Update usage of TABLE->alias
      sql/field.h:
        Update usage of TABLE->alias
      sql/ha_partition.cc:
        Update usage of TABLE->alias
      sql/handler.cc:
        Update usage of TABLE->alias
        Fixed wrong usage of str.ptr()
      sql/item.cc:
        Fixed error where code wrongly assumed string was \0 terminated.
      sql/item_func.cc:
        c_ptr() -> c_ptr_safe()
        Update usage of TABLE->alias
      sql/item_sum.h:
        Use my_strtod() instead of my_atof() to avoid having to add \0 to string
      sql/lock.cc:
        Update usage of TABLE->alias
      sql/log.cc:
        c_ptr() -> ptr() as \0 was not needed
      sql/log_event.cc:
        c_ptr_quick() -> ptr() as \0 was not needed
      sql/opt_range.cc:
        ptr() -> c_ptr() as \0 is needed
      sql/opt_subselect.cc:
        Update usage of TABLE->alias
      sql/opt_table_elimination.cc:
        Update usage of TABLE->alias
      sql/set_var.cc:
        ptr() -> c_ptr() as \0 is needed
        c_ptr() -> c_ptr_safe()
      sql/sp.cc:
        c_ptr() -> ptr() as \0 was not needed
      sql/sp_rcontext.cc:
        
        Update usage of TABLE->alias
      sql/sql_base.cc:
        Preallocate buffers
        Update usage of TABLE->alias
      sql/sql_class.cc:
        Fix arguments to sprintf() to work even if string is not \0 terminated
      sql/sql_insert.cc:
        Update usage of TABLE->alias
        c_ptr() -> ptr() as \0 was not needed
      sql/sql_load.cc:
        Preallocate buffers
        Trivial optimizations
      sql/sql_parse.cc:
        Trivial optimization
      sql/sql_plugin.cc:
        c_ptr() -> ptr() as \0 was not needed
      sql/sql_select.cc:
        Update usage of TABLE->alias
      sql/sql_show.cc:
        Update usage of TABLE->alias
      sql/sql_string.h:
        Added move() function to move allocated memory from one object to another.
      sql/sql_table.cc:
        Update usage of TABLE->alias
        c_ptr() -> c_ptr_safe()
      sql/sql_test.cc:
        ptr() -> c_ptr_safe()
      sql/sql_trigger.cc:
        Update usage of TABLE->alias
        c_ptr() -> c_ptr_safe()
      sql/sql_update.cc:
        Update usage of TABLE->alias
      sql/sql_view.cc:
        ptr() -> c_ptr_safe()
      sql/sql_yacc.yy:
        ptr() -> c_ptr()
      sql/table.cc:
        
        Update usage of TABLE->alias
      sql/table.h:
        Changed TABLE->alias to String to get fewer reallocs when alias are used.
      storage/federatedx/ha_federatedx.cc:
        Use c_ptr_safe() to ensure strings are \0 terminated.
      storage/maria/ha_maria.cc:
        Update usage of TABLE->alias
      storage/myisam/ha_myisam.cc:
        Update usage of TABLE->alias
      storage/xtradb/row/row0sel.c:
        Ensure that null bits in record are properly reset.
        (Old code didn't work as row_search_for_mysql() can be called twice while reading fields from one row.
      1ace5937
    • unknown's avatar
      Fix for LP BUG#606013: Adding bit field support for heap tables. · 8adb124d
      unknown authored
      mysql-test/r/heap_btree.result:
        Test of index over bit firld in hash table.
      mysql-test/r/heap_hash.result:
        Test of index over bit firld in hash table.
      mysql-test/t/heap_btree.test:
        Test of index over bit firld in hash table.
      mysql-test/t/heap_hash.test:
        Test of index over bit firld in hash table.
      storage/heap/ha_heap.cc:
        Adding bit field support for heap tables.
      storage/heap/hp_create.c:
        Adding bit field support for heap tables.
      storage/heap/hp_hash.c:
        Adding bit field support for heap tables.
      8adb124d
  7. 16 Nov, 2010 1 commit
  8. 11 Nov, 2010 1 commit
  9. 10 Nov, 2010 1 commit
  10. 09 Nov, 2010 5 commits
  11. 08 Nov, 2010 4 commits
    • Sergey Petrunya's avatar
      09dd1aea
    • Sergey Petrunya's avatar
    • Sergey Petrunya's avatar
      [Patch from Monty] Fix stack-overrun crash in subselect_notembedded.test · 47b2a5f8
      Sergey Petrunya authored
      - Make mi_open() use less stack space
      47b2a5f8
    • Michael Widenius's avatar
      Make SQLString reallocation addaptive · 99e0d496
      Michael Widenius authored
      Avoid doing reallocs
      Prealloc some strings / provide extension allocation size to some strings
      This gave a 25 % speedup in some mysql-test-run tests.
      
      
      
      mysys/safemalloc.c:
        More DBUG_PRINT
      sql/net_serv.cc:
        Make all mallocs() look the similar. (just-for-safety fix)
      sql/protocol.cc:
        Ensure that communication packet buffer is allocated.
        (It's freed by stored precedures and some DLL statements)
      sql/sp.cc:
        Fixed valgrind warning
      sql/sql_select.cc:
        Set extent allocation for buffer that has a lot of append() calls.
      sql/sql_show.cc:
        Fixed wrong usage of string buffer. Old code worked in test suite 'just-by-chance'
      sql/sql_string.cc:
        Call realloc_with_extra_if_needed() in append() functions.
      sql/sql_string.h:
        Added 'extra_alloc' member, to specify chunck size for realloc().
        extra_alloc is addaptive to catch cases where preallocation of buffers is not done properly.
        Simplified free() to allow compiler to optimize things better (and to keep things consistent).
        Fixed shrink() to take into account the extra memory added to the Alloced_length in realloc(). This saves us a realloc() per query.
      sql/sql_test.cc:
        Set extent allocation for buffer that has a lot of append() calls.
      sql/table.cc:
        Set extent allocation for buffer that has a lot of append() calls.
      99e0d496
  12. 07 Nov, 2010 2 commits
  13. 05 Nov, 2010 2 commits
  14. 04 Nov, 2010 4 commits
  15. 03 Nov, 2010 4 commits
    • unknown's avatar
      MBug#643463: slow XtraDB shutdown due to 10 second sleep in purge thread · 665cdc08
      unknown authored
      Implement os_event_wait_time() for POSIX systems.
      
      In the purge thread, use os_event_wait_time() when sleeping rather than sleep,
      and signal the event when server shuts down, so we do not need to wait for
      upto 10 seconds until the purge thread wakes up.
      
      Also fix bug that warnings that were pushed after we call set_ok_status() were
      not included in the waning count sent to the client in the result packet.
      
      Also in mysqltest, in recursive die() invocation at least print the message
      before aborting.
      
      client/mysqltest.cc:
        If we detect recursive die(), at least print the message before aborting.
      mysql-test/r/warnings_debug.result:
        Test case.
      mysql-test/t/warnings_debug.test:
        Test case.
      sql/handler.cc:
        Force generation of a warning with specific debug option, for testing.
      sql/protocol.cc:
        Fix wrong DBUG_ENTER
      sql/sql_class.h:
        Add method to count warnings pushed after set_ok_status() is called.
      sql/sql_error.cc:
        Also count warnings pushed after set_ok_status() is called.
      storage/xtradb/include/os0sync.h:
        Implement working os_sync_wait_time() for POSIX.
      storage/xtradb/include/srv0srv.h:
        Make the purge thread wait for an event when sleeping, so we can signal it to
        wakeup immediately at shutdown.
      storage/xtradb/log/log0log.c:
        Make the purge thread wait for an event when sleeping, so we can signal it to
        wakeup immediately at shutdown.
      storage/xtradb/os/os0sync.c:
        Implement working os_sync_wait_time() for POSIX.
      storage/xtradb/srv/srv0srv.c:
        Make the purge thread wait for an event when sleeping, so we can signal it to
        wakeup immediately at shutdown.
      665cdc08
    • Michael Widenius's avatar
    • Michael Widenius's avatar
      Automatic merge · f50c7d17
      Michael Widenius authored
      f50c7d17
    • Michael Widenius's avatar
      Fixed compiler & valgrind warnings from my previous push. · f435db5b
      Michael Widenius authored
      Fixed a bug in Aria when two threads was inserting into the same table and row page and one thread did an abort becasue of duplicate key.
      
      
      
      mysys/thr_lock.c:
        Fixed valgrind warning
      sql/sql_base.cc:
        Remove not used variable
      storage/maria/ma_bitmap.c:
        Added ma_bitmap_lock() & ma_bitmap_unlock() to protect against two threads using the bitmap at the same time.
        More DBUG_PRINT()
      storage/maria/ma_blockrec.c:
        Fixed a bug in Aria when two threads was inserting into the same table and row page and one thread did an abort becasue of duplicate key.
        Fix was that we block other threads to modify the bitmap while we are removing the row with a duplicate key.
      storage/maria/ma_blockrec.h:
        Added ma_bitmap_lock() & ma_bitmap_unlock() to protect against two threads using the bitmap at the same time.
      storage/maria/maria_def.h:
        Changed flush_all_requested to be a counter.
      storage/myisam/mi_locking.c:
        Fixed compiler error on windows (typo).
      f435db5b
  16. 02 Nov, 2010 7 commits
    • Igor Babaev's avatar
      Merge · 3a50e4ad
      Igor Babaev authored
      3a50e4ad
    • Igor Babaev's avatar
      Removed empty lines. · b9eb4b0f
      Igor Babaev authored
      b9eb4b0f
    • unknown's avatar
      #endif fixed. · 73d0f231
      unknown authored
      73d0f231
    • Sergey Petrunya's avatar
      LPBUG#602574: RQG: sql_select.cc:5385: bool greedy_search... : Assertion `join->best_read · 798cc334
      Sergey Petrunya authored
      - Make optimize_wo_join_buffering() handle cases where position->records_read=0 (this
        happens for outer joins that have constant tables inside them). The number of
        0 is not correct (should be 1 because outer join will produce at least a NULL-complemented
        record) but for now we just make it work with incorrect number.
      798cc334
    • Igor Babaev's avatar
      Merge · 9c7f262f
      Igor Babaev authored
      9c7f262f
    • Igor Babaev's avatar
      Fixed LP bug #669420. · cce23d75
      Igor Babaev authored
      This bug in the MRR code for Maria engine caused wrong results when
      MRR was used to scan ranges for each record.
      
      Added test cases for bugs 669420 and 669423 (as a duplicate of 669420).
      cce23d75
    • Michael Widenius's avatar
      Fix for: LP #634955: Assert in _ma_update_at_original_place() · 334cc518
      Michael Widenius authored
      Added locking of lock mutex when updating status in external_unlock() for Aria and MyISAM tables.
      Fixed that 'source' command doesn't cause mysql command line tool to exit on error.
      DEBUG_EXECUTE() and DEBUG_EVALUATE_IF() should not execute things based on wildcards. (Allows one to run --debug with mysql-test-run scripts that uses @debug)
      Fixed several core dump, deadlock and crashed table bugs in handling of LOCK TABLE with MERGE tables:
      - Added priority of locks to avoid crashes with MERGE tables.
      - Added thr_lock_merge() to allow one to merge two results of thr_lock().
      Fixed 'not found row' bug in REPLACE with Aria tables.
      Mark MyISAM tables that are part of MERGE with HA_OPEN_MERGE_TABLE and set the locks to have priority THR_LOCK_MERGE_PRIV.
      - By sorting MERGE tables last in thr_multi_unlock() it's safer to release and relock them many times (can happen when TRIGGERS are created)
      Avoid printing (null) in debug file (to easier find out wrong NULL pointer usage with %s).
      
      
      
      client/mysql.cc:
        Fixed that 'source' command doesn't cause mysql command line tool to exit on error.
      client/mysqltest.cc:
        Don't send NULL to fn_format(). (Can cause crash on Solaris when using --debug)
      dbug/dbug.c:
        DEBUG_EXECUTE() and DEBUG_EVALUATE_IF() should not execute things based on wildcards.
      include/my_base.h:
        Added flag to signal if one opens a MERGE table.
        Added extra() command to signal that one is not part of a MERGE table anymore.
      include/thr_lock.h:
        Added priority for locks (needed to fix bug in thr_lock when using MERGE tables)
        Added option to thr_unlock() if get_status() should be called.
        Added prototype for thr_merge_locks().
      mysql-test/mysql-test-run.pl:
        Ignore crashed table warnings for tables named 'crashed'.
      mysql-test/r/merge.result:
        Renamed triggers to make debugging easier.
        Added some CHECK TABLES to catch errors earlier.
        Additional tests.
      mysql-test/r/merge_debug.result:
        Test of error handling when reopening MERGE tables.
      mysql-test/r/udf_query_cache.result:
        Added missing flush status
      mysql-test/suite/parts/r/partition_repair_myisam.result:
        Update results
      mysql-test/t/merge.test:
        Renamed triggers to make debugging easier.
        Added some CHECK TABLES to catch errors earlier.
        Additional tests.
      mysql-test/t/merge_debug.test:
        Test of error handling when reopening MERGE tables.
      mysql-test/t/udf_query_cache.test:
        Added missing flush status
      mysys/my_getopt.c:
        Removed not used variable
      mysys/my_symlink2.c:
        Changed (null) to (NULL) to make it easier to find NULL arguments to DBUG_PRINT() functions.
        (On linux, NULL to sprintf is printed 'null')
      mysys/thr_lock.c:
        Added priority of locks to avoid crashes with MERGE tables.
        Added thr_lock_merge() to allow one to merge two results of thr_lock().
        - This is needed for MyISAM as all locked table must share the same status. If not, you will not see newly inserted rows in other instances of the table.
        If calling thr_unlock() with THR_UNLOCK_UPDATE_STATUS, call update_status() and restore_status() for the locks. This is needed in some rare cases where we call thr_unlock() followed by thr_lock() without calling external_unlock/external_lock in between.
        Simplify loop in thr_multi_lock().
        Added 'start_trans', which is called at end of thr_multi_lock() when all locks are taken.
        - This was needed by Aria to ensure that transaction is started when we got all locks, not at get_status(). Without this, some rows could not be visible when we lock two tables at the same time, causing REPLACE using two tables to fail unexpectedly.
      sql/handler.cc:
        Add an assert() in handler::print_error() for "impossible errors" (like table is crashed) when --debug-assert-if-crashed-table is used.
      sql/lock.cc:
        Simplify mysql_lock_tables() code if get_lock_data() returns 0 locks.
        Added new parameter to thr_multi_unlock()
        In mysql_unlock_read_tables(), call first externa_unlock(), then thr_multi_unlock();  This is same order as we do in mysql_unlock_tables().
        Don't abort locks in mysql_lock_abort() for merged tables when a MERGE table is deleted; Would cause a spin lock.
        Added call to thr_merge_locks() in mysql_lock_merge() to ensure consistency in thr_locks().
        - New locks of same type and table is stored after the old lock to ensure that we get the status from the original lock.
      sql/mysql_priv.h:
        Added debug_assert_if_crashed_table
      sql/mysqld.cc:
        Added --debug-assert-if-crashed-table
      sql/parse_file.cc:
        Don't print '(null)' in DBUG_PRINT of no dir given
      sql/set_var.cc:
        Increase default size of buffer for @debug variable.
      sql/sql_base.cc:
        In case of error from reopen_table() in reopen_tables(), call unlock_open_table() and restart loop.
        - This fixed bug when we twice deleted same table from open_cache.
        Don't take name lock for already name locked table in open_unireg_entry().
        - Fixed bug when doing repair in reopen_table().
        - In detach_merge_children(), always detach if 'clear_refs' is given. We can't trust parent->children_attached as this function can be called twice, first time with clear_refs set to 0.
      sql/sql_class.cc:
        Changed printing of (null) to "" in set_thd_proc_info()
      sql/sql_parse.cc:
        Added DBUG
      sql/sql_trigger.cc:
        Don't call unlink_open_table() if reopen_table() fails as the table may already be freed.
      storage/maria/ma_bitmap.c:
        Fixed DBUG_ASSERT() in allocate_tail()
      storage/maria/ma_blockrec.c:
        Fixed wrong calculation of row length for very small rows in undo_row_update().
        - Fixes ASSERT() when doing undo.
      storage/maria/ma_blockrec.h:
        Added _ma_block_start_trans() and _ma_block_start_trans_no_versioning()
      storage/maria/ma_locking.c:
        Call _ma_update_status_with_lock() when releasing write locks.
        - Fixes potential problem with updating status without the proper lock.
      storage/maria/ma_open.c:
        Changed to use start_trans() instead of get_status() to ensure that we see all rows in all locked tables when we got the locks.
        - Fixed 'not found row' bug in REPLACE with Aria tables.
      storage/maria/ma_state.c:
        Added _ma_update_status_with_lock() and _ma_block_start_trans().
        This is to ensure that we see all rows in all locked tables when we got the locks.
      storage/maria/ma_state.h:
        Added _ma_update_status_with_lock()
      storage/maria/ma_write.c:
        More DBUG_PRINT
      storage/myisam/mi_check.c:
        Fixed error message
      storage/myisam/mi_extra.c:
        Added HA_EXTRA_DETACH_CHILD:
        - Detach MyISAM table to not be part of MERGE table (remove flag & lock priority).
      storage/myisam/mi_locking.c:
        Call mi_update_status_with_lock() when releasing write locks.
        - Fixes potential problem with updating status without the proper lock.
        Change to use new HA_OPEN_MERGE_TABLE flag to test if MERGE table.
        Added mi_fix_status(), called by thr_merge().
      storage/myisam/mi_open.c:
        Added marker if part of MERGE table.
        Call mi_fix_status() in thr_lock() for transactional tables.
      storage/myisam/myisamdef.h:
        Change my_once_flag to uint, as it stored different values than just 0/1
        Added 'open_flag' to store state given to mi_open()
      storage/myisammrg/ha_myisammrg.cc:
        Add THR_LOCK_MERGE_PRIV to THR_LOCK_DATA to get MERGE locks sorted after other types of locks.
      storage/myisammrg/myrg_locking.c:
        Remove windows specific code.
      storage/myisammrg/myrg_open.c:
        Use HA_OPEN_MERGE_TABLE to mi_open().
        Set HA_OPEN_MERGE_TABLE for linked MyISAM tables.
      storage/xtradb/buf/buf0buf.c:
        Fixed compiler warning
      storage/xtradb/buf/buf0lru.c:
        Initialize variable that could be used not initialized.
      334cc518