Ejemplo n.º 1
0
        /// <summary>
        /// Returns the amount of objects of a given type that would be returned by a query
        /// </summary>
        /// <typeparam name="T">The type of the object</typeparam>
        /// <param name="query">The query</param>
        /// <returns>The amount of objects</returns>
        public int GetCount <T>(Query query)
        {
            ICriteria criteria = session.CreateCriteria(typeof(T));

            criteria.SetProjection(Projections.RowCount());
            QueryTranslator queryTranslator = new QueryTranslator(criteria, query);

            queryTranslator.Execute();
            return((int)criteria.List()[0]);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Executes a query using pagination facilities
        /// </summary>
        /// <typeparam name="T">The type of the objects returned</typeparam>
        /// <param name="query">The query</param>
        /// <param name="pageIndex">The index of the page to retrieve</param>
        /// <param name="pageSize">The size of the page to retrieve</param>
        /// <returns>A distinct list of instances</returns>
        public IList <T> GetByCriteria <T>(Query query, int pageIndex, int pageSize) where T : class, new()
        {
            ICriteria       criteria        = session.CreateCriteria(typeof(T));
            QueryTranslator queryTranslator = new QueryTranslator(criteria, query);

            queryTranslator.Execute();
            criteria.SetFirstResult(pageIndex * pageSize);
            if (pageSize > 0)
            {
                criteria.SetMaxResults(pageSize);
            }
            return(criteria.List <T>());
        }
Ejemplo n.º 3
0
        public void Execute()
        {
            Query myQuery = this._query;

            foreach (OrderClause clause in myQuery.OrderClauses)
            {
                _criteria.AddOrder(new Order(clause.PropertyName, clause.Criterion == OrderClause.OrderClauseCriteria.Ascending ? true : false));
            }

            // TODO: Potrebno je proveriti sledece ogranicenje: Za istu asocijaciju
            // (tj AssociationPath) nije moguce kombinovati CreateAlias i eager fetch
            // mode (poziv SetFetchMode sa parametrom FetchMode.Eager)
            foreach (AssociationAlias a in myQuery.Aliases)
            {
                // NOTE: Primetiti da CreateAlias daje inner join
                _criteria.CreateAlias(a.AssociationPath, a.AliasName);
            }

            foreach (Criterion myCriterion in myQuery.Criteria)
            {
                ICriterion criterion = null;
                if (myCriterion.Operator == CriteriaOperator.Equal)
                    criterion = Expression.Eq(myCriterion.PropertyName, myCriterion.Value);
                else if (myCriterion.Operator == CriteriaOperator.NotEqual)
                    criterion = Expression.Not(Expression.Eq(myCriterion.PropertyName, myCriterion.Value));
                else if (myCriterion.Operator == CriteriaOperator.GreaterThan)
                    criterion = Expression.Gt(myCriterion.PropertyName, myCriterion.Value);
                else if (myCriterion.Operator == CriteriaOperator.GreaterThanOrEqual)
                    criterion = Expression.Ge(myCriterion.PropertyName, myCriterion.Value);
                else if (myCriterion.Operator == CriteriaOperator.LesserThan)
                    criterion = Expression.Lt(myCriterion.PropertyName, myCriterion.Value);
                else if (myCriterion.Operator == CriteriaOperator.LesserThanOrEqual)
                    criterion = Expression.Le(myCriterion.PropertyName, myCriterion.Value);
                else if (myCriterion.Operator == CriteriaOperator.Like)
                {
                    if (myCriterion.CaseInsensitive)
                        criterion = Expression.InsensitiveLike(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode));
                    else
                        criterion = Expression.Like(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode));
                }
                else if (myCriterion.Operator == CriteriaOperator.NotLike)
                {
                    if (myCriterion.CaseInsensitive)
                        criterion = Expression.Not(Expression.InsensitiveLike(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode)));
                    else
                        criterion = Expression.Not(Expression.Like(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode)));
                }
                else if (myCriterion.Operator == CriteriaOperator.IsNull)
                    criterion = Expression.IsNull(myCriterion.PropertyName);
                else if (myCriterion.Operator == CriteriaOperator.IsNotNull)
                    criterion = Expression.IsNotNull(myCriterion.PropertyName);
                else
                    throw new ArgumentException("operator", "CriteriaOperator not supported in NHibernate Provider");

                if (_query.Operator == QueryOperator.And)
                    _criteria.Add(Expression.Conjunction().Add(criterion));
                else if (_query.Operator == QueryOperator.Or)
                    _criteria.Add(Expression.Disjunction().Add(criterion));
            }

            foreach (Query subQuery in myQuery.SubQueries)
            {
                QueryTranslator myTranslator = new QueryTranslator(_criteria, _query);
                myTranslator.Execute(); // Recursive Call
            }

            foreach (AssociationFetch f in myQuery.FetchModes)
            {
                FetchMode fetchMode = FetchMode.Default;
                if (f.FetchMode == AssociationFetchMode.Eager)
                    fetchMode = FetchMode.Eager;
                else if (f.FetchMode == AssociationFetchMode.Lazy)
                    fetchMode = FetchMode.Lazy;

                _criteria.SetFetchMode(f.AssociationPath, fetchMode);
            }
        }
