Ejemplo n.º 1
0
        public static QsiExpressionNode VisitTupleExpr(TupleExprContext context)
        {
            QsiExpressionNode node;

            var leftNode = VisitTupleOfIdentifiers(context.l);

            if (context.tupleInMarker != null || context.literals != null || context.markers != null)
            {
                var invokeNode = new QsiInvokeExpressionNode();

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

                if (context.tupleInMarker != null)
                {
                    invokeNode.Parameters.Add(VisitBindParameter(context.tupleInMarker));
                }

                if (context.literals != null)
                {
                    invokeNode.Parameters.Add(VisitTupleOfTupleLiterals(context.literals));
                }

                if (context.markers != null)
                {
                    invokeNode.Parameters.Add(VisitTupleOfMarkersForTuples(context.markers));
                }

                node = invokeNode;
            }
            else if (context.literal != null || context.tupleMarker != null)
            {
                var binaryNode = new QsiBinaryExpressionNode
                {
                    Operator = context.op.GetText()
                };

                binaryNode.Left.SetValue(leftNode);

                if (context.literal != null)
                {
                    binaryNode.Right.SetValue(VisitTupleLiteral(context.literal));
                }

                if (context.tupleMarker != null)
                {
                    binaryNode.Right.SetValue(VisitBindParameter(context.tupleMarker));
                }

                node = binaryNode;
            }
            else
            {
                node = new CqlTupleExpressionNode();
            }

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public static QsiInvokeExpressionNode CreateInlineCast(CqlTypeExpressionNode type, QsiExpressionNode value)
        {
            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.InlineCast));
            node.Parameters.Add(value);
            node.Parameters.Add(type);

            return(node);
        }
Ejemplo n.º 4
0
        public static QsiExpressionNode VisitIsNotNulExpr(IsNotNulExprContext context)
        {
            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.IsNotNull));
            node.Parameters.Add(VisitCident(context.l));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 5
0
        public static QsiExpressionNode VisitCustomIndexExpression(CustomIndexExpressionContext context)
        {
            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.Expr));
            node.Parameters.Add(VisitIdxName(context.idxName()));
            node.Parameters.Add(VisitTerm(context.term()));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 6
0
        public static QsiExpressionNode VisitInExpr2(InExpr2Context context)
        {
            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.In));
            node.Parameters.Add(VisitCident(context.l));
            node.Parameters.Add(VisitSingleColumnInValues(context.r));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 7
0
        public static QsiExpressionNode VisitTokenExpr(TokenExprContext context)
        {
            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(CqlKnownFunction.TokenCompare));
            node.Parameters.Add(VisitTupleOfIdentifiers(context.l));
            node.Parameters.Add(TreeHelper.CreateLiteral(context.op.GetText()));
            node.Parameters.Add(VisitTerm(context.r));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 8
0
        public static QsiExpressionNode VisitContainsExpr(ContainsExprContext context)
        {
            var functionName = context.op.key ?
                               CqlKnownFunction.ContainsKey :
                               CqlKnownFunction.Contains;

            var node = new QsiInvokeExpressionNode();

            node.Member.SetValue(TreeHelper.CreateFunction(functionName));
            node.Parameters.Add(VisitCident(context.l));
            node.Parameters.Add(VisitTerm(context.r));

            CqlTree.PutContextSpan(node, context);

            return(node);
        }