Skip to content

Commit 6249801

Browse files
authored
fix for lineage config in generation analytic (finos#3851)
1 parent 60f4ec7 commit 6249801

File tree

2 files changed

+37
-6
lines changed
  • legend-engine-xts-analytics
    • legend-engine-xts-analytics-lineage/legend-engine-xt-analytics-lineage-pure/src/main/resources/core_analytics_lineage

2 files changed

+37
-6
lines changed

legend-engine-xts-analytics/legend-engine-xts-analytics-lineage/legend-engine-xt-analytics-lineage-pure/src/main/resources/core_analytics_lineage/fullAnalytics.pure

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,41 @@ function meta::analytics::lineage::getLineageInputFromFunctionDefinition(f:Funct
168168
);
169169
}
170170

171+
//TODO: remove once backward comaptibility is sorted
172+
function meta::analytics::lineage::computeLineageLegacy(f:FunctionDefinition<Any>[1], m:Mapping[1], r:Runtime[0..1], extensions:meta::pure::extension::Extension[*], config: FunctionAnalyticsConfig[1]):FunctionAnalytics[1]
173+
{
174+
let mappings = if($r->isEmpty(), |$m, |$m->concatenate(getMappingsFromRuntime($r->toOne())));
175+
let modelToModelMappings = $mappings->init();
176+
177+
let sourceMapping = $mappings->last()->toOne();
178+
let funcBody = $f.expressionSequence->evaluateAndDeactivate();
179+
let updatedFuncBody = $funcBody->map(e|$e->meta::pure::lineage::analytics::inlineQualifiedProperties(newMap([]->cast(@Pair<VariableExpression, ValueSpecification>), VariableExpression->classPropertyByName('name')->cast(@Property<VariableExpression,String|1>)), $f->openVariableValues(), $extensions));
180+
let propertyTrees = $updatedFuncBody->map(e|$e->buildMultiLevelPropertyTrees($modelToModelMappings, $extensions));
181+
182+
let combinedTrees = if( $propertyTrees->size()>1,|$propertyTrees->first()->toOne()->findAndAddChildrenAtTheEnd([],$propertyTrees->tail()),|$propertyTrees->toOne());
183+
184+
let reprocessedFuncBody = if($modelToModelMappings->isEmpty() && $mappings->size() == 1,
185+
|$updatedFuncBody,
186+
|$updatedFuncBody->map(e|$e->cast(@FunctionExpression)->meta::pure::mapping::modelToModel::chain::allReprocess([], $modelToModelMappings, $extensions, noDebug()).res));
187+
188+
let vars = $f->functionType().parameters->evaluateAndDeactivate()->map(p| pair($p.name, ^List<PlanVarPlaceHolder>(values = ^PlanVarPlaceHolder(name=$p.name, genericType = $p.genericType, multiplicity=$p.multiplicity))));
189+
let classLineageMapping = if($modelToModelMappings->isEmpty() && $mappings->size() == 1, | $sourceMapping, | $modelToModelMappings);
190+
^FunctionAnalytics
191+
(
192+
databaseLineage = if($config.databaseLineage, |$f->toFlowDatabase($sourceMapping, $combinedTrees, $r,$extensions)->toGraph(), |^Graph()),
193+
classLineage = if($config.classLineage, |$f->toFlowClass($combinedTrees, $classLineageMapping)->toGraph(), |^Graph()),
194+
functionTrees = $combinedTrees,
195+
relationTree = if($config.relationTree, |if($f->functionReturnType().rawType->toOne()->_subTypeOf(TabularDataSet) && $r->isNotEmpty() && $modelToModelMappings->isEmpty(),
196+
| scanRelations(^LambdaFunction<{->Any[*]}>(expressionSequence = $funcBody), $sourceMapping, $r->toOne(), $vars, noDebug(), $extensions),
197+
| scanRelations($combinedTrees->last()->toOne(), $sourceMapping)), |^RelationTree()),
198+
reportLineage = if($config.reportLineage, |buildReportLineage($reprocessedFuncBody->last()->toOne(), $sourceMapping,$vars), |^ReportLineage())
199+
);
200+
}
171201

