Esempio n. 1
0
        private static void BuildCondition(SqlQuery query, ReportDef report, ReportConditionItemDef item, SqlQueryCondition parentCondition, IDictionary <Guid, SqlQuerySource> mapper, bool isHaving)
        {
            var condition = item as ReportConditionDef;

            if (condition != null)
            {
                var source           = mapper[condition.LeftAttribute.SourceId];
                var reportSource     = report.GetSourceDef(condition.LeftAttribute.SourceId);
                var reportSourceAttr = reportSource.Attributes != null
                    ? reportSource.Attributes.FirstOrDefault(a => a.Id == condition.LeftAttribute.AttributeId)
                    : null;

                var attr = reportSourceAttr == null?source.GetAttribute(condition.LeftAttribute.AttributeId) : source.GetAttribute(reportSourceAttr.Ident);

                var attrRef  = new SqlQuerySourceAttributeRef(source, attr);
                var leftPart = new SqlQueryConditionPart();
                leftPart.Attributes.Add(attrRef);

                var rightPart = BuildConditionPart(query, report, condition, mapper);

                if (parentCondition != null)
                {
                    parentCondition.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                                         CompareOperationConverter.CompareToCondition(condition.Condition), rightPart));
                }
                else if (isHaving)
                {
                    query.HavingConditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                                     CompareOperationConverter.CompareToCondition(condition.Condition),
                                                                     rightPart));
                }
                else
                {
                    query.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart,
                                                               CompareOperationConverter.CompareToCondition(condition.Condition),
                                                               rightPart));
                }
            }
            else
            {
                var expCondition = item as ReportExpConditionDef;
                if (expCondition != null && expCondition.Conditions != null)
                {
                    var exp = query.AddExpCondition(item.Operation, parentCondition);

                    foreach (var child in expCondition.Conditions)
                    {
                        BuildCondition(query, report, child, exp, mapper, isHaving);
                    }
                }
            }
        }
Esempio n. 2
0
        private static SqlQueryConditionPart BuildConditionPart(SqlQuery query, ReportDef report, ReportConditionDef condition, IDictionary <Guid, SqlQuerySource> mapper)
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }
            if (condition == null)
            {
                throw new ArgumentNullException("condition");
            }

            var single = condition.RightPart as ReportConditionRightAttributeDef;

            if (single != null)
            {
                var source           = mapper[single.Attribute.SourceId];
                var reportSource     = report.GetSourceDef(single.Attribute.SourceId);
                var reportSourceAttr = reportSource.Attributes != null
                    ? reportSource.Attributes.FirstOrDefault(a => a.Id == single.Attribute.AttributeId)
                    : null;

                var attr = reportSourceAttr == null?source.GetAttribute(single.Attribute.AttributeId) : source.GetAttribute(reportSourceAttr.Ident);

                var attrRef   = new SqlQuerySourceAttributeRef(source, attr);
                var rightPart = new SqlQueryConditionPart();
                rightPart.Attributes.Add(attrRef);

                return(rightPart);
            }
            var exp = condition.RightPart as ReportConditionRightParamDef;

            if (exp != null)
            {
                var sqPart = new SqlQueryConditionPart
                {
                    Params = new[] { new QueryConditionValueDef {
                                         Value = exp.Value, Name = exp.Caption
                                     } }
                };

                return(sqPart);
            }
            throw new ApplicationException("Не могу создать правую часть SqlQuery условия из ReportDef условия");
        }