Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
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);
        }
 public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null)
 {
     if (searchDto != null && searchDto.FilterFixedWhereClause != null)
     {
         return(searchDto.FilterFixedWhereClause);
     }
     return(null);
 }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 8
0
 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));
 }
Ejemplo n.º 9
0
        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()) + " ");
        }
Ejemplo n.º 10
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)));
        }
Ejemplo n.º 11
0
        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()));
        }
Ejemplo n.º 12
0
 protected virtual QueryCacheKey GetCacheKey(object queryParameter, QueryCacheKey.QueryMode queryMode)
 {
     return(new QueryCacheKey(queryMode));
 }
Ejemplo n.º 13
0
 public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null)
 {
     return(BuildWhereClause(entityName));
 }