From e148cb97f446d147554c38d087cfd382f193af16 Mon Sep 17 00:00:00 2001 From: Ryan Chae Date: Tue, 25 Jul 2023 18:28:29 +0900 Subject: [PATCH] Fix having clause constraint --- Qsi.MySql/Tree/Visitors/ExpressionVisitor.cs | 10 ++++++++++ Qsi.MySql/Tree/Visitors/TableVisitor.cs | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Qsi.MySql/Tree/Visitors/ExpressionVisitor.cs b/Qsi.MySql/Tree/Visitors/ExpressionVisitor.cs index 5f380172..fa291308 100644 --- a/Qsi.MySql/Tree/Visitors/ExpressionVisitor.cs +++ b/Qsi.MySql/Tree/Visitors/ExpressionVisitor.cs @@ -1585,6 +1585,16 @@ public static QsiLiteralExpressionNode VisitFractionalPrecision(FractionalPrecis } #region Having Clause + public static QsiGroupingExpressionNode MakeEmptyQsiGroupingExpressionNode(HavingClauseContext context) + { + return TreeHelper.Create(n => + { + n.Items.AddRange(new List(0)); + + MySqlTree.PutContextSpan(n, context); + }); + } + public static QsiExpressionNode VisitHavingClause(HavingClauseContext context) { return VisitExpr(context.expr()); diff --git a/Qsi.MySql/Tree/Visitors/TableVisitor.cs b/Qsi.MySql/Tree/Visitors/TableVisitor.cs index 81e4884e..5e733739 100644 --- a/Qsi.MySql/Tree/Visitors/TableVisitor.cs +++ b/Qsi.MySql/Tree/Visitors/TableVisitor.cs @@ -700,7 +700,10 @@ public static QsiTableNode VisitQuerySpecification(QuerySpecificationContext con node.Grouping.SetValue(ExpressionVisitor.VisitGroupByClause(groupByClause)); break; - case HavingClauseContext havingClause when !node.Grouping.IsEmpty: + case HavingClauseContext havingClause: + if (node.Grouping.IsEmpty) + node.Grouping.SetValue(ExpressionVisitor.MakeEmptyQsiGroupingExpressionNode(havingClause)); + node.Grouping.Value.Having.SetValue(ExpressionVisitor.VisitHavingClause(havingClause)); break;