private static void CreateBufferedValue(ExpressionNode expression, ICollection <ComputedValueDefinition> computedColumnList, ICollection <RowBufferEntry> columnList, IEnumerable <ComputedValueDefinition> alreadyComputedBufferedValues) { if (alreadyComputedBufferedValues != null) { expression = ReplaceAlreadyComputedSubsequences(expression, alreadyComputedBufferedValues); } foreach (ComputedValueDefinition computedBufferedValue in computedColumnList) { if (expression.IsStructuralEqualTo(computedBufferedValue.Expression)) { columnList.Add(computedBufferedValue.Target); return; } } RowBufferEntryExpression rowBufferExpression = expression as RowBufferEntryExpression; if (rowBufferExpression != null) { columnList.Add(rowBufferExpression.RowBufferEntry); } else { RowBufferEntry rowBufferEntry = new RowBufferEntry(expression.ExpressionType); columnList.Add(rowBufferEntry); ComputedValueDefinition computedValue = new ComputedValueDefinition(); computedValue.Target = rowBufferEntry; computedValue.Expression = expression; computedColumnList.Add(computedValue); } }
public static int FindStructuralEquivalentExpression(ExpressionNode[] expressions, ExpressionNode expr) { for (int i = 0; i < expressions.Length; i++) { ExpressionNode node = expressions[i]; if (node.IsStructuralEqualTo(expr)) { return(i); } } return(-1); }
public override AstNode Visit(AstNode node) { ExpressionNode expression = node as ExpressionNode; if (expression != null) { foreach (ComputedValueDefinition computedBufferedValue in _computedValues) { if (expression.IsStructuralEqualTo(computedBufferedValue.Expression)) { RowBufferEntryExpression rowBufferExpression = new RowBufferEntryExpression(); rowBufferExpression.RowBufferEntry = computedBufferedValue.Target; return(rowBufferExpression); } } } return(base.Visit(node)); }
private static void CreateBufferedValue(ExpressionNode expression, ICollection<ComputedValueDefinition> computedColumnList, ICollection<RowBufferEntry> columnList, IEnumerable<ComputedValueDefinition> alreadyComputedBufferedValues) { if (alreadyComputedBufferedValues != null) expression = ReplaceAlreadyComputedSubsequences(expression, alreadyComputedBufferedValues); foreach (ComputedValueDefinition computedBufferedValue in computedColumnList) { if (expression.IsStructuralEqualTo(computedBufferedValue.Expression)) { columnList.Add(computedBufferedValue.Target); return; } } RowBufferEntryExpression rowBufferExpression = expression as RowBufferEntryExpression; if (rowBufferExpression != null) { columnList.Add(rowBufferExpression.RowBufferEntry); } else { RowBufferEntry rowBufferEntry = new RowBufferEntry(expression.ExpressionType); columnList.Add(rowBufferEntry); ComputedValueDefinition computedValue = new ComputedValueDefinition(); computedValue.Target = rowBufferEntry; computedValue.Expression = expression; computedColumnList.Add(computedValue); } }