Browse Source

HPCC-10265 Fix problems processing action dependencies

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 11 years ago
parent
commit
59cdd287a1
2 changed files with 20 additions and 1 deletions
  1. 1 0
      ecl/hql/hqlutil.cpp
  2. 19 1
      ecl/hqlcpp/hqlresource.cpp

+ 1 - 0
ecl/hql/hqlutil.cpp

@@ -1775,6 +1775,7 @@ unsigned getNumActivityArguments(IHqlExpression * expr)
         return 0;
     case no_compound_selectnew:
     case no_libraryselect:
+    case no_definesideeffect:
         return 1;
     case no_libraryscopeinstance:
         {

+ 19 - 1
ecl/hqlcpp/hqlresource.cpp

@@ -3100,9 +3100,16 @@ void EclResourcer::createInitialGraph(IHqlExpression * expr, IHqlExpression * ow
         case no_compound:
             //NB: First argument is forced into a separate graph
             if (options.convertCompoundToExecuteWhen)
+            {
                 createInitialGraph(expr->queryChild(0), expr, thisGraph, UnconditionalLink, true);
+            }
             else
-                createInitialGraph(expr->queryChild(0), expr, NULL, UnconditionalLink, true);
+            {
+                HqlExprArray actions;
+                expr->queryChild(0)->unwindList(actions, no_actionlist);
+                ForEachItemIn(i, actions)
+                    createInitialGraph(&actions.item(i), expr, NULL, UnconditionalLink, true);
+            }
             createInitialGraph(expr->queryChild(1), expr, thisGraph, UnconditionalLink, false);
             return;
         case no_executewhen:
@@ -3363,6 +3370,17 @@ void EclResourcer::markAsUnconditional(IHqlExpression * expr, ResourceGraphInfo
         }
         markChildDependentsAsUnconditional(info, condition);
         return;
+    case no_compound:
+        if (!options.convertCompoundToExecuteWhen)
+        {
+            HqlExprArray actions;
+            expr->queryChild(0)->unwindList(actions, no_actionlist);
+            ForEachItemIn(i, actions)
+                markAsUnconditional(&actions.item(i), NULL, NULL);
+            markAsUnconditional(expr->queryChild(1), ownerGraph, condition);
+            return;
+        }
+        break;
     case no_sequential:
     case no_orderedactionlist:
 //  case no_nonempty: