def process_query(self, query: Query, request_settings: RequestSettings) -> None: if not get_config(self.__killswitch, 1): return cond_class = ConditionClass.IRRELEVANT condition = query.get_condition() if condition is not None: cond_class = self.__classify_combined_conditions(condition) if cond_class == ConditionClass.NOT_OPTIMIZABLE: return having_cond_class = ConditionClass.IRRELEVANT having_cond = query.get_having() if having_cond is not None: having_cond_class = self.__classify_combined_conditions(having_cond) if having_cond_class == ConditionClass.NOT_OPTIMIZABLE: return if not ( cond_class == ConditionClass.OPTIMIZABLE or having_cond_class == ConditionClass.OPTIMIZABLE ): return metrics.increment("optimizable_query") if condition is not None: query.set_ast_condition(condition.transform(self.__replace_with_hash)) if having_cond is not None: query.set_ast_having(having_cond.transform(self.__replace_with_hash))
def process_query(self, query: Query, query_settings: QuerySettings) -> None: if not get_config(self.__killswitch, 1): return condition, cond_class = self.__get_reduced_and_classified_query_clause( query.get_condition(), query ) query.set_ast_condition(condition) if cond_class == ConditionClass.NOT_OPTIMIZABLE: return having_cond, having_cond_class = self.__get_reduced_and_classified_query_clause( query.get_having(), query ) query.set_ast_having(having_cond) if having_cond_class == ConditionClass.NOT_OPTIMIZABLE: return if not ( cond_class == ConditionClass.OPTIMIZABLE or having_cond_class == ConditionClass.OPTIMIZABLE ): return metrics.increment("optimizable_query") query.add_experiment("tags_hashmap_applied", 1) if condition is not None: query.set_ast_condition(condition.transform(self.__replace_with_hash)) if having_cond is not None: query.set_ast_having(having_cond.transform(self.__replace_with_hash))
def test_recursive_useless_condition( input_query: ClickhouseQuery, expected_query: ClickhouseQuery, ) -> None: # copy the condition to the having condition so that we test both being # applied in one test input_query.set_ast_having(deepcopy(input_query.get_condition())) expected_query.set_ast_having(deepcopy(expected_query.get_condition())) MappingOptimizer( column_name="tags", hash_map_name="_tags_hash_map", killswitch="tags_hash_map_enabled", ).process_query(input_query, HTTPQuerySettings()) assert input_query == expected_query