(ctx context.Context, id int, req *chunk.Chunk)
| 371 | } |
| 372 | |
| 373 | func (e *ParallelNestedLoopApplyExec) fillInnerChunk(ctx context.Context, id int, req *chunk.Chunk) (err error) { |
| 374 | req.Reset() |
| 375 | for { |
| 376 | if e.innerIter[id] == nil || e.innerIter[id].Current() == e.innerIter[id].End() { |
| 377 | if e.outerRow[id] != nil && !e.hasMatch[id] { |
| 378 | e.joiners[id].OnMissMatch(e.hasNull[id], *e.outerRow[id], req) |
| 379 | } |
| 380 | var exit bool |
| 381 | e.outerRow[id], exit = e.fetchNextOuterRow(id, req) |
| 382 | if exit || req.IsFull() || e.outerRow[id] == nil { |
| 383 | return nil |
| 384 | } |
| 385 | |
| 386 | e.hasMatch[id] = false |
| 387 | e.hasNull[id] = false |
| 388 | |
| 389 | err = e.fetchAllInners(ctx, id) |
| 390 | if err != nil { |
| 391 | return err |
| 392 | } |
| 393 | e.innerIter[id] = chunk.NewIterator4List(e.innerList[id]) |
| 394 | e.innerIter[id].Begin() |
| 395 | } |
| 396 | |
| 397 | matched, isNull, err := e.joiners[id].TryToMatchInners(*e.outerRow[id], e.innerIter[id], req) |
| 398 | e.hasMatch[id] = e.hasMatch[id] || matched |
| 399 | e.hasNull[id] = e.hasNull[id] || isNull |
| 400 | |
| 401 | if err != nil || req.IsFull() { |
| 402 | return err |
| 403 | } |
| 404 | } |
| 405 | } |
no test coverage detected