@@ -713,16 +713,7 @@ class st_select_lex: public st_select_lex_node
713713 joins on the right.
714714 */
715715 List<String> *prev_join_using;
716- /*
717- Bitmap used in the ONLY_FULL_GROUP_BY_MODE to prevent mixture of aggregate
718- functions and non aggregated fields when GROUP BY list is absent.
719- Bits:
720- 0 - non aggregated fields are used in this select,
721- defined as NON_AGG_FIELD_USED.
722- 1 - aggregate functions are used in this select,
723- defined as SUM_FUNC_USED.
724- */
725- uint8 full_group_by_flag;
716+
726717 void init_query ();
727718 void init_select ();
728719 st_select_lex_unit* master_unit ();
@@ -830,7 +821,22 @@ class st_select_lex: public st_select_lex_node
830821
831822 void clear_index_hints (void ) { index_hints= NULL ; }
832823
833- private:
824+ /*
825+ For MODE_ONLY_FULL_GROUP_BY we need to maintain two flags:
826+ - Non-aggregated fields are used in this select.
827+ - Aggregate functions are used in this select.
828+ In MODE_ONLY_FULL_GROUP_BY only one of these may be true.
829+ */
830+ bool non_agg_field_used () const { return m_non_agg_field_used; }
831+ bool agg_func_used () const { return m_agg_func_used; }
832+
833+ void set_non_agg_field_used (bool val) { m_non_agg_field_used= val; }
834+ void set_agg_func_used (bool val) { m_agg_func_used= val; }
835+
836+ private:
837+ bool m_non_agg_field_used;
838+ bool m_agg_func_used;
839+
834840 /* current index hint kind. used in filling up index_hints */
835841 enum index_hint_type current_index_hint_type;
836842 index_clause_map current_index_hint_clause;
0 commit comments