Beispiel #1
0
        private string Base(Expression exp)
        {
            var cached = (CachedExpression)exp;

            if (cached.Sql != null)
            {
                return(cached.Sql);
            }
            cached.Sql = exp switch
            {
                UnionExpression e => Union(e),
                SelectExpression e => Select(e),
                WhereExpression e => Where(e),
                MaxExpression e => Max(e),
                MinExpression e => Min(e),
                SumExpression e => Sum(e),
                CountExpression e => Count(e),
                TakeExpression e => Take(e),
                SkipExpression e => Skip(e),
                FirstExpression e => First(e),
                DistinctExpression e => Distinct(e),
                OrderByExpression e => OrderBy(e),
                OrderByDescendingExpression e => OrderByDescending(e),
                _ => throw new InvalidEnumArgumentException()
            };
            return(cached.Sql);
        }
Beispiel #2
0
 private BsonValue TranslateUnion(UnionExpression node)
 {
     return(new BsonDocument("$setUnion", new BsonArray(new[]
     {
         TranslateValue(node.Source),
         TranslateValue(node.Other)
     })));
 }
        protected override Expression VisitUnion(UnionExpression unionExpression)
        {
            Check.NotNull(unionExpression, nameof(unionExpression));

            GenerateSetOperationHelper(unionExpression);

            return(unionExpression);
        }
        private UnionExpression GetUnionExpression(TypeEnum left, TypeEnum right)
        {
            ExpressionNode leftNode  = GetSet();
            ExpressionNode rightNode = GetSet();
            var            node      = new UnionExpression(leftNode, rightNode, 0, 0);

            return(node);
        }
Beispiel #5
0
        public override Statement EmitStatement(EmitMode mode)
        {
            UnionExpression expression = new UnionExpression();

            expression.LeftExpression  = (Expression)Nodes[0].EmitStatement(mode);
            expression.RightExpression = (Expression)Nodes[1].EmitStatement(mode);
            expression.Modifiers       = Modifiers;
            return(expression);
        }
Beispiel #6
0
        public Set UnionSet(UnionExpression node, List <object> parameters)
        {
            Set leftSet  = _interpreter.DispatchSet(node.Children[0], parameters);
            Set rightSet = _interpreter.DispatchSet(node.Children[1], parameters);

            HashSet <Element> set = leftSet.SetCopy;

            set.UnionWith(rightSet.Elements);
            return(new Set(set));
        }
        protected override Expression VisitUnion(UnionExpression unionExpression)
        {
            var canOptimize = _canOptimize;

            _canOptimize = false;
            var source1 = (SelectExpression)Visit(unionExpression.Source1);
            var source2 = (SelectExpression)Visit(unionExpression.Source2);

            _canOptimize = canOptimize;

            return(unionExpression.Update(source1, source2));
        }
        protected override Expression VisitUnion(UnionExpression unionExpression)
        {
            var parentSearchCondition = _isSearchCondition;

            _isSearchCondition = false;
            var source1 = (SelectExpression)Visit(unionExpression.Source1);
            var source2 = (SelectExpression)Visit(unionExpression.Source2);

            _isSearchCondition = parentSearchCondition;

            return(unionExpression.Update(source1, source2));
        }
Beispiel #9
0
        public void Expand_ReturnsListContainingFourStringBuilder_WhenUnionContainsTwoInitialIntersectionExpressionsReturningTwoStringBuildersEachOnExpand()
        {
            var intersect1 = Substitute.For<IExpression>();
            intersect1.Expand()
                      .Returns(new List<IStringBuilder> {Substitute.For<IStringBuilder>(), Substitute.For<IStringBuilder>()});
            var intersect2 = Substitute.For<IExpression>();
            intersect2.Expand()
                      .Returns(new List<IStringBuilder> {Substitute.For<IStringBuilder>(), Substitute.For<IStringBuilder>()});
            var expression = new UnionExpression(new List<IExpression>{intersect1, intersect2}, _random);

            var result = expression.Expand();
            
            Assert.AreEqual(4, result.Count);
        }
        protected virtual void GenerateSetOperation(SetOperationBase setOperation)
        {
            string getSetOperation() => setOperation switch
            {
                ExceptExpression _ => "EXCEPT",
                IntersectExpression _ => "INTERSECT",
                UnionExpression _ => "UNION",
                                 _ => throw new InvalidOperationException("Unknown SetOperationType."),
            };

            GenerateSetOperationOperand(setOperation, setOperation.Source1);
            _relationalCommandBuilder.AppendLine();
            _relationalCommandBuilder.AppendLine($"{getSetOperation()}{(setOperation.IsDistinct ? "" : " ALL")}");
            GenerateSetOperationOperand(setOperation, setOperation.Source2);
        }
        public void UnionSet_SetsWithVaryingNumberOfElementIndices_(Set left, Set right, Set expected)
        {
            IInterpreterSet parent           = Substitute.For <IInterpreterSet>();
            SetHelper       setHelper        = SetUpHelper(parent);
            SetExpression   leftExpr         = new SetExpression(null, null, null, 0, 0);
            SetExpression   rightExpr        = new SetExpression(null, null, null, 0, 0);
            UnionExpression intersectionExpr = new UnionExpression(leftExpr, rightExpr, 0, 0);

            parent.DispatchSet(leftExpr, Arg.Any <List <object> >()).Returns(left);
            parent.DispatchSet(rightExpr, Arg.Any <List <object> >()).Returns(right);

            Set result = setHelper.UnionSet(intersectionExpr, new List <object>());

            result.Should().BeEquivalentTo(expected);
        }
