• unknown's avatar
    WL#1724 "Min/Max Optimization for Queries with Group By Clause" · d9450332
    unknown authored
    - 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
    d9450332
group_min_max.result 72.1 KB