public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { if (_rowstamps.CurrentMode() == Rowstamps.RowstampMode.None) { return(null); } IDictionary <string, object> parameters = _rowstamps.GetParameters(); string sql = null; switch (_rowstamps.CurrentMode()) { case Rowstamps.RowstampMode.Both: sql = Both; break; case Rowstamps.RowstampMode.Lower: sql = Lower; break; case Rowstamps.RowstampMode.Upper: sql = Upper; break; } return(sql); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var sb = new StringBuilder(); var firstMatch = true; foreach (var whereBuilder in _whereBuilders) { var result = whereBuilder.BuildWhereClause(entityName, queryMode, searchDto); if (String.IsNullOrWhiteSpace(result)) { continue; } if (firstMatch) { sb.Append(" where "); firstMatch = false; } sb.Append("(").Append(result).Append(")").Append(And); } if (sb.Length > 0) { return(sb.ToString(0, sb.Length - And.Length)); } return(null); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var entityMetadata = MetadataProvider.Entity(entityName); //double check return(entityMetadata.HasWhereClause ? entityMetadata.Schema.WhereClause : null); }
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); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { if (searchDto != null && searchDto.FilterFixedWhereClause != null) { return(searchDto.FilterFixedWhereClause); } return(null); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var baseWhereClause = DoBuildBaseWhereClause(entityName, searchDto); // if (queryMode.Equals(QueryCacheKey.QueryMode.Detail)) { // return ApplySpecificDetailClauses(entityName, baseWhereClause); // } return(baseWhereClause); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var entity = MetadataProvider.Entity(entityName); if (!entity.Schema.Attributes.Any(a => a.Name.Equals("pluspcustomer"))) { return(null); } var property = MetadataProvider.GlobalProperty("multitenantprefix"); if (property == null) { return(null); } return(String.Format("{0}.pluspcustomer like '{1}'", entityName, property)); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { return(String.Format("{0} = {1}{2}", BaseQueryUtil.QualifyAttribute(_entityMetadata, _entityMetadata.Schema.IdAttribute), HibernateUtil.ParameterPrefix, ByIdQueryParameter)); }
public static string BuildSelectAttributesClause(EntityMetadata entityMetadata, QueryCacheKey.QueryMode queryMode , SearchRequestDto dto = null) { var buffer = new StringBuilder(); if (queryMode == QueryCacheKey.QueryMode.Count) { return(CountClause); } buffer.AppendFormat("select "); if (entityMetadata.FetchLimit() != null && queryMode == QueryCacheKey.QueryMode.Sync) { buffer.Append(string.Format(" top({0}) ", entityMetadata.FetchLimit())); } var attributes = entityMetadata.Attributes(NoCollections) as IList <EntityAttribute> ?? entityMetadata.Attributes(NoCollections).ToList(); var hasProjection = dto != null && dto.ProjectionFields.Count > 0; if (hasProjection) { foreach (ProjectionField field in dto.ProjectionFields) { if (field.Name.StartsWith("#")) { if (field.Name.StartsWith("#null")) { //this way we can map null attributes, that can be used for unions //see changeunionschema of hapag´s metadata.xml buffer.AppendFormat("null" + SelectSeparator); } //this is an unmapped attribute continue; } var result = LocateAttribute(entityMetadata, attributes, field); if (!field.Name.Contains('.') && result == null) { //this field is not mapped continue; } string aliasAttribute; if (result != null && result.Item1.Query != null) { aliasAttribute = AliasAttribute(entityMetadata, field.Alias, result.Item1, result.Item2); } else { aliasAttribute = AliasAttribute(entityMetadata, field); } buffer.AppendFormat(aliasAttribute + SelectSeparator); } } else { for (var i = 0; i < attributes.Count; i++) { var entityAttribute = attributes[i]; if (entityAttribute.Name.StartsWith("#null")) { //this way we can map null attributes, that can be used for unions //see changeunionschema of hapag´s metadata.xml buffer.AppendFormat("null" + SelectSeparator); } else { var aliasAttribute = AliasAttribute(entityMetadata, entityAttribute); buffer.AppendFormat(aliasAttribute + SelectSeparator); } } } return(buffer.ToString().Substring(0, buffer.Length - SelectSeparator.Count()) + " "); }
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))); }
protected BindedEntityQuery TemplateQueryBuild(EntityMetadata entityMetadata, InternalQueryRequest queryParameter, QueryCacheKey.QueryMode queryMode) { string queryString; var before = Stopwatch.StartNew(); var compositeWhereBuilder = GetCompositeBuilder(entityMetadata, queryParameter); var cacheKey = GetCacheKey(queryParameter, queryMode); if (!entityMetadata.QueryStringCache.TryGetValue(cacheKey, out queryString) || !queryParameter.Cacheable()) { queryString = DoBuildQueryString(entityMetadata, queryParameter, queryMode, compositeWhereBuilder, cacheKey); } else { //where clauses should always be rebuild independent of cache, due to context variation, like modules, profiles, etc... var whereBuilder = SimpleInjectorGenericFactory.Instance.GetObject <DataConstraintsWhereBuilder>(typeof(DataConstraintsWhereBuilder)); var whereConstraint = whereBuilder.BuildWhereClause(entityMetadata.Name, queryMode, queryParameter.SearchDTO); queryString = String.Format(queryString, whereConstraint); } if (entityMetadata.HasUnion()) { return(HandleUnion(entityMetadata as SlicedEntityMetadata, queryParameter, queryString, queryMode, compositeWhereBuilder.GetParameters())); } Log.Debug(LoggingUtil.BaseDurationMessageFormat(before, "query for {0}:{1} built", entityMetadata.Name, queryMode.ToString())); return(new BindedEntityQuery(queryString, compositeWhereBuilder.GetParameters())); }
protected virtual QueryCacheKey GetCacheKey(object queryParameter, QueryCacheKey.QueryMode queryMode) { return(new QueryCacheKey(queryMode)); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { return(BuildWhereClause(entityName)); }