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); }
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))); }
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); }