Bläddra i källkod

Merge pull request #946 from ghalliday/aggmerge

Fix minor problem with AGGREGATE MERGE transform

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 13 år sedan
förälder
incheckning
c8cb120969
2 ändrade filer med 12 tillägg och 0 borttagningar
  1. 6 0
      ecl/hql/hqlexpr.cpp
  2. 6 0
      ecl/hql/hqltrans.cpp

+ 6 - 0
ecl/hql/hqlexpr.cpp

@@ -5145,6 +5145,9 @@ void CHqlDataset::cacheParent()
                 normalized.setown(createInScopeSelectExpr(LINK(normalizedLeft), LINK(queryChild(1))));
 
             container = LINK(queryDatasetCursor(ds)->queryNormalizedSelector(false));
+#ifdef _DEBUG
+            assertex(!hasProperty(newAtom) || !isAlwaysActiveRow(ds));
+#endif
             break;
         }
     case no_if:
@@ -9843,6 +9846,9 @@ IHqlExpression *createDataset(node_operator op, HqlExprArray & parms)
         {
             IHqlExpression * field = &parms.item(1);
             datasetType = field->queryType();
+            //This can occur in very unusual situations...
+            if ((parms.ordinality() > 2) && isAlwaysActiveRow(&parms.item(0)))
+                removeProperty(parms, newAtom);
         }
         break;
     default:

+ 6 - 0
ecl/hql/hqltrans.cpp

@@ -1391,6 +1391,8 @@ IHqlExpression * NewHqlTransformer::createTransformed(IHqlExpression * expr)
                 children.replace(*LINK(ds.queryChild(0)), 0);
                 removeProperty(children, newAtom);
             }
+            if ((children.ordinality() > 2) && isAlwaysActiveRow(&ds))
+                removeProperty(children, newAtom);
         }
         else
             return createTransformedActiveSelect(expr);
@@ -2670,7 +2672,11 @@ IHqlExpression * MergingHqlTransformer::createTransformed(IHqlExpression * expr)
             bool same = optimizedTransformChildren(expr, children);
             popChildContext();
             if (!same)
+            {
+                if ((children.ordinality() > 2) && isAlwaysActiveRow(child))
+                    removeProperty(children, newAtom);
                 return expr->clone(children);
+            }
             return LINK(expr);
         }
     case childdataset_merge: