3.23 regression test failure
The member SEL_ARG::min_flag was not initialized,
due to which the condition for no GEOM_FLAG in function
key_or did not choose "Range checked for each record" as
the correct access method.
mysql-test/r/select.result:
testcase for 'Range checked' access method
mysql-test/t/select.test:
testcase for 'Range checked' access method
sql/opt_range.cc:
All of the class members initialized
3.23 regression test failure
The member SEL_ARG::min_flag was not initialized,
due to which the condition for no GEOM_FLAG in function
key_or did not choose "Range checked for each record" as
the correct access method.
into mysql.com:/home/psergey/mysql-5.1-merge
include/my_sys.h:
Auto merged
libmysql/libmysql.c:
Auto merged
sql/mysqld.cc:
Auto merged
sql/opt_range.cc:
Auto merged
- When manually constructing a SEL_TREE for "t.key NOT IN(...)", take into account that
get_mm_parts may return a tree with type SEL_TREE::IMPOSSIBLE
- Added missing OOM checks
- Added comments
mysql-test/r/func_in.result:
Testcase for BUG#19618
mysql-test/t/func_in.test:
Testcase for BUG#19618
- When manually constructing a SEL_TREE for "t.key NOT IN(...)", take into account that
get_mm_parts may return a tree with type SEL_TREE::IMPOSSIBLE
- Added missing OOM checks
- Added comments
into mysql.com:/home/psergey/mysql-5.1-merge2
mysql-test/r/select.result:
Auto merged
mysql-test/r/subselect.result:
Auto merged
sql/sql_select.cc:
Auto merged
sql/table.h:
Auto merged
sql/opt_range.cc:
Manual merge
Re-work best_access_path() and find_best() to reuse E(#rows(range access)) as
E(#rows(ref[_or_null](const) access) only when it is appropriate.
[This is the final cumulative patch]
mysql-test/r/select.result:
BUG#17379: Testcase
mysql-test/r/subselect.result:
BUG#17379: Updated test results
mysql-test/t/select.test:
BUG#17379: Testcase
sql/opt_range.cc:
BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))):
Make range optimizer together with TABLE::quick_* also return TABLE::quick_n_ranges
sql/sql_select.cc:
BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))):
Re-work best_access_path() to reuse E(#rows(range access)) as
E(#rows(ref[_or_null](const) access) only when it is appropriate.
sql/table.h:
BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))):
Make range optimizer together with TABLE::quick_* also return TABLE::quick_n_ranges
Re-work best_access_path() and find_best() to reuse E(#rows(range access)) as
E(#rows(ref[_or_null](const) access) only when it is appropriate.
[This is the final cumulative patch]
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.1-new
mysql-test/r/view.result:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
storage/ndb/include/mgmapi/mgmapi.h:
Auto merged
storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp:
Auto merged
storage/ndb/src/kernel/vm/Configuration.cpp:
Auto merged
storage/ndb/src/mgmapi/mgmapi.cpp:
Auto merged
storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
Auto merged
storage/ndb/src/mgmsrv/MgmtSrvr.hpp:
Auto merged
storage/ndb/src/mgmsrv/Services.hpp:
Auto merged
configure.in:
manual merge
sql/ha_ndbcluster.cc:
manual merge
sql/share/errmsg.txt:
manual merge
storage/ndb/src/mgmsrv/Services.cpp:
manual merge
too much memory. Instead, either create the equvalent SEL_TREE manually, or create only two ranges that
strictly include the area to scan
(Note: just to re-iterate: increasing NOT_IN_IGNORE_THRESHOLD will make optimization run slower for big
IN-lists, but the server will not run out of memory. O(N^2) memory use has been eliminated)
mysql-test/r/func_in.result:
Testcase for BUG#15872
mysql-test/t/func_in.test:
Testcase for BUG#15872
sql/item.cc:
BUG#15872: Added Item_decimal::set_decimal_value()
sql/item.h:
UG#15872: Added Item_decimal::set_decimal_value()
sql/item_cmpfunc.h:
BUG#15872: Added in_vector::create_item(), in_vector::value_to_item() and their implementations in concrete
classes.
sql/opt_range.cc:
BUG#15872: Don't run the range analyzer on "t1.keypart NOT IN (const1, ..., )", as that
consumes too much memory. Instead, either
A) create the equivalent SEL_TREE manually, making use of the fact that item_not_in->array
has an ordered IN-list, or
B) create only two ranges: (-inf|NULL) < X < min_value_from_in_list, max_value_from_in_list < X
(Choose #B if the IN-list has > 10K elements)
too much memory. Instead, either create the equvalent SEL_TREE manually, or create only two ranges that
strictly include the area to scan
(Note: just to re-iterate: increasing NOT_IN_IGNORE_THRESHOLD will make optimization run slower for big
IN-lists, but the server will not run out of memory. O(N^2) memory use has been eliminated)
get_best_covering_ror_intersect() was copying ror_scans starting from the
end of the array and not from its beginning.
mysql-test/r/index_merge_innodb.result:
Testcase for BUG#19021
mysql-test/t/index_merge_innodb.test:
Testcase for BUG#19021
sql/opt_range.cc:
BUG#19021: In get_best_covering_ror_intersect(), the array of pointers to
scans to be used is [tree->ror_scans, ror_scan_mark), and not
[ror_scan_mark, ...)
* Produce right results for conditions that were transformed to "(partitioning_range) AND
(list_of_subpartitioning_ranges)": make each partition id set iterator auto-reset itself
after it has returned all partition ids in the sequence
* Fix "Range mapping" and "Range mapping" partitioning interval analysis functions to
correctly deal with NULL values.
mysql-test/r/partition_pruning.result:
Testcase for BUG#18558
mysql-test/t/partition_pruning.test:
Testcase for BUG#18558
sql/opt_range.cc:
BUG#18558: Move partition set iterator initialization to sql_partition.cc, comment fixes
sql/partition_info.h:
BUG#18558: Make each partition set iterator auto-reset itself after it has returned all
partition ids in the set it enumerates.
sql/sql_partition.cc:
BUG#18558:
- Make each partition set iterator auto-reset itself after it has returned all
partition ids in the set it enumerates.
- Fix partition interval analysis to correctly handle intervals with one or both
NULL bounds.
sql/sql_partition.h:
BUG#18558:
- Make each partition set iterator auto-reset itself after it has returned all
partition ids in the set it enumerates.
- Rename PARTITION_ITERATOR::has_null_value to ret_null_part
* Produce right results for conditions that were transformed to "(partitioning_range) AND
(list_of_subpartitioning_ranges)": make each partition id set iterator auto-reset itself
after it has returned all partition ids in the sequence
* Fix "Range mapping" and "Range mapping" partitioning interval analysis functions to
correctly deal with NULL values.
- Fix typo bug in SEL_ARG::is_singlepoint()
- In set_up_range_analysis_info(), treat MEDIUMINT as enumerable type just like other integer types
mysql-test/r/partition_pruning.result:
Testcase for BUG#18025
mysql-test/t/partition_pruning.test:
Testcase for BUG#18025
sql/opt_range.cc:
BUG#18025: Fix a typo bug in SEL_ARG::is_singlepoint()
sql/sql_partition.cc:
BUG#18025: In set_up_range_analysis_info(), treat MEDIUMINT as enumerable type just like other integer types.
into mysql.com:/home/timka/mysql/src/5.0-bug-16710
mysql-test/r/group_min_max.result:
Auto merged
mysql-test/t/group_min_max.test:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/opt_range.cc:
Auto merged
The bug was due to a missed case in the detection of whether an index
can be used for loose scan. More precisely, the range optimizer chose
to use loose index scan for queries for which the condition(s) over
an index key part could not be pushed to the index together with the
loose scan.
As a result, loose index scan was selecting the first row in the
index with a given GROUP BY prefix, and was applying the WHERE
clause after that, while it should have inspected all rows with
the given prefix, and apply the WHERE clause to all of them.
The fix detects and skips such cases.
mysql-test/r/group_min_max.result:
Added test for BUG#16710.
mysql-test/t/group_min_max.test:
Added test for BUG#16710.
sql/item.cc:
Added new method [Item | Item_field]::find_item_in_field_list_processor.
sql/item.h:
Added new method [Item | Item_field]::find_item_in_field_list_processor.
sql/opt_range.cc:
Handle the case when there is no MIN/MAX aggregate function, and a
keypart of the index being considered, that is after the GROUP BY
prefix, is used in the WHERE clause and the condition where it is
used cannot be pushed to the index.
If this is the case, we rule out this index.
The bug was due to a missed case in the detection of whether an index
can be used for loose scan. More precisely, the range optimizer chose
to use loose index scan for queries for which the condition(s) over
an index key part could not be pushed to the index together with the
loose scan.
As a result, loose index scan was selecting the first row in the
index with a given GROUP BY prefix, and was applying the WHERE
clause after that, while it should have inspected all rows with
the given prefix, and apply the WHERE clause to all of them.
The fix detects and skips such cases.
into mysql.com:/home/my/mysql-5.1
mysql-test/r/ndb_condition_pushdown.result:
Auto merged
mysql-test/t/ndb_condition_pushdown.test:
Auto merged
sql/ha_heap.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/log.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_partition.cc:
Auto merged
storage/csv/ha_tina.cc:
Auto merged
Added missing DBUG_xxx_RETURN statements
Fixed some usage of not initialized variables (as found by valgrind)
Ensure that we don't remove locked tables used as name locks from open table cache until unlock_table_names() are called.
This was fixed by having drop_locked_name() returning any table used as a name lock so that we can free it in unlock_table_names()
This will allow Tomas to continue with his work to use namelocks to syncronize things.
Note: valgrind still produces a lot of warnings about using not initialized code and shows memory loss errors when running the ndb tests
BitKeeper/etc/ignore:
added mysql-test/r/*.log
client/mysqltest.c:
Change type of variables to get rid of compiler warnings
More debugging
Fix memory leak
mysql-test/mysql-test-run.sh:
Collect warnings about missing DBUG_RETURN statements
mysql-test/r/lock_multi.result:
Add test of new code
mysql-test/r/ndb_condition_pushdown.result:
Drop used tables before test
mysql-test/t/lock_multi.test:
Add test of new code
mysql-test/t/ndb_condition_pushdown.test:
Drop used tables before test
mysql-test/valgrind.supp:
Ignore 'safe' warnings from libz (when used with archive)
sql/event.cc:
More comments
Simplify code
Fixed memory leak found by valgrind
sql/ha_archive.cc:
Remove compiler warnings (Wrong handlerton structure and signed/unsigned comparison)
sql/ha_berkeley.cc:
Fixed compiler warning
sql/ha_blackhole.cc:
Fixed compiler warning
sql/ha_federated.cc:
Fixed compiler warning
sql/ha_heap.cc:
Fixed compiler warning
sql/ha_myisam.cc:
Fixed compiler warning
sql/ha_myisammrg.cc:
Fixed compiler warning
sql/ha_ndbcluster.cc:
Fixed compiler warnings
sql/ha_partition.cc:
Fixed compiler warning
Fixed error noticed by valgrind in ha_partition::rnd_init()
sql/handler.cc:
Fixed compiler warning
sql/handler.h:
Fixed compiler warning
sql/item.cc:
Fixed compiler warning
sql/item_xmlfunc.cc:
Fixed warning from valgrind when calling memcpy with wrong address
sql/lock.cc:
More debugging
sql/log.cc:
Fixed compiler warning
Indentation fixes
sql/log.h:
Fixed compiler warning
sql/mysql_priv.h:
Changed prototype for 'drop_locked_tables'
sql/opt_range.cc:
Indentation fix
sql/password.c:
Removed compiler warnings
sql/set_var.cc:
Fixed compiler warning
sql/slave.cc:
Fixed compiler warning
sql/sp_head.cc:
Fixed compiler warning
sql/sql_acl.cc:
Fixed compiler warning
sql/sql_analyse.cc:
Added missing DBUG_RETURN statements
sql/sql_base.cc:
Removed de-reference of not initialized pointer
More comments
drop_locked_tables() changed to not delete tables used for name locking
Fixed compiler warnings
sql/sql_delete.cc:
Fixed usage of not initialized variable
(deleted could be referenced in some not common error conditions)
sql/sql_parse.cc:
Added missing DBUG_VOID_RETURN
Simplify code
sql/sql_partition.cc:
Fixed usage of wrong variable (noticed by valgrind)
sql/sql_plugin.cc:
Removed compiler warning
sql/sql_show.cc:
Removed compiler warning
sql/sql_table.cc:
Ensure that we don't remove locked tables used as name locks from open table cache until unlock_table_names() are called.
This was fixed by having drop_locked_name() returning any table used as a name lock so that we can free it in unlock_table_names()
This will allow Tomas to continue with his work to use namelocks to syncronize things.
Fixed wrong test of 'table_type' (path_length could otherwise be accessed uninitialized)
Remove compile warnings about not initialized variables.
sql/sql_yacc.yy:
Ensure that no_write_to_binlog is properly initialized
(Was accessed uninitialized by partition code)
sql/table.cc:
Removed valgrind warnings (not fatal)
Removed compiler warnings
sql/tztime.cc:
Removed valgrind warning
storage/ndb/include/ndbapi/NdbIndexStat.hpp:
Removed compiler warning
Added missing DBUG_xxx_RETURN statements
Fixed some usage of not initialized variables (as found by valgrind)
Ensure that we don't remove locked tables used as name locks from open table cache until unlock_table_names() are called.
This was fixed by having drop_locked_name() returning any table used as a name lock so that we can free it in unlock_table_names()
This will allow Tomas to continue with his work to use namelocks to syncronize things.
Note: valgrind still produces a lot of warnings about using not initialized code and shows memory loss errors when running the ndb tests
Bug#18070 Partitions: wrong result on WHERE ... IS NULL
removed unnecessary code
added handling of NULL values
mysql-test/r/partition.result:
Bug#18053 Partitions: crash if null
Bug#18070 Partitions: wrong result on WHERE ... IS NULL
test case
mysql-test/t/partition.test:
Bug#18053 Partitions: crash if null
Bug#18070 Partitions: wrong result on WHERE ... IS NULL
test case
sql/opt_range.cc:
Bug#18053 Partitions: crash if null
Bug#18070 Partitions: wrong result on WHERE ... IS NULL
initialisation of part_iter.has_null_value
sql/sql_partition.h:
Bug#18053 Partitions: crash if null
Bug#18070 Partitions: wrong result on WHERE ... IS NULL
added has_null_value
into neptunus.(none):/home/msvensson/mysql/mysql-5.1
client/mysqltest.c:
Auto merged
include/config-win.h:
Auto merged
include/m_ctype.h:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/r/subselect.result:
Auto merged
sql/item_func.cc:
Auto merged
sql/opt_range.cc:
Auto merged
strings/ctype-bin.c:
Auto merged
strings/ctype-euc_kr.c:
Auto merged
strings/ctype-gb2312.c:
Auto merged
strings/ctype-ucs2.c:
Auto merged
mysql-test/r/subselect.result:
Fix for bug #18306: MySQL crashes and restarts using subquery
test case
mysql-test/t/subselect.test:
Fix for bug #18306: MySQL crashes and restarts using subquery
test case
sql/opt_range.cc:
Fix for bug #18306: MySQL crashes and restarts using subquery
Restore thd->mem_root because
during the cond->val_int() evaluation we can come across a subselect
item which may allocate memory on the thd->mem_root and assumes
all the memory allocated has the same life span as the subselect
item itself.
Bug # 17894 - Comparison with "less than" operator fails with range partition
The problem here was that on queries such as < 3, the range given is NULL < n < 3.
The null part works correctly where the null value is stored in rec[0] and the
field is marked as being null. However, when the 3 is processed, the 3 is places
on rec[0] but the null flag is left uncleared.
partition_range.result:
Results block for bug #17894
partition_range.test:
Test block for bug #17894
partition_list.result:
Results block for bug #17173
partition_list.test:
Test block for bug #17173
opt_range.cc:
call set_notnull to clear any null flag that may have been set
sql/opt_range.cc:
call set_notnull to clear any null flag that may have been set
mysql-test/t/partition_list.test:
Test block for bug #17173
mysql-test/r/partition_list.result:
Results block for bug #17173
mysql-test/t/partition_range.test:
Test block for bug #17894
mysql-test/r/partition_range.result:
Results block for bug #17894
Bug # 17894 - Comparison with "less than" operator fails with range partition
The problem here was that on queries such as < 3, the range given is NULL < n < 3.
The null part works correctly where the null value is stored in rec[0] and the
field is marked as being null. However, when the 3 is processed, the 3 is places
on rec[0] but the null flag is left uncleared.
partition_range.result:
Results block for bug #17894
partition_range.test:
Test block for bug #17894
partition_list.result:
Results block for bug #17173
partition_list.test:
Test block for bug #17173
opt_range.cc:
call set_notnull to clear any null flag that may have been set
into mysql.com:/home/bk/w3023-mysql-5.1-new
configure.in:
Auto merged
BitKeeper/deleted/.del-sp_notembedded.test:
Auto merged
mysql-test/extra/binlog_tests/binlog.test:
Auto merged
mysql-test/extra/binlog_tests/blackhole.test:
Auto merged
mysql-test/r/binlog_stm_ctype_cp932.result:
Auto merged
mysql-test/t/sp.test:
Auto merged
scripts/mysql_fix_privilege_tables.sql:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/log.h:
Auto merged
sql/log_event.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/table.h:
Auto merged