|
@@ -11506,6 +11506,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
isAllJoin = true;
|
|
isAllJoin = true;
|
|
|
|
|
|
bool isLookupJoin = expr->hasAttribute(lookupAtom);
|
|
bool isLookupJoin = expr->hasAttribute(lookupAtom);
|
|
|
|
+ bool isSmartJoin = expr->hasAttribute(smartAtom);
|
|
bool isHashJoin = targetThor() && expr->hasAttribute(hashAtom);
|
|
bool isHashJoin = targetThor() && expr->hasAttribute(hashAtom);
|
|
bool isLocalJoin = !isHashJoin && expr->hasAttribute(localAtom);
|
|
bool isLocalJoin = !isHashJoin && expr->hasAttribute(localAtom);
|
|
bool joinToSelf = (op == no_selfjoin);
|
|
bool joinToSelf = (op == no_selfjoin);
|
|
@@ -11628,7 +11629,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
kind = TAKalljoin;
|
|
kind = TAKalljoin;
|
|
argName = "AllJoin";
|
|
argName = "AllJoin";
|
|
}
|
|
}
|
|
- else if (isLookupJoin)
|
|
|
|
|
|
+ else if (isLookupJoin || isSmartJoin)
|
|
{
|
|
{
|
|
kind = TAKlookupjoin;
|
|
kind = TAKlookupjoin;
|
|
argName = "HashJoin";
|
|
argName = "HashJoin";
|
|
@@ -11651,7 +11652,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
kind = TAKalldenormalize;
|
|
kind = TAKalldenormalize;
|
|
argName = "AllDenormalize";
|
|
argName = "AllDenormalize";
|
|
}
|
|
}
|
|
- else if (isLookupJoin)
|
|
|
|
|
|
+ else if (isLookupJoin || isSmartJoin)
|
|
{
|
|
{
|
|
kind = TAKlookupdenormalize;
|
|
kind = TAKlookupdenormalize;
|
|
argName = "HashDenormalize";
|
|
argName = "HashDenormalize";
|
|
@@ -11674,7 +11675,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
kind = TAKalldenormalizegroup;
|
|
kind = TAKalldenormalizegroup;
|
|
argName = "AllDenormalizeGroup";
|
|
argName = "AllDenormalizeGroup";
|
|
}
|
|
}
|
|
- else if (isLookupJoin)
|
|
|
|
|
|
+ else if (isLookupJoin || isSmartJoin)
|
|
{
|
|
{
|
|
kind = TAKlookupdenormalizegroup;
|
|
kind = TAKlookupdenormalizegroup;
|
|
argName = "HashDenormalizeGroup";
|
|
argName = "HashDenormalizeGroup";
|
|
@@ -11764,6 +11765,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
flags.append("|JFleftSortedLocally");
|
|
flags.append("|JFleftSortedLocally");
|
|
if (isAlreadySorted(dataset2, joinInfo.queryRightSort(), true, true) || userPreventsSort(noSortAttr, no_right))
|
|
if (isAlreadySorted(dataset2, joinInfo.queryRightSort(), true, true) || userPreventsSort(noSortAttr, no_right))
|
|
flags.append("|JFrightSortedLocally");
|
|
flags.append("|JFrightSortedLocally");
|
|
|
|
+ if (isSmartJoin) flags.append("|JFsmart|JFmanylookup");
|
|
|
|
|
|
if (flags.length())
|
|
if (flags.length())
|
|
doBuildUnsignedFunction(instance->classctx, "getJoinFlags", flags.str()+1);
|
|
doBuildUnsignedFunction(instance->classctx, "getJoinFlags", flags.str()+1);
|
|
@@ -11851,7 +11853,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
|
|
buildSlidingMatchFunction(instance->nestedctx, joinInfo.queryLeftSort(), joinInfo.queryRightSort(), joinInfo.slidingMatches, "CompareLeftRightUpper", 2, lhsDsRef, rhsDsRef);
|
|
buildSlidingMatchFunction(instance->nestedctx, joinInfo.queryLeftSort(), joinInfo.queryRightSort(), joinInfo.slidingMatches, "CompareLeftRightUpper", 2, lhsDsRef, rhsDsRef);
|
|
}
|
|
}
|
|
|
|
|
|
- if (isHashJoin||isLookupJoin)
|
|
|
|
|
|
+ if (isHashJoin||isLookupJoin|isSmartJoin)
|
|
{
|
|
{
|
|
OwnedHqlExpr leftList = createValueSafe(no_sortlist, makeSortListType(NULL), joinInfo.queryLeftReq());
|
|
OwnedHqlExpr leftList = createValueSafe(no_sortlist, makeSortListType(NULL), joinInfo.queryLeftReq());
|
|
buildHashOfExprsClass(instance->nestedctx, "HashLeft", leftList, lhsDsRef, false);
|
|
buildHashOfExprsClass(instance->nestedctx, "HashLeft", leftList, lhsDsRef, false);
|