- 19 Nov, 2010 3 commits
-
-
Igor Babaev authored
companions out of sql_select.h into a separate file sql_join_cache.h.
-
Igor Babaev authored
The bug happened when BKA join algorithm used an incremental buffer and some of the fields over which access keys were constructed - were allocated in the previous join buffers - were non-nullable - belonged to inner tables of outer joins. For such fields an offset to the field value in the record is saved in the postfix of the record, and a zero offset indicates that the value is null. Before the key using the field value is constructed the value is read into the corresponding field of the record buffer and the null bit is set for the field if the offset is 0. However if the field is non-nullable the table->null_row must be set to 1 for null values and to 0 for non-null values to ensure proper reading of the value from the record buffer.
-
Igor Babaev authored
The condition that was supposed to check whether a join table is an inner table of a nested outer join or semi-join was not quite correct in the code of the function check_join_cache_usage. That's why some queries with nested outer joins triggered an assertion failure. Encapsulated this condition in the new method called JOIN_TAB::is_nested_inner and provided a proper code for it. Also corrected a bug in the code of check_join_cache_usage() that caused a downgrade of not first join buffers of the level 5 and 7 to level 4 and 6 correspondingly.
-
- 16 Nov, 2010 1 commit
-
-
Igor Babaev authored
When pushing the condition for a table in the function JOIN_TAB::make_scan_filter the optimizer must not push conditions from WHERE if the table is some inner table of an outer join..
-
- 15 Nov, 2010 1 commit
-
-
Igor Babaev authored
The condition over outer tables extracted from the on expression for a outer join must be ANDed to the condition pushed to the first inner table of this outer join only. Nested outer joins cannot use flat join buffers. So if join_cache_level is set to 1 then any join algorithm employing join buffers cannot be used for nested outer joins.
-
- 13 Nov, 2010 4 commits
-
-
Igor Babaev authored
The patch that introduced the new enumeration type Match_flag for the values of match flags in the records put into join buffers missed the necessary modifications in JOIN_CACHE::set_match_flag_if_none. This could cause wrong results for outer joins with on expressions only over outer tables.
-
Igor Babaev authored
-
Igor Babaev authored
A non-incremental join buffer cannot be used for inner tables of nested outer joins. That's why when join_cache_level is set to 7 it must be downgraded to level 6 for the inner tables of nested outer joins. For the same reason with join_cache_level set to 3 no join buffer is used for the inner tables of outer joins (we could downgrade it to level 2, but this level does not support ref access).
-
Igor Babaev authored
-
- 12 Nov, 2010 3 commits
-
-
Igor Babaev authored
-
Igor Babaev authored
Made sure that the function that copy a long varchar field from the record buffer into a key buffer does not copy bytes after the field value.
-
Igor Babaev authored
-
- 11 Nov, 2010 1 commit
-
-
Igor Babaev authored
Miscalculation of the minimum possible buffer size could trigger an assert in JOIN_CACHE_HASHED::put_record when if join_buffer_size was set to the values that is less than the length of one record to stored in the join buffer. It happened due to the following mistakes: - underestimation of space needed for a key in the hash table (we have to take into account that hash table can have more buckets than the expected number of records). - the value of maximum total length of all records stored in the join buffer was not saved in the field max_used_fieldlength by the function calc_used_field_length.
-
- 10 Nov, 2010 2 commits
-
-
Igor Babaev authored
-
Igor Babaev authored
-
- 09 Nov, 2010 3 commits
-
-
unknown authored
-
Sergey Petrunya authored
-
Igor Babaev authored
The pushdown condition for the sorted table in a query can be complemented by the conditions from HAVING. This transformation is done in JOIN::exec pretty late after the original pushdown condition have been saved in the field pre_idx_push_select_cond for the sorted table. So this field must be updated after the inclusion of the condition from HAVING.
-
- 08 Nov, 2010 3 commits
-
-
Sergey Petrunya authored
-
Sergey Petrunya authored
-
Sergey Petrunya authored
- Make mi_open() use less stack space
-
- 07 Nov, 2010 1 commit
-
-
Igor Babaev authored
Currently BNLH join uses a simplified implementation of hash function when hash function is calculated over the whole key buffer, not only the significant bytes of it. It means that both building keys and probing keys both must fill insignificant bytes with the same filler. Usually 0 is used as such a filler. Yet the code before patch filled insignificant bytes only for probing keys.
-
- 06 Nov, 2010 3 commits
-
-
Igor Babaev authored
-
Igor Babaev authored
-
Igor Babaev authored
try to find a match in the join buffer. It makes sense to check for a match only those records satisfying WHERE/ON conditions that can be pushed to the scanned table. It allows us to discard early some join candidates. Such pushdown conditions were built when BNL join algorithm was employed, but for they were not built when BNLH algorithm was used. The patch removes this shortcoming.
-
- 05 Nov, 2010 4 commits
-
-
Igor Babaev authored
-
Michael Widenius authored
-
Michael Widenius authored
-
Igor Babaev authored
When probing into the hash table of a hashed join cache is performed the key value should not constructed in the buffer used to build keys in the hash tables. The constant parts of these keys copied only once, so they should not be ever overwritten. Otherwise wrong results can be produced by queries that employ hashed join buffers.
-
- 04 Nov, 2010 4 commits
-
-
Michael Widenius authored
-
Michael Widenius authored
-
Michael Widenius authored
This fixes a bug that gave ER_FILE_TOO_SHORT error when scanning Aria tables. storage/maria/ma_blockrec.c: Changed code so that we update share->state.state.data_file_length after page cache write is done. When scanning pages, stop when you are at 'data_file_length'. (We can't trust the bitmap as there may be reserved pages in the bitmap that are not yet written). This fixes a bug that gave ER_FILE_TOO_SHORT error when scanning Aria tables. storage/maria/maria_def.h: Updated struct for stopping scanning at end of file
-
Michael Widenius authored
-
- 03 Nov, 2010 5 commits
-
-
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.
-
Igor Babaev authored
plans or wrong results due to the fact that JOIN_CACHE functions ignored the possibility of interleaving materialized semijoin tables with tables whose records were stored in join buffers. This fixes would become mostly unnecessary if the new code of mwl 90 was merged into 5.3 right now. Yet the fix the code of optimize_wo_join_buffering was needed in any case.
-
Michael Widenius authored
-
Michael Widenius authored
-
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).
-
- 02 Nov, 2010 2 commits
-
-
Igor Babaev authored
-
Igor Babaev authored
-