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); }
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); }
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); }
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); }