예제 #1
0
 public static void AcceptProjection(QNode node, IQNodeVisitor visitor)
 {
     node.Left.Accept(visitor);
     visitor.EnterContext(node);
     visitor.VisitProjection(node);
     visitor.LeaveContext(node);
 }
예제 #2
0
 public static void AcceptMethod(QNode node, IQNodeVisitor visitor)
 {
     node.Left.Accept(visitor);
     visitor.EnterContext(node);
     node.Right.Accept(visitor);
     visitor.VisitMethod(node);
     visitor.LeaveContext(node);
 }
예제 #3
0
        private static void AcceptBinary(QNode node, IQNodeVisitor visitor)
        {
            node.Left.Accept(visitor);
            if (node.Right.Type == NodeType.Constant)
            {
                visitor.SetConstantConverter(node);
            }


            node.Right.Accept(visitor);
            visitor.VisitBinary(node);
        }
예제 #4
0
        public static void Accept(this QNode node, IQNodeVisitor visitor)
        {
            if (node.Type == NodeType.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (node.Type == NodeType.Member)
            {
                AcceptMember(node, visitor);
            }

            if (node.Type == NodeType.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (node.Type == NodeType.Method)
            {
                MethodType method;
                if (node.Value is long)
                {
                    method = (MethodType)Convert.ToInt16(node.Value);
                }
                else
                {
                    Enum.TryParse(Convert.ToString(node.Value), out method);
                }
                if (method == MethodType.Select)
                {
                    AcceptProjection(node, visitor);
                }
                else
                {
                    AcceptMethod(node, visitor);
                }
            }

            if (node.Type == NodeType.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
예제 #5
0
        public static void Accept(this QNode node, IQNodeVisitor visitor)
        {
            var group = EnumResolver.ResolveNodeGroup(node.Type);

            if (group == NodeGroup.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (group == NodeGroup.Member)
            {
                AcceptMember(node, visitor);
            }

            if (group == NodeGroup.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (group == NodeGroup.Method)
            {
                var method = EnumResolver.ResolveNodeType(node.Type);

                if (method == NodeType.Select)
                {
                    AcceptProjection(node, visitor);
                }
                else if (node.Argument == null)
                {
                    AcceptEmptyMethod(node, visitor);
                }
                else
                {
                    AcceptMethod(node, visitor);
                }
            }

            if (group == NodeGroup.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
예제 #6
0
        public static void Accept(this QNode node, IQNodeVisitor visitor)
        {
            if (node.Type == NodeType.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (node.Type == NodeType.Member)
            {
                AcceptMember(node, visitor);
            }

            if (node.Type == NodeType.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (node.Type == NodeType.Method)
            {
                var method = EnumResolver.ResolveMethod(node.Value);

                if (method == MethodType.Select)
                {
                    AcceptProjection(node, visitor);
                }
                else if (node.Right == null)
                {
                    AcceptEmptyMethod(node, visitor);
                }
                else
                {
                    AcceptMethod(node, visitor);
                }
            }

            if (node.Type == NodeType.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
예제 #7
0
 private static void AcceptConstant(QNode node, IQNodeVisitor visitor)
 {
     visitor.VisitConstant(node);
 }
예제 #8
0
 public static void AcceptProjection(QNode node, IQNodeVisitor visitor)
 {
     node.Operand.Accept(visitor);
     visitor.VisitProjection(node);
 }
예제 #9
0
 public static void AcceptEmptyMethod(QNode node, IQNodeVisitor visitor)
 {
     node.Operand.Accept(visitor);
     visitor.VisitEmptyMethod(node);
 }
예제 #10
0
 public static void AcceptMethod(QNode node, IQNodeVisitor visitor)
 {
     node.Operand.Accept(visitor);
     node.Argument.Accept(visitor);
     visitor.VisitMethod(node);
 }
예제 #11
0
 private static void AcceptQuerable(QNode node, IQNodeVisitor visitor)
 {
 }
예제 #12
0
 private static void AcceptMember(QNode node, IQNodeVisitor visitor)
 {
     visitor.VisitMember(node);
 }
예제 #13
0
 private static void AcceptBinary(QNode node, IQNodeVisitor visitor)
 {
     node.Operand.Accept(visitor);
     node.Argument.Accept(visitor);
     visitor.VisitBinary(node);
 }
예제 #14
0
 private static void AcceptMember(QNode node, IQNodeVisitor visitor)
 {
     //node.Left.Accept(visitor);
     visitor.VisitMember(node);
 }
예제 #15
0
 private static void AcceptBinary(QNode node, IQNodeVisitor visitor)
 {
     node.Left.Accept(visitor);
     node.Right.Accept(visitor);
     visitor.VisitBinary(node);
 }