Source code for pg4n.strange_having_checker

from typing import Optional

import sqlglot.expressions as exp

from .errfmt import ErrorFormatter
from .qepparser import QEPAnalysis


[docs]class StrangeHavingChecker: def __init__(self, parsed_sql: exp.Expression, qep_analysis: QEPAnalysis): self.parsed_sql: exp.Expression = parsed_sql self.qep_analysis: QEPAnalysis = qep_analysis
[docs] def check(self) -> Optional[str]: """ Returns warning message if there exists HAVING without a GROUP BY, otherwise None. """ has_group_by = len(list(self.parsed_sql.find_all(exp.Group))) != 0 has_having = len(list(self.parsed_sql.find_all(exp.Having))) != 0 has_strange_having = has_having and not has_group_by if not has_strange_having: return None warning = "HAVING without GROUP BY" warning_name = type(self).__name__.rstrip("Checker") formatter = ErrorFormatter(warning, warning_name) warning_msg = formatter.format() return warning_msg