172202

173203
function meta::analytics::lineage::computeLineage(f:FunctionDefinition<Any>[1], m:Mapping[0..1], r:Runtime[0..1], extensions:meta::pure::extension::Extension[*], config: FunctionAnalyticsConfig[1]):FunctionAnalytics[1]
174204
{
205+
175206
let lineageExtensions = meta::analytics::lineage::getLineageExtension($extensions);
176207
let lineageInputFromFuncDef = $f->meta::analytics::lineage::getLineageInputFromFunctionDefinition($extensions);
177208

@@ -200,11 +231,11 @@ function meta::analytics::lineage::computeLineage(f:FunctionDefinition<Any>[1],
200231
|
201232
^FunctionAnalytics
202233
(
203-
databaseLineage = $relationElementAccessor->map(r |$r-> meta::analytics::lineage::relationAccessorToFlow($f, $lineageExtensions))->merge()->toGraph($lineageExtensions),
234+
databaseLineage = if($config.databaseLineage,| $relationElementAccessor->map(r |$r-> meta::analytics::lineage::relationAccessorToFlow($f, $lineageExtensions))->merge()->toGraph($lineageExtensions),|^Graph()),
204235
classLineage = ^Graph(),
205236
functionTrees = ^PropertyPathTree(display='root', value='root'), // Assuming that in the simple case, there are no model joins and hence no property trees
206237
relationTree = ^RelationTree(),
207-
reportLineage = buildReportLineage($reprocessedFuncBody->last()->toOne(), $relationElementAccessor, $extensions)
238+
reportLineage =if($config.reportLineage,| buildReportLineage($reprocessedFuncBody->last()->toOne(), $relationElementAccessor, $extensions),|^ReportLineage())
208239
);,
209240

210241
|
@@ -227,11 +258,11 @@ function meta::analytics::lineage::computeLineage(f:FunctionDefinition<Any>[1],
227258
let treeforClass= if($mappings->size()>1,|$propertyTrees->at(0),|$combinedTrees);
228259
^FunctionAnalytics
229260
(
230-
databaseLineage = $f->toFlowDatabase2($sourceMapping, $combinedTrees, $runtime,$extensions)->toGraph($lineageExtensions),
231-
classLineage = $f->toFlowClass($treeforClass, $classLineageMapping)->toGraph($lineageExtensions),
261+
databaseLineage = if($config.databaseLineage,| $f->toFlowDatabase2($sourceMapping, $combinedTrees, $runtime,$extensions)->toGraph($lineageExtensions), |^Graph()),
262+
classLineage = if($config.classLineage,| $f->toFlowClass($treeforClass, $classLineageMapping)->toGraph($lineageExtensions), |^Graph()) ,
232263
functionTrees = $propertyTrees,
233264
relationTree = $relationTree,
234-
reportLineage = buildReportLineage($reprocessedFuncBody->last()->toOne(), $sourceMapping->toOne(), $vars)
265+
reportLineage = if($config.reportLineage,| buildReportLineage($reprocessedFuncBody->last()->toOne(), $sourceMapping->toOne(), $vars),|^ReportLineage())
235266
);
236267
);
237268

legend-engine-xts-analytics/legend-engine-xts-analytics-search/legend-engine-xt-analytics-search-pure/src/main/resources/core_analytics_search/trans.pure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ function meta::analytics::search::transformation::service::buildDatabaseColumnDo
241241
relationTree = false,
242242
reportLineage = true
243243
);
244-
let allLineage = $funcDefinition->meta::analytics::lineage::computeLineage($mapping, $runtime, meta::analytics::search::transformation::getExtensions(), $lineageConfig);
244+
let allLineage = $funcDefinition->meta::analytics::lineage::computeLineageLegacy($mapping, $runtime, meta::analytics::search::transformation::getExtensions(), $lineageConfig);
245245
let columnLineage = $allLineage.reportLineage->meta::analytics::lineage::transformColumns();
246246
let tables = $columnLineage->map(l|
247247
$l.columns->map(c|

0 commit comments

Comments
 (0)