Deveel.Data.Sql.Query.QueryPlanner.ResolveOrderByRefs C# (CSharp) Method

ResolveOrderByRefs() private static method

private static ResolveOrderByRefs ( PreparedQuerySelectColumns columnSet, IEnumerable orderBy ) : IList
columnSet PreparedQuerySelectColumns
orderBy IEnumerable
return IList
        private static IList<SortColumn> ResolveOrderByRefs(PreparedQuerySelectColumns columnSet,
			IEnumerable<SortColumn> orderBy)
        {
            // Resolve any numerical references in the ORDER BY list (eg.
            // '1' will be a reference to column 1.
            if (orderBy == null)
                return null;

            var columnCount = columnSet.SelectedColumns.Count();

            var resolvedColumns = new List<SortColumn>();
            foreach (var column in orderBy) {
                var resolved = column;

                var expression = column.Expression;
                if (expression.ExpressionType == SqlExpressionType.Constant) {
                    var value = ((SqlConstantExpression) expression).Value;
                    if (value.Type is NumericType &&
                        !value.IsNull) {
                        var colRef = ((SqlNumber) value.Value).ToInt32() - 1;
                        if (colRef >= 0 && colRef < columnCount) {
                            var funArray = columnSet.FunctionColumns.ToArray();
                            var refExp = funArray[colRef];

                            resolved = new SortColumn(refExp.Expression, column.Ascending);
                        }
                    }
                }

                resolvedColumns.Add(resolved);
            }

            return resolvedColumns.ToArray();
        }