Skip to content

Commit 546637e

Browse files
authored
handling cast in agg to not cause null columns (finos#3831)
1 parent fe4ede9 commit 546637e

File tree

2 files changed

+63
-1
lines changed
  • legend-engine-core/legend-engine-core-pure/legend-engine-pure-code-functions-relation/legend-engine-pure-functions-relation-pure/src/main/resources/core_functions_relation/relation/tests
  • legend-engine-xts-relationalStore/legend-engine-xt-relationalStore-generation/legend-engine-xt-relationalStore-pure/legend-engine-xt-relationalStore-core-pure/src/main/resources/core_relational/relational/pureToSQLQuery

2 files changed

+63
-1
lines changed

legend-engine-core/legend-engine-core-pure/legend-engine-pure-code-functions-relation/legend-engine-pure-functions-relation-pure/src/main/resources/core_functions_relation/relation/tests/composition.pure

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,3 +409,65 @@ function <<PCT.test, PCTRelationQualifier.relation, PCTRelationQualifier.olap>>
409409
' Peter,Smith,null,Johnson\n'+
410410
'#', $res->toString());
411411
}
412+
413+
function <<PCT.test, PCTRelationQualifier.relation, PCTRelationQualifier.aggregation>> meta::pure::functions::relation::tests::composition::testGroupByCastBeforeAgg<T|m>(f:Function<{Function<{->T[m]}>[1]->T[m]}>[1]):Boolean[1]
414+
{
415+
let expr = {
416+
| #TDS
417+
id, grp
418+
1, 2
419+
2, 1
420+
3, 3
421+
4, 4
422+
5, 2
423+
6, 1
424+
7, 3
425+
8, 1
426+
9, 5
427+
10, 0
428+
#->groupBy(~grp, ~newCol:x|$x.id:x|$x->cast(@Integer)->plus())
429+
};
430+
431+
let res = $f->eval($expr);
432+
433+
assertEquals( '#TDS\n'+
434+
' grp,newCol\n'+
435+
' 0,10\n'+
436+
' 1,16\n'+
437+
' 2,6\n'+
438+
' 3,10\n'+
439+
' 4,4\n'+
440+
' 5,9\n'+
441+
'#', $res->sort(~grp->ascending())->toString());
442+
}
443+
444+
function <<PCT.test, PCTRelationQualifier.relation, PCTRelationQualifier.aggregation>> meta::pure::functions::relation::tests::composition::testGroupByCastAfterAgg<T|m>(f:Function<{Function<{->T[m]}>[1]->T[m]}>[1]):Boolean[1]
445+
{
446+
let expr = {
447+
| #TDS
448+
id, grp
449+
1, 2
450+
2, 1
451+
3, 3
452+
4, 4
453+
5, 2
454+
6, 1
455+
7, 3
456+
8, 1
457+
9, 5
458+
10, 0
459+
#->groupBy(~grp, ~newCol:x|$x.id:x|$x->plus()->cast(@Integer))
460+
};
461+
462+
let res = $f->eval($expr);
463+
464+
assertEquals( '#TDS\n'+
465+
' grp,newCol\n'+
466+
' 0,10\n'+
467+
' 1,16\n'+
468+
' 2,6\n'+
469+
' 3,10\n'+
470+
' 4,4\n'+
471+
' 5,9\n'+
472+
'#', $res->sort(~grp->ascending())->toString());
473+
}

legend-engine-xts-relationalStore/legend-engine-xt-relationalStore-generation/legend-engine-xt-relationalStore-pure/legend-engine-xt-relationalStore-core-pure/src/main/resources/core_relational/relational/pureToSQLQuery/pureToSQLQuery.pure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5236,7 +5236,7 @@ function meta::relational::functions::pureToSqlQuery::processAggFn(v:ValueSpecif
52365236
e:RoutedValueSpecification[1]|$e.value->processAggFn($params, $state),
52375237
f:FunctionExpression[1] |
52385238
if($f.func == cast_Any_m__T_1__T_m_,
5239-
| $f.parametersValues->at(1)->cast(@ValueSpecification)->processAggFn($params, $state),
5239+
| $f.parametersValues->at(0)->processAggFn($params, $state),
52405240
| let fn = $f.func.functionName->toOne();
52415241
let singleArgument = $f.parametersValues->match([
52425242
i:InstanceValue[1] | $i.values->size() == 1,

0 commit comments

Comments
 (0)