private static Expression HandleConcat( EntityQueryModelVisitor entityQueryModelVisitor, ConcatResultOperator concatResultOperator) => HandleSetOperation( entityQueryModelVisitor, concatResultOperator.Source2, entityQueryModelVisitor.LinqOperatorProvider.Concat);
public void GetOutputDataInfo_AssignableSource2() { var resultOperator = new ConcatResultOperator("i", typeof(object), Expression.Constant(new[] { "string" })); var cookExpression = Expression.Constant(null, typeof(Cook)); var input = new StreamedSequenceInfo(typeof(Cook[]), cookExpression); var result = resultOperator.GetOutputDataInfo(input); Assert.That(result, Is.InstanceOf(typeof(StreamedSequenceInfo))); Assert.That(result.DataType, Is.SameAs(typeof(IQueryable <object>))); }
public void GetConstantSource2_NoConstantExpression () { var resultOperator = new ConcatResultOperator ("i", typeof (string), Expression.Parameter (typeof (IEnumerable<string>), "ss")); Assert.That ( () => resultOperator.GetConstantSource2(), Throws.ArgumentException .With.Message.EqualTo ( #if !NET_3_5 "The source2 expression ('ss') is no ConstantExpression, it is a TypedParameterExpression.\r\nParameter name: expression" #else "The source2 expression ('ss') is no ConstantExpression, it is a ParameterExpression.\r\nParameter name: expression" #endif )); }
public void TransformExpressions() { var oldExpression = ExpressionHelper.CreateExpression(); var newExpression = ExpressionHelper.CreateExpression(); var resultOperator = new ConcatResultOperator("i", typeof(int), oldExpression); resultOperator.TransformExpressions(ex => { Assert.That(ex, Is.SameAs(oldExpression)); return(newExpression); }); Assert.That(resultOperator.Source2, Is.SameAs(newExpression)); }
public void GetConstantSource2_NoConstantExpression() { var resultOperator = new ConcatResultOperator("i", typeof(string), Expression.Parameter(typeof(IEnumerable <string>), "ss")); Assert.That( () => resultOperator.GetConstantSource2(), Throws.ArgumentException .With.Message.EqualTo( #if !NET_3_5 "The source2 expression ('ss') is no ConstantExpression, it is a TypedParameterExpression.\r\nParameter name: expression" #else "The source2 expression ('ss') is no ConstantExpression, it is a ParameterExpression.\r\nParameter name: expression" #endif )); }
/// <summary> /// Given a query model, look at all the result operators for Concat operators, and split everything up /// into separate query models. /// </summary> /// <param name="queryModel"></param> /// <returns></returns> private static IEnumerable <QueryModel> SplitQMByConcatResultOperator(QueryModel queryModel) { // If there are no concat result operators in the list, then we just bail quickly. // This is to specifically avoid the Clone operation unless we actually need it. if (!queryModel.ResultOperators.Where(r => r is ConcatResultOperator).Any()) { return(new QueryModel[] { queryModel }); } // Now, look for concat operators in the list. Pop them out when we find them. ConcatResultOperator ro = null; var qm = queryModel.Clone(); var lst = new List <QueryModel>(); while ((ro = qm.ResultOperators.Reverse().Where(r => r is ConcatResultOperator).Cast <ConcatResultOperator>().FirstOrDefault()) != null) { // We are going to make q QueryModel here that uses the second source in the Concat operator. // This means everything that comes before this query can be ignored - and we want this "source" to // become the query from clause. Note this also means messing with the "select" clause to make sure it // isn't doing anything special (select clause comes before result operators, semantically). QueryModel newQM = NewQMFromOldWithLifting(ro.Source2, qm.MainFromClause.ItemType, qm.MainFromClause.ItemName); var cc = new CloneContext(new QuerySourceMapping()); var indexToRemoveTo = qm.ResultOperators.IndexOf(ro); for (int i = indexToRemoveTo + 1; i < qm.ResultOperators.Count; i++) { newQM.ResultOperators.Add(qm.ResultOperators[i].Clone(cc)); } lst.Add(newQM.Flatten()); // Ok - we've taken one branch. We need to remove it from the list of things to look at, and work on the // next one. qm.ResultOperators.Remove(ro); } // The QueryModel left over needs to be added to the list. lst.Add(qm.Flatten()); return(lst); }
public void SetUp () { _source2 = Expression.Constant (new[] { 2 }); _resultOperator = new ConcatResultOperator ("itemName", typeof (int), _source2); }
public void TransformExpressions () { var oldExpression = ExpressionHelper.CreateExpression (); var newExpression = ExpressionHelper.CreateExpression (); var resultOperator = new ConcatResultOperator ("i", typeof (int), oldExpression); resultOperator.TransformExpressions (ex => { Assert.That (ex, Is.SameAs (oldExpression)); return newExpression; }); Assert.That (resultOperator.Source2, Is.SameAs (newExpression)); }
public void GetOutputDataInfo_AssignableSource2 () { var resultOperator = new ConcatResultOperator ("i", typeof (object), Expression.Constant (new[] { "string" })); var cookExpression = Expression.Constant (null, typeof (Cook)); var input = new StreamedSequenceInfo (typeof (Cook[]), cookExpression); var result = resultOperator.GetOutputDataInfo (input); Assert.That (result, Is.InstanceOf (typeof (StreamedSequenceInfo))); Assert.That (result.DataType, Is.SameAs (typeof (IQueryable<object>))); }
public void GetConstantSource2_NoConstantExpression() { var resultOperator = new ConcatResultOperator("i", typeof(string), Expression.Parameter(typeof(IEnumerable <string>), "ss")); resultOperator.GetConstantSource2(); }
public void SetUp() { _source2 = Expression.Constant(new[] { 2 }); _resultOperator = new ConcatResultOperator("itemName", typeof(int), _source2); }