into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-enterprise-formergecomm
include/config-win.h:
Auto merged
myisam/mi_open.c:
Auto merged
mysql-test/r/func_in.result:
Auto merged
mysql-test/r/information_schema.result:
Auto merged
mysql-test/r/information_schema_db.result:
Auto merged
mysql-test/t/func_in.test:
Auto merged
ndb/src/ndbapi/DictCache.cpp:
Auto merged
sql/ha_archive.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/lex.h:
Auto merged
sql/lock.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
configure.in:
Manual merge, convert to default community-features off.
sql/set_var.cc:
Manual merge.
sql/sql_parse.cc:
Manual merge.
support-files/mysql.spec.sh:
Manual merge.
Disable the community-server advertisement for Enterprise. Re-enable
this later.
applied the new function is_union() to places
in the code that check the same condition.
- 5.0->5.1 merge fixes
mysql-test/r/subselect3.result:
merge 5.0->5.1 : updated explain.
sql/item_subselect.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
sql/sql_derived.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
sql/sql_parse.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
sql/sql_select.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to places
in the code that check the same condition.
sql/sql_union.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
sql/sql_view.cc:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
sql/sql_yacc.yy:
addendum of the fix for bug 27786:
applied the new function is_union() to the applicable places.
This bug was intruduced by the fix for bug#17212 (in 4.1). It is not
ok to call test_if_skip_sort_order since this function will
alter the execution plan. By contract it is not ok to call
test_if_skip_sort_order in this context.
This bug appears only in the case when the optimizer has chosen
an index for accessing a particular table but finds a covering
index that enables it to skip ORDER BY. This happens in
test_if_skip_sort_order.
mysql-test/r/key.result:
Bug#24778
test case.
The bug causes the result to be the empty set.
mysql-test/t/key.test:
Bug#24778
The minimal test case that reveals the bug. The reason for such a
complicated schema is that we have to convince the optimizer to
pick one index, then discard it in order to be able to skip
ORDER BY.
sql/sql_select.cc:
bug#24778
Removed the call to test_if_skip_sort_order that constituted the
bug.
This bug was intruduced by the fix for bug#17212 (in 4.1). It is not
ok to call test_if_skip_sort_order since this function will
alter the execution plan. By contract it is not ok to call
test_if_skip_sort_order in this context.
This bug appears only in the case when the optimizer has chosen
an index for accessing a particular table but finds a covering
index that enables it to skip ORDER BY. This happens in
test_if_skip_sort_order.
Short overview:
Changed a lot of variable, functions, defines and struct elements to use more readable names
More comments (mostly function and structure slot comments)
Other things:
Changed 'USE_WHOLE_KEY' to a big number to not interfer with long keys
Ensure that tail block are at least of size 'MIN_TAIL_SIZE'
Allow longer keys and key parts than before (don't limit Maria interface by HA_MAX_KEY_LENGTH)
Use ma_chsize() to write initial bitmap page
Added checking if using file with wrong block_size
Added issing types to type_names[] (for maria_chk -d)
Added maria_max_key_length()
include/maria.h:
Changed maria_portable_size_char_ptr to portable_size_char_ptr and moved it to my_handler.h
Removed not used variable maria_delay_rec_write.
More comments
include/my_handler.h:
Added portable_sizeof_char_ptr
include/myisam.h:
Changed mi_portable_size_char_ptr to portable_size_char_ptr and moved it to my_handler.h
mysql-test/r/maria.result:
Fix results when we now have a longer key length
mysql-test/t/maria.test:
More tests
mysys/my_pread.c:
Code cleanup
sql/net_serv.cc:
Changed warning to note (as in main 5.1 tree) to avoid not critical failing tests
sql/sql_select.cc:
Use portable_sizeof_char_ptr
storage/maria/ha_maria.cc:
Added max_supported_key_length(), as this is not a trival function anymore
storage/maria/ha_maria.h:
Moved max_supported_key_length(), as this is not a trival function anymore
storage/maria/ma_bitmap.c:
Lots of new comments
Added maria_bitmap_marker[] to mark 2 last bytes of each bitmap (for corruption detection)
Trivial code changes (based on review comments)
storage/maria/ma_blockrec.c:
More code comments
Renamed _block_row() functions to _block_record()
Trivial code changes, based on review comments
Moved Code from maria_close() to _ma_end_block_record()
Some function renames to make things more understandable
DIR_ENTRY_OFFSET -> DIR_COUNT_OFFSET
keybuff_used -> keyread_buff_used
ma_recordpos_to_offset -> ma_recordpos_to_dir_entry
Changed some 'rec' named variables to 'column'.
Ensure that tail block are at least of size 'MIN_TAIL_SIZE'
storage/maria/ma_blockrec.h:
More comments
DIRCOUNT_SIZE -> DIR_COUNT_SIZE
Added define for maira_bitmap_marker[]
ma_recordpos_to_offset -> ma_recordpos_to_dir_entry
xxx_block_row() -> xxx_block_record()
Made _ma_read_bitmap_page() static
storage/maria/ma_check.c:
More comments
ma_recordpos_to_offset() -> ma_recordpos_to_dir_entry()
DIR_ENTRY_OFFSET -> DIR_COUNT_OFFSET
rec variables -> column variables
recdef -> columndef
storage/maria/ma_checksum.c:
rec -> column
Avoid an 'if' in _ma_checksum() for the common case
storage/maria/ma_close.c:
Moved resetting of info->dfile to ma_end_once_block_record()
storage/maria/ma_create.c:
Some variable changes to make things more readable:
recinfo -> columndef
rec -> column
rec_end -> end_column
record_type -> datafile_type
ma_recinfo_write() -> ma_columndef_write()
Fixed wrong setting of 'data_file_length'; Now max_rows should be calculated correctly
New check if too long key.
Use ma_chsize() to write bitmap page.
storage/maria/ma_delete.c:
keybuff_used -> keyread_buff_used
storage/maria/ma_dynrec.c:
rec -> columndef
rec_length -> column_length
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
Better comment for _ma_read_rnd_dynamic_record()
storage/maria/ma_ft_eval.c:
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_ft_test1.c:
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_ft_update.c:
keybuff_used -> keyread_buff_used
storage/maria/ma_info.c:
More comments
storage/maria/ma_open.c:
Added checking if using file with wrong block_size
New checking of max_key_length
rec -> columndef
_ma_recinfo_write -> _ma_columndef_write
Don't change block_size (as this is checked in ma_create())
More comments
storage/maria/ma_packrec.c:
Trivial code changes
rec -> columndef
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_page.c:
keybuff_used -> keyread_buff_used
storage/maria/ma_rkey.c:
Removed not needded empty line
storage/maria/ma_rrnd.c:
Removed not used variable
storage/maria/ma_rt_index.c:
keybuff_used -> keyread_buff_used
storage/maria/ma_search.c:
keybuff_used -> keyread_buff_used
Trivial code changes
storage/maria/ma_sp_test.c:
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_test1.c:
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_test2.c:
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/maria/ma_update.c:
Updated comment
storage/maria/ma_write.c:
keybuff_used -> keyread_buff_used
storage/maria/maria_chk.c:
Added missing types to type_names[]
Removed not used variable
rec -> columndef
Replaced some numbers with define flags
storage/maria/maria_def.h:
More comments
Added 'MARIA_INDEX_MIN_OVERHEAD_SIZE'
rec -> columndef
keybuff_used -> keyread_buff_used
_ma_recinfo_write -> _ma_culumndef_write
_ma_recinfo_read -> _ma_columndef_read
Changed 'USE_WHOLE_KEY' to a big number to not interfer with long keys
Added maria_max_key_length()
storage/maria/maria_pack.c:
Updated message strings
rec -> columndef
maria_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
More comments
storage/myisam/ft_eval.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/ft_test1.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_checksum.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_create.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_dynrec.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_open.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_packrec.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_rkey.c:
Unlock mutex also in case of error
storage/myisam/mi_test1.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/mi_test2.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/myisampack.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
storage/myisam/sp_test.c:
mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
support-files/magic:
Fixed typo
into sergbook.mysql.com:/usr/home/serg/Abk/mysql-5.1-wl2936
client/mysql.cc:
Auto merged
include/my_global.h:
Auto merged
include/my_sys.h:
Auto merged
include/mysql.h:
Auto merged
mysql-test/r/im_utils.result:
Auto merged
mysql-test/r/variables.result:
Auto merged
mysql-test/t/ndb_dd_basic.test:
Auto merged
mysql-test/t/partition_innodb.test:
Auto merged
mysql-test/t/variables.test:
Auto merged
mysys/array.c:
Auto merged
mysys/typelib.c:
Auto merged
sql/event_queue.cc:
Auto merged
sql/ha_partition.cc:
Auto merged
sql/ha_partition.h:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/set_var.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_partition.cc:
Auto merged
sql/sql_plugin.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/table.cc:
Auto merged
sql/table.h:
Auto merged
storage/example/ha_example.cc:
Auto merged
storage/federated/ha_federated.cc:
Auto merged
storage/heap/ha_heap.cc:
Auto merged
storage/innobase/include/trx0trx.h:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
storage/myisammrg/ha_myisammrg.cc:
Auto merged
storage/ndb/src/mgmsrv/InitConfigFileParser.cpp:
Auto merged
include/typelib.h:
merged
mysql-test/mysql-test-run.pl:
merged
mysql-test/r/flush2.result:
merged
mysql-test/r/ndb_dd_basic.result:
merged
mysql-test/r/partition_innodb.result:
merged
mysql-test/r/ps_1general.result:
merged
mysql-test/t/ps_1general.test:
merged
sql/ha_ndbcluster.cc:
merged
sql/item_create.cc:
merged
sql/mysqld.cc:
merged
sql/rpl_utility.h:
merged
sql/set_var.cc:
merged
sql/sql_class.cc:
merged
sql/sql_yacc.yy:
merged
storage/innobase/handler/ha_innodb.cc:
merged
storage/innobase/handler/ha_innodb.h:
merged
into moonbone.local:/mnt/gentoo64/work/bk-trees/mysql-5.1-opt
mysql-test/r/subselect3.result:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_union.cc:
Auto merged
mysql-test/r/subselect.result:
Manual merge
mysql-test/t/subselect.test:
Manual merge
into moonbone.local:/mnt/gentoo64/work/27321-bug-5.0-opt-mysql
mysql-test/r/subselect3.result:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/subselect.result:
Manually merged
mysql-test/t/subselect.test:
Manually merged
mysql-test/t/subselect3.test:
Manually merged
The Item_outer_ref class based on the Item_direct_ref class was always used
to represent an outer field. But if the outer select is a grouping one and the
outer field isn't under an aggregate function which is aggregated in that
outer select an Item_ref object should be used to represent such a field.
If the outer select in which the outer field is resolved isn't grouping then
the Item_field class should be used to represent such a field.
This logic also should be used for an outer field resolved through its alias
name.
Now the Item_field::fix_outer_field() uses Item_outer_field objects to
represent aliased and non-aliased outer fields for grouping outer selects
only.
Now the fix_inner_refs() function chooses which class to use to access outer
field - the Item_ref or the Item_direct_ref. An object of the chosen class
substitutes the original field in the Item_outer_ref object.
The direct_ref and the found_in_select_list fields were added to the
Item_outer_ref class.
mysql-test/t/subselect3.test:
Some test cases were corrected after the fix for the bug#27321.
mysql-test/r/subselect3.result:
Some test cases were corrected after the fix for the bug#27321.
mysql-test/t/subselect.test:
Added a test case for the bug#27321: Wrong subquery result in a grouping select.
mysql-test/r/subselect.result:
Added a test case for the bug#27321: Wrong subquery result in a grouping select.
Some test cases were corrected after this fix.
sql/sql_union.cc:
Bug#27321: Wrong subquery result in a grouping select.
Cleanup of the inner_refs_list.
sql/sql_select.cc:
Bug#27321: Wrong subquery result in a grouping select.
Now the fix_inner_refs() function chooses which class to use to access outer
field - the Item_ref or the Item_direct_ref. An object of the chosen class
substitutes the original field in the Item_outer_ref object.
A comment is corrected.
sql/item.cc:
Bug#27321: Wrong subquery result in a grouping select.
Now the Item_field::fix_outer_field() uses Item_outer_field objects to
represent aliased and non-aliased outer fields for grouping outer selects
only.
sql/item.h:
Bug#27321: Wrong subquery result in a grouping select.
The direct_ref and the found_in_select_list fields were added to the
Item_outer_ref class.
The Item_outer_ref class based on the Item_direct_ref class was always used
to represent an outer field. But if the outer select is a grouping one and the
outer field isn't under an aggregate function which is aggregated in that
outer select an Item_ref object should be used to represent such a field.
If the outer select in which the outer field is resolved isn't grouping then
the Item_field class should be used to represent such a field.
This logic also should be used for an outer field resolved through its alias
name.
Now the Item_field::fix_outer_field() uses Item_outer_field objects to
represent aliased and non-aliased outer fields for grouping outer selects
only.
Now the fix_inner_refs() function chooses which class to use to access outer
field - the Item_ref or the Item_direct_ref. An object of the chosen class
substitutes the original field in the Item_outer_ref object.
The direct_ref and the found_in_select_list fields were added to the
Item_outer_ref class.
into olga.mysql.com:/home/igor/mysql-5.1-opt
mysql-test/r/distinct.result:
Auto merged
mysql-test/r/row.result:
Auto merged
mysql-test/r/select.result:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/t/select.test:
Auto merged
mysql-test/t/strict.test:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/item_cmpfunc.cc:
Manual merge
The optimizer transforms DISTINCT into a GROUP BY
when possible.
It does that by constructing the same structure
(a list of ORDER instances) the parser makes when
parsing GROUP BY.
While doing that it also eliminates duplicates.
But if a duplicate is found it doesn't advance the
pointer to ref_pointer array, so the next
(and subsequent) ORDER structures point to the wrong
element in the SELECT list.
Fixed by advancing the pointer in ref_pointer_array
even in the case of a duplicate.
mysql-test/r/distinct.result:
Bug #27659: test case
mysql-test/t/distinct.test:
Bug #27659: test case
sql/sql_select.cc:
Bug #27659: use correct ref_pointer_array element
The optimizer transforms DISTINCT into a GROUP BY
when possible.
It does that by constructing the same structure
(a list of ORDER instances) the parser makes when
parsing GROUP BY.
While doing that it also eliminates duplicates.
But if a duplicate is found it doesn't advance the
pointer to ref_pointer array, so the next
(and subsequent) ORDER structures point to the wrong
element in the SELECT list.
Fixed by advancing the pointer in ref_pointer_array
even in the case of a duplicate.
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-community
VC++Files/sql/mysqld.vcproj:
Auto merged
include/config-win.h:
Auto merged
myisam/mi_open.c:
Auto merged
mysql-test/r/information_schema_db.result:
Auto merged
ndb/src/common/util/File.cpp:
Auto merged
sql/Makefile.am:
Auto merged
sql/ha_archive.cc:
Auto merged
sql/ha_berkeley.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_myisammrg.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/lock.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
support-files/mysql.spec.sh:
Auto merged
configure.in:
Manual merge.
include/my_dbug.h:
Manual merge.
sql/mysql_priv.h:
Manual merge.
sql/mysqld.cc:
Manual merge.
sql/slave.cc:
Manual merge.
sql/sql_parse.cc:
Manual merge.
conditions.
When allocating memory for KEY_FIELD/SARGABLE_PARAM structures the
function update_ref_and_keys did not take into account the fact that
a single row equality could be replaced by several simple equalities.
Fixed by adjusting the counter cond_count accordingly for each subquery
when performing substitution of a row equality for simple equalities.
mysql-test/r/row.result:
Added a test case for bug #27154.
mysql-test/t/row.test:
Added a test case for bug #27154.
conditions.
When allocating memory for KEY_FIELD/SARGABLE_PARAM structures the
function update_ref_and_keys did not take into account the fact that
a single row equality could be replaced by several simple equalities.
Fixed by adjusting the counter cond_count accordingly for each subquery
when performing substitution of a row equality for simple equalities.
into moonbone.local:/mnt/gentoo64/work/bk-trees/mysql-5.1-opt
mysql-test/r/func_gconcat.result:
Auto merged
mysql-test/r/insert_update.result:
Auto merged
mysql-test/r/subselect3.result:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
mysql-test/t/insert_update.test:
Auto merged
sql/field_conv.cc:
Auto merged
sql/item.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/table.h:
Auto merged
mysql-test/r/gis.result:
Manual merge
mysql-test/t/gis.test:
Manual merge
sql/handler.cc:
Manual merge
sql/item_sum.cc:
Manual merge
sql/sql_insert.cc:
Manual merge
sql/sql_table.cc:
Manual merge
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
sql/mysqld.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_select.cc:
Auto merged
Geometry fields have a result type string and a
special subclass to cater for the differences
between them and the base class (just like
DATE/TIME).
When creating temporary tables for results of
functions that return results of type GEOMETRY
we must construct fields of the derived class
instead of the base class.
Fixed by creating a GEOMETRY field (Field_geom)
instead of a generic BLOB (Field_blob) in temp
tables for the results of GIS functions that
have GEOMETRY return type (Item_geometry_func).
mysql-test/r/gis.result:
Bug #27300: test case
mysql-test/t/gis.test:
Bug #27300: test case
sql/item.cc:
Bug #27300:
Create a GEOMETRY field (Field_geom) instead of
a generic BLOB (Field_blob) in temp tables for
the results of GIS functions (Item_geometry_func).
sql/sql_select.cc:
Bug #27300:
Create a GEOMETRY field (Field_geom) instead of
a generic BLOB (Field_blob) in temp tables for
the results of GIS functions (Item_geometry_func).
Geometry fields have a result type string and a
special subclass to cater for the differences
between them and the base class (just like
DATE/TIME).
When creating temporary tables for results of
functions that return results of type GEOMETRY
we must construct fields of the derived class
instead of the base class.
Fixed by creating a GEOMETRY field (Field_geom)
instead of a generic BLOB (Field_blob) in temp
tables for the results of GIS functions that
have GEOMETRY return type (Item_geometry_func).
When creating a temporary table the concise column type
of a string expression is decided based on its length:
- if its length is under 512 it is stored as either
varchar or char.
- otherwise it is stored as a BLOB.
There is a flag (convert_blob_length) to create_tmp_field
that, when >0 allows to force creation of a varchar if the
max blob length is under convert_blob_length.
However it must be verified that convert_blob_length
(settable through a SQL option in some cases) is
under the maximum that can be stored in a varchar column.
While performing that check for expressions in
create_tmp_field_from_item the max length of the blob was
used instead. This causes blob columns to be created in the
heap temp table used by GROUP_CONCAT (where blobs must not
be created in the temp table because of the constant
convert_blob_length that is passed to create_tmp_field() ).
And since these blob columns are not expected in that place
we get wrong results.
Fixed by checking that the value of the flag variable is
in the limits that fit into VARCHAR instead of the max length
of the blob column.
mysql-test/r/func_gconcat.result:
Bug #26815: test case
mysql-test/t/func_gconcat.test:
Bug #26815: test case
sql/item_sum.cc:
Bug #26815: wrong length was checked
sql/sql_select.cc:
Bug #26815: wrong length was checked
When creating a temporary table the concise column type
of a string expression is decided based on its length:
- if its length is under 512 it is stored as either
varchar or char.
- otherwise it is stored as a BLOB.
There is a flag (convert_blob_length) to create_tmp_field
that, when >0 allows to force creation of a varchar if the
max blob length is under convert_blob_length.
However it must be verified that convert_blob_length
(settable through a SQL option in some cases) is
under the maximum that can be stored in a varchar column.
While performing that check for expressions in
create_tmp_field_from_item the max length of the blob was
used instead. This causes blob columns to be created in the
heap temp table used by GROUP_CONCAT (where blobs must not
be created in the temp table because of the constant
convert_blob_length that is passed to create_tmp_field() ).
And since these blob columns are not expected in that place
we get wrong results.
Fixed by checking that the value of the flag variable is
in the limits that fit into VARCHAR instead of the max length
of the blob column.
into magare.gmz:/home/kgeorge/mysql/work/WL3527-5.1-opt
mysql-test/r/gis.result:
Auto merged
mysql-test/t/gis.test:
Auto merged
sql/field.h:
Auto merged
sql/item.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/item_sum.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/subselect.result:
merge 5.0-opt -> 5.1-opt
mysql-test/t/subselect.test:
merge 5.0-opt -> 5.1-opt
sql/sql_base.cc:
merge 5.0-opt -> 5.1-opt
from func_group.test after the patch for bug #27229 had been applied.
The memory corruption happened because in some rare cases the function
count_field_types underestimated the number of elements in
in the array param->items_to_copy.
sql/item_sum.cc:
The return value of the Item_sum::update_used_tables method
should not depend on the place of aggregation of the set
function for which the Item_sum object has been created.
sql/sql_select.cc:
This is a fix for the memory corruption occurred in one of test cases
from func_group.test after the patch for bug #27229 had been applied.
The memory corruption happened because in some rare cases the function
count_field_types underestimated the number of elements in
in the array param->items_to_copy.
Currently it's not guaranteed that after JOIN::prepare() the
used_tables attribute is calculated for all items. For example
for the expression SUM(outer_ref)+1 used_tables() must return
OUTER_REF_TABLE_BIT. Yet by the moment when the used_tables
attribute is calculated in JOIN::prepare SUM(outer_ref) has
not been substituted for Item_aggregate_ref yet.
By this reason additional calls of the method update_used_tables
are needed for some items passed as parameters to the function
create_tmp_table.
from func_group.test after the patch for bug #27229 had been applied.
The memory corruption happened because in some rare cases the function
count_field_types underestimated the number of elements in
in the array param->items_to_copy.