• Monty's avatar
    MDEV-6080: Allowing storage engine to shortcut group by queries · cf50e13f
    Monty authored
    This task is to allow storage engines that can execute GROUP BY or
    summary queries efficiently to intercept a full query or sub query from
    MariaDB and deliver the result either to the client or to a temporary
    table for further processing.
    
    - Added code in sql_select.cc to intercept GROUP BY queries.
      Creation of group_by_handler is done after all optimizations to allow
      storage engine to benefit of an optimized WHERE clause and suggested
      indexes to use.
    - Added group by handler to sequence engine and a group_by test suite as
      a way to test the new interface.
    - Intercept EXPLAIN with a message "Storage engine handles GROUP BY"
    
    libmysqld/CMakeLists.txt:
      Added new group_by_handler files
    sql/CMakeLists.txt:
      Added new group_by_handler files
    sql/group_by_handler.cc:
      Implementation of group_by_handler functions
    sql/group_by_handler.h:
      Definition of group_by_handler class
    sql/handler.h:
      Added handlerton function to create a group_by_handler, if the storage
      engine can intercept the query.
    sql/item_cmpfunc.cc:
      Allow one to evaluate item_equal any time.
    sql/sql_select.cc:
      Added code to intercept GROUP BY queries
      - If all tables are from the same storage engine and the query is
        using sum functions, call create_group_by() to check if the storage
        engine can intercept the query.
        - If yes:
           - create a temporary table to hold a GROUP_BY row or result
           - In do_select() intercept normal query execution by instead
             calling the group_by_handler to get the result
           - Intercept EXPLAIN
    sql/sql_select.h:
      Added handling of group_by_handler
      Added caching of the original join tab (needed for cleanup after
      group_by handler)
    storage/sequence/mysql-test/sequence/group_by.result:
      Test group_by_handler interface
    storage/sequence/mysql-test/sequence/group_by.test:
      Test group_by_handler interface
    storage/sequence/sequence.cc:
      Added simple group_by_engine for handling COUNT(*) and
      SUM(primary_key).  This was done as a test of the group_by_handler
      interface
    cf50e13f
group_by_handler.cc 3.98 KB