Search in sources :

Example 1 with RelationalOperationElementWithJoin

use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin in project legend-pure by finos.

the class RelationalOperationElementProcessor method processColumnExpr.

static void processColumnExpr(RelationalOperationElement impl, CoreInstance implementation, CoreInstance mappingOwner, MutableSet<TableAlias> tableAliases, Matcher matcher, ProcessorState state, ModelRepository repository, ProcessorSupport processorSupport) throws PureCompilationException {
    if (impl instanceof TableAliasColumn) {
        processTableAliasColumn((TableAliasColumn) impl, mappingOwner, tableAliases, processorSupport);
    } else if (impl instanceof DynaFunction) {
        processDynaFunction((DynaFunction) impl, implementation, mappingOwner, tableAliases, matcher, state, repository, processorSupport);
    } else if (impl instanceof RelationalOperationElementWithJoin) {
        RelationalOperationElement relationalOperationElement = ((RelationalOperationElementWithJoin) impl)._relationalOperationElement();
        if (relationalOperationElement != null) {
            if (relationalOperationElement instanceof DynaFunction) {
                processDynaFunction((DynaFunction) relationalOperationElement, implementation, mappingOwner, tableAliases, matcher, state, repository, processorSupport);
            } else if (relationalOperationElement instanceof TableAliasColumn) {
                processTableAliasColumn((TableAliasColumn) relationalOperationElement, mappingOwner, tableAliases, processorSupport);
            }
        }
        JoinTreeNode joinTreeNode = ((RelationalOperationElementWithJoin) impl)._joinTreeNode();
        if (joinTreeNode != null) {
            processJoinTreeNode(joinTreeNode, mappingOwner, matcher, state, repository, processorSupport);
            tableAliases.clear();
        }
    } else if (impl instanceof Literal) {
    // Do nothing
    } else {
        throw new PureCompilationException(impl.getSourceInformation(), "Not Supported Yet! " + impl);
    }
}
Also used : RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) Literal(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Literal) JoinTreeNode(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.join.JoinTreeNode) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) DynaFunction(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.DynaFunction) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin) PureCompilationException(org.finos.legend.pure.m4.exception.PureCompilationException)

Example 2 with RelationalOperationElementWithJoin

use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin in project legend-pure by finos.

the class RelationalOperationElementUnbind method cleanNode.

public static void cleanNode(RelationalOperationElement element, ModelRepository modelRepository, ProcessorSupport processorSupport) throws PureCompilationException {
    if (element instanceof TableAliasColumn) {
        TableAliasColumn tableAliasColumn = (TableAliasColumn) element;
        ImportStub database = (ImportStub) tableAliasColumn._alias()._databaseCoreInstance();
        Shared.cleanUpReferenceUsage(database, tableAliasColumn, processorSupport);
        Shared.cleanImportStub(database, processorSupport);
        tableAliasColumn._columnRemove();
        TableAlias alias = tableAliasColumn._alias();
        alias._relationalElementRemove();
    } else if (element instanceof DynaFunction) {
        for (RelationalOperationElement val : ((DynaFunction) element)._parameters()) {
            cleanNode(val, modelRepository, processorSupport);
        }
    } else if (element instanceof RelationalOperationElementWithJoin) {
        if (((RelationalOperationElementWithJoin) element)._relationalOperationElement() != null) {
            cleanNode(((RelationalOperationElementWithJoin) element)._relationalOperationElement(), modelRepository, processorSupport);
        }
        if (((RelationalOperationElementWithJoin) element)._joinTreeNode() != null) {
            cleanJoinTreeNode(((RelationalOperationElementWithJoin) element)._joinTreeNode(), modelRepository, processorSupport);
        }
    } else if (element instanceof Literal) {
    // Nothing to do
    } else {
        throw new RuntimeException("TO CODE: clean relational operation element node of type " + PackageableElement.getUserPathForPackageableElement(element.getClassifier()));
    }
}
Also used : RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) Literal(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Literal) TableAlias(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) ImportStub(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel._import.ImportStub) DynaFunction(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.DynaFunction) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin)

Example 3 with RelationalOperationElementWithJoin

use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin in project legend-engine by finos.

the class HelperRelationalBuilder method processRelationalOperationElement.

