소스 검색

HPCC-9532 Fix code generator for reading dataset from another wuid

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 12 년 전
부모
커밋
162c9ec795
5개의 변경된 파일13개의 추가작업 그리고 4개의 파일을 삭제
  1. 1 0
      ecl/hql/hqlattr.cpp
  2. 6 1
      ecl/hqlcpp/hqlcse.cpp
  3. 1 1
      ecl/hqlcpp/hqlhtcpp.cpp
  4. 2 0
      ecl/hqlcpp/hqlinline.cpp
  5. 3 2
      ecl/hqlcpp/hqlttcpp.cpp

+ 1 - 0
ecl/hql/hqlattr.cpp

@@ -1938,6 +1938,7 @@ bool isInlineTrivialDataset(IHqlExpression * expr)
             break;
         case no_workunit_dataset:
         case no_getresult:
+            return !expr->hasAttribute(wuidAtom);
         case no_null:
             return true;
         case no_getgraphresult:

+ 6 - 1
ecl/hqlcpp/hqlcse.cpp

@@ -1272,9 +1272,14 @@ bool TableInvariantTransformer::isInvariant(IHqlExpression * expr)
     case no_preservemeta:
         invariant = isInvariant(expr->queryChild(0));
         break;
-    case no_constant:
     case no_workunit_dataset:
     case no_getresult:
+        if (expr->hasAttribute(wuidAtom))
+            invariant = isInvariant(expr->queryAttribute(wuidAtom));
+        else
+            invariant = true;
+        break;
+    case no_constant:
     case no_getgraphresult:
         invariant = true;
         break;

+ 1 - 1
ecl/hqlcpp/hqlhtcpp.cpp

@@ -16034,7 +16034,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityWorkunitRead(BuildCtx & ctx, I
         }
 
         if (wuid)
-            doBuildVarStringFunction(instance->classctx, "getWUID", wuid->queryChild(0));
+            doBuildVarStringFunction(instance->startctx, "getWUID", wuid->queryChild(0));
 
         bool usesContents = false;
         if (isStored || (targetRoxie() && (sequenceValue >= 0)))

+ 2 - 0
ecl/hqlcpp/hqlinline.cpp

@@ -90,6 +90,8 @@ static unsigned calcInlineFlags(BuildCtx * ctx, IHqlExpression * expr)
     switch (op)
     {
     case no_workunit_dataset:
+        if (expr->hasAttribute(wuidAtom))
+            return 0;
         return RETassign;
     case no_alias:
         {

+ 3 - 2
ecl/hqlcpp/hqlttcpp.cpp

@@ -7049,10 +7049,11 @@ bool ScalarGlobalTransformer::isComplex(IHqlExpression * expr, bool checkGlobal)
 
     switch (expr->getOperator())
     {
-    case no_constant:
+    case no_workunit_dataset:
     case no_getresult:
+        return expr->hasAttribute(wuidAtom);
+    case no_constant:
     case no_globalscope:
-    case no_workunit_dataset:
     case no_libraryinput:
         return false;
     case no_cast: