Пример #1
0
        public static QsiExpressionNode VisitColumnCondition(ColumnConditionContext context)
        {
            QsiExpressionNode node;

            var leftNode = VisitCident(context.l);

            if (context.element != null || context.field != null)
            {
                var memberAccessNode = new QsiMemberAccessExpressionNode();

                memberAccessNode.Target.SetValue(leftNode);

                if (context.element != null)
                {
                    var indexerNode = new CqlIndexerExpressionNode();
                    indexerNode.Indexer.SetValue(VisitTerm(context.element));
                    memberAccessNode.Member.SetValue(indexerNode);
                }
                else
                {
                    memberAccessNode.Member.SetValue(new QsiFieldExpressionNode
                    {
                        Identifier = new QsiQualifiedIdentifier(context.field.id)
                    });
                }

                leftNode = memberAccessNode;
            }

            if (context.op != null)
            {
                var binaryNode = new QsiBinaryExpressionNode
                {
                    Operator = context.op.GetText()
                };

                binaryNode.Left.SetValue(leftNode);
                binaryNode.Right.SetValue(VisitTerm(context.r1));

                node = binaryNode;
            }
            else
            {
                var invokeNode = new QsiInvokeExpressionNode();

                invokeNode.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.In));
                invokeNode.Parameters.Add(leftNode);
                invokeNode.Parameters.Add(VisitSingleColumnInValues(context.r2));

                node = invokeNode;
            }

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Пример #2
0
        public static QsiSetColumnExpressionNode VisitCollectionColumnOp(CollectionColumnOpContext context)
        {
            var node = new CqlSetColumnExpressionNode
            {
                Operator = context.op
            };

            var memberAccessNode = new QsiMemberAccessExpressionNode();
            var indexerNode      = new CqlIndexerExpressionNode();

            indexerNode.Indexer.SetValue(VisitTerm(context.k));
            memberAccessNode.Target.SetValue(VisitCident(context.l));
            memberAccessNode.Member.SetValue(indexerNode);

            node.TargetExpression.SetValue(memberAccessNode);
            node.Value.SetValue(VisitTerm(context.r));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Пример #3
0
        public static QsiExpressionNode VisitLogicalExpr2(LogicalExpr2Context context)
        {
            var node = new QsiBinaryExpressionNode
            {
                Operator = context.op.GetText()
            };

            var leftNode    = new QsiMemberAccessExpressionNode();
            var indexerNode = new CqlIndexerExpressionNode();

            indexerNode.Indexer.SetValue(VisitTerm(context.key));

            leftNode.Target.SetValue(VisitCident(context.l));
            leftNode.Member.SetValue(indexerNode);

            node.Left.SetValue(leftNode);
            node.Right.SetValue(VisitTerm(context.r));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Пример #4
0
        public static QsiExpressionNode VisitCollectionSubSelection(CollectionSubSelectionContext context)
        {
            QsiExpressionNode node;

            var term1 = context.t1 != null?VisitTerm(context.t1) : null;

            var term2 = context.t2 != null?VisitTerm(context.t2) : null;

            if (context.range)
            {
                var rangeNode = new CqlRangeExpressionNode();

                if (term1 != null)
                {
                    rangeNode.Start.SetValue(term1);
                }

                if (term2 != null)
                {
                    rangeNode.End.SetValue(term2);
                }

                node = rangeNode;
            }
            else
            {
                var indexerNode = new CqlIndexerExpressionNode();

                indexerNode.Indexer.SetValue(term1);
                node = indexerNode;
            }

            CqlTree.PutContextSpan(node, context);

            return(node);
        }