private OrderByContext CreateOrderByContextForDistinctRowWithoutGroupBy(SelectCommand selectCommand, GroupByContext groupByContext) { if (!groupByContext.GetItems().Any() && selectCommand.Projections.IsDistinctRow()) { int index = 0; ICollection <OrderByItem> orderByItems = new LinkedList <OrderByItem>(); foreach (var projectionSegment in selectCommand.Projections.GetProjections()) { if (projectionSegment is ColumnProjectionSegment columnProjectionSegment) { var columnOrderByItemSegment = new ColumnOrderByItemSegment(columnProjectionSegment.GetColumn(), OrderDirectionEnum.ASC); OrderByItem item = new OrderByItem(columnOrderByItemSegment); item.SetIndex(index); orderByItems.Add(item); index++; } } if (orderByItems.Any()) { return(new OrderByContext(orderByItems, true)); } } return(null); }
public OrderByContext CreateOrderBy(SelectCommand selectCommand, GroupByContext groupByContext) { if (null == selectCommand.OrderBy || !selectCommand.OrderBy.GetOrderByItems().Any()) { OrderByContext orderByContext = CreateOrderByContextForDistinctRowWithoutGroupBy(selectCommand, groupByContext); return(null != orderByContext ? orderByContext : new OrderByContext(groupByContext.GetItems(), groupByContext.GetItems().Any())); } ICollection <OrderByItem> orderByItems = new LinkedList <OrderByItem>(); foreach (var orderByItemSegment in selectCommand.OrderBy.GetOrderByItems()) { OrderByItem orderByItem = new OrderByItem(orderByItemSegment); if (orderByItemSegment is IndexOrderByItemSegment indexOrderByItemSegment) { orderByItem.SetIndex(indexOrderByItemSegment.GetColumnIndex()); } orderByItems.Add(orderByItem); } return(new OrderByContext(orderByItems, false)); }
/** * Set indexes. * * @param columnLabelIndexMap map for column label and index */ public void SetIndexes(IDictionary <string, int> columnLabelIndexMap) { SetIndexForAggregationProjection(columnLabelIndexMap); SetIndexForOrderItem(columnLabelIndexMap, _orderByContext.GetItems()); SetIndexForOrderItem(columnLabelIndexMap, _groupByContext.GetItems()); }
private ICollection <IProjection> GetDerivedGroupByColumns(ICollection <IProjection> projections, GroupByContext groupByContext, SelectCommand selectCommand) { return(GetDerivedOrderColumns(projections, groupByContext.GetItems(), DerivedColumn.Get(DerivedColumnEnum.GROUP_BY_ALIAS), selectCommand)); }