Search in sources :

Example 1 with PropertyMapping

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.PropertyMapping in project legend-engine by finos.

the class HelperRelationalBuilder method processRelationalPropertyMapping.

private static PropertyMapping processRelationalPropertyMapping(RelationalPropertyMapping propertyMapping, CompileContext context, PropertyMappingsImplementation immediateParent, InstanceSetImplementation topParent, MutableList<EmbeddedRelationalInstanceSetImplementation> embeddedRelationalPropertyMappings, RichIterable<EnumerationMapping<Object>> allEnumerationMappings, MutableMap<String, TableAlias> aliasMap) {
    org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping rpm = new Root_meta_relational_mapping_RelationalPropertyMapping_Impl("");
    Property property = resolvePropertyForRelationalPropertyMapping(propertyMapping, immediateParent, context);
    if (propertyMapping.bindingTransformer != null) {
        return buildSemiStructuredPropertyMapping(property, propertyMapping, immediateParent, (RootRelationalInstanceSetImplementation) topParent, embeddedRelationalPropertyMappings, aliasMap, context);
    }
    org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping res = rpm._property(property)._localMappingProperty(propertyMapping.localMappingProperty != null)._relationalOperationElement(processRelationalOperationElement(propertyMapping.relationalOperation, context, aliasMap, FastList.newList()))._sourceSetImplementationId(HelperRelationalBuilder.getPropertyMappingSourceId(propertyMapping, immediateParent, property, context))._targetSetImplementationId(HelperRelationalBuilder.getPropertyMappingTargetId(propertyMapping, immediateParent, property, context))._owner(immediateParent);
    rpm.setSourceInformation(SourceInformationHelper.toM3SourceInformation(propertyMapping.sourceInformation));
    if (propertyMapping.enumMappingId != null) {
        EnumerationMapping<Object> eMap = allEnumerationMappings.select(e -> e._name().equals(propertyMapping.enumMappingId)).getFirst();
        Assert.assertTrue(eMap != null, () -> "Can't find enumeration mapping '" + propertyMapping.enumMappingId + "'");
        res = res._transformer(eMap);
    }
    return res;
}
Also used : Maps(org.eclipse.collections.impl.factory.Maps) Decimal(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Decimal) RootRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RootRelationalInstanceSetImplementation) Predicate(org.eclipse.collections.api.block.predicate.Predicate) Join(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.join.Join) BusinessMilestoning(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.BusinessMilestoning) SemiStructuredEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.SemiStructuredEmbeddedRelationalInstanceSetImplementation) PropertyMapping(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping) RichIterable(org.eclipse.collections.api.RichIterable) EnumerationMapping(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.EnumerationMapping) Root_meta_relational_metamodel_datatype_TinyInt_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_TinyInt_Impl) Relation(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.Relation) Root_meta_relational_mapping_ColumnMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_ColumnMapping_Impl) Root_meta_relational_metamodel_datatype_Numeric_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Numeric_Impl) Root_meta_relational_metamodel_datatype_Varchar_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Varchar_Impl) Root_meta_relational_metamodel_join_JoinTreeNode_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_join_JoinTreeNode_Impl) GroupByMapping(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.GroupByMapping) ElementWithJoins(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.ElementWithJoins) Date(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Date) Root_meta_relational_metamodel_MultiGrainFilter_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_MultiGrainFilter_Impl) AssociationImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.AssociationImplementation) MappingClass(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.MappingClass) UnifiedMap(org.eclipse.collections.impl.map.mutable.UnifiedMap) Schema(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Schema) Numeric(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Numeric) Root_meta_pure_metamodel_function_property_Property_Impl(org.finos.legend.pure.generated.Root_meta_pure_metamodel_function_property_Property_Impl) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin) Class(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.type.Class) Root_meta_pure_functions_collection_Pair_Impl(org.finos.legend.pure.generated.Root_meta_pure_functions_collection_Pair_Impl) NamedRelationAccessor(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.NamedRelationAccessor) Other(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Other) ColumnAccessor(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.ColumnAccessor) Mapping(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.Mapping) GenericType(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.type.generics.GenericType) EngineException(org.finos.legend.engine.shared.core.operational.errorManagement.EngineException) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) ListIterable(org.eclipse.collections.api.list.ListIterable) Root_meta_relational_mapping_GroupByMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_GroupByMapping_Impl) Root_meta_relational_metamodel_datatype_Other_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Other_Impl) PropertyMappingsImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMappingsImplementation) Function(org.eclipse.collections.api.block.function.Function) Root_meta_relational_metamodel_TableAliasColumn_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAliasColumn_Impl) Procedure(org.eclipse.collections.api.block.procedure.Procedure) Root_meta_external_shared_format_binding_validation_SuccessfulBindingDetail(org.finos.legend.pure.generated.Root_meta_external_shared_format_binding_validation_SuccessfulBindingDetail) View(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.View) FastList(org.eclipse.collections.impl.list.mutable.FastList) LinkedHashMap(java.util.LinkedHashMap) VarChar(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.VarChar) MutableMap(org.eclipse.collections.api.map.MutableMap) MilestoningStereotype(org.finos.legend.pure.m3.compiler.postprocessing.processor.milestoning.MilestoningStereotype) TreeNode(org.finos.legend.pure.m3.coreinstance.meta.pure.functions.collection.TreeNode) Root_meta_relational_metamodel_relation_Table_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_Table_Impl) Float(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Float) TablePtr(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.TablePtr) Root_meta_relational_metamodel_DynaFunction_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_DynaFunction_Impl) Binary(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Binary) Root_meta_pure_metamodel_relationship_Generalization_Impl(org.finos.legend.pure.generated.Root_meta_pure_metamodel_relationship_Generalization_Impl) Predicates(org.eclipse.collections.impl.block.factory.Predicates) Timestamp(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Timestamp) DynaFunction(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.DynaFunction) Predicates2(org.eclipse.collections.impl.block.factory.Predicates2) ExternalFormatExtension(org.finos.legend.engine.external.shared.format.model.ExternalFormatExtension) DataType(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.DataType) ListIterate(org.eclipse.collections.impl.utility.ListIterate) CoreInstance(org.finos.legend.pure.m4.coreinstance.CoreInstance) OtherwiseEmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.OtherwiseEmbeddedRelationalPropertyMapping) SetImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.SetImplementation) Literal(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Literal) EmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.EmbeddedRelationalInstanceSetImplementation) Root_meta_relational_mapping_OtherwiseEmbeddedRelationalInstanceSetImplementation_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_OtherwiseEmbeddedRelationalInstanceSetImplementation_Impl) Root_meta_relational_metamodel_relation_View_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_View_Impl) RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) Table(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.Table) ImmutableList(org.eclipse.collections.api.list.ImmutableList) RelationalClassMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalClassMapping) RelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalPropertyMapping) TableAlias(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias) Operation(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.operation.Operation) Varbinary(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Varbinary) Root_meta_relational_metamodel_TableAlias_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAlias_Impl) Root_meta_relational_metamodel_operation_SemiStructuredPropertyAccess_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_operation_SemiStructuredPropertyAccess_Impl) UnifiedSet(org.eclipse.collections.impl.set.mutable.UnifiedSet) org.finos.legend.pure.generated.core_pure_model_modelUnit(org.finos.legend.pure.generated.core_pure_model_modelUnit) Root_meta_relational_mapping_InlineEmbeddedRelationalInstanceSetImplementation_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_InlineEmbeddedRelationalInstanceSetImplementation_Impl) EngineErrorType(org.finos.legend.engine.protocol.pure.v1.model.context.EngineErrorType) Root_meta_external_shared_format_binding_BindingTransformer(org.finos.legend.pure.generated.Root_meta_external_shared_format_binding_BindingTransformer) Association(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.relationship.Association) Multimap(org.eclipse.collections.api.multimap.Multimap) Predicate2(org.eclipse.collections.api.block.predicate.Predicate2) SetIterable(org.eclipse.collections.api.set.SetIterable) SemiStructured(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.SemiStructured) Root_meta_relational_metamodel_datatype_SmallInt_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_SmallInt_Impl) Generalization(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.relationship.Generalization) Root_meta_relational_mapping_RelationalPropertyMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_RelationalPropertyMapping_Impl) ColumnMapping(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.ColumnMapping) MutableList(org.eclipse.collections.api.list.MutableList) Root_meta_external_shared_format_binding_Binding(org.finos.legend.pure.generated.Root_meta_external_shared_format_binding_Binding) Root_meta_relational_metamodel_SQLNull_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_SQLNull_Impl) Root_meta_pure_metamodel_valuespecification_InstanceValue_Impl(org.finos.legend.pure.generated.Root_meta_pure_metamodel_valuespecification_InstanceValue_Impl) RootRelationalClassMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RootRelationalClassMapping) MutableSet(org.eclipse.collections.api.set.MutableSet) Pair(org.finos.legend.pure.m3.coreinstance.meta.pure.functions.collection.Pair) Filter(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Filter) InlineEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.InlineEmbeddedRelationalInstanceSetImplementation) Property(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.function.property.Property) Store(org.finos.legend.pure.m3.coreinstance.meta.pure.store.Store) Root_meta_relational_mapping_SemiStructuredRelationalPropertyMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_SemiStructuredRelationalPropertyMapping_Impl) Tuples(org.eclipse.collections.impl.tuple.Tuples) InstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.InstanceSetImplementation) Root_meta_relational_metamodel_Schema_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_Schema_Impl) Root_meta_relational_metamodel_LiteralList_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_LiteralList_Impl) Root_meta_relational_metamodel_Column_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_Column_Impl) org.finos.legend.pure.generated.core_pure_corefunctions_metaExtension(org.finos.legend.pure.generated.core_pure_corefunctions_metaExtension) Root_meta_external_shared_format_binding_BindingTransformer_Impl(org.finos.legend.pure.generated.Root_meta_external_shared_format_binding_BindingTransformer_Impl) Root_meta_relational_metamodel_datatype_Real_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Real_Impl) SourceInformation(org.finos.legend.engine.protocol.pure.v1.model.SourceInformation) Root_meta_relational_metamodel_join_Join_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_join_Join_Impl) OtherwiseEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation) JoinPointer(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.JoinPointer) Root_meta_relational_metamodel_datatype_Decimal_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Decimal_Impl) AggregationAwarePropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.aggregationAware.AggregationAwarePropertyMapping) SmallInt(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.SmallInt) RelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalInstanceSetImplementation) DynaFunc(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.DynaFunc) Root_meta_pure_mapping_MappingClass_Impl(org.finos.legend.pure.generated.Root_meta_pure_mapping_MappingClass_Impl) List(java.util.List) Char(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Char) SchemaAccessor(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.SchemaAccessor) Lists(org.eclipse.collections.impl.factory.Lists) Optional(java.util.Optional) Root_meta_relational_metamodel_datatype_Varbinary_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Varbinary_Impl) Root_meta_relational_metamodel_relation_BusinessMilestoning_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_BusinessMilestoning_Impl) Root_meta_pure_metamodel_type_Class_Impl(org.finos.legend.pure.generated.Root_meta_pure_metamodel_type_Class_Impl) Root_meta_relational_metamodel_Filter_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_Filter_Impl) Assert(org.finos.legend.engine.shared.core.operational.Assert) Root_meta_relational_metamodel_relation_BusinessSnapshotMilestoning_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_BusinessSnapshotMilestoning_Impl) ProcessingMilestoning(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.ProcessingMilestoning) EmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.EmbeddedRelationalPropertyMapping) Root_meta_relational_mapping_FilterMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_FilterMapping_Impl) Database(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Database) InlineEmbeddedPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.InlineEmbeddedPropertyMapping) Root_meta_external_shared_format_binding_validation_BindingDetail(org.finos.legend.pure.generated.Root_meta_external_shared_format_binding_validation_BindingDetail) Root_meta_relational_mapping_SemiStructuredEmbeddedRelationalInstanceSetImplementation_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_SemiStructuredEmbeddedRelationalInstanceSetImplementation_Impl) Function0(org.eclipse.collections.api.block.function.Function0) BigInt(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.BigInt) Bit(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Bit) Real(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Real) Column(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Column) PureDate(org.finos.legend.pure.m4.coreinstance.primitive.date.PureDate) Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl) JoinTreeNode(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.join.JoinTreeNode) Root_meta_pure_metamodel_type_generics_GenericType_Impl(org.finos.legend.pure.generated.Root_meta_pure_metamodel_type_generics_GenericType_Impl) Root_meta_relational_metamodel_datatype_Binary_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Binary_Impl) PackageableElement(org.finos.legend.pure.m3.navigation.PackageableElement.PackageableElement) TinyInt(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.TinyInt) MilestoningFunctions(org.finos.legend.pure.m3.compiler.postprocessing.processor.milestoning.MilestoningFunctions) Double(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.datatype.Double) Type(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.type.Type) Root_meta_relational_metamodel_Literal_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_Literal_Impl) Root_meta_relational_metamodel_relation_ProcessingMilestoning_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_ProcessingMilestoning_Impl) Root_meta_relational_metamodel_datatype_Char_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Char_Impl) Root_meta_relational_metamodel_datatype_SemiStructured_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_SemiStructured_Impl) Sets(org.eclipse.collections.impl.factory.Sets) org.finos.legend.pure.generated.platform_pure_corefunctions_meta(org.finos.legend.pure.generated.platform_pure_corefunctions_meta) NamedRelation(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.NamedRelation) Root_meta_relational_mapping_EmbeddedRelationalInstanceSetImplementation_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_EmbeddedRelationalInstanceSetImplementation_Impl) Root_meta_relational_metamodel_datatype_Timestamp_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Timestamp_Impl) org.finos.legend.pure.generated.platform_pure_corefunctions_meta(org.finos.legend.pure.generated.platform_pure_corefunctions_meta) Property(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.function.property.Property) Root_meta_relational_mapping_RelationalPropertyMapping_Impl(org.finos.legend.pure.generated.Root_meta_relational_mapping_RelationalPropertyMapping_Impl)

Example 2 with PropertyMapping

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.PropertyMapping in project legend-engine by finos.

the class HelperRelationalBuilder method collectJoinTreeNodesFromPropertyMapping.

private static void collectJoinTreeNodesFromPropertyMapping(List<org.eclipse.collections.api.tuple.Pair<String, JoinTreeNode>> targetCollection, PropertyMapping propertyMapping) {
    if (propertyMapping instanceof org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping) {
        RelationalOperationElement relationalOperationElement = ((org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping) propertyMapping)._relationalOperationElement();
        HelperRelationalBuilder.collectJoinTreeNodes(targetCollection, propertyMapping._property()._name(), relationalOperationElement);
    }
    if (propertyMapping instanceof OtherwiseEmbeddedRelationalInstanceSetImplementation) {
        PropertyMapping relationalOperationElement = ((OtherwiseEmbeddedRelationalInstanceSetImplementation) propertyMapping)._otherwisePropertyMapping();
        collectJoinTreeNodesFromPropertyMapping(targetCollection, relationalOperationElement);
    }
    if (propertyMapping instanceof PropertyMappingsImplementation) {
        RichIterable<? extends PropertyMapping> propertyMappings = ((PropertyMappingsImplementation) propertyMapping)._propertyMappings();
        for (PropertyMapping subMapping : propertyMappings) {
            collectJoinTreeNodesFromPropertyMapping(targetCollection, subMapping);
        }
    }
}
Also used : OtherwiseEmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.OtherwiseEmbeddedRelationalPropertyMapping) RelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalPropertyMapping) EmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.EmbeddedRelationalPropertyMapping) OtherwiseEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation) RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) PropertyMapping(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping) OtherwiseEmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.OtherwiseEmbeddedRelationalPropertyMapping) RelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalPropertyMapping) AggregationAwarePropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.aggregationAware.AggregationAwarePropertyMapping) EmbeddedRelationalPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.EmbeddedRelationalPropertyMapping) InlineEmbeddedPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.InlineEmbeddedPropertyMapping) PropertyMappingsImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMappingsImplementation)

Example 3 with PropertyMapping

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.PropertyMapping in project legend-engine by finos.

the class RelationalCompilerExtension method getExtraAssociationMappingProcessors.

@Override
public List<Function3<AssociationMapping, Mapping, CompileContext, AssociationImplementation>> getExtraAssociationMappingProcessors() {
    return Collections.singletonList((associationMapping, parentMapping, context) -> {
        if (associationMapping instanceof RelationalAssociationMapping) {
            RelationalAssociationMapping relationalAssociationImplementation = (RelationalAssociationMapping) associationMapping;
            RelationalAssociationImplementation base = new Root_meta_relational_mapping_RelationalAssociationImplementation_Impl("");
            final org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.relationship.Association pureAssociation = context.resolveAssociation(relationalAssociationImplementation.association, associationMapping.sourceInformation);
            MutableList<EmbeddedRelationalInstanceSetImplementation> embeddedRelationalPropertyMappings = Lists.mutable.empty();
            MutableList<Store> stores = ListIterate.collect(relationalAssociationImplementation.stores, context::resolveStore);
            // NOTE: we set the association before processing the property mappings, so we can resolve the correct property in the association
            // in the case where the user does not provide the class name of where the association property comes from
            base._association(pureAssociation);
            RichIterable<org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping> rpm = ListIterate.collect(relationalAssociationImplementation.propertyMappings, propertyMapping -> HelperRelationalBuilder.processAbstractRelationalPropertyMapping(propertyMapping, context, base, null, embeddedRelationalPropertyMappings, HelperMappingBuilder.getAllEnumerationMappings(parentMapping), Maps.mutable.empty()));
            base._stores(stores)._propertyMappings(rpm)._parent(parentMapping);
            parentMapping._classMappingsAddAll(embeddedRelationalPropertyMappings);
            return base;
        }
        return null;
    });
}
Also used : RelationalAssociationImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalAssociationImplementation) Store(org.finos.legend.pure.m3.coreinstance.meta.pure.store.Store) EmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.EmbeddedRelationalInstanceSetImplementation) RelationalAssociationMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalAssociationMapping)

Example 4 with PropertyMapping

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.PropertyMapping in project legend-engine by finos.

the class RelationalParseTreeWalker method visitInlineEmbeddedPropertyMapping.

private PropertyMapping visitInlineEmbeddedPropertyMapping(RelationalParserGrammar.InlineEmbeddedPropertyMappingContext ctx, PropertyPointer propertyPointer, String targetId) {
    InlineEmbeddedPropertyMapping inlineEmbeddedPropertyMapping = new InlineEmbeddedPropertyMapping();
    inlineEmbeddedPropertyMapping.sourceInformation = this.walkerSourceInformation.getSourceInformation(ctx);
    inlineEmbeddedPropertyMapping.id = targetId;
    inlineEmbeddedPropertyMapping.target = targetId;
    inlineEmbeddedPropertyMapping.property = propertyPointer;
    inlineEmbeddedPropertyMapping.setImplementationId = PureGrammarParserUtility.fromIdentifier(ctx.identifier());
    return inlineEmbeddedPropertyMapping;
}
Also used : InlineEmbeddedPropertyMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.InlineEmbeddedPropertyMapping)

Example 5 with PropertyMapping

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.PropertyMapping in project legend-engine by finos.

the class RelationalGrammarComposerExtension method getExtraClassMappingComposers.

