Pārlūkot izejas kodu

HPCC-13854 Allow PROJECT(ROW,TRANSFORM(SKIP)) to be optimized

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 10 gadi atpakaļ
vecāks
revīzija
b50320c600
2 mainītis faili ar 3 papildinājumiem un 3 dzēšanām
  1. 0 2
      ecl/hql/hqlopt.cpp
  2. 3 1
      ecl/hqlcpp/hqlhtcpp.cpp

+ 0 - 2
ecl/hql/hqlopt.cpp

@@ -3353,8 +3353,6 @@ IHqlExpression * CTreeOptimizer::doCreateTransformed(IHqlExpression * transforme
                 break;
             case no_inlinetable:
                 {
-                    if (transformContainsSkip(transform))
-                        break;
                     IHqlExpression * ret = optimizeProjectInlineTable(transformed, shared);
                     if (ret)
                         return ret;

+ 3 - 1
ecl/hqlcpp/hqlhtcpp.cpp

@@ -16904,7 +16904,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityCreateRow(BuildCtx & ctx, IHql
     IHqlExpression * self = selfCursor->querySelector();
 
     if (isDataset)
-        associateSkipReturnMarker(funcctx, queryBoolExpr(false), selfCursor);
+        associateSkipReturnMarker(funcctx, queryZero(), selfCursor);
 
     LinkedHqlExpr cseExpr = expr;
     if (options.spotCSE)
@@ -16939,6 +16939,8 @@ ABoundActivity * HqlCppTranslator::doBuildActivityInlineTable(BuildCtx & ctx, IH
 
     BuildCtx funcctx(instance->startctx);
     funcctx.addQuotedCompound("virtual size32_t getRow(ARowBuilder & crSelf, __uint64 row)");
+    associateSkipReturnMarker(funcctx, queryZero(), NULL);
+
     ensureRowAllocated(funcctx, "crSelf");
     BoundRow * selfCursor = bindSelf(funcctx, instance->dataset, "crSelf");
     IHqlExpression * self = selfCursor->querySelector();