Exemple #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);
        }
Exemple #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);
        }
Exemple #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);
        }
Exemple #4
0
        public static QsiSetColumnExpressionNode VisitFieldColumnOp(FieldColumnOpContext context)
        {
            var node = new CqlSetColumnExpressionNode
            {
                Operator = context.op
            };

            var memberAccessNode = new QsiMemberAccessExpressionNode();

            memberAccessNode.Target.SetValue(VisitCident(context.l));

            memberAccessNode.Member.SetValue(new QsiFieldExpressionNode
            {
                Identifier = new QsiQualifiedIdentifier(context.field.id)
            });

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

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Exemple #5
0
        public static QsiExpressionNode VisitSelectorModifier(QsiExpressionNode target, SelectorModifierContext context)
        {
            QsiExpressionNode       access1;
            SelectorModifierContext access2;

            switch (context)
            {
            case FieldAccessContext fieldAccess:
                access1 = VisitFieldSelectorModifier(fieldAccess.fieldSelectorModifier());
                access2 = fieldAccess.selectorModifier();
                break;

            case RangeAccessContext rangeAccess:
                access1 = VisitCollectionSubSelection(rangeAccess.collectionSubSelection());
                access2 = rangeAccess.selectorModifier();
                break;

            default:
                throw TreeHelper.NotSupportedTree(context);
            }

            var node = new QsiMemberAccessExpressionNode();

            node.Target.SetValue(target);
            node.Member.SetValue(access1);

            if (access2 == null)
            {
                return(node);
            }

            var memberAccessNode = VisitSelectorModifier(node, access2);

            CqlTree.PutContextSpan(memberAccessNode, context);

            return(memberAccessNode);
        }