public static RelationalOperationElement processRelationalOperationElement(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.RelationalOperationElement operationElement, CompileContext context, MutableMap<String, org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias> aliasMap, MutableList<org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn> selfJoinTargets) {
    if (operationElement instanceof org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.TableAliasColumn) {
        org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.TableAliasColumn tableAliasColumn = (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.TableAliasColumn) operationElement;
        // Self join
        if (tableAliasColumn.table.table.equals(SELF_JOIN_TABLE_NAME) && tableAliasColumn.tableAlias.equals(SELF_JOIN_TABLE_NAME)) {
            org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn selfJoin = new Root_meta_relational_metamodel_TableAliasColumn_Impl("")._columnName(tableAliasColumn.column);
            selfJoinTargets.add(selfJoin);
            return selfJoin;
        }
        Relation relation = getRelation((Database) context.resolveStore(tableAliasColumn.table.database, tableAliasColumn.table.sourceInformation), tableAliasColumn.table.schema, tableAliasColumn.table.table, tableAliasColumn.table.sourceInformation);
        Column col = getColumn(relation, tableAliasColumn.column, tableAliasColumn.sourceInformation);
        TableAlias alias = aliasMap.getIfAbsentPut(tableAliasColumn.table.schema + "." + tableAliasColumn.tableAlias, (Function0<TableAlias>) () -> new Root_meta_relational_metamodel_TableAlias_Impl("")._name(tableAliasColumn.tableAlias)._relationalElement(col._owner())._database(HelperRelationalBuilder.resolveDatabase(tableAliasColumn.table.getDb(), tableAliasColumn.table.sourceInformation, context)));
        return new Root_meta_relational_metamodel_TableAliasColumn_Impl("")._columnName(col._name())._column(col)._alias(alias);
    } else if (operationElement instanceof ElementWithJoins) {
        ElementWithJoins elementWithJoins = (ElementWithJoins) operationElement;
        RelationalOperationElementWithJoin res = new Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl("")._joinTreeNode(buildElementWithJoinsJoinTreeNode(elementWithJoins.joins, context));
        return elementWithJoins.relationalElement == null ? res : res._relationalOperationElement(processRelationalOperationElement(elementWithJoins.relationalElement, context, UnifiedMap.newMap(), selfJoinTargets));
    } else if (operationElement instanceof DynaFunc) {
        DynaFunc dynaFunc = (DynaFunc) operationElement;
        MutableList<RelationalOperationElement> ps = ListIterate.collect(dynaFunc.parameters, relationalOperationElement -> processRelationalOperationElement(relationalOperationElement, context, aliasMap, selfJoinTargets));
        return new Root_meta_relational_metamodel_DynaFunction_Impl("")._name(dynaFunc.funcName)._parameters(ps);
    } else if (operationElement instanceof org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.Literal) {
        org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.Literal literal = (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.Literal) operationElement;
        return new Root_meta_relational_metamodel_Literal_Impl("")._value(convertLiteral(convertLiteral(literal.value)));
    } else if (operationElement instanceof org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.LiteralList) {
        org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.LiteralList literalList = (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.LiteralList) operationElement;
        return new Root_meta_relational_metamodel_LiteralList_Impl("")._values(ListIterate.collect(literalList.values, l -> new Root_meta_relational_metamodel_Literal_Impl("")._value(convertLiteral(l.value))));
    }
    throw new UnsupportedOperationException();
}
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) DynaFunc(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.DynaFunc) RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin) Relation(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.Relation) NamedRelation(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.relation.NamedRelation) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) Column(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Column) Literal(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Literal) Root_meta_relational_metamodel_TableAliasColumn_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAliasColumn_Impl) ElementWithJoins(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.ElementWithJoins) Root_meta_relational_metamodel_LiteralList_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_LiteralList_Impl) Root_meta_relational_metamodel_DynaFunction_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_DynaFunction_Impl) Root_meta_relational_metamodel_Literal_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_Literal_Impl) org.finos.legend.pure.generated.platform_pure_corefunctions_meta(org.finos.legend.pure.generated.platform_pure_corefunctions_meta) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) Root_meta_relational_metamodel_TableAlias_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAlias_Impl) TableAlias(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias) Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl(org.finos.legend.pure.generated.Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn)

Example 4 with RelationalOperationElementWithJoin

use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin in project legend-pure by finos.

the class RelationalOperationElementProcessor method populateColumnExpressionReferenceUsages.

static void populateColumnExpressionReferenceUsages(CoreInstance columnExpression, ModelRepository repository, ProcessorSupport processorSupport) {
    if (columnExpression instanceof TableAliasColumn) {
        populateTableAliasColumnReferenceUsages((TableAliasColumn) columnExpression, repository, processorSupport);
    } else if (columnExpression instanceof DynaFunction) {
        populateDynaFunctionReferenceUsages((DynaFunction) columnExpression, repository, processorSupport);
    } else if (columnExpression instanceof RelationalOperationElementWithJoin) {
        RelationalOperationElement relationalOperationElement = ((RelationalOperationElementWithJoin) columnExpression)._relationalOperationElement();
        if (relationalOperationElement != null) {
            if (relationalOperationElement instanceof DynaFunction) {
                populateDynaFunctionReferenceUsages((DynaFunction) relationalOperationElement, repository, processorSupport);
            } else if (relationalOperationElement instanceof TableAliasColumn) {
                populateTableAliasColumnReferenceUsages((TableAliasColumn) relationalOperationElement, repository, processorSupport);
            }
        }
        JoinTreeNode joinTreeNode = ((RelationalOperationElementWithJoin) columnExpression)._joinTreeNode();
        if (joinTreeNode != null) {
            populateJoinTreeNodeReferenceUsages(joinTreeNode, repository, processorSupport);
        }
    }
}
Also used : RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) JoinTreeNode(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.join.JoinTreeNode) TableAliasColumn(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn) DynaFunction(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.DynaFunction) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin)

Example 5 with RelationalOperationElementWithJoin

use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin in project legend-pure by finos.

the class RelationalPropertyMappingProcessor method processRelationalPropertyMapping.

