Exemple #1
0
        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);
        }
Exemple #2
0
        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");
            }
        }
Exemple #3
0
        public void TestHavingClauseAccept()
        {
            Mock <KoraliumSqlVisitor> mock = new Mock <KoraliumSqlVisitor>();
            HavingClause havingClause      = new HavingClause();

            havingClause.Accept(mock.Object);
            mock.Verify(x => x.VisitHavingClause(havingClause));
        }