Ejemplo n.º 4
0
        public void Execute()
        {
            Query myQuery = this._query;

            foreach (OrderClause clause in myQuery.OrderClauses)
            {
                _criteria.AddOrder(new Order(clause.PropertyName, clause.Criterion == OrderClause.OrderClauseCriteria.Ascending ? true : false));
            }

            // TODO: Potrebno je proveriti sledece ogranicenje: Za istu asocijaciju
            // (tj AssociationPath) nije moguce kombinovati CreateAlias i eager fetch
            // mode (poziv SetFetchMode sa parametrom FetchMode.Eager)
            foreach (AssociationAlias a in myQuery.Aliases)
            {
                // NOTE: Primetiti da CreateAlias daje inner join
                _criteria.CreateAlias(a.AssociationPath, a.AliasName);
            }

            foreach (Criterion myCriterion in myQuery.Criteria)
            {
                ICriterion criterion = null;
                if (myCriterion.Operator == CriteriaOperator.Equal)
                {
                    criterion = Expression.Eq(myCriterion.PropertyName, myCriterion.Value);
                }
                else if (myCriterion.Operator == CriteriaOperator.NotEqual)
                {
                    criterion = Expression.Not(Expression.Eq(myCriterion.PropertyName, myCriterion.Value));
                }
                else if (myCriterion.Operator == CriteriaOperator.GreaterThan)
                {
                    criterion = Expression.Gt(myCriterion.PropertyName, myCriterion.Value);
                }
                else if (myCriterion.Operator == CriteriaOperator.GreaterThanOrEqual)
                {
                    criterion = Expression.Ge(myCriterion.PropertyName, myCriterion.Value);
                }
                else if (myCriterion.Operator == CriteriaOperator.LesserThan)
                {
                    criterion = Expression.Lt(myCriterion.PropertyName, myCriterion.Value);
                }
                else if (myCriterion.Operator == CriteriaOperator.LesserThanOrEqual)
                {
                    criterion = Expression.Le(myCriterion.PropertyName, myCriterion.Value);
                }
                else if (myCriterion.Operator == CriteriaOperator.Like)
                {
                    if (myCriterion.CaseInsensitive)
                    {
                        criterion = Expression.InsensitiveLike(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode));
                    }
                    else
                    {
                        criterion = Expression.Like(
                            myCriterion.PropertyName,
                            myCriterion.Value.ToString(),
                            convertMatchMode(myCriterion.MatchMode));
                    }
                }
                else if (myCriterion.Operator == CriteriaOperator.NotLike)
                {
                    if (myCriterion.CaseInsensitive)
                    {
                        criterion = Expression.Not(Expression.InsensitiveLike(
                                                       myCriterion.PropertyName,
                                                       myCriterion.Value.ToString(),
                                                       convertMatchMode(myCriterion.MatchMode)));
                    }
                    else
                    {
                        criterion = Expression.Not(Expression.Like(
                                                       myCriterion.PropertyName,
                                                       myCriterion.Value.ToString(),
                                                       convertMatchMode(myCriterion.MatchMode)));
                    }
                }
                else if (myCriterion.Operator == CriteriaOperator.IsNull)
                {
                    criterion = Expression.IsNull(myCriterion.PropertyName);
                }
                else if (myCriterion.Operator == CriteriaOperator.IsNotNull)
                {
                    criterion = Expression.IsNotNull(myCriterion.PropertyName);
                }
                else
                {
                    throw new ArgumentException("operator", "CriteriaOperator not supported in NHibernate Provider");
                }

                if (_query.Operator == QueryOperator.And)
                {
                    _criteria.Add(Expression.Conjunction().Add(criterion));
                }
                else if (_query.Operator == QueryOperator.Or)
                {
                    _criteria.Add(Expression.Disjunction().Add(criterion));
                }
            }

            foreach (Query subQuery in myQuery.SubQueries)
            {
                QueryTranslator myTranslator = new QueryTranslator(_criteria, _query);
                myTranslator.Execute(); // Recursive Call
            }

            foreach (AssociationFetch f in myQuery.FetchModes)
            {
                FetchMode fetchMode = FetchMode.Default;
                if (f.FetchMode == AssociationFetchMode.Eager)
                {
                    fetchMode = FetchMode.Eager;
                }
                else if (f.FetchMode == AssociationFetchMode.Lazy)
                {
                    fetchMode = FetchMode.Lazy;
                }

                _criteria.SetFetchMode(f.AssociationPath, fetchMode);
            }
        }