Explorar el Código

Clean up code based on code review comments

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday hace 13 años
padre
commit
da6fc88c60
Se han modificado 3 ficheros con 11 adiciones y 6 borrados
  1. 1 3
      ecl/hql/hqlexpr.cpp
  2. 9 3
      ecl/hql/hqlmeta.cpp
  3. 1 0
      ecl/hql/hqlmeta.hpp

+ 1 - 3
ecl/hql/hqlexpr.cpp

@@ -10597,9 +10597,7 @@ IHqlExpression *createDataset(node_operator op, HqlExprArray & parms)
             bool isLocal = queryProperty(localAtom, parms) != NULL;
             OwnedHqlExpr normalizedSortOrder = replaceSelector(&parms.item(1), dataset, cachedActiveTableExpr);
             OwnedHqlExpr mappedGrouping = replaceSelector(&parms.item(2), dataset, cachedActiveTableExpr);
-            type.setown(getTypeGrouped(datasetType, mappedGrouping, isLocal));
-            type.setown(getTypeGroupSort(type, normalizedSortOrder));
-            type.setown(getTypeUngroup(type));
+            type.setown(getTypeShuffle(datasetType, mappedGrouping, normalizedSortOrder, isLocal));
             break;
         }
     case no_cosort:

+ 9 - 3
ecl/hql/hqlmeta.cpp

@@ -975,6 +975,14 @@ ITypeInfo * getTypeFromMeta(IHqlExpression * record, IHqlExpression * meta, unsi
 }
 
 
+extern HQL_API ITypeInfo * getTypeShuffle(ITypeInfo * prevType, IHqlExpression * grouping, IHqlExpression * sortOrder, bool isLocal)
+{
+    Owned<ITypeInfo> groupedType = getTypeGrouped(prevType, grouping, isLocal);
+    Owned<ITypeInfo> sortedType = getTypeGroupSort(groupedType, sortOrder);
+    return getTypeUngroup(sortedType);
+}
+
+
 //---------------------------------------------------------------------------------------------
 
 bool appearsToBeSorted(ITypeInfo * type, bool isLocal, bool ignoreGrouping)
@@ -1308,7 +1316,7 @@ IHqlExpression * convertShuffleToGroupedSort(IHqlExpression * expr)
     unwindChildren(args, expr, 3);
     removeProperty(args, localAtom);
     OwnedHqlExpr sorted = createDataset(no_sort, args);
-    return createDataset(no_group, LINK(sorted));
+    return createDataset(no_group, sorted.getClear());
 }
 
 static IHqlExpression * createShuffled(IHqlExpression * dataset, IHqlExpression * order, bool isLocal, bool ignoreGrouping, bool alwaysLocal)
@@ -1333,8 +1341,6 @@ static IHqlExpression * createShuffled(IHqlExpression * dataset, IHqlExpression
     if (!isLocal && !alwaysLocal)
         shuffle.setown(convertShuffleToGroupedSort(shuffle));
 
-    if (!isAlreadySorted(shuffle, order, isLocal||alwaysLocal, ignoreGrouping))
-        dbglogExpr(shuffle);
     assertex(isAlreadySorted(shuffle, order, isLocal||alwaysLocal, ignoreGrouping));
     return shuffle.getClear();
 }

+ 1 - 0
ecl/hql/hqlmeta.hpp

@@ -45,6 +45,7 @@ extern HQL_API ITypeInfo * getTypeDistribute(ITypeInfo * prev, IHqlExpression *
 extern HQL_API ITypeInfo * getTypeFromMeta(IHqlExpression * record, IHqlExpression * meta, unsigned firstChild);
 extern HQL_API ITypeInfo * getTypeIntersection(ITypeInfo * leftType, ITypeInfo * rightType);
 extern HQL_API ITypeInfo * getTypeProject(ITypeInfo * prev, IHqlExpression * newRecord, TableProjectMapper & mapper);
+extern HQL_API ITypeInfo * getTypeShuffle(ITypeInfo * prev, IHqlExpression * grouping, IHqlExpression * sortOrder, bool isLocal);
 extern HQL_API ITypeInfo * getTypeCannotProject(ITypeInfo * prev, IHqlExpression * newRecord); // preserve grouping, but that's it.
 extern HQL_API ITypeInfo * getTypeUnknownDistribution(ITypeInfo * prev);
 extern HQL_API ITypeInfo * getTypeRemoveDistribution(ITypeInfo * prev);