@@ -27,6 +27,7 @@ package sql
27
27
import (
28
28
"context"
29
29
"fmt"
30
+ "strings"
30
31
"time"
31
32
32
33
"go.temporal.io/api/common/v1"
@@ -199,13 +200,11 @@ func (s *VisibilityStore) ListOpenWorkflowExecutions(
199
200
Namespace : request .Namespace ,
200
201
PageSize : request .PageSize ,
201
202
NextPageToken : request .NextPageToken ,
202
- Query : fmt .Sprintf (
203
- "%s = %d AND %s BETWEEN '%s' AND '%s'" ,
204
- searchattribute .ExecutionStatus ,
205
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
206
- searchattribute .StartTime ,
207
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
208
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
203
+ Query : s .buildQueryStringFromListRequest (
204
+ request ,
205
+ enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ,
206
+ "" ,
207
+ "" ,
209
208
),
210
209
},
211
210
)
@@ -222,13 +221,11 @@ func (s *VisibilityStore) ListClosedWorkflowExecutions(
222
221
Namespace : request .Namespace ,
223
222
PageSize : request .PageSize ,
224
223
NextPageToken : request .NextPageToken ,
225
- Query : fmt .Sprintf (
226
- "%s != %d AND %s BETWEEN '%s' AND '%s'" ,
227
- searchattribute .ExecutionStatus ,
228
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
229
- searchattribute .CloseTime ,
230
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
231
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
224
+ Query : s .buildQueryStringFromListRequest (
225
+ request ,
226
+ enumspb .WORKFLOW_EXECUTION_STATUS_UNSPECIFIED ,
227
+ "" ,
228
+ "" ,
232
229
),
233
230
},
234
231
)
@@ -245,15 +242,11 @@ func (s *VisibilityStore) ListOpenWorkflowExecutionsByType(
245
242
Namespace : request .Namespace ,
246
243
PageSize : request .PageSize ,
247
244
NextPageToken : request .NextPageToken ,
248
- Query : fmt .Sprintf (
249
- "%s = %d AND %s = '%s' AND %s BETWEEN '%s' AND '%s'" ,
250
- searchattribute .ExecutionStatus ,
251
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
252
- searchattribute .WorkflowType ,
245
+ Query : s .buildQueryStringFromListRequest (
246
+ request .ListWorkflowExecutionsRequest ,
247
+ enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ,
248
+ "" ,
253
249
request .WorkflowTypeName ,
254
- searchattribute .StartTime ,
255
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
256
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
257
250
),
258
251
},
259
252
)
@@ -270,15 +263,11 @@ func (s *VisibilityStore) ListClosedWorkflowExecutionsByType(
270
263
Namespace : request .Namespace ,
271
264
PageSize : request .PageSize ,
272
265
NextPageToken : request .NextPageToken ,
273
- Query : fmt .Sprintf (
274
- "%s != %d AND %s = '%s' AND %s BETWEEN '%s' AND '%s'" ,
275
- searchattribute .ExecutionStatus ,
276
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
277
- searchattribute .WorkflowType ,
266
+ Query : s .buildQueryStringFromListRequest (
267
+ request .ListWorkflowExecutionsRequest ,
268
+ enumspb .WORKFLOW_EXECUTION_STATUS_UNSPECIFIED ,
269
+ "" ,
278
270
request .WorkflowTypeName ,
279
- searchattribute .CloseTime ,
280
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
281
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
282
271
),
283
272
},
284
273
)
@@ -295,15 +284,11 @@ func (s *VisibilityStore) ListOpenWorkflowExecutionsByWorkflowID(
295
284
Namespace : request .Namespace ,
296
285
PageSize : request .PageSize ,
297
286
NextPageToken : request .NextPageToken ,
298
- Query : fmt .Sprintf (
299
- "%s = %d AND %s = '%s' AND %s BETWEEN '%s' AND '%s'" ,
300
- searchattribute .ExecutionStatus ,
301
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
302
- searchattribute .WorkflowID ,
287
+ Query : s .buildQueryStringFromListRequest (
288
+ request .ListWorkflowExecutionsRequest ,
289
+ enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ,
303
290
request .WorkflowID ,
304
- searchattribute .StartTime ,
305
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
306
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
291
+ "" ,
307
292
),
308
293
},
309
294
)
@@ -320,15 +305,11 @@ func (s *VisibilityStore) ListClosedWorkflowExecutionsByWorkflowID(
320
305
Namespace : request .Namespace ,
321
306
PageSize : request .PageSize ,
322
307
NextPageToken : request .NextPageToken ,
323
- Query : fmt .Sprintf (
324
- "%s != %d AND %s = '%s' AND %s BETWEEN '%s' AND '%s'" ,
325
- searchattribute .ExecutionStatus ,
326
- int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
327
- searchattribute .WorkflowID ,
308
+ Query : s .buildQueryStringFromListRequest (
309
+ request .ListWorkflowExecutionsRequest ,
310
+ enumspb .WORKFLOW_EXECUTION_STATUS_UNSPECIFIED ,
328
311
request .WorkflowID ,
329
- searchattribute .CloseTime ,
330
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
331
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
312
+ "" ,
332
313
),
333
314
},
334
315
)
@@ -345,13 +326,11 @@ func (s *VisibilityStore) ListClosedWorkflowExecutionsByStatus(
345
326
Namespace : request .Namespace ,
346
327
PageSize : request .PageSize ,
347
328
NextPageToken : request .NextPageToken ,
348
- Query : fmt .Sprintf (
349
- "%s = %d AND %s BETWEEN '%s' AND '%s'" ,
350
- searchattribute .ExecutionStatus ,
351
- int32 (request .Status ),
352
- searchattribute .CloseTime ,
353
- request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
354
- request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
329
+ Query : s .buildQueryStringFromListRequest (
330
+ request .ListWorkflowExecutionsRequest ,
331
+ request .Status ,
332
+ "" ,
333
+ "" ,
355
334
),
356
335
},
357
336
)
@@ -587,3 +566,77 @@ func (s *VisibilityStore) processRowSearchAttributes(
587
566
}
588
567
return searchAttributes , nil
589
568
}
569
+
570
+ func (s * VisibilityStore ) buildQueryStringFromListRequest (
571
+ request * manager.ListWorkflowExecutionsRequest ,
572
+ executionStatus enumspb.WorkflowExecutionStatus ,
573
+ workflowID string ,
574
+ workflowTypeName string ,
575
+ ) string {
576
+ var queryTerms []string
577
+
578
+ switch executionStatus {
579
+ case enumspb .WORKFLOW_EXECUTION_STATUS_UNSPECIFIED :
580
+ queryTerms = append (
581
+ queryTerms ,
582
+ fmt .Sprintf (
583
+ "%s != %d" ,
584
+ searchattribute .ExecutionStatus ,
585
+ int32 (enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING ),
586
+ ),
587
+ )
588
+ default :
589
+ queryTerms = append (
590
+ queryTerms ,
591
+ fmt .Sprintf ("%s = %d" , searchattribute .ExecutionStatus , int32 (executionStatus )),
592
+ )
593
+ }
594
+
595
+ var timeAttr string
596
+ if executionStatus == enumspb .WORKFLOW_EXECUTION_STATUS_RUNNING {
597
+ timeAttr = searchattribute .StartTime
598
+ } else {
599
+ timeAttr = searchattribute .CloseTime
600
+ }
601
+ queryTerms = append (
602
+ queryTerms ,
603
+ fmt .Sprintf (
604
+ "%s BETWEEN '%s' AND '%s'" ,
605
+ timeAttr ,
606
+ request .EarliestStartTime .UTC ().Format (time .RFC3339Nano ),
607
+ request .LatestStartTime .UTC ().Format (time .RFC3339Nano ),
608
+ ),
609
+ )
610
+
611
+ if request .NamespaceDivision != "" {
612
+ queryTerms = append (
613
+ queryTerms ,
614
+ fmt .Sprintf (
615
+ "%s = '%s'" ,
616
+ searchattribute .TemporalNamespaceDivision ,
617
+ request .NamespaceDivision ,
618
+ ),
619
+ )
620
+ } else {
621
+ queryTerms = append (
622
+ queryTerms ,
623
+ fmt .Sprintf ("%s IS NULL" , searchattribute .TemporalNamespaceDivision ),
624
+ )
625
+ }
626
+
627
+ if workflowID != "" {
628
+ queryTerms = append (
629
+ queryTerms ,
630
+ fmt .Sprintf ("%s = '%s'" , searchattribute .WorkflowID , workflowID ),
631
+ )
632
+ }
633
+
634
+ if workflowTypeName != "" {
635
+ queryTerms = append (
636
+ queryTerms ,
637
+ fmt .Sprintf ("%s = '%s'" , searchattribute .WorkflowType , workflowTypeName ),
638
+ )
639
+ }
640
+
641
+ return strings .Join (queryTerms , " AND " )
642
+ }
0 commit comments