Skip to content

Commit

Permalink
fix match in mapping (#1996)
Browse files Browse the repository at this point in the history
  • Loading branch information
janeenyamak1 committed Jul 17, 2023
1 parent bf489d2 commit 24aef95
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,18 @@ meta::pure::mapping::modelToModel::test::alloy::simple::testConflictVariableInMa
assertEquals($expected, $json);
}

function <<meta::pure::profiles::test.Test, meta::pure::profiles::test.AlloyOnly>>
{ serverVersion.start='v1_19_0'}
meta::pure::mapping::modelToModel::test::alloy::simple::testMatchInMapping(): Boolean[1]
{
let runtime = testJsonRuntime(Firm, '[{"employees":[{"@type":"PersonA","role":"developer","firstNameA":"Smith","firstName":"testFirstName","lastName":"testLastName"}]}]');
let lambda = {|AllEmployees.all()->meta::pure::graphFetch::execution::graphFetch(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)->meta::pure::graphFetch::execution::serialize(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)};
let result = execute($lambda, meta::pure::mapping::modelToModel::test::alloy::simple::function::MatchMappingTest, $runtime, meta::pure::extension::defaultExtensions());
let json = $result.values->toOne();
let expected = '{"names":[]}';
assert(meta::json::jsonEquivalent($expected->meta::json::parseJSON(), $json->meta::json::parseJSON()));
}

Class meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm
{
name: String[0..1];
Expand All @@ -109,11 +121,27 @@ Class meta::pure::mapping::modelToModel::test::alloy::simple::function::Person
role: meta::pure::mapping::modelToModel::test::alloy::simple::function::EmployeeRole[0..1];
}

Class meta::pure::mapping::modelToModel::test::alloy::simple::function::PersonA extends Person
{
firstNameA: String[1];
}

Class meta::pure::mapping::modelToModel::test::alloy::simple::function::PersonB extends Person
{
firstNameB: String[1];
middleNames: String[*];
}

Class meta::pure::mapping::modelToModel::test::alloy::simple::function::FirstEmployee
{
name: String[0..1];
}

Class meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees
{
names: String[*];
}

Enum meta::pure::mapping::modelToModel::test::alloy::simple::function::EmployeeRole
{
developer,
Expand Down Expand Up @@ -153,3 +181,21 @@ Mapping meta::pure::mapping::modelToModel::test::alloy::simple::function::defaul
name: $src.employees->filter(x|$x.role.name == 'developer')->first().firstName
}
)

###Mapping

Mapping meta::pure::mapping::modelToModel::test::alloy::simple::function::MatchMappingTest
(
meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees: Pure
{
~src meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm
names: $src.employees->map(
c|$c->match(
[
personA: meta::pure::mapping::modelToModel::test::alloy::simple::function::PersonA[1]|[],
personB: meta::pure::mapping::modelToModel::test::alloy::simple::function::PersonB[1]|$personB.firstNameB
]
)
)
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ function meta::pure::executionPlan::platformBinding::legendJava::library::lang::
)->j_cast(javaFunction(javaObject(), $type));

let mainTemp = $v->cast(@LambdaFunction<Any>)->processLambda($ctx.conventions, noDebug());
let main = if($v->cast(@LambdaFunction<Any>).expressionSequence->last()->toOne()->isNil(),
let main = if($v->cast(@LambdaFunction<Any>).expressionSequence->last()->toOne()->isNil() && !$ctx.returnType->isJavaList(),
| let params = $mainTemp->cast(@Lambda).parameters;
j_lambda($params, j_null()->j_cast($ctx.returnType), javaFunctionType($params.type, $ctx.returnType));,
| $mainTemp);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,18 @@ function <<test.Test>> meta::relational::executionPlan::platformBinding::legendJ
assertEquals($expectedJava, $withJava->planToString(true, meta::relational::extension::relationalExtensions()));
}

function <<test.Test>> meta::relational::executionPlan::platformBinding::legendJava::tests::javaGenerationWithMatchInMapping() : Boolean[1]
{
let runtime = meta::pure::mapping::modelToModel::test::alloy::utils::testJsonRuntime(meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm, '[{"employees":[{"@type":"PersonA","role":"developer","firstNameA":"Smith","firstName":"testFirstName","lastName":"testLastName"}]}]');
let lambda = {|meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees.all()->meta::pure::graphFetch::execution::graphFetch(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)->meta::pure::graphFetch::execution::serialize(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)};
let expected = 'PureExp(type=Stringexpression=->serialize(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)(StoreMappingGlobalGraphFetch(type=PartialClass[impls=[(meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees|MatchMappingTest.meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees)],propertiesWithParameters=[names]]resultSizeRange=*store=MODELlocalGraphFetchExecutionNode=InMemoryRootGraphFetch(type=PartialClass[impls=[(meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees|MatchMappingTest.meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees)],propertiesWithParameters=[names]]graphFetchTree=[meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees/meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees]{@(meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees->)@[/names]}nodeIndex=0batchSize=1checked=false(StoreStreamReading(type=PartialClass[impls=[],propertiesWithParameters=[employees]]graphFetchTree=#{meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm{employees{firstNameB}}}#connection=JsonModelConnection(url=data:application/json,[{"employees":[{"@type":"PersonA","role":"developer","firstNameA":"Smith","firstName":"testFirstName","lastName":"testLastName"}]}],class=meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm)enableConstraints=truechecked=false))children=[])children=[]localTreeIndices=[0,1]dependencyIndices=[])))';
let res = meta::pure::executionPlan::executionPlan($lambda, meta::pure::mapping::modelToModel::test::alloy::simple::function::MatchMappingTest, $runtime, meta::pure::extension::defaultExtensions());
assertEquals($expected, $res->meta::pure::executionPlan::toString::planToStringWithoutFormatting(meta::pure::extension::defaultExtensions()));

let withJava = $res->meta::pure::executionPlan::generatePlatformCode(meta::pure::executionPlan::platformBinding::legendJava::legendJavaPlatformBindingId(), ^meta::pure::executionPlan::platformBinding::legendJava::LegendJavaPlatformBindingConfig(), meta::relational::executionPlan::platformBinding::legendJava::relationalExtensionsWithLegendJavaPlatformBinding());
let expectedJava = 'PureExp(type=Stringexpression=->serialize(#{meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees{names}}#)(StoreMappingGlobalGraphFetch(type=PartialClass[impls=[(meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees|MatchMappingTest.meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees)],propertiesWithParameters=[names]]resultSizeRange=*store=MODELlocalGraphFetchExecutionNode=InMemoryRootGraphFetch(type=PartialClass[impls=[(meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees|MatchMappingTest.meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees)],propertiesWithParameters=[names]]graphFetchTree=[meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees/meta::pure::mapping::modelToModel::test::alloy::simple::function::AllEmployees]{@(meta_pure_mapping_modelToModel_test_alloy_simple_function_AllEmployees->)@[/names]}nodeIndex=0batchSize=1checked=false(StoreStreamReading(type=PartialClass[impls=[],propertiesWithParameters=[employees]]graphFetchTree=#{meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm{employees{firstNameB}}}#connection=JsonModelConnection(url=data:application/json,[{"employees":[{"@type":"PersonA","role":"developer","firstNameA":"Smith","firstName":"testFirstName","lastName":"testLastName"}]}],class=meta::pure::mapping::modelToModel::test::alloy::simple::function::Firm)enableConstraints=truechecked=falseimplementation(calls=_pure.plan.root.n1.localGraph.n1.Execute)))children=[]implementation(calls=_pure.plan.root.n1.localGraph.Execute))children=[]localTreeIndices=[0,1]dependencyIndices=[]))implementation(calls=_pure.plan.root.Serialize))';
assertEquals($expectedJava, $withJava->meta::pure::executionPlan::toString::planToStringWithoutFormatting(meta::pure::extension::defaultExtensions()));
}

function <<test.Test>> meta::relational::executionPlan::platformBinding::legendJava::tests::classPathsInfluencedByPlanId() : Boolean[1]
{
Expand Down

0 comments on commit 24aef95

Please sign in to comment.