コード例 #1
0
        /// <summary>
        ///     Creates a regular <see cref="FlowQuerySelection{TDestination}" /> instance.
        /// </summary>
        /// <param name="query">
        ///     The query.
        /// </param>
        /// <typeparam name="TSource">
        ///     The <see cref="System.Type" /> of the source entity.
        /// </typeparam>
        /// <typeparam name="TDestination">
        ///     The <see cref="System.Type" /> of the result.
        /// </typeparam>
        /// <returns>
        ///     The created <see cref="FlowQuerySelection{TDestination}" /> instance.
        /// </returns>
        public static FlowQuerySelection <TDestination> SelectList <TSource, TDestination>(IQueryableFlowQuery query)
            where TSource : class
        {
            ICriteriaBuilder criteriaBuilder = GetCriteriaBuilder(query);

            ICriteria criteria = criteriaBuilder.Build <TSource, TDestination>(query);

            if (query.Constructor != null)
            {
                IEnumerable enumerable = query.IsDelayed
                    ? criteria.Future <object>()
                    : (IEnumerable)criteria.List();

                return(new FlowQuerySelection <TDestination>
                       (
                           () => ConstructionHelper.GetListByExpression <TDestination>(query.Constructor, enumerable)
                       ));
            }

            IEnumerable <TDestination> selection = query.IsDelayed
                ? criteria.Future <TDestination>()
                : criteria.List <TDestination>();

            // ReSharper disable once PossibleMultipleEnumeration
            return(new FlowQuerySelection <TDestination>(() => selection));
        }
コード例 #2
0
        /// <summary>
        ///     Populates the given <see cref="IResultStream{TDestination}" /> with the results, from the execution of
        ///     the given <see cref="IQueryableFlowQuery" />, in a streamed fashion.
        /// </summary>
        /// <typeparam name="TSource">
        ///     The <see cref="System.Type" /> of the source entity.
        /// </typeparam>
        /// <typeparam name="TDestination">
        ///     The <see cref="System.Type" /> of the result.
        /// </typeparam>
        /// <param name="query">
        ///     The query.
        /// </param>
        /// <param name="resultStream">
        ///     The <see cref="IResultStream{TDestination}" /> to stream the results into.
        /// </param>
        public static void SelectStream <TSource, TDestination>
        (
            IQueryableFlowQuery query,
            IResultStream <TDestination> resultStream
        )
        {
            Func <object, TDestination> converter = null;

            if (query.Constructor != null)
            {
                converter = ConstructionHelper.GetObjectByExpressionConverter <TDestination>(query.Constructor);
            }

            if (converter == null)
            {
                converter = x => (TDestination)x;
            }

            var streamer = new ResultStreamer <TDestination>(resultStream, converter);

            ICriteriaBuilder criteriaBuilder = GetCriteriaBuilder(query);

            ICriteria criteria = criteriaBuilder.Build <TSource, TDestination>(query);

            criteria.List(streamer);

            resultStream.EndOfStream();
        }
コード例 #3
0
        public void Disjunction()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate criteria = cb.Disjunction();

            IParameterExpression pr = cb.Parameter(System.Data.SqlDbType.Int, "3");

            criteria = cb.Or(criteria,
                             cb.Equal(r.Get("SequenceNumber"), pr)
                             );

            pr = cb.Parameter(System.Data.SqlDbType.Int, "'Jonas'");

            criteria = cb.Or(criteria,
                             cb.Equal(r.Get("FirstName"), pr)
                             );

            pr = cb.Parameter(System.Data.SqlDbType.Int, "'Petraitis'");

            criteria = cb.Or(criteria,
                             cb.Equal(r.Get("LastName"), pr)
                             );

            Assert.AreEqual("Students.SequenceNumber = 3 OR Students.FirstName = 'Jonas' OR Students.LastName = 'Petraitis'", criteria.ExpressionValue);
        }
コード例 #4
0
        public void NotLike_Success()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.NotLike(r.Get("FirstName"), cb.Literal("'Jon%'"));

            Assert.AreEqual("Students.FirstName NOT LIKE 'Jon%'", exp.ExpressionValue);
        }
コード例 #5
0
        public void IsNotNull()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.IsNotNull(r.Get("LastName"));

            Assert.AreEqual("Students.LastName IS NOT NULL", exp.ExpressionValue);
        }
コード例 #6
0
        public void EqualWithoutQuotes()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.Equal(r.Get("FirstName"), r.Get("LastName"));

            Assert.AreEqual("Students.FirstName = Students.LastName", exp.ExpressionValue);
        }
コード例 #7
0
        public void EqualWithQuotes()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.Equal(cb.Literal("'FirstName'"), cb.Literal("'Jonas'"));

            Assert.AreEqual("'FirstName' = 'Jonas'", exp.ExpressionValue);
        }
コード例 #8
0
        public void Between_Success()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.Between(r.Get("SequenceNumber"), cb.Literal("2"), cb.Literal("3"));

            Assert.AreEqual("Students.SequenceNumber BETWEEN 2 AND 3", exp.ExpressionValue);
        }
コード例 #9
0
        public void ParameterExpressoin_StringType()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IParameterExpression pr = cb.Parameter(System.Data.SqlDbType.VarChar, "Jonas");

            IPredicate exp = cb.Equal(r.Get("FirstName"), pr);

            Assert.AreEqual("Students.FirstName = 'Jonas'", exp.ExpressionValue);
        }