@Override
public List<Function2<ClassMapping, PureGrammarComposerContext, String>> getExtraClassMappingComposers() {
    return Lists.mutable.with((classMapping, context) -> {
        if (classMapping instanceof RootRelationalClassMapping) {
            RelationalGrammarComposerContext ctx = RelationalGrammarComposerContext.Builder.newInstance(context).build();
            RootRelationalClassMapping rootRelationalClassMapping = (RootRelationalClassMapping) classMapping;
            StringBuilder builder = new StringBuilder();
            builder.append(": Relational\n");
            builder.append(getTabString()).append("{\n");
            if (rootRelationalClassMapping.filter != null) {
                appendTabString(builder, 2).append(HelperRelationalGrammarComposer.renderFilterMapping(rootRelationalClassMapping.filter)).append("\n");
            }
            builder.append(rootRelationalClassMapping.distinct ? (getTabString(2) + "~distinct\n") : "");
            if (!rootRelationalClassMapping.groupBy.isEmpty()) {
                appendTabString(builder, 2).append("~groupBy\n");
                appendTabString(builder, 2).append("(\n");
                builder.append(LazyIterate.collect(rootRelationalClassMapping.groupBy, op -> getTabString(3) + HelperRelationalGrammarComposer.renderRelationalOperationElement(op, ctx)).makeString(",\n"));
                builder.append("\n");
                appendTabString(builder, 2).append(")\n");
            }
            if (!rootRelationalClassMapping.primaryKey.isEmpty()) {
                appendTabString(builder, 2).append("~primaryKey\n");
                appendTabString(builder, 2).append("(\n");
                builder.append(LazyIterate.collect(rootRelationalClassMapping.primaryKey, op -> getTabString(3) + HelperRelationalGrammarComposer.renderRelationalOperationElement(op, ctx)).makeString(",\n"));
                builder.append("\n");
                appendTabString(builder, 2).append(")\n");
            }
            if (rootRelationalClassMapping.mainTable != null) {
                TablePtr tablePtr = rootRelationalClassMapping.mainTable;
                appendTabString(builder, 2).append("~mainTable ");
                builder.append("[").append(tablePtr.getDb()).append("]");
                builder.append((tablePtr.schema != null && !tablePtr.schema.equals("default")) ? (tablePtr.schema + "." + tablePtr.table) : tablePtr.table);
                builder.append("\n");
            }
            if (!rootRelationalClassMapping.propertyMappings.isEmpty()) {
                RelationalGrammarComposerContext indentedContext = RelationalGrammarComposerContext.Builder.newInstance(ctx).withIndentation(4).build();
                builder.append(LazyIterate.collect(rootRelationalClassMapping.propertyMappings, propertyMapping -> HelperRelationalGrammarComposer.renderAbstractRelationalPropertyMapping(propertyMapping, indentedContext, false)).makeString(",\n"));
                builder.append("\n");
            }
            appendTabString(builder).append("}");
            return builder.toString();
        }
        return null;
    });
}
Also used : RootRelationalClassMapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RootRelationalClassMapping) TablePtr(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.TablePtr)

