示例#1
0
        public string BuildAggregate(List <CustomLine> queryLines, IQueryAxis axisIfAny)
        {
            var lines = new AggregateCustomLineCollection(queryLines, axisIfAny, GetQuerySyntaxHelper());

            //no axis no pivot
            if (lines.AxisSelect == null && lines.PivotSelect == null)
            {
                return(BuildBasicAggregate(lines));
            }

            //axis (no pivot)
            if (lines.PivotSelect == null)
            {
                return(BuildAxisAggregate(lines));
            }

            //pivot (no axis)
            if (lines.AxisSelect == null)
            {
                return(BuildPivotOnlyAggregate(lines, GetPivotOnlyNonPivotColumn(lines)));
            }

            //pivot and axis
            return(BuildPivotAndAxisAggregate(lines));
        }
示例#2
0
        private CustomLine GetPivotOnlyNonPivotColumn(AggregateCustomLineCollection query)
        {
            var nonPivotColumn = query.Lines.Where(l => l.LocationToInsert == QueryComponent.QueryTimeColumn && l.Role == CustomLineRole.None).ToArray();

            if (nonPivotColumn.Length != 1)
            {
                throw new Exception("Pivot is only valid when there are 3 SELECT columns, an aggregate (e.g. count(*)), a pivot and a final column");
            }

            return(nonPivotColumn[0]);
        }
示例#3
0
        /// <summary>
        /// Changes the axis column in the GROUP BY section of the query (e.g. "[MyDb]..[mytbl].[AdmissionDate],") and
        /// the axis column in the SELECT section of the query (e.g. "[MyDb]..[mytbl].[AdmissionDate] as Admt,")  with
        /// the appropriate axis increment (e.g. "YEAR([MyDb]..[mytbl].[AdmissionDate])," and "YEAR([MyDb]..[mytbl].[AdmissionDate]) as Admt,")
        /// </summary>
        /// <param name="query"></param>
        /// <param name="axisColumnAlias"></param>
        protected void WrapAxisColumnWithDatePartFunction(AggregateCustomLineCollection query, string axisColumnAlias)
        {
            if (string.IsNullOrWhiteSpace(axisColumnAlias))
            {
                throw new ArgumentNullException(nameof(axisColumnAlias));
            }

            var axisGroupBy            = query.AxisGroupBy;
            var axisColumnWithoutAlias = query.AxisSelect.GetTextWithoutAlias(query.SyntaxHelper);

            var axisColumnEndedWithComma = query.AxisSelect.Text.EndsWith(",");

            query.AxisSelect.Text = GetDatePartOfColumn(query.Axis.AxisIncrement, axisColumnWithoutAlias) + " AS " + axisColumnAlias + (axisColumnEndedWithComma ? "," : "");

            var groupByEndedWithComma = axisGroupBy.Text.EndsWith(",");

            axisGroupBy.Text = GetDatePartOfColumn(query.Axis.AxisIncrement, axisColumnWithoutAlias) + (groupByEndedWithComma ? "," : "");
        }
示例#4
0
 protected abstract string BuildPivotAndAxisAggregate(AggregateCustomLineCollection query);
示例#5
0
 protected abstract string BuildPivotOnlyAggregate(AggregateCustomLineCollection query, CustomLine nonPivotColumn);
示例#6
0
 protected virtual string BuildBasicAggregate(AggregateCustomLineCollection query)
 {
     return(string.Join(Environment.NewLine, query.Lines));
 }