Beispiel #12
0
 public Set DispatchSet(ExpressionNode node, List <Object> parameters)
 {
     return(node switch
     {
         SetExpression e => _setHelper.SetExpression(e, parameters),
         UnionExpression e => _setHelper.UnionSet(e, parameters),
         IntersectionExpression e => _setHelper.IntersectionSet(e, parameters),
         SubtractionExpression e => _setHelper.SubtractionSet(e, parameters),
         IdentifierExpression e => _genericHelper.Identifier <Set>(e, parameters),
         FunctionCallExpression e => _genericHelper.FunctionCall <Set>(e, parameters),
         VerticesGraphField e => _setHelper.VerticesField(e, parameters),
         EdgesGraphField e => _setHelper.EdgesField(e, parameters),
         EmptySetLiteralExpression e => _setHelper.EmptySetLiteral(e, parameters),
         _ => throw new UnimplementedInterpreterException(node, "DispatctSet")
     });
Beispiel #13
0
        public void Clone_ReturnsNewConcatenationInstanceWithSameValues()
        {
            var expression = Substitute.For<IExpression>();
            var union = new UnionExpression(new List<IExpression>{expression},  _random)
            {
                RepeatRange = new IntegerInterval()
            };
            union.RepeatRange.TrySetValue(1, 3);

            var result = union.Clone();
            
            Assert.AreNotEqual(union, result);
            Assert.AreEqual(union.RepeatRange.Start, result.RepeatRange.Start);
            Assert.AreEqual(union.RepeatRange.End, result.RepeatRange.End);
            expression.Received(1).Clone();
        }
        protected virtual void GenerateSetOperation([NotNull] SetOperationBase setOperation)
        {
            Check.NotNull(setOperation, nameof(setOperation));

            string getSetOperation() => setOperation switch
            {
                ExceptExpression _ => "EXCEPT",
                IntersectExpression _ => "INTERSECT",
                UnionExpression _ => "UNION",
                                 _ => throw new InvalidOperationException(CoreStrings.UnknownEntity("SetOperationType")),
            };

            GenerateSetOperationOperand(setOperation, setOperation.Source1);
            _relationalCommandBuilder.AppendLine();
            _relationalCommandBuilder.AppendLine($"{getSetOperation()}{(setOperation.IsDistinct ? "" : " ALL")}");
            GenerateSetOperationOperand(setOperation, setOperation.Source2);
        }
        protected override Expression VisitUnion(UnionExpression unionExpression)
        {
            GenerateSetOperationHelper(unionExpression);

            return(unionExpression);
        }
 protected abstract Expression VisitUnion(UnionExpression unionExpression);
Beispiel #17
0
 private static string Union(UnionExpression exp) => $"SELECT {PropertiesSerializer.ColumnsUnion(exp.EntityType,"this")} FROM [{exp.EntityType.Name}] AS this {PropertiesSerializer.LeftJoinsUnion(exp.EntityType,"this")}";
 protected override Expression VisitUnion(UnionExpression x)
 {
     return(x?.Update(x.Source1.VisitNode(this), x.Source2.VisitNode(this)));
 }
Beispiel #19
0
 /// <summary>
 ///     Visits the children of the union expression.
 /// </summary>
 /// <param name="unionExpression"> The expression to visit. </param>
 /// <returns> The modified expression, if it or any subexpression was modified; otherwise, returns the original expression. </returns>
 protected abstract Expression VisitUnion([NotNull] UnionExpression unionExpression);
Beispiel #20
0
 protected override Expression VisitUnion(UnionExpression unionExpression)
 {
     throw new NotImplementedException();
 }