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