Forráskód Böngészése

HPCC-8964 Don't generate a JFindexfromactivity keyed join for thor

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 12 éve
szülő
commit
dc6347f159
1 módosított fájl, 34 hozzáadás és 2 törlés
  1. 34 2
      ecl/hqlcpp/hqlckey.cpp

+ 34 - 2
ecl/hqlcpp/hqlckey.cpp

@@ -256,6 +256,7 @@ protected:
     IHqlExpression * optimizeTransfer(HqlExprArray & fields, HqlExprArray & values, IHqlExpression * expr, IHqlExpression * leftSelector);
     void optimizeExtractJoinFields();
     void optimizeTransfer(SharedHqlExpr & targetDataset, SharedHqlExpr & targetTransform, SharedHqlExpr & keyedFilter, OwnedHqlExpr * extraFilter);
+    IHqlExpression * querySimplifiedKey(IHqlExpression * expr);
     void splitFilter(IHqlExpression * filter, SharedHqlExpr & keyTarget);
 
 protected:
@@ -312,9 +313,15 @@ KeyedJoinInfo::KeyedJoinInfo(HqlCppTranslator & _translator, IHqlExpression * _e
     }
     else
     {
-        hasComplexIndex = true;
         originalKey.set(right);
-        key.setown(createKeyFromComplexKey(right));
+        //We could call key.set(querySimplifiedKey(right)) to succeed in some cases instead of generating an error.
+        if (translator.getTargetClusterType() == RoxieCluster)
+        {
+            hasComplexIndex = true;
+            key.setown(createKeyFromComplexKey(right));
+        }
+        else
+            translator.throwError1(HQLERR_KeyedJoinNoRightIndex_X, getOpString(right->getOperator()));
     }
 
     if (!originalKey)
@@ -337,6 +344,31 @@ KeyedJoinInfo::~KeyedJoinInfo()
 }
 
 
+IHqlExpression * KeyedJoinInfo::querySimplifiedKey(IHqlExpression * expr)
+{
+    loop
+    {
+        switch (expr->getOperator())
+        {
+        case no_sorted:
+        case no_distributed:
+        case no_sort:
+        case no_distribute:
+        case no_preservemeta:
+        case no_assertsorted:
+        case no_assertgrouped:
+        case no_assertdistributed:
+        case no_nofold:
+            break;
+        case no_newkeyindex:
+            return LINK(expr);
+        default:
+            return NULL;
+        }
+        expr = expr->queryChild(0);
+    }
+}
+
 IHqlExpression * KeyedJoinInfo::createKeyFromComplexKey(IHqlExpression * expr)
 {
     IHqlExpression * base = queryPhysicalRootTable(expr);