static MutableSet<TableAlias> processRelationalPropertyMapping(PropertyMapping propertyMapping, Matcher matcher, ProcessorState state, ModelRepository repository, String depth, ProcessorSupport processorSupport, PropertyMappingsImplementation implementation, PropertyMappingsImplementation topLevel) {
    if (MilestoningFunctions.isAutoGeneratedMilestoningNamedDateProperty(propertyMapping._property(), processorSupport)) {
        throw new PureCompilationException(propertyMapping.getSourceInformation(), "Class : [" + PackageableElement.getUserPathForPackageableElement(((SetImplementation) implementation)._class()) + "] has temporal specification. Hence mapping of property : [milestoning] is reserved and should not be explicit in the mapping");
    }
    MutableSet<TableAlias> tableAliases = Sets.mutable.empty();
    String newDepth = depth + "_" + ((ModelElement) propertyMapping._propertyCoreInstance())._name();
    CoreInstance sourceSetImplementationId = repository.newStringCoreInstance_cached(depth);
    if (implementation instanceof EmbeddedRelationalInstanceSetImplementation) {
        propertyMapping._sourceSetImplementationId(sourceSetImplementationId.getName());
    }
    if (propertyMapping instanceof EmbeddedRelationalInstanceSetImplementation) {
        EmbeddedRelationalInstanceSetImplementation embeddedRelationalInstanceSetImplementation = (EmbeddedRelationalInstanceSetImplementation) propertyMapping;
        if (!(implementation instanceof EmbeddedRelationalInstanceSetImplementation)) {
            propertyMapping._sourceSetImplementationId(implementation._id());
        }
        String newId;
        if (embeddedRelationalInstanceSetImplementation._id() == null) {
            CoreInstance new_Id = repository.newStringCoreInstance_cached(newDepth);
            embeddedRelationalInstanceSetImplementation._id(new_Id.getName());
            embeddedRelationalInstanceSetImplementation._targetSetImplementationId(new_Id.getName());
            newId = newDepth;
        } else {
            newId = embeddedRelationalInstanceSetImplementation._id();
        }
        RootRelationalInstanceSetImplementation owner = embeddedRelationalInstanceSetImplementation._setMappingOwner();
        if (owner == null) {
            embeddedRelationalInstanceSetImplementation._setMappingOwner((RootRelationalInstanceSetImplementation) topLevel);
        }
        Property property = (Property) ImportStub.withImportStubByPass(embeddedRelationalInstanceSetImplementation._propertyCoreInstance(), processorSupport);
        CoreInstance targetClass = property._classifierGenericType() == null || property._classifierGenericType()._typeArguments() == null || property._classifierGenericType()._typeArguments().size() < 2 || property._classifierGenericType()._typeArguments().toList().get(1) == null ? null : ImportStub.withImportStubByPass(property._classifierGenericType()._typeArguments().toList().get(1)._rawTypeCoreInstance(), processorSupport);
        embeddedRelationalInstanceSetImplementation._classCoreInstance(targetClass);
        RichIterable<? extends PropertyMapping> embeddedPropertyMappings = embeddedRelationalInstanceSetImplementation._propertyMappings();
        tableAliases.addAll(processRelationalPropertyMappings(embeddedPropertyMappings, embeddedRelationalInstanceSetImplementation, (RootRelationalInstanceSetImplementation) topLevel, newId, matcher, state, repository, processorSupport));
        RelationalInstanceSetImplementationProcessor.processUserDefinedPrimaryKey(embeddedRelationalInstanceSetImplementation, topLevel, matcher, state, repository, processorSupport);
        if (propertyMapping instanceof OtherwiseEmbeddedRelationalInstanceSetImplementation) {
            OtherwiseEmbeddedRelationalInstanceSetImplementation otherwiseEmbeddedRelationalInstanceSetImplementation = (OtherwiseEmbeddedRelationalInstanceSetImplementation) propertyMapping;
            PropertyMapping otherwiseMapping = otherwiseEmbeddedRelationalInstanceSetImplementation._otherwisePropertyMapping();
            otherwiseMapping._sourceSetImplementationId(sourceSetImplementationId.getName());
            // relationalOperationElement
            RelationalOperationElement impl = ((RelationalPropertyMapping) otherwiseMapping)._relationalOperationElement();
            RelationalOperationElementProcessor.processColumnExpr(impl, topLevel, topLevel, tableAliases, matcher, state, repository, processorSupport);
        }
    } else {
        // Transformer
        if (propertyMapping instanceof RelationalPropertyMapping) {
            GrammarInfoStub transformerStub = (GrammarInfoStub) ((RelationalPropertyMapping) propertyMapping)._transformerCoreInstance();
            EnumerationMappingProcessor.processsEnumerationTransformer(transformerStub, propertyMapping, processorSupport);
            // relationalOperationElement
            RelationalOperationElement impl = ((RelationalPropertyMapping) propertyMapping)._relationalOperationElement();
            RelationalOperationElementProcessor.processColumnExpr(impl, topLevel, topLevel, tableAliases, matcher, state, repository, processorSupport);
            propertyMapping._store(impl instanceof RelationalOperationElementWithJoin ? ((RelationalOperationElementWithJoin) impl)._joinTreeNode()._database() : null);
        }
    }
    return tableAliases;
}
Also used : OtherwiseEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation) RelationalPropertyMapping(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping) RelationalOperationElement(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement) GrammarInfoStub(org.finos.legend.pure.m3.coreinstance.meta.pure.tools.GrammarInfoStub) RelationalOperationElementWithJoin(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin) OtherwiseEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation) EmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.EmbeddedRelationalInstanceSetImplementation) RootRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RootRelationalInstanceSetImplementation) CoreInstance(org.finos.legend.pure.m4.coreinstance.CoreInstance) PropertyMapping(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping) RelationalPropertyMapping(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping) TableAlias(org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias) RootRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RootRelationalInstanceSetImplementation) OtherwiseEmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation) SetImplementation(org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.SetImplementation) EmbeddedRelationalInstanceSetImplementation(org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.EmbeddedRelationalInstanceSetImplementation) Property(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.function.property.Property) PureCompilationException(org.finos.legend.pure.m4.exception.PureCompilationException)

Aggregations

RelationalOperationElement (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElement)7 RelationalOperationElementWithJoin (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.RelationalOperationElementWithJoin)7 JoinTreeNode (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.join.JoinTreeNode)5 DynaFunction (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.DynaFunction)4 TableAlias (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAlias)4 TableAliasColumn (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.TableAliasColumn)4 PropertyMapping (org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.PropertyMapping)3 SetImplementation (org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.SetImplementation)3 EmbeddedRelationalInstanceSetImplementation (org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.EmbeddedRelationalInstanceSetImplementation)3 RelationalPropertyMapping (org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping)3 RootRelationalInstanceSetImplementation (org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RootRelationalInstanceSetImplementation)3 Literal (org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Literal)3 PureCompilationException (org.finos.legend.pure.m4.exception.PureCompilationException)3 Mapping (org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.Mapping)2 Property (org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.function.property.Property)2 OtherwiseEmbeddedRelationalInstanceSetImplementation (org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.OtherwiseEmbeddedRelationalInstanceSetImplementation)2 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Optional (java.util.Optional)1 RichIterable (org.eclipse.collections.api.RichIterable)1