@@ -409,10 +409,10 @@ type SelectScope struct {
409409
410410// FilesCoverageStream streams information about all the line coverage.
411411// It is expensive and better to be used for time insensitive operations.
412- func FilesCoverageStream (ctx context.Context , client spannerclient.SpannerClient , ns string , timePeriod TimePeriod ,
412+ func FilesCoverageStream (ctx context.Context , client spannerclient.SpannerClient , scope * SelectScope ,
413413) (<- chan * FileCoverageWithLineInfo , <- chan error ) {
414414 iter := client .Single ().Query (ctx ,
415- filesCoverageWithDetailsStmt (ns , "" , "" , timePeriod , true ))
415+ filesCoverageWithDetailsStmt (scope , true ))
416416 resCh := make (chan * FileCoverageWithLineInfo )
417417 errCh := make (chan error )
418418 go func () {
@@ -435,14 +435,24 @@ func FilesCoverageWithDetails(
435435 for _ , timePeriod := range scope .Periods {
436436 needLinesDetails := onlyUnique
437437 iterManager := client .Single ().Query (ctx ,
438- filesCoverageWithDetailsStmt (scope .Ns , scope .Subsystem , scope .Manager , timePeriod , needLinesDetails ))
438+ filesCoverageWithDetailsStmt (& SelectScope {
439+ Ns : scope .Ns ,
440+ Subsystem : scope .Subsystem ,
441+ Manager : scope .Manager ,
442+ Periods : []TimePeriod {timePeriod },
443+ }, needLinesDetails ))
439444 defer iterManager .Stop ()
440445
441446 var err error
442447 var periodRes []* FileCoverageWithDetails
443448 if onlyUnique {
444449 iterAll := client .Single ().Query (ctx ,
445- filesCoverageWithDetailsStmt (scope .Ns , scope .Subsystem , "" , timePeriod , needLinesDetails ))
450+ filesCoverageWithDetailsStmt (& SelectScope {
451+ Ns : scope .Ns ,
452+ Subsystem : scope .Subsystem ,
453+ Manager : "" ,
454+ Periods : []TimePeriod {timePeriod },
455+ }, needLinesDetails ))
446456 defer iterAll .Stop ()
447457 periodRes , err = readCoverageUniq (iterAll , iterManager )
448458 if err != nil {
@@ -462,8 +472,8 @@ func FilesCoverageWithDetails(
462472 return res , nil
463473}
464474
465- func filesCoverageWithDetailsStmt (ns , subsystem , manager string , timePeriod TimePeriod , withLines bool ,
466- ) spanner. Statement {
475+ func filesCoverageWithDetailsStmt (scope * SelectScope , withLines bool ) spanner. Statement {
476+ manager := scope . Manager
467477 if manager == "" {
468478 manager = "*"
469479 }
@@ -481,15 +491,15 @@ from merge_history
481491where
482492 merge_history.namespace=$1 and dateto=$2 and duration=$3 and manager=$4` ,
483493 Params : map [string ]interface {}{
484- "p1" : ns ,
485- "p2" : timePeriod .DateTo ,
486- "p3" : timePeriod .Days ,
494+ "p1" : scope . Ns ,
495+ "p2" : scope . Periods [ 0 ] .DateTo ,
496+ "p3" : scope . Periods [ 0 ] .Days ,
487497 "p4" : manager ,
488498 },
489499 }
490- if subsystem != "" {
500+ if scope . Subsystem != "" {
491501 stmt .SQL += " and $5=ANY(subsystems)"
492- stmt .Params ["p5" ] = subsystem
502+ stmt .Params ["p5" ] = scope . Subsystem
493503 }
494504 stmt .SQL += "\n order by files.filepath"
495505 return stmt
0 commit comments