Esempio n. 1
0
        protected override void PrepareForFetchingProcess()
        {
            var filterCriteriaProcessingResult = JoinProcessor.Process(FilterCriteriaProcessor.Process(FilterCriteria));
            var baseSortInfoProcessingResult   = JoinProcessor.Process(SortInfoProcessor.Process(SortInfo));

            var selectQueryJOINSection = JoinProcessor.PrepareJoinSection(filterCriteriaProcessingResult.UsedJOINS, baseSortInfoProcessingResult.UsedJOINS);
            var queryWHERESection      = filterCriteriaProcessingResult.ResultString.IsNotEmpty() ? "WHERE " + filterCriteriaProcessingResult.ResultString : string.Empty;
            var queryORDERBYSection    = baseSortInfoProcessingResult.ResultString.IsNotEmpty() ? "ORDER BY " + baseSortInfoProcessingResult.ResultString : string.Empty;
            var queryPARAMETERS        = filterCriteriaProcessingResult.Parameters;

            SetSELECTQuery(
                FillTemplatePlaceholders(
                    ("SELECT [BASEALIAS] FROM [SOURCETYPE] [BASEALIAS] " +
                     "[QUERY JOIN SECTION]" +
                     "[QUERY WHERE SECTION]" +
                     "[QUERY ORDERBY SECTION]")
                    .Replace("[QUERY JOIN SECTION]", selectQueryJOINSection.Add(" "))
                    .Replace("[QUERY WHERE SECTION]", queryWHERESection.Add(" "))
                    .Replace("[QUERY ORDERBY SECTION]", queryORDERBYSection.Add(" "))
                    )
                );


            if (GroupCount > 0)
            {
                var groupSortInfo = SortInfo.Take(GroupCount).ToList();

                var groupSortInfoProcessingResult = JoinProcessor.Process(GroupSortInfoProcessor.Process(groupSortInfo));

                var groupExpressions = groupSortInfo.Select(x => x.SortExpression).ToList();
                var groupPropertiesProcessingResult = JoinProcessor.Process(GroupPropertiesProcessor.Process(groupExpressions));
                var groupSummaryProcessingResult    = JoinProcessor.Process(GroupSummaryProcessor.Process(GroupSummaryInfo));


                if (SortInfoProcessor.HasSpecialMappingsFor(groupSortInfo))
                {
                    PrepareGroupFetchingProcessComplicated(
                        filterCriteriaProcessingResult,
                        groupSortInfoProcessingResult,
                        groupPropertiesProcessingResult,
                        groupSummaryProcessingResult
                        );
                }
                else
                {
                    PrepareGroupFetchingProcessSimple(
                        filterCriteriaProcessingResult,
                        groupSortInfoProcessingResult,
                        groupPropertiesProcessingResult,
                        groupSummaryProcessingResult
                        );
                }
            }
            else
            {
                SetGROUPQueryInfo(null);
            }


            var totalSummaryProcessingResult = JoinProcessor.Process(TotalSummaryProcessor.Process(TotalSummaryInfo));
            var totalQueryJOINSection        = JoinProcessor.PrepareSimpleJoinSection(
                filterCriteriaProcessingResult.UsedJOINS,
                totalSummaryProcessingResult.UsedJOINS
                );

            SetTOTALQueryInfo(
                FillTemplatePlaceholders(
                    ("SELECT [SUMMARIES] FROM [SOURCETYPE] [BASEALIAS] " +
                     "[QUERY JOIN SECTION]" +
                     "[QUERY WHERE SECTION]")
                    .Replace("[QUERY JOIN SECTION]", totalQueryJOINSection.Add(" "))
                    .Replace("[QUERY WHERE SECTION]", queryWHERESection.Add(" "))
                    .Replace("[SUMMARIES]", totalSummaryProcessingResult.ResultString)
                    ),
                totalSummaryProcessingResult.SummaryDescriptors
                );


            SetQueryPARAMETERS(queryPARAMETERS);
        }