public override void AcceptChildren(WSqlFragmentVisitor visitor) { if (FromClause != null) { FromClause.Accept(visitor); } if (WhereClause != null) { WhereClause.Accept(visitor); } if (TopRowFilter != null) { TopRowFilter.Accept(visitor); } if (GroupByClause != null) { GroupByClause.Accept(visitor); } if (HavingClause != null) { HavingClause.Accept(visitor); } if (SelectElements != null) { var index = 0; for (var count = SelectElements.Count; index < count; ++index) { SelectElements[index].Accept(visitor); } } base.AcceptChildren(visitor); }
public static HavingStage GetHavingStage( IQueryStage queryStage, HavingClause havingClause, VisitorMetadata visitorMetadata, HashSet <PropertyInfo> usedProperties) { if (queryStage is GroupedStage groupedStage) { HavingVisitor havingVisitor = new HavingVisitor(groupedStage, visitorMetadata); havingClause.Accept(havingVisitor); foreach (var property in havingVisitor.UsedProperties) { usedProperties.Add(property); } return(new HavingStage( groupedStage.CurrentType, groupedStage.ValueType, groupedStage.TypeInfo, groupedStage.KeyTypeInfo, groupedStage.ParameterExpression, groupedStage.KeyParameterExpression, groupedStage.ValueParameterExpression, groupedStage.FromAliases, havingVisitor.Expression )); } else { throw new SqlErrorException("Having can only be used in a grouped query, or a query with only aggregations"); } }
public void TestHavingClauseAccept() { Mock <KoraliumSqlVisitor> mock = new Mock <KoraliumSqlVisitor>(); HavingClause havingClause = new HavingClause(); havingClause.Accept(mock.Object); mock.Verify(x => x.VisitHavingClause(havingClause)); }