示例#1
0
        public string GetCalculatedColumnFieldName(string fieldName, bool useDateStats, bool dontAggregate = false, bool useFieldAlias = false)
        {
            using (new DebugTimer("CalculatedColumnHelper.GetCalculatedColumnFieldName"))
            {
                string originalFieldName = fieldName;
                fieldName = originalFieldName;

                if (!QueryHelpers.IsCalculatedColumnCompiled(fieldName))
                {
                    fieldName = new SqlExpressionParser().ConvertToSql(fieldName);
                }

                fieldName = ExpandCalculatedColumn(new Stack <string>(), fieldName, useFieldAlias);

                var columnsInCalculation = FindColumnsInCalculatedField(fieldName);
                var statsTable           = GetStatsTable(useDateStats);
                //fieldName = FixCalculatedFieldNameToUseActualFieldNames(fieldName, statsTable, ref columnsInCalculation, useFieldAlias);
                Dictionary <string, string> tempFieldNameLookups;
                fieldName = FixCalculatedFieldNameToUseTemporaryFieldNames(fieldName, statsTable, ref columnsInCalculation, out tempFieldNameLookups, useFieldAlias);

                if (!QueryHelpers.IsCalculatedColumnCompiled(fieldName))
                {
                    fieldName = new SqlExpressionParser().ConvertToSql(fieldName);
                }

                var shouldAggregate = !dontAggregate && fieldName.Contains(' ');


                foreach (var foundColumn in columnsInCalculation)
                {
                    var    aggregate         = QueryHelpers.GetAggregate(foundColumn.Key.FieldAggregationMethod);
                    string replaceColumnName = tempFieldNameLookups[foundColumn.Value];
                    if (shouldAggregate)
                    {
                        replaceColumnName = GenerateAggregateColumnSql(aggregate, replaceColumnName);
                    }
                    fieldName = ReplaceFieldName(new Stack <string>(), fieldName, foundColumn.Value, replaceColumnName);
                }

                return(fieldName);
            }
        }