|
@@ -211,15 +211,6 @@ void HqlCppTranslator::buildJoinMatchFunction(BuildCtx & ctx, const char * name,
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
|
-IHqlExpression * createKeyFromComplexKey(IHqlExpression * expr)
|
|
|
-{
|
|
|
- IHqlExpression * base = queryPhysicalRootTable(expr);
|
|
|
- if (base->getOperator() == no_newkeyindex)
|
|
|
- return LINK(base);
|
|
|
- UNIMPLEMENTED_XY("Key", getOpString(base->getOperator()));
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
class KeyedJoinInfo : public CInterface
|
|
|
{
|
|
|
public:
|
|
@@ -260,6 +251,7 @@ public:
|
|
|
protected:
|
|
|
void buildClearRecord(BuildCtx & ctx, RecordSelectIterator & rawIter, RecordSelectIterator & keyIter);
|
|
|
void buildTransformBody(BuildCtx & ctx, IHqlExpression * transform);
|
|
|
+ IHqlExpression * createKeyFromComplexKey(IHqlExpression * expr);
|
|
|
IHqlExpression * expandDatasetReferences(IHqlExpression * expr, IHqlExpression * ds);
|
|
|
IHqlExpression * optimizeTransfer(HqlExprArray & fields, HqlExprArray & values, IHqlExpression * expr, IHqlExpression * leftSelector);
|
|
|
void optimizeExtractJoinFields();
|
|
@@ -345,6 +337,22 @@ KeyedJoinInfo::~KeyedJoinInfo()
|
|
|
}
|
|
|
|
|
|
|
|
|
+IHqlExpression * KeyedJoinInfo::createKeyFromComplexKey(IHqlExpression * expr)
|
|
|
+{
|
|
|
+ IHqlExpression * base = queryPhysicalRootTable(expr);
|
|
|
+ if (!base)
|
|
|
+ {
|
|
|
+ translator.throwError1(HQLERR_KeyedJoinNoRightIndex_X, getOpString(expr->getOperator()));
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (base->getOperator() == no_newkeyindex)
|
|
|
+ return LINK(base);
|
|
|
+
|
|
|
+ translator.throwError1(HQLERR_KeyedJoinNoRightIndex_X, getOpString(base->getOperator()));
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
void KeyedJoinInfo::buildClearRecord(BuildCtx & ctx, RecordSelectIterator & rawIter, RecordSelectIterator & keyIter)
|
|
|
{
|
|
|
keyIter.first();
|
|
@@ -1430,7 +1438,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityKeyedJoinOrDenormalize(BuildCt
|
|
|
|
|
|
ABoundActivity * HqlCppTranslator::doBuildActivityKeyedDistribute(BuildCtx & ctx, IHqlExpression * expr)
|
|
|
{
|
|
|
- if (!targetThor())
|
|
|
+ if (!targetThor() || insideChildQuery(ctx))
|
|
|
return buildCachedActivity(ctx, expr->queryChild(0));
|
|
|
|
|
|
HqlExprArray leftSorts, rightSorts;
|