def _format_query_body(query: Query) -> Mapping[str, Any]: expression_formatter = TracingExpressionFormatter() formatted = { "SELECT": [[e.name, e.expression.accept(expression_formatter)] for e in query.get_selected_columns_from_ast()], "GROUPBY": [e.accept(expression_formatter) for e in query.get_groupby_from_ast()], "ORDERBY": [[e.expression.accept(expression_formatter), e.direction] for e in query.get_orderby_from_ast()], } array_join = query.get_arrayjoin_from_ast() if array_join: formatted["ARRAYJOIN"] = array_join.accept(expression_formatter) condition = query.get_condition_from_ast() if condition: formatted["WHERE"] = condition.accept(expression_formatter) having = query.get_having_from_ast() if having: formatted["HAVING"] = having.accept(expression_formatter) limitby = query.get_limitby() if limitby: formatted["LIMITBY"] = { "LIMIT": limitby.limit, "BY": limitby.expression.accept(expression_formatter), } limit = query.get_limit() if limit: formatted["LIMIT"] = limit offset = query.get_offset() if offset: formatted["OFFSET"] = offset return formatted
def _format_limitby( query: AbstractQuery, formatter: ClickhouseExpressionFormatterBase) -> Optional[StringNode]: ast_limitby = query.get_limitby() if ast_limitby is not None: return StringNode("LIMIT {} BY {}".format( ast_limitby.limit, ast_limitby.expression.accept(formatter))) return None
def _format_limitby(query: AbstractQuery, formatter: ExpressionVisitor[str]) -> Optional[StringNode]: ast_limitby = query.get_limitby() if ast_limitby is not None: columns_accepted = [ column.accept(formatter) for column in ast_limitby.columns ] return StringNode("LIMIT {} BY {}".format(ast_limitby.limit, ",".join(columns_accepted))) return None