Пример #1
0
        public static ExprNodePropOrStreamSet GetAggregatedProperties(IList<ExprAggregateNode> aggregateNodes)
        {
            // Get a list of properties being aggregated in the clause.
            ExprNodePropOrStreamSet propertiesAggregated = new ExprNodePropOrStreamSet();
            ExprNodeIdentifierAndStreamRefVisitor visitor = new ExprNodeIdentifierAndStreamRefVisitor(true);
            foreach (ExprNode selectAggExprNode in aggregateNodes) {
                visitor.Reset();
                selectAggExprNode.Accept(visitor);
                IList<ExprNodePropOrStreamDesc> properties = visitor.Refs;
                propertiesAggregated.AddAll(properties);
            }

            return propertiesAggregated;
        }
Пример #2
0
        public static ExprNodePropOrStreamSet GetGroupByPropertiesValidateHasOne(ExprNode[] groupByNodes)
        {
            // Get the set of properties refered to by all group-by expression nodes.
            ExprNodePropOrStreamSet propertiesGroupBy = new ExprNodePropOrStreamSet();
            ExprNodeIdentifierAndStreamRefVisitor visitor = new ExprNodeIdentifierAndStreamRefVisitor(true);

            foreach (ExprNode groupByNode in groupByNodes) {
                visitor.Reset();
                groupByNode.Accept(visitor);
                IList<ExprNodePropOrStreamDesc> propertiesNode = visitor.Refs;
                propertiesGroupBy.AddAll(propertiesNode);

                // For each group-by expression node, require at least one property.
                if (propertiesNode.IsEmpty()) {
                    throw new ExprValidationException("Group-by expressions must refer to property names");
                }
            }

            return propertiesGroupBy;
        }