protected override void ProduceBinaryQueryPlan(PlanNode left, PlanNode right) { var node = new JoinPlanNode( left, right, this, typeof(TLeft), typeof(TRight), typeof(TLeft), typeof(TKey), JoinKind.LeftAntiSemiJoin, false, null); node.AddJoinExpression("key comparer", this.keyComparer); node.AddJoinExpression("left key comparer", this.leftComparer); this.Observer.ProduceQueryPlan(node); }
protected override void ProduceBinaryQueryPlan(PlanNode left, PlanNode right) { var node = new JoinPlanNode( left, right, this, typeof(TLeft), typeof(TRight), typeof(TResult), typeof(TKey), JoinKind.StartEdgeEquijoin, false, this.errorMessages); node.AddJoinExpression("selector", this.selectorExpr); node.AddJoinExpression("key comparer", this.keyComparerExpr); this.Observer.ProduceQueryPlan(node); }
protected override void ProduceBinaryQueryPlan(PlanNode left, PlanNode right) { var node = new JoinPlanNode( left, right, this, typeof(TLeft), typeof(TRight), typeof(TResult), typeof(TKey), JoinKind.IncreasingOrderEquiJoin, false, this.errorMessages, false); node.AddJoinExpression("selector", this.selectorExpr); node.AddJoinExpression("join key order comparer", this.joinKeyOrderComparerExpression); this.Observer.ProduceQueryPlan(node); }
protected override void ProduceBinaryQueryPlan(PlanNode left, PlanNode right) { var node = new JoinPlanNode( left, right, this, typeof(TLeft), typeof(TRight), typeof(TLeft), typeof(PartitionKey <TPartitionKey>), JoinKind.FixedIntervalEquiJoin, false, null, false); node.AddJoinExpression("key comparer", this.keyComparer); node.AddJoinExpression("left key comparer", this.leftComparer); node.AddJoinExpression("right key comparer", this.rightComparer); this.Observer.ProduceQueryPlan(node); }
private BinaryPipe <TKey, TLeft, TRight, TLeft> GetPipe(IStreamObserver <TKey, TLeft> observer) { var lookupKey = CacheKey.Create(this.Properties.KeyEqualityComparer.GetEqualsExpr().ToString(), this.LeftComparer.GetEqualsExpr().ToString()); var generatedPipeType = cachedPipes.GetOrAdd(lookupKey, key => ClipJoinTemplate.Generate(this)); Func <PlanNode, PlanNode, IBinaryObserver, BinaryPlanNode> planNode = ((PlanNode left, PlanNode right, IBinaryObserver o) => { var node = new JoinPlanNode( left, right, o, typeof(TLeft), typeof(TRight), typeof(TLeft), typeof(TKey), JoinKind.Clip, true, generatedPipeType.Item2, false); node.AddJoinExpression("left comparer", this.LeftComparer.GetEqualsExpr()); node.AddJoinExpression("key comparer", this.Properties.KeyComparer.GetCompareExpr()); return(node); }); var instance = Activator.CreateInstance(generatedPipeType.Item1, this, observer, this.Properties.KeyEqualityComparer, this.LeftComparer, planNode); var returnValue = (BinaryPipe <TKey, TLeft, TRight, TLeft>)instance; return(returnValue); }
private BinaryPipe <TKey, TLeft, TRight, TResult> GetPipe(IStreamObserver <TKey, TResult> observer) { var lookupKey = CacheKey.Create(this.joinKind, this.Properties.KeyEqualityComparer.GetEqualsExpr().ExpressionToCSharp(), this.Left.Properties.PayloadEqualityComparer.GetEqualsExpr().ExpressionToCSharp(), this.Right.Properties.PayloadEqualityComparer.GetEqualsExpr().ExpressionToCSharp(), this.Selector.ExpressionToCSharp()); var generatedPipeType = cachedPipes.GetOrAdd(lookupKey, this.columnarGenerator); Func <PlanNode, PlanNode, IBinaryObserver, BinaryPlanNode> planNode = ((PlanNode left, PlanNode right, IBinaryObserver o) => { var node = new JoinPlanNode( left, right, o, typeof(TLeft), typeof(TRight), typeof(TLeft), typeof(TKey), this.joinKind, true, generatedPipeType.Item2, false); node.AddJoinExpression("key comparer", this.Properties.KeyEqualityComparer.GetEqualsExpr()); node.AddJoinExpression("left payload comparer", this.Left.Properties.PayloadEqualityComparer.GetEqualsExpr()); node.AddJoinExpression("right payload comparer", this.Right.Properties.PayloadEqualityComparer.GetEqualsExpr()); node.AddJoinExpression("left key comparer", this.Left.Properties.KeyComparer.GetCompareExpr()); node.AddJoinExpression("right key comparer", this.Right.Properties.KeyComparer.GetCompareExpr()); return(node); }); var instance = Activator.CreateInstance(generatedPipeType.Item1, this, observer, planNode); var returnValue = (BinaryPipe <TKey, TLeft, TRight, TResult>)instance; return(returnValue); }