Aggregations

GenericType (org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.type.generics.GenericType)7 EngineErrorType (org.finos.legend.engine.protocol.pure.v1.model.context.EngineErrorType)6 EngineException (org.finos.legend.engine.shared.core.operational.errorManagement.EngineException)6 MutableList (org.eclipse.collections.api.list.MutableList)5 AggregationAwarePropertyMapping (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.aggregationAware.AggregationAwarePropertyMapping)5 EmbeddedRelationalPropertyMapping (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.EmbeddedRelationalPropertyMapping)5 OtherwiseEmbeddedRelationalPropertyMapping (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.OtherwiseEmbeddedRelationalPropertyMapping)5 RelationalPropertyMapping (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.mapping.RelationalPropertyMapping)5 Root_meta_pure_metamodel_type_generics_GenericType_Impl (org.finos.legend.pure.generated.Root_meta_pure_metamodel_type_generics_GenericType_Impl)5 PropertyMapping (org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping)5 PropertyMappingsImplementation (org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMappingsImplementation)5 Optional (java.util.Optional)4 RichIterable (org.eclipse.collections.api.RichIterable)4 FastList (org.eclipse.collections.impl.list.mutable.FastList)4 ListIterate (org.eclipse.collections.impl.utility.ListIterate)4 LocalMappingPropertyInfo (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.LocalMappingPropertyInfo)4 Class (org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.type.Class)4 List (java.util.List)3 Lists (org.eclipse.collections.impl.factory.Lists)3 Multiplicity (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Multiplicity)3