浏览代码

HPCC-20028 Support conditional modules which are dependent on #CONSTANT

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 7 年之前
父节点
当前提交
21dfc8c154
共有 2 个文件被更改,包括 24 次插入1 次删除
  1. 0 1
      ecl/hqlcpp/hqlsource.ipp
  2. 24 0
      ecl/hqlcpp/hqlttcpp.cpp

+ 0 - 1
ecl/hqlcpp/hqlsource.ipp

@@ -50,6 +50,5 @@ public:
 //---------------------------------------------------------------------------
 
 unsigned getProjectCount(IHqlExpression * expr);
-IHqlExpression * createMetadataIndexRecord(IHqlExpression * record, bool hasInternalFilePosition);
 
 #endif

+ 24 - 0
ecl/hqlcpp/hqlttcpp.cpp

@@ -639,6 +639,30 @@ IHqlExpression * NewThorStoredReplacer::createTransformed(IHqlExpression * expr)
                 return expr->clone(actions);
             return transform(expr->queryChild(0));
         }
+    case no_if:
+    {
+        //Transform the whole expression since mapped expressions may be found on branches that are not taken
+        OwnedHqlExpr transformed = QuickHqlTransformer::createTransformed(expr);
+        if (transformed->getOperator() == no_if)
+        {
+            IHqlExpression * newCond = transformed->queryChild(0);
+            if (newCond->isConstant())
+            {
+                OwnedHqlExpr folded = quickFoldExpression(newCond);
+                IValue * foldedValue = folded->queryValue();
+                if (foldedValue)
+                {
+                    if (foldedValue->getBoolValue())
+                        return LINK(transformed->queryChild(1));
+                    IHqlExpression * elseExpr = transformed->queryChild(2);
+                    if (elseExpr)
+                        return LINK(elseExpr);
+                    return createNullExpr(expr);
+                }
+            }
+        }
+        break;
+    }
     }
     return QuickHqlTransformer::createTransformed(expr);
 }