@@ -40,7 +40,7 @@ type CiWorkflowRepository interface {
40
40
FindByName (name string ) (* CiWorkflow , error )
41
41
42
42
FindLastTriggeredWorkflowByCiIds (pipelineId []int ) (ciWorkflow []* CiWorkflow , err error )
43
- FindLastTriggeredWorkflowByCiIdsOptimized ( pipelineId []int ) (ciWorkflow []* CiWorkflow , err error )
43
+ FindWorkflowsByCiWorkflowIds ( ciWorkflowIds []int ) (ciWorkflow []* CiWorkflow , err error )
44
44
FindLastTriggeredWorkflowByArtifactId (ciArtifactId int ) (ciWorkflow * CiWorkflow , err error )
45
45
FindAllLastTriggeredWorkflowByArtifactId (ciArtifactId []int ) (ciWorkflow []* CiWorkflow , err error )
46
46
FindAllTriggeredWorkflowCountInLast24Hour () (ciWorkflowCount int , err error )
@@ -49,6 +49,7 @@ type CiWorkflowRepository interface {
49
49
ExistsByStatus (status string ) (bool , error )
50
50
FindBuildTypeAndStatusDataOfLast1Day () ([]* BuildTypeCount , error )
51
51
FIndCiWorkflowStatusesByAppId (appId int ) ([]* CiWorkflowStatus , error )
52
+ FindCiPipelineIdsByAppId (appId int ) ([]int , error )
52
53
53
54
MigrateIsArtifactUploaded (wfId int , isArtifactUploaded bool )
54
55
MigrateCiArtifactLocation (wfId int , artifactLocation string )
@@ -291,20 +292,16 @@ func (impl *CiWorkflowRepositoryImpl) FindLastTriggeredWorkflowByCiIds(pipelineI
291
292
return ciWorkflow , err
292
293
}
293
294
294
- // FindLastTriggeredWorkflowByCiIdsOptimized uses the ci_workflow_status_latest table for better performance
295
- func (impl * CiWorkflowRepositoryImpl ) FindLastTriggeredWorkflowByCiIdsOptimized (pipelineId []int ) (ciWorkflow []* CiWorkflow , err error ) {
295
+ // FindWorkflowsByCiWorkflowIds fetches workflows by their workflow IDs (simple query)
296
+ func (impl * CiWorkflowRepositoryImpl ) FindWorkflowsByCiWorkflowIds (ciWorkflowIds []int ) (ciWorkflow []* CiWorkflow , err error ) {
297
+ if len (ciWorkflowIds ) == 0 {
298
+ return ciWorkflow , nil
299
+ }
300
+
296
301
err = impl .dbConnection .Model (& ciWorkflow ).
297
302
Column ("ci_workflow.*" , "CiPipeline" ).
298
- Join ("INNER JOIN ci_workflow_status_latest cwsl ON cwsl.ci_workflow_id = ci_workflow.id" ).
299
- Where ("cwsl.pipeline_id IN (?)" , pg .In (pipelineId )).
303
+ Where ("ci_workflow.id IN (?)" , pg .In (ciWorkflowIds )).
300
304
Select ()
301
-
302
- if err != nil {
303
- impl .logger .Errorw ("error in optimized query, falling back to old method" , "err" , err , "pipelineIds" , pipelineId )
304
- // Fallback to the old method if optimized query fails
305
- return impl .FindLastTriggeredWorkflowByCiIds (pipelineId )
306
- }
307
-
308
305
return ciWorkflow , err
309
306
}
310
307
@@ -397,6 +394,16 @@ func (impl *CiWorkflowRepositoryImpl) FIndCiWorkflowStatusesByAppId(appId int) (
397
394
return ciworkflowStatuses , err
398
395
}
399
396
397
+ // FindCiPipelineIdsByAppId gets all CI pipeline IDs for an app (simple query)
398
+ func (impl * CiWorkflowRepositoryImpl ) FindCiPipelineIdsByAppId (appId int ) ([]int , error ) {
399
+ var ciPipelineIds []int
400
+ err := impl .dbConnection .Model ((* CiPipeline )(nil )).
401
+ Column ("id" ).
402
+ Where ("app_id = ? AND deleted = false" , appId ).
403
+ Select (& ciPipelineIds )
404
+ return ciPipelineIds , err
405
+ }
406
+
400
407
func (impl * CiWorkflowRepositoryImpl ) MigrateIsArtifactUploaded (wfId int , isArtifactUploaded bool ) {
401
408
_ , err := impl .dbConnection .Model ((* CiWorkflow )(nil )).
402
409
Set ("is_artifact_uploaded = ?" , workflow .GetArtifactUploadedType (isArtifactUploaded )).
0 commit comments