Пример #1
0
        private static string DoBuildQueryString(EntityMetadata entityMetadata, InternalQueryRequest queryParameter,
                                                 QueryCacheKey.QueryMode queryMode, IWhereBuilder compositeWhereBuilder, QueryCacheKey cacheKey)
        {
            var buffer            = new StringBuilder(InitialStringBuilderCapacity);
            var projectionBuilder = new StringBuilder(InitialStringBuilderCapacity);

            projectionBuilder.Append(QuerySelectBuilder.BuildSelectAttributesClause(entityMetadata, queryMode, queryParameter.SearchDTO));
            projectionBuilder.Append(QueryFromBuilder.Build(entityMetadata, queryParameter.SearchDTO));
            buffer.Append(projectionBuilder);
            buffer.Append(compositeWhereBuilder.BuildWhereClause(entityMetadata.Name, queryMode, queryParameter.SearchDTO));

            var hasUnionWhereClauses = queryParameter.SearchDTO != null && queryParameter.SearchDTO.UnionWhereClauses != null;
            var isUnion = entityMetadata.HasUnion() || queryMode == QueryCacheKey.QueryMode.Union || hasUnionWhereClauses;

            if (queryMode != QueryCacheKey.QueryMode.Count && queryMode != QueryCacheKey.QueryMode.Detail && !isUnion)
            {
                buffer.Append(QuerySearchSortBuilder.BuildSearchSort(entityMetadata, queryParameter.SearchDTO));
            }

            if (hasUnionWhereClauses)
            {
                foreach (var unionWC in queryParameter.SearchDTO.UnionWhereClauses)
                {
                    buffer.Append(" union all ").Append(projectionBuilder).Append(" where (").Append(unionWC).Append(")");
                }
                buffer.Append(" order by 1 desc");
            }
            var queryString = buffer.ToString();

            return(queryString);
        }
Пример #2
0
        private BindedEntityQuery HandleUnion(SlicedEntityMetadata slicedEntityMetadata, InternalQueryRequest queryParameter, string queryString, QueryCacheKey.QueryMode queryMode,
                                              IEnumerable <KeyValuePair <string, object> > parameters)
        {
            var queryModeToPropagate = queryMode == QueryCacheKey.QueryMode.Count
                ? QueryCacheKey.QueryMode.Count
                : QueryCacheKey.QueryMode.Union;


            var unionQuery = TemplateQueryBuild(slicedEntityMetadata.UnionSchema, new InternalQueryRequest()
            {
                SearchDTO = queryParameter.SearchDTO.unionDTO
            }, queryModeToPropagate);

            queryString += (" union all " + unionQuery.Sql + " ");
            if (queryMode == QueryCacheKey.QueryMode.Count)
            {
                queryString = "select sum(cnt) from (" + queryString + ")";
                return(new BindedEntityQuery(queryString, parameters.Union(unionQuery.Parameters)));
            }
            //for unions, we need to do the order by in the end
            queryString += QuerySearchSortBuilder.BuildSearchSort(slicedEntityMetadata, queryParameter.SearchDTO);

            return(new BindedEntityQuery(queryString, parameters.Union(unionQuery.Parameters)));
        }
Пример #3
0
        public static PaginationData GetInstance(SearchRequestDto searchDTO, EntityMetadata entityMetadata)
        {
            var            paginatedSearchRequestDto = searchDTO as PaginatedSearchRequestDto;
            PaginationData paginationData            = null;

            if (paginatedSearchRequestDto != null && paginatedSearchRequestDto.PageSize > 0 && paginatedSearchRequestDto.ShouldPaginate)
            {
                paginationData = new PaginationData(paginatedSearchRequestDto.PageSize,
                                                    paginatedSearchRequestDto.PageNumber, QuerySearchSortBuilder.BuildSearchSort(entityMetadata, searchDTO));
            }
            return(paginationData);
        }