public static QsiExpressionNode VisitTermMultiplication(TermMultiplicationContext context) { MultiplicationOperatorContext[] operators = context.multiplicationOperator(); var left = VisitTermGroup(context.left); if (ListUtility.IsNullOrEmpty(operators)) { return(left); } TermGroupContext[] rights = context.termGroup(); for (int i = 0; i < operators.Length; i++) { var node = new QsiBinaryExpressionNode { Operator = operators[i].GetText() }; node.Left.SetValue(left); node.Right.SetValue(VisitTermGroup(rights[i + 1])); left = node; var leftSpan = CqlTree.Span[node.Left.Value]; var rightSpan = CqlTree.Span[node.Right.Value]; CqlTree.Span[node] = new Range(leftSpan.Start, rightSpan.End); } return(left); }
public static QsiExpressionNode CreateChainedBinaryExpression <TContext>( string @operator, IEnumerable <TContext> contexts, Func <TContext, QsiExpressionNode> visitor, Action <TContext, QsiExpressionNode> callback = null) { QsiExpressionNode node = null; foreach (var context in contexts) { var elementNode = visitor(context); if (node == null) { node = elementNode; } else { var binaryNode = new QsiBinaryExpressionNode { Operator = @operator }; binaryNode.Left.SetValue(node); binaryNode.Right.SetValue(elementNode); node = binaryNode; } callback?.Invoke(context, node); } return(node); }
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); }
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 QsiExpressionNode VisitNormalColumnOperation2(NormalColumnOperation2Context context) { var node = new QsiBinaryExpressionNode(); node.Left.SetValue(VisitCident(context.l)); node.Operator = context.sig.Text; node.Right.SetValue(VisitTerm(context.r)); CqlTree.PutContextSpan(node, context); return(node); }
public static QsiExpressionNode VisitLogicalExpr1(LogicalExpr1Context context) { var node = new QsiBinaryExpressionNode { Operator = context.op.GetText() }; node.Left.SetValue(VisitCident(context.l)); node.Right.SetValue(VisitTerm(context.r)); CqlTree.PutContextSpan(node, context); return(node); }
public static QsiExpressionNode VisitNormalColumnOperation1(NormalColumnOperation1Context context) { if (context.r == null) { return(VisitTerm(context.l)); } var node = new QsiBinaryExpressionNode(); node.Left.SetValue(VisitTerm(context.l)); node.Operator = "+"; node.Right.SetValue(VisitCident(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); }