Переглянути джерело

Merge pull request #8743 from shamser/issue13861

HPCC-13861 Remove rtlStrToStrX() call

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 9 роки тому
батько
коміт
684dc313dc
2 змінених файлів з 10 додано та 30 видалено
  1. 9 30
      ecl/hqlcpp/hqlcset.cpp
  2. 1 0
      ecl/hqlcpp/hqlcset.ipp

+ 9 - 30
ecl/hqlcpp/hqlcset.cpp

@@ -1394,25 +1394,16 @@ IHqlExpression * GeneralSetCursor::createDatasetSelect(IHqlExpression * indexExp
 
 void GeneralSetCursor::buildExprSelect(BuildCtx & ctx, IHqlExpression * indexExpr, CHqlBoundExpr & tgt)
 {
-    if (indexExpr->hasAttribute(noBoundCheckAtom))
-    {
-        if (indexExpr->hasAttribute(forceAllCheckAtom))
-            checkNotAll(ctx);
-
-        OwnedHqlExpr dsIndexExpr = createDatasetSelect(indexExpr);
-        dsCursor->buildSelectNth(ctx, dsIndexExpr);
-        OwnedHqlExpr select = createSelectExpr(LINK(dsIndexExpr), LINK(element));
-        translator.buildExpr(ctx, select, tgt);
-    }
-    else
-    {
-        translator.buildTempExpr(ctx, indexExpr, tgt);
-    }
+    buildExprOrAssignSelect(ctx, nullptr, indexExpr, &tgt);
 }
 
+void GeneralSetCursor::buildAssignSelect(BuildCtx & ctx, const CHqlBoundTarget & target, IHqlExpression * indexExpr)
+{
+    buildExprOrAssignSelect(ctx, &target, indexExpr, NULL);
+}
 
 
-void GeneralSetCursor::buildAssignSelect(BuildCtx & ctx, const CHqlBoundTarget & target, IHqlExpression * indexExpr)
+void GeneralSetCursor::buildExprOrAssignSelect(BuildCtx & ctx, const CHqlBoundTarget * target, IHqlExpression * indexExpr, CHqlBoundExpr * tgt)
 {
     if (!indexExpr->hasAttribute(noBoundCheckAtom) || indexExpr->hasAttribute(forceAllCheckAtom))
         checkNotAll(ctx);
@@ -1423,25 +1414,13 @@ void GeneralSetCursor::buildAssignSelect(BuildCtx & ctx, const CHqlBoundTarget &
     if (cursor)
     {
         OwnedHqlExpr select = createSelectExpr(LINK(dsIndexExpr), LINK(element));
-        if (!cursor->isConditional())
-            translator.buildExprAssign(ctx, target, select);
-        else
-        {
-            // if (row) tgt = x else tgt = dft;
-            BuildCtx subctx(ctx);
-            IHqlStmt * e = subctx.addFilter(cursor->queryBound());
-            cursor->setConditional(false);  // yuk!
-            translator.buildExprAssign(subctx, target, select);
-            cursor->setConditional(true);
-            subctx.selectElse(e);
-            OwnedHqlExpr null = getOutOfRangeValue(indexExpr);
-            translator.buildExprAssign(subctx, target, null);
-        }
+        assertex(!cursor->isConditional());
+        translator.buildExprOrAssign(ctx, target, select, tgt);
     }
     else
     {
         OwnedHqlExpr null = getOutOfRangeValue(indexExpr);
-        translator.buildExprAssign(ctx, target, null);
+        translator.buildExprOrAssign(ctx, target, null, tgt);
     }
 }
 

+ 1 - 0
ecl/hqlcpp/hqlcset.ipp

@@ -189,6 +189,7 @@ public:
     virtual void buildIterateClass(BuildCtx & ctx, CHqlBoundExpr & tgt);
     virtual void buildExprSelect(BuildCtx & ctx, IHqlExpression * indexExpr, CHqlBoundExpr & tgt);
     virtual void buildAssignSelect(BuildCtx & ctx, const CHqlBoundTarget & target, IHqlExpression * indexExpr);
+    virtual void buildExprOrAssignSelect(BuildCtx & ctx, const CHqlBoundTarget * target, IHqlExpression * indexExpr, CHqlBoundExpr * tgt);
     virtual bool isSingleValued();
 
 protected: