mysql-test/r/group_min_max.result:
Test for BUG#12672.
mysql-test/t/group_min_max.test:
Test for BUG#12672.
sql/opt_range.cc:
Some storage managers like InnoDB always retrieve the value of
the primary key (if any) with any other key. For such storage
managers the optimizer marks an index as covering if that index
and the primary key contain all query fields. This is good for
reading data from an index, but not for lookup. The patch detects
such cases and tests whether an index is really a covering index
by itself, without the primary key. If yes, then that index can
be used for the index skip algorithm of the GROUP_MIN_MAX
access method.
The problem was that when there was no MIN or MAX function, after finding the
group prefix based on the DISTINCT or GROUP BY attributes we did not search further
for a key in the group that satisfies the equi-join conditions on attributes that
follow the group attributes. Thus we ended up with the wrong rows, and subsequent
calls to select_cond->val_int() in evaluate_join_record() were filtering those
rows. Hence - the query result set was empty.
The problem occured both for GROUP BY queries without MIN/MAX and for queries
with DISTINCT (which were internally executed as GROUP BY queries).
mysql-test/r/group_min_max.result:
Added test result for BUG#11044. Notice that the group by query is
equivalent to the distinct query and both are executed via the same
algorithm.
mysql-test/t/group_min_max.test:
Added test for BUG#11044. Notice that the group by query is
equivalent to the distinct query and both are executed via the
same algorithm.
sql/opt_range.cc:
* Use the extended prefix in QUICK_GROUP_MIN_MAX_SELECT::get_next()
to find keys that satisfy equality conditions in the case when there is
no MIN or MAX function.
* Corrected some method comments.
* Corrected debug printout of cost information.
"the server side preparedStatement error for LIMIT placeholder",
which moves all uses of LIMIT clause from PREPARE to OPTIMIZE
and later steps.
After-review fixes.
mysql-test/r/group_min_max.result:
Test results fixed for EXPLAINs when using GROUP_MIN_MAX access plan.
sql/item_subselect.cc:
Move setting of the internal LIMIT used for IN/ALL/ANY/EXISTS
subqueries to one place: Item_exists_subselect::fix_length_and_dec().
This implies that unit->select_limit_cnt is not set until the item is
fixed. This is OK, as now LIMIT values are not used until JOIN::optimize.
sql/mysql_priv.h:
setup_tables no longer needs a special flag for the case when
it's called from JOIN::reinit() (we don't need to call setup_tables
between two executions of a correlated subquery).
sql/opt_range.cc:
Fix a glitch in GROUP_MIN_MAX access plan: we should use table metadata,
not field data, to evaluate max_used_key_length, which is then
used for explain.
sql/sp.cc:
- setup_tables signature changed.
sql/sql_base.cc:
- setup_tables no longer needs a special mode for subqueries.
Unused checks were removed.
sql/sql_delete.cc:
- setup_tables signature changed
sql/sql_help.cc:
- setup_tables signature changed
sql/sql_insert.cc:
- setup_tables signature changed
sql/sql_lex.cc:
Consolidate setting of internal LIMIT for IN/ALL/ANY/EXISTS subqeries
in one place, and hence remove it from st_select_lex::test_limit().
sql/sql_lex.h:
Cleanup signature of st_select_lex_unit::init_prepare_fake_select_lex().
sql/sql_load.cc:
- setup_tables signature changed
sql/sql_olap.cc:
- setup_tables signature changed
sql/sql_parse.cc:
- st_select_lex_unit::set_limit() signature changed
sql/sql_select.cc:
Move setting of JOIN::select_limit from JOIN::prepare
to JOIN::optimize. At prepare, limit is unknown yet.
Remove excessive cleanups from JOIN::reinit which were overwriting
join->join_tab[i]->table->used_keys. This fixes the bug which was triggered
by the change in item_subselect.cc.
sql/sql_union.cc:
Class st_select_lex_unit was changed to avoid calls to
st_select_lex_unit::set_limit from places where it may be unknown.
Now unit->select_limit_cnt is set at ::exec().
st_select_lex_unit::init_prepare_fake_select_lex():
- move out set_limit functionality
- remove a few lines of dead code.
st_select_lex_unit::prepare():
- now we don't call set_limit at the time of prepare, so the value
of unit->select_limit_cnt may be unknown here. Use sl->select_limit
instead.
st_select_lex_unit::exec():
- cleanup
- call set_limit explicitly as it has been moved out of
init_prepare_fake_select_lex.
sql/sql_update.cc:
- setup_tables signature changed
into mishka.local:/home/my/mysql-5.0
mysql-test/r/group_min_max.result:
Auto merged
mysql-test/r/view.result:
Auto merged
mysql-test/t/view.test:
Auto merged
myisam_max_extra_sort_file_size is depricated
Ensure that myisam_data_pointer_size is honoured when creating new MyISAM files
Changed default value of myisam_data_pointer_size from 4 to 6 to get rid of 'table-is-full' errors
include/myisam.h:
Change type of myisam_block_size and myisam_concurrent_insert to make them changeable in mysqld.cc
Removed not used varaible myisam_max_extra_temp_length
include/thr_lock.h:
Added extra parameter to get_status
myisam/mi_create.c:
Ensure that myisam_data_pointer_size is honoured
myisam/mi_dynrec.c:
If 'append_insert_at_end' is set, only write at end of myisam record file
myisam/mi_locking.c:
Add extra argument to 'mi_get_status' to allow thr_lock to signal that we want to do a concurrent insert
If this is used, we will append new insert rows at end of data file.
Change mi_check_status() to allow concurrent_inserts even if there are holes in the file when myisam_concurent_insert=2
myisam/mi_static.c:
Change behavior of myisam_concurrent_insert so that setting this to 2 allows inserts even if there is a hole in the data file.
Default value is 2 for MyISAM direct usage but will be set to 1 (old default) by mysqld.cc
myisam/mi_statrec.c:
If 'append_insert_at_end' is set, only write at end of myisam record file
myisam/mi_write.c:
If 'append_insert_at_end' is set, only write at end of myisam record file
myisam/myisamdef.h:
Support for insert-at-end even if there is holes in data file
mysql-test/r/gis-rtree.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/group_min_max.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/index_merge.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/index_merge_ror.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/merge.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/myisam.result:
Test of concurrent_insert=2
mysql-test/r/null.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/preload.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/ps_1general.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/range.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/r/variables.result:
concurrent_insert is now a integer, not a boolean
myisam_extra_sort_file_size is deleted
mysql-test/r/view.result:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/t/index_merge.test:
Test result changed because default value for myisam_data_pointer_size is changed from 4 -> 6
mysql-test/t/myisam.test:
Test of concurrent_insert=2
mysql-test/t/ps_1general.test:
Drop test table
mysql-test/t/variables.test:
concurrent_insert is now a integer, not a boolean
myisam_extra_sort_file_size is deleted
mysql-test/t/view.test:
Drop tables that may be left from previous tests
mysys/thr_lock.c:
Extra paramter to get_status to signal if concurrent_insert was used
sql/mysqld.cc:
concurrent-insert can now be set to 2 for concurrent inserts when there is holes in the data file
myisam_max_extra_sort_file_size is depricated
sql/set_var.cc:
concurrent-insert is now an integer, not a bool
myisam_max_extra_sort_file_size is deleted
sql/opt_range.cc:
Fix for bug #9798: Rollup crash with InnoDB in setup_sum_funcs().
Disable mix/max group by optimization for queries with rollup for now.
Note: the actual bug was hidden; if this optimization works with rollup
queries we will have to change some code:
the problem is that we call the join->make_sum_func_list() function against
changed thd->mem_root (see SQL_SELECT::test_quick_select()) which creates some
items for rollup, then we free that mem_root, then we try to reuse (free) those
items.
The problem was in that the code that analyses the applicability of the
QUICK_GROUP_MIN_MAX access method for DISTINC queries assumed that there
are no duplicate column references in the DISTINCT clause, and it added
non-exiting key parts for the duplicate column references.
The solution adds a test to check whether the select list already contained
a field with the same name. If such field was already present, then it was
already decided to use its key part for index access. In this such case we
must skip the duplicate field instead of counting it as a new field.
mysql-test/r/group_min_max.result:
Added test results for BUG#8532.
mysql-test/t/group_min_max.test:
Added tests for BUG#8532.
sql/opt_range.cc:
The problem was in that the code that analyses the applicability of the
QUICK_GROUP_MIN_MAX access method for DISTINC queries assumed that there
are no duplicate column references in the DISTINCT clause, and it added
non-exiting key parts for the duplicate column references.
The solution adds a test to check whether the select list already contained
a field with the same name. If such field was already present, then it was
already decided to use its key part for index access. In this such case we
must skip the duplicate field instead of counting it as a new field.
Split TABLE to TABLE and TABLE_SHARE (TABLE_SHARE is still allocated as part of table, will be fixed soon)
Created Field::make_field() and made Field_num::make_field() to call this
Added 'TABLE_SHARE->db' that points to database name; Changed all usage of table_cache_key as database name to use this instead
Changed field->table_name to point to pointer to alias. This allows us to change alias for a table by just updating one pointer.
Renamed TABLE_SHARE->real_name to table_name
Renamed TABLE->table_name to alias
Renamed TABLE_LIST->real_name to table_name
include/myisam.h:
Added const before names
mysql-test/r/group_min_max.result:
Make results repeatable
mysql-test/t/group_min_max.test:
Make results repeatable
sql/field.cc:
Created Field::make_field() and made Field_num::make_field() to call this
Use TABLE_SHARE
Use sql_strmake() instead of sql_memdup() to simplify code
sql/field.h:
Changed table_name to be pointer to table_name. This allows us to change alias for all fields by just changing one pointer.
Use TABLE_SHARE
sql/field_conv.cc:
Use TABLE_SHARE
sql/filesort.cc:
Use TABLE_SHARE
sql/ha_berkeley.cc:
Use TABLE_SHARE
sql/ha_heap.cc:
Use TABLE_SHARE
sql/ha_innodb.cc:
Use TABLE_SHARE
sql/ha_myisam.cc:
Use TABLE_SHARE
sql/ha_myisammrg.cc:
Use TABLE_SHARE
Change some pointer handling to use const char*
sql/ha_ndbcluster.cc:
Use TABLE_SHARE
sql/handler.cc:
Use TABLE_SHARE
sql/item.cc:
Use TABLE_SHARE
sql/item_func.cc:
Use TABLE_SHARE
sql/item_subselect.cc:
Use TABLE_SHARE
sql/item_sum.cc:
Use TABLE_SHARE
sql/key.cc:
Use TABLE_SHARE
sql/lock.cc:
Use TABLE_SHARE
sql/log_event.cc:
real_name -> table_name
sql/mysql_priv.h:
Use TABLE_SHARE
sql/opt_range.cc:
Use TABLE_SHARE
sql/opt_sum.cc:
Use TABLE_SHARE
sql/records.cc:
Use TABLE_SHARE
sql/repl_failsafe.cc:
real_name -> table_name
sql/slave.cc:
Use TABLE_SHARE
sql/sp.cc:
Use TABLE_SHARE
sql/sp_head.cc:
real_name -> table_name
sql/sql_acl.cc:
Use TABLE_SHARE
removed unnecessary assert
fixed indentation
changed some char * -> const char*
sql/sql_acl.h:
changed some char* -> const char*
sql/sql_base.cc:
Use TABLE_SHARE
sql/sql_cache.cc:
Use TABLE_SHARE
sql/sql_class.cc:
Use TABLE_SHARE
sql/sql_db.cc:
real_name -> table_name
sql/sql_delete.cc:
Use TABLE_SHARE
sql/sql_derived.cc:
Use TABLE_SHARE
sql/sql_handler.cc:
Use TABLE_SHARE
sql/sql_help.cc:
Use TABLE_SHARE
sql/sql_insert.cc:
Use TABLE_SHARE
sql/sql_load.cc:
Use TABLE_SHARE
sql/sql_parse.cc:
Use TABLE_SHARE
sql/sql_rename.cc:
real_name -> table_name
sql/sql_select.cc:
Use TABLE_SHARE
table->blob_fields now points to field offsets, not fields
tmp_table->table_name now points to alias name
sql/sql_show.cc:
Use TABLE_SHARE
sql/sql_table.cc:
Use TABLE_SHARE
sql/sql_test.cc:
Use TABLE_SHARE
sql/sql_trigger.cc:
Use TABLE_SHARE
sql/sql_udf.cc:
Use TABLE_SHARE
sql/sql_union.cc:
real_name -> table_name
sql/sql_update.cc:
Use TABLE_SHARE
sql/sql_view.cc:
Use TABLE_SHARE
sql/table.cc:
Split TABLE to TABLE and TABLE_SHARE
Changed blob_field to be field offsets instead of pointer to fields
Only initialize table->s->default_values with default record (not all table->record[#])
Some indentation changes
sql/table.h:
Split TABLE to TABLE and TABLE_SHARE
sql/tztime.cc:
real_name -> table_name
sql/unireg.cc:
Use TABLE_SHARE
sql/unireg.h:
Use TABLE_SHARE
Fixed compiler warnings
Fix core dump when sending SIGHUP to mysqld
mysql-test/r/drop_temp_table.result:
After merge fixes
mysql-test/r/grant.result:
After merge fixes
mysql-test/r/group_min_max.result:
After merge fixes
mysql-test/r/innodb.result:
After merge fixes
mysql-test/r/insert_select.result:
After merge fixes
mysql-test/r/rpl_charset.result:
After merge fixes
mysql-test/r/rpl_create_database.result:
After merge fixes
mysql-test/r/rpl_loaddata_rule_m.result:
After merge fixes
mysql-test/t/rpl_charset.test:
After merge fixes
mysql-test/t/rpl_create_database.test:
After merge fixes
sql-common/client.c:
After merge fixes
sql/item.cc:
After merge fixes
sql/mysqld.cc:
Fix core dump when sending SIGHUP to mysqld
sql/sql_acl.cc:
Better comment
sql/sql_derived.cc:
Fixed comment
Added missing DBUG_RETURN
sql/sql_insert.cc:
Fixed compiler warnings
After merge fixes
sql/sql_lex.cc:
After merge fixes
Removed compiler warnings
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
More debugging
sql/sql_table.cc:
Added missing DBUG_VOID_RETURN
sql/sql_update.cc:
Fixed compiler warning
sql/sql_view.cc:
Added missing DBUG_RETURN
Fixed compiler warnings
Added flag to signal that the view is a derived table
mysql-test/r/group_min_max.result:
Test results for BUG#6303
mysql-test/t/group_min_max.test:
Ucommented tests for BUG#6303
sql/opt_range.cc:
Comment fix
"Min/Max Optimization for Queries with Group By Clause"
mysql-test/r/group_min_max.result:
Added new test
mysql-test/t/group_min_max.test:
Added new test & comments
sql/item.h:
Remove processor methods that are no longer used.
sql/item_sum.cc:
Remove processor methods that are no longer used.
sql/item_sum.h:
Remove processor methods that are no longer used.
sql/opt_range.cc:
- the test procedure no longer needs to build lists and to traverse the expression trees
- all usable indexes are tested and the bes one is chosen
- added/edited function comments
sql/sql_select.cc:
Modified make_sum_func_list() so it can be reused in the test for MIN/MAX optimization.
sql/sql_select.h:
Modified make_sum_func_list() so it can be reused in the test for MIN/MAX optimization.
- after-review changes
- merged with the source tree from 204-08-27
mysql-test/r/distinct.result:
Different plans due to group-by optimization.
sql/ha_myisam.cc:
More general interface to key_copy.
sql/handler.cc:
More general interface to key_copy.
sql/item.cc:
New method to collect all Item_field objects. Used by Item::walk.
sql/item.h:
Several methods to collect different kinds of items from expression trees.
Used by Item::walk.
sql/item_sum.cc:
Added helper to collect Item_sum objects.
sql/item_sum.h:
Methods to collect and test Item_sum objects.
sql/key.cc:
More general interface to key_copy and key_restore.
sql/mysql_priv.h:
More general interface to key_copy and key_restore.
sql/opt_range.cc:
Complete implementaion of WL#1724 "Min/Max Optimization for Queries with Group By Clause".
sql/opt_range.h:
Complete implementaion of WL#1724 "Min/Max Optimization for Queries with Group By Clause".
sql/opt_sum.cc:
simple_pred is re-used in opt_range.cc
sql/sql_acl.cc:
More general interface to key_copy and key_restore.
sql/sql_handler.cc:
More general interface to key_copy.
sql/sql_insert.cc:
More general interface to key_copy.
sql/sql_select.cc:
Changes to hook the new QUICK_GROUP_MIN_MAX_SELECT due to two differences from all other
quick selects:
1)
This quick select may be created (and used) even if there is no WHERE clause.
Several places assumed that a QUICK_SELECT is constructed only if there is a WHERE clause,
which had to be changed so that QUICK_GROUP_MIN_MAX can be used.
2)
Unlike all other quick selects, this QUICK_GROUP_MIN_MAX_SELECT operates for GROUP BY queries.
Since for the caller the quick select already produces one result tuple per group, there is
no need to call end_send_group, instead we have to call end_send as for a regular quick select.
sql/sql_select.h:
simple_pred is re-used in opt_range.cc