Deveel.Data.Sql.Query.QuerySelectColumns.PrepareColumn C# (CSharp) Method

PrepareColumn() private method

private PrepareColumn ( SelectColumn column, IRequest context, IList functionColumns, int &aggregateCount ) : SelectColumn
column Deveel.Data.Sql.Expressions.SelectColumn
context IRequest
functionColumns IList
aggregateCount int
return Deveel.Data.Sql.Expressions.SelectColumn
        private SelectColumn PrepareColumn(SelectColumn column, IRequest context, IList<SelectColumn> functionColumns,
			ref int aggregateCount)
        {
            if (column.Expression is SqlQueryExpression)
                throw new InvalidOperationException("Sub-query expressions are invalid in select columns.");

            SelectColumn newColumn;

            var exp = column.Expression;
            if (exp != null)
                exp = exp.Prepare(fromSet.ExpressionPreparer);

            if (exp is SqlReferenceExpression) {
                var sqlRef = (SqlReferenceExpression) exp;
                var colName = sqlRef.ReferenceName;
                ObjectName resolvedName = null;

                var alias = column.Alias;
                if (String.IsNullOrEmpty(alias)) {
                    resolvedName = colName;
                } else {
                    resolvedName = new ObjectName(alias);
                }

                newColumn = new SelectColumn(exp, alias) {
                    InternalName = colName,
                    ResolvedName = resolvedName
                };
            } else {
                var funcAlias = functionColumns.Count.ToString(CultureInfo.InvariantCulture);
                if (column.Expression.HasAggregate(context)) {
                    aggregateCount++;
                    funcAlias += "_A";
                }

                var alias = column.Alias;
                if (string.IsNullOrEmpty(alias))
                    alias = exp.ToString();

                newColumn = new SelectColumn(exp, alias) {
                    InternalName = new ObjectName(FunctionTableName, funcAlias),
                    ResolvedName = new ObjectName(alias)
                };

                functionColumns.Add(newColumn);
            }

            return newColumn;
        }