/// <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)); }
/// <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(); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); }
/// <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>); }
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); }
/// <summary> /// Initializes static members of the <see cref="FlowQueryOptions"/> class. /// </summary> static FlowQueryOptions() { DefaultBuilder = new CriteriaBuilder(); }
public void CreateCriteriaBuilder_Success() { ICriteriaBuilder cb = EJBContainer.Instance.EntityManager.GetCriteriaBuilder(); Assert.IsNotNull(cb); }