コード例 #10
0
        public void Not()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IPredicate exp = cb.Equal(r.Get("SequenceNumber"), cb.Literal("2"));

            IPredicate pred = cb.Not(exp);

            Assert.AreEqual("NOT (Students.SequenceNumber = 2)", pred.ExpressionValue);
        }
コード例 #11
0
        public void OrderByMultipleFieldsDescAsc()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cc = cb.CreateQuery();
            IRoot            r  = cc.From("Students");

            cc.Select(r.Get("FirstName"), r.Get("LastName"));

            cc.OrderBy(cb.Desc(r.Get("FirstName")), cb.Asc(r.Get("LastName")));

            Assert.AreEqual("SELECT Students.FirstName, Students.LastName FROM Students ORDER BY Students.FirstName DESC, Students.LastName ASC", cc.ExpressionValue);
        }
コード例 #12
0
        public void SelectWhere()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cc = cb.CreateQuery();
            IRoot            r  = cc.From("Students");

            cc.Select(r.Get("FirstName"));

            cc.Where(cb.Equal(r.Get("FirstName"), cb.Literal("'Jonas'")));

            Assert.AreEqual("SELECT Students.FirstName FROM Students WHERE Students.FirstName = 'Jonas'", cc.ExpressionValue);
        }
コード例 #13
0
        public void ParameterExpressoin_IntType()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cq = cb.CreateQuery();
            IRoot            r  = cq.From("Students");

            IParameterExpression pr = cb.Parameter(System.Data.SqlDbType.Int, "3");

            IPredicate exp = cb.Equal(r.Get("SequenceNumber"), pr);

            Assert.AreEqual("Students.SequenceNumber = 3", exp.ExpressionValue);
        }
コード例 #14
0
        public void RightJoin()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();
            ICriteriaQuery   cc = cb.CreateQuery();

            IRoot r = cc.From("Students");

            IJoin facultiesJoin = r.Join("Faculties", JoinType.Right, "Faculty_Id", "Id");

            cc.Select(r.Get("Firstname"), facultiesJoin.Get("Name"));

            Assert.AreEqual("SELECT Students.Firstname, Faculties.Name FROM Students RIGHT JOIN Faculties ON Students.Faculty_Id = Faculties.Id", cc.ExpressionValue);
        }
コード例 #15
0
        public AuditQuery(IQueryable <AuditEntity> baseQuery, ICriteriaBuilder <AuditEntity> criteriaBuilder)
        {
            this.criteriaBuilder = criteriaBuilder ?? throw new ArgumentNullException(nameof(criteriaBuilder));

            // Transforms inputs into upper case to
            criteriaBuilder
            .AddStringTransform(nameof(AuditEntity.NormalisedAction), i => i.ToUpperInvariant())
            .AddStringTransform(nameof(AuditEntity.NormalisedSubject), i => i.ToUpperInvariant())
            .AddStringTransform(nameof(AuditEntity.NormalisedResource), i => i.ToUpperInvariant())
            .AddStringTransform(nameof(AuditEntity.NormalisedSource), i => i.ToUpperInvariant());

            Query = baseQuery ?? throw new ArgumentNullException(nameof(baseQuery));
        }
コード例 #16
0
        /// <summary>
        ///     Creates a value query selection.
        /// </summary>
        /// <param name="query">
        ///     The query.
        /// </param>
        /// <typeparam name="TSource">
        ///     The <see cref="System.Type" /> of the source entity.
        /// </typeparam>
        /// <typeparam name="TDestination">
        ///     The <see cref="System.Type" /> of the result.
        /// </typeparam>
        /// <returns>
        ///     An action to retrieve the selected value.
        /// </returns>
        public static Func <TDestination> SelectValue <TSource, TDestination>(IQueryableFlowQuery query)
            where TSource : class
        {
            ICriteriaBuilder criteriaBuilder = GetCriteriaBuilder(query);

            ICriteria criteria = criteriaBuilder.Build <TSource, TDestination>(query);

            if (query.IsDelayed)
            {
                IFutureValue <TDestination> value = criteria.FutureValue <TDestination>();

                return(() => value.Value);
            }

            return(criteria.UniqueResult <TDestination>);
        }
コード例 #17
0
        public void Or()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();

            ICriteriaQuery cc = cb.CreateQuery();

            IRoot r = cc.From("Students");

            IPredicate left = cb.Equal(r.Get("Name"), cb.Literal("'Jonas'"));

            IPredicate right = cb.Equal(r.Get("Faculty_Id"), cb.Literal("3"));

            IExpression expr = cb.Or(left, right);

            Assert.AreEqual("Students.Name = 'Jonas' OR Students.Faculty_Id = 3", expr.ExpressionValue);
        }
コード例 #18
0
 /// <summary>
 /// Initializes static members of the <see cref="FlowQueryOptions"/> class.
 /// </summary>
 static FlowQueryOptions()
 {
     DefaultBuilder = new CriteriaBuilder();
 }
コード例 #19
0
        public void CreateCriteriaBuilder_Success()
        {
            ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder();

            Assert.IsNotNull(cb);
        }