Browse Source

HPCC-24531 Ensure graphs are generated in wfid order

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 4 years ago
parent
commit
cfefe72590
1 changed files with 10 additions and 0 deletions
  1. 10 0
      ecl/hqlcpp/hqlttcpp.cpp

+ 10 - 0
ecl/hqlcpp/hqlttcpp.cpp

@@ -5937,6 +5937,13 @@ static IHqlExpression * createResultsAttribute(const HqlExprArray & results)
 
 //------------------------------------------------------------------------
 
+int compareWorkflowItems(CInterface * const * _left, CInterface * const * _right)
+{
+    WorkflowItem * left = static_cast<WorkflowItem *>(*_left);
+    WorkflowItem * right = static_cast<WorkflowItem *>(*_right);
+    return (int)(left->queryWfid() - right->queryWfid());
+}
+
 static HqlTransformerInfo workflowTransformerInfo("WorkflowTransformer");
 WorkflowTransformer::WorkflowTransformer(IWorkUnit * _wu, HqlCppTranslator & _translator)
 : NewHqlTransformer(workflowTransformerInfo), wu(_wu), translator(_translator), wfidCount(0)
@@ -7319,6 +7326,9 @@ void WorkflowTransformer::transformRoot(const HqlExprArray & in, WorkflowArray &
 
     percolateScheduledIds();
 
+    //Sort by workflow id, so that the graphs are generated in workflow id order - and therefore sorted correctly
+    //to avoid the need for extra processing when iterating over the graph information
+    workflow.sort(compareWorkflowItems);
     appendArray(out, workflow);
     appendArray(out, functions);
     translator.setMaxWfid(wfidCount);