Browse Source

HPCC-8329 Clean up the code following code review

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 12 years ago
parent
commit
0ee334ae1d
5 changed files with 27 additions and 33 deletions
  1. 1 0
      ecl/hql/hqlutil.cpp
  2. 1 0
      ecl/hqlcpp/hqlcpp.ipp
  3. 11 22
      ecl/hqlcpp/hqlcppds.cpp
  4. 12 9
      ecl/hqlcpp/hqlhtcpp.cpp
  5. 2 2
      ecl/hqlcpp/hqlresource.cpp

+ 1 - 0
ecl/hql/hqlutil.cpp

@@ -4569,6 +4569,7 @@ static bool splitDatasetAttribute(SharedHqlExpr & dataset, SharedHqlExpr & attri
     node_operator leftOp = left->getOperator();
     if ((leftOp !=no_select) || expr->hasProperty(newAtom))
     {
+        //Ensure selections from dictionaries do not have a separate activity for the row lookup.
         if (leftOp == no_selectmap)
             return false;
 

+ 1 - 0
ecl/hqlcpp/hqlcpp.ipp

@@ -1580,6 +1580,7 @@ public:
     void buildDedupFilterFunction(BuildCtx & ctx, HqlExprArray & equalities, HqlExprArray & conds, IHqlExpression * dataset, IHqlExpression * selSeq);
     void buildDedupSerializeFunction(BuildCtx & ctx, const char * funcName, IHqlExpression * srcDataset, IHqlExpression * tgtDataset, HqlExprArray & srcValues, HqlExprArray & tgtValues, IHqlExpression * selSeq);
     void buildDictionaryHashClass(IHqlExpression *record, IHqlExpression *dictionary, StringBuffer &lookupHelperName);
+    void buildDictionaryHashMember(BuildCtx & ctx, IHqlExpression *dictionary, const char * memberName);
     void buildHashClass(BuildCtx & ctx, const char * name, IHqlExpression * orderExpr, const DatasetReference & dataset);
     void buildHashOfExprsClass(BuildCtx & ctx, const char * name, IHqlExpression * cond, const DatasetReference & dataset, bool compareToSelf);
     void buildInstancePrefix(ActivityInstance * instance);

+ 11 - 22
ecl/hqlcpp/hqlcppds.cpp

@@ -4451,23 +4451,20 @@ IReferenceSelector * HqlCppTranslator::buildDatasetSelectMap(BuildCtx & ctx, IHq
     if (match)
         return createReferenceSelector(static_cast<BoundRow *>(match));
 
-    OwnedHqlExpr dataset = normalizeAnyDatasetAliases(expr->queryChild(0));
-    BoundRow * row = NULL;
-    //assertex(canProcessInline(&ctx, expr));
+    OwnedHqlExpr dictionary = normalizeAnyDatasetAliases(expr->queryChild(0));
+
+    //MORE: This should really be a createDictionarySelector call.
+    Owned<IHqlCppDatasetCursor> cursor = createDatasetSelector(ctx, dictionary);
+    BoundRow * row = cursor->buildSelectMap(ctx, expr);
 
     if (!row)
     {
-        Owned<IHqlCppDatasetCursor> cursor = createDatasetSelector(ctx, dataset);
-        row = cursor->buildSelectMap(ctx, expr);
-
-        if (!row)
-        {
-            CHqlBoundExpr boundCleared;
-            buildDefaultRow(ctx, dataset, boundCleared);
-            OwnedHqlExpr defaultRowPtr = getPointer(boundCleared.expr);
-            row = bindRow(ctx, expr, defaultRowPtr);
-        }
+        CHqlBoundExpr boundCleared;
+        buildDefaultRow(ctx, dictionary, boundCleared);
+        OwnedHqlExpr defaultRowPtr = getPointer(boundCleared.expr);
+        row = bindRow(ctx, expr, defaultRowPtr);
     }
+
     return createReferenceSelector(row);
 }
 
@@ -4649,15 +4646,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivitySetGraphDictionaryResult(Build
         addDependency(ctx, instance->queryBoundActivity(), parentActivity, childAtom, "Child");
     }
 
-    {
-        StringBuffer lookupHelperName;
-        buildDictionaryHashClass(dictionary->queryRecord(), dictionary, lookupHelperName);
-
-        BuildCtx funcctx(instance->createctx);
-        StringBuffer s;
-        s.append("virtual IHThorHashLookupInfo * queryHashLookupInfo() { return &").append(lookupHelperName).append("; }");
-        funcctx.addQuoted(s);
-    }
+    buildDictionaryHashMember(instance->createctx, dictionary, "queryHashLookupInfo");
 
     instance->addAttributeBool("_isSpill", isSpill);
     if (targetRoxie())

+ 12 - 9
ecl/hqlcpp/hqlhtcpp.cpp

@@ -5358,6 +5358,17 @@ void HqlCppTranslator::buildDictionaryHashClass(IHqlExpression *record, IHqlExpr
     }
 }
 
+void HqlCppTranslator::buildDictionaryHashMember(BuildCtx & ctx, IHqlExpression *dictionary, const char * memberName)
+{
+    StringBuffer lookupHelperName;
+    buildDictionaryHashClass(dictionary->queryRecord(), dictionary, lookupHelperName);
+
+    BuildCtx funcctx(ctx);
+    StringBuffer s;
+    s.append("virtual IHThorHashLookupInfo * ").append(memberName).append("() { return &").append(lookupHelperName).append("; }");
+    funcctx.addQuoted(s);
+}
+
 
 //---------------------------------------------------------------------------
 
@@ -10863,15 +10874,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityDictionaryWorkunitWrite(BuildC
     }
 
     //Owned<IWUResult> result = createDatasetResultSchema(seq, name, record, true, false);
-    {
-        StringBuffer lookupHelperName;
-        buildDictionaryHashClass(record, dictionary, lookupHelperName);
-
-        BuildCtx funcctx(instance->createctx);
-        StringBuffer s;
-        s.append("virtual IHThorHashLookupInfo * queryHashLookupInfo() { return &").append(lookupHelperName).append("; }");
-        funcctx.addQuoted(s);
-    }
+    buildDictionaryHashMember(instance->createctx, dictionary, "queryHashLookupInfo");
 
     if (flags.length())
         doBuildUnsignedFunction(instance->classctx, "getFlags", flags.str()+1);

+ 2 - 2
ecl/hqlcpp/hqlresource.cpp

@@ -2321,10 +2321,10 @@ protected:
             {
                 IHqlExpression * cond = expr->queryChild(0);
                 analyseExpr(cond);
-                if (expr->isDataset() || expr->isDatarow())// || expr->isDictionary())
+                if (expr->isDataset() || expr->isDatarow() || expr->isDictionary())
                     conditionalDepth++;
                 doAnalyseChildren(expr, 1);
-                if (expr->isDataset() || expr->isDatarow())// || expr->isDictionary())
+                if (expr->isDataset() || expr->isDatarow() || expr->isDictionary())
                     conditionalDepth--;
                 break;
             }