|
@@ -4817,8 +4817,8 @@ IHqlExpression * CompoundActivityTransformer::createTransformed(IHqlExpression *
|
|
//------------------------------------------------------------------------
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
static HqlTransformerInfo optimizeActivityTransformerInfo("OptimizeActivityTransformer");
|
|
static HqlTransformerInfo optimizeActivityTransformerInfo("OptimizeActivityTransformer");
|
|
-OptimizeActivityTransformer::OptimizeActivityTransformer(bool _optimizeCountCompare, bool _optimizeNonEmpty)
|
|
|
|
-: NewHqlTransformer(optimizeActivityTransformerInfo)
|
|
|
|
|
|
+OptimizeActivityTransformer::OptimizeActivityTransformer(unsigned _wfid, bool _optimizeCountCompare, bool _optimizeNonEmpty)
|
|
|
|
+: NewHqlTransformer(optimizeActivityTransformerInfo), wfid(_wfid)
|
|
{
|
|
{
|
|
optimizeCountCompare = _optimizeCountCompare; optimizeNonEmpty = _optimizeNonEmpty;
|
|
optimizeCountCompare = _optimizeCountCompare; optimizeNonEmpty = _optimizeNonEmpty;
|
|
}
|
|
}
|
|
@@ -5161,7 +5161,14 @@ IHqlExpression * OptimizeActivityTransformer::doCreateTransformed(IHqlExpression
|
|
unwindChildren(args, expr, 2);
|
|
unwindChildren(args, expr, 2);
|
|
return expr->clone(args);
|
|
return expr->clone(args);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ case no_clustersize:
|
|
|
|
+ if (wfid && !expr->hasAttribute(pureAtom))
|
|
|
|
+ {
|
|
|
|
+ OwnedHqlExpr attribute = createExprAttribute(pureAtom, getSizetConstant(wfid));
|
|
|
|
+ OwnedHqlExpr modified = appendOwnedOperand(expr, attribute.getClear());
|
|
|
|
+ return expr->cloneAllAnnotations(modified);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
case no_eq:
|
|
case no_eq:
|
|
case no_ne:
|
|
case no_ne:
|
|
case no_le:
|
|
case no_le:
|
|
@@ -5187,21 +5194,11 @@ IHqlExpression * OptimizeActivityTransformer::doCreateTransformed(IHqlExpression
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-void optimizeActivities(HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty)
|
|
|
|
|
|
+void optimizeActivities(unsigned wfid, HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty)
|
|
{
|
|
{
|
|
- OptimizeActivityTransformer transformer(optimizeCountCompare, optimizeNonEmpty);
|
|
|
|
- HqlExprArray results;
|
|
|
|
|
|
+ OptimizeActivityTransformer transformer(wfid, optimizeCountCompare, optimizeNonEmpty);
|
|
transformer.analyseArray(exprs, 0);
|
|
transformer.analyseArray(exprs, 0);
|
|
- transformer.transformRoot(exprs, results);
|
|
|
|
- replaceArray(exprs, results);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-IHqlExpression * optimizeActivities(IHqlExpression * expr, bool optimizeCountCompare, bool optimizeNonEmpty)
|
|
|
|
-{
|
|
|
|
- OptimizeActivityTransformer transformer(optimizeCountCompare, optimizeNonEmpty);
|
|
|
|
- HqlExprArray results;
|
|
|
|
- transformer.analyse(expr, 0);
|
|
|
|
- return transformer.transformRoot(expr);
|
|
|
|
|
|
+ transformer.transformRoot(exprs);
|
|
}
|
|
}
|
|
|
|
|
|
IHqlExpression * GlobalAttributeInfo::queryAlias(IHqlExpression * value)
|
|
IHqlExpression * GlobalAttributeInfo::queryAlias(IHqlExpression * value)
|
|
@@ -7701,6 +7698,8 @@ bool ScalarGlobalTransformer::isComplex(IHqlExpression * expr, bool checkGlobal)
|
|
case no_constant:
|
|
case no_constant:
|
|
case no_globalscope:
|
|
case no_globalscope:
|
|
case no_libraryinput:
|
|
case no_libraryinput:
|
|
|
|
+ case no_clustersize:
|
|
|
|
+ case no_nothor:
|
|
return false;
|
|
return false;
|
|
case no_cast:
|
|
case no_cast:
|
|
case no_implicitcast:
|
|
case no_implicitcast:
|
|
@@ -10780,6 +10779,7 @@ void LeftRightTransformer::process(HqlExprArray & exprs)
|
|
transformRoot(exprs, transformed);
|
|
transformRoot(exprs, transformed);
|
|
replaceArray(exprs, transformed);
|
|
replaceArray(exprs, transformed);
|
|
}
|
|
}
|
|
|
|
+
|
|
//---------------------------------------------------------------------------------------------------------------------
|
|
//---------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -13355,9 +13355,7 @@ void normalizeHqlTree(HqlCppTranslator & translator, HqlExprArray & exprs)
|
|
{
|
|
{
|
|
cycle_t startCycles = get_cycles_now();
|
|
cycle_t startCycles = get_cycles_now();
|
|
HqlScopeTagger normalizer(translator.queryErrorProcessor(), translator.queryLocalOnWarningMapper());
|
|
HqlScopeTagger normalizer(translator.queryErrorProcessor(), translator.queryLocalOnWarningMapper());
|
|
- HqlExprArray transformed;
|
|
|
|
- normalizer.transformRoot(exprs, transformed);
|
|
|
|
- replaceArray(exprs, transformed);
|
|
|
|
|
|
+ normalizer.transformRoot(exprs);
|
|
translator.noteFinishedTiming("compile:tree transform: normalize.scope", startCycles);
|
|
translator.noteFinishedTiming("compile:tree transform: normalize.scope", startCycles);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -13730,7 +13728,7 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
|
|
//sort(x)[n] -> topn(x, n)[]n, count(x)>n -> count(choosen(x,n+1)) > n and possibly others
|
|
//sort(x)[n] -> topn(x, n)[]n, count(x)>n -> count(choosen(x,n+1)) > n and possibly others
|
|
{
|
|
{
|
|
cycle_t startCycles = get_cycles_now();
|
|
cycle_t startCycles = get_cycles_now();
|
|
- optimizeActivities(curWorkflow.queryExprs(), !targetThor(), options.optimizeNonEmpty);
|
|
|
|
|
|
+ optimizeActivities(curWorkflow.queryWfid(), curWorkflow.queryExprs(), !targetThor(), options.optimizeNonEmpty);
|
|
noteFinishedTiming("compile:tree transform: optimize activities", startCycles);
|
|
noteFinishedTiming("compile:tree transform: optimize activities", startCycles);
|
|
}
|
|
}
|
|
checkNormalized(curWorkflow);
|
|
checkNormalized(curWorkflow);
|