Skip to content

Commit

Permalink
Converter function from TDS -> Relation (#3404)
Browse files Browse the repository at this point in the history
* Converter function from tds to relation

* Converter function from tds to relation
  • Loading branch information
gs-jp1 authored Feb 11, 2025
1 parent 9393b04 commit 5dd4d4b
Show file tree
Hide file tree
Showing 8 changed files with 1,229 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,10 @@
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-pure-runtime-java-extension-compiled-functions-json</artifactId>
</dependency>
<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-pure-runtime-java-extension-compiled-functions-relation</artifactId>
</dependency>

<dependency>
<groupId>org.finos.legend.pure</groupId>
Expand Down Expand Up @@ -330,6 +334,11 @@
<artifactId>legend-engine-pure-runtime-java-extension-shared-functions-json</artifactId>
</dependency>

<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-pure-runtime-java-extension-shared-functions-relation</artifactId>
</dependency>

<dependency>
<groupId>org.finos.legend.pure</groupId>
<artifactId>legend-pure-runtime-java-extension-compiled-dsl-diagram</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ Class meta::pure::extension::Extension
tdsSchema_resolveSchemaImpl : Function<{FunctionExpression[1], Map<String, List<Any>>[1], Extension[*] -> Pair<Function<Any>, Function<{->SchemaState[1]}>>[*]}>[0..1];
//---------------------------------------------------------------------------------------------------------------------------------------

tdsToRelation: meta::pure::tds::toRelation::TdsToRelationExtension[0..1];

// testedBy navigates the Database structure. Should probably delete --------------------------------------------------------------------
testExtension_testedBy : Function<{ReferenceUsage[1], Extension[*] -> Function<{TestedByResult[1]->TestedByResult[1]}>[*]}>[0..1];
//---------------------------------------------------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
// Copyright 2025 Goldman Sachs
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import meta::pure::extension::*;
import meta::protocols::pure::vX_X_X::transformation::helpers::*;


function meta::protocols::pure::vX_X_X::transformation::helpers::var(name:String[1]): meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::Variable[1]
{
var($name, [], [])
}

function meta::protocols::pure::vX_X_X::transformation::helpers::var(name:String[1], multiplicity:Multiplicity[0..1], genericType:meta::protocols::pure::vX_X_X::metamodel::m3::type::generics::GenericType[0..1]): meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::Variable[1]
{
^meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::Variable(
_type = 'var',
name = $name,
genericType = $genericType,
multiplicity = if ($multiplicity->isNotEmpty(), | $multiplicity->toOne()->multiplicity(), | [])
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::multiplicity(value:Any[*]):meta::protocols::pure::vX_X_X::metamodel::m3::multiplicity::Multiplicity[1]
{
^meta::protocols::pure::vX_X_X::metamodel::m3::multiplicity::Multiplicity(lowerBound = $value->size(), upperBound = $value->size())
}

function meta::protocols::pure::vX_X_X::transformation::helpers::lambda(expressionSequence:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[*]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda[1]
{
lambda($expressionSequence, [])
}

function meta::protocols::pure::vX_X_X::transformation::helpers::lambda(expressionSequence:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[*], parameters: meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::Variable[*]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda[1]
{
^meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda(
_type = 'lambda',
parameters = $parameters,
body = $expressionSequence
)
}


function meta::protocols::pure::vX_X_X::transformation::helpers::collection(values:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[*]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::Collection[1]
{
^meta::protocols::pure::vX_X_X::metamodel::valueSpecification::Collection(_type = 'collection',
values = $values,
multiplicity = ^meta::protocols::pure::vX_X_X::metamodel::m3::multiplicity::Multiplicity(lowerBound=$values->size(), upperBound=$values->size())
)
}


function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecArrayInstance(names:String[*]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance[1]
{
createColSpecArrayInstance(createColSpecArray($names))
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecArrayInstance(colSpecs:meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[*]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance[1]
{
createColSpecArrayInstance($colSpecs->createColSpecArray())
}


function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecArrayInstance(colSpecs:meta::protocols::pure::vX_X_X::metamodel::relation::ColSpecArray[1]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance[1]
{
^meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance(
_type = 'classInstance',
type = 'colSpecArray',
value = $colSpecs
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecInstance(colSpec:meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[1]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance[1]
{
^meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance(
_type = 'classInstance',
type = 'colSpec',
value = $colSpec
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpec(name:String[1]):meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[1]
{
createColSpec($name, [], []);
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpec(name:String[1], func1:meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda[0..1]):meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[1]
{
createColSpec($name, $func1, []);
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpec(name:String[1], func1:meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda[0..1], func2: meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::Lambda[0..1]):meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[1]
{
^meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec(
name = $name,
function1 = $func1,
function2 = $func2
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecArray(colspecs: meta::protocols::pure::vX_X_X::metamodel::relation::ColSpec[*]):meta::protocols::pure::vX_X_X::metamodel::relation::ColSpecArray[1]
{
^meta::protocols::pure::vX_X_X::metamodel::relation::ColSpecArray(
colSpecs = $colspecs
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecInstance(name:String[1]):meta::protocols::pure::vX_X_X::metamodel::valueSpecification::ClassInstance[1]
{
createColSpecInstance(createColSpec($name, [], []))
}

function meta::protocols::pure::vX_X_X::transformation::helpers::createColSpecArray(names:String[*]):meta::protocols::pure::vX_X_X::metamodel::relation::ColSpecArray[1]
{
createColSpecArray($names->map(n | $n->createColSpec([], [])))
}


function meta::protocols::pure::vX_X_X::transformation::helpers::appliedFunction(f:Function<Any>[1]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedFunction[1]
{
appliedFunction($f, []);
}

function meta::protocols::pure::vX_X_X::transformation::helpers::appliedFunction(f:Function<Any>[1], parameters:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[*]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedFunction[1]
{
^meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedFunction(
_type = 'func',
function = $f.functionName->toOne(),
fControl = $f.name,
parameters = $parameters
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::property(name:String[1], parameters:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[*]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedProperty[1]
{
^meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedProperty(
_type = 'property',
property = $name,
parameters = $parameters
)
}

function meta::protocols::pure::vX_X_X::transformation::helpers::processExtractEnumValue(enum:Enum[1]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[1]
{
processExtractEnumValue($enum->type()->cast(@Enumeration<Enum>), $enum->toString());
}


function meta::protocols::pure::vX_X_X::transformation::helpers::processExtractEnumValue(enumeration:Enumeration<Enum>[1], value:String[1]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[1]
{
processExtractEnumValue($enumeration, ^meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::CString(_type = 'string', value = $value))
}

function meta::protocols::pure::vX_X_X::transformation::helpers::processExtractEnumValue(enumeration:Enumeration<Enum>[1], value:meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[1]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[1]
{
^meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::AppliedProperty(
_type = 'property',
property = $value->match([
c:meta::protocols::pure::vX_X_X::metamodel::valueSpecification::raw::CString[1] | $c.value
]),
parameters = transformAny($enumeration, [])
)
}


function meta::protocols::pure::vX_X_X::transformation::helpers::transformAny(value:Any[1], extensions:Extension[*]):meta::protocols::pure::vX_X_X::metamodel::m3::valuespecification::ValueSpecification[1]
{
meta::protocols::pure::vX_X_X::transformation::fromPureGraph::valueSpecification::transformAny($value, [], ^Map<String,meta::pure::functions::collection::List<Any>>(), PureOne, $extensions);
}
Loading

0 comments on commit 5dd4d4b

Please sign in to comment.