Pārlūkot izejas kodu

Merge pull request #8273 from ghalliday/issue14972b

HPCC-14972 Use a temporary row to avoid directly serializing

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 9 gadi atpakaļ
vecāks
revīzija
5615237389
2 mainītis faili ar 8 papildinājumiem un 2 dzēšanām
  1. 8 1
      ecl/hqlcpp/hqlcppds.cpp
  2. 0 1
      ecl/hqlcpp/hqlinline.cpp

+ 8 - 1
ecl/hqlcpp/hqlcppds.cpp

@@ -4449,8 +4449,15 @@ void HqlCppTranslator::buildRowAssign(BuildCtx & ctx, IReferenceSelector * targe
                 buildRowAssign(ctx, target, deserialized->queryChild(0));
             else if (!typeRequiresDeserialization(deserialized->queryType(), serializeForm))
                 buildRowAssign(ctx, target, deserialized);
-            else
+            else if (target->queryRootRow()->queryBuilder())
                 doBuildRowAssignSerializeRow(ctx, target, expr);
+            else
+            {
+                CHqlBoundExpr bound;
+                buildTempExpr(ctx, expr, bound);
+                OwnedHqlExpr translated = bound.getTranslatedExpr();
+                buildRowAssign(ctx, target, translated);
+            }
             return;
         }
     case no_if:

+ 0 - 1
ecl/hqlcpp/hqlinline.cpp

@@ -1004,7 +1004,6 @@ void ParentExtract::beginCreateExtract(BuildCtx & ctx, bool doDeclare)
     //Collect a list of cursors together... NB these are in reverse order..
     gatherActiveRows(*buildctx);
 
-    serialization->BoundRow::setBuilder(queryExtractName());
     childSerialization->setBuilder(this);
 }