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; }
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; }