Search in sources :

Example 16 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataSchemaBuilder method buildReverseNavigation.

private static CsdlNavigationProperty buildReverseNavigation(Table table, ForeignKey fk) {
    String refSchemaName = table.getParent().getName();
    CsdlNavigationProperty navigaton = new CsdlNavigationProperty();
    navigaton.setName(table.getName() + "_" + fk.getName()).setType(new FullQualifiedName(refSchemaName, table.getName()));
    ArrayList<CsdlReferentialConstraint> constrainsts = new ArrayList<CsdlReferentialConstraint>();
    for (int i = 0; i < fk.getColumns().size(); i++) {
        Column c = fk.getColumns().get(i);
        String refColumn = fk.getReferenceColumns().get(i);
        CsdlReferentialConstraint constraint = new CsdlReferentialConstraint();
        constraint.setProperty(refColumn);
        constraint.setReferencedProperty(c.getName());
    }
    navigaton.setReferentialConstraints(constrainsts);
    return navigaton;
}
Also used : Column(org.teiid.metadata.Column) FullQualifiedName(org.apache.olingo.commons.api.edm.FullQualifiedName) ArrayList(java.util.ArrayList)

Example 17 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataSchemaBuilder method sameColumnSet.

static boolean sameColumnSet(KeyRecord recordOne, KeyRecord recordTwo) {
    if (recordOne == null || recordTwo == null) {
        return false;
    }
    List<Column> setOne = recordOne.getColumns();
    List<Column> setTwo = recordTwo.getColumns();
    if (setOne.size() != setTwo.size()) {
        return false;
    }
    for (int i = 0; i < setOne.size(); i++) {
        Column one = setOne.get(i);
        Column two = setTwo.get(i);
        if (!one.getName().equals(two.getName())) {
            return false;
        }
    }
    return true;
}
Also used : Column(org.teiid.metadata.Column)

Example 18 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataSchemaBuilder method allowedProcedure.

private static boolean allowedProcedure(Procedure proc) {
    // any number of in, but can have only one LOB if lob is present
    // only *one* result, or resultset allowed
    int inouts = 0;
    int lobs = 0;
    int outs = 0;
    for (ProcedureParameter pp : proc.getParameters()) {
        if (pp.getType().equals(ProcedureParameter.Type.Out)) {
            continue;
        }
        if (pp.getType().equals(ProcedureParameter.Type.In) || pp.getType().equals(ProcedureParameter.Type.InOut)) {
            inouts++;
            if (DataTypeManager.isLOB(pp.getRuntimeType())) {
                lobs++;
            }
        } else if (pp.getType().equals(ProcedureParameter.Type.ReturnValue)) {
            outs++;
        }
    }
    if (proc.getResultSet() != null) {
        for (Column c : proc.getResultSet().getColumns()) {
            if (DataTypeManager.isLOB(c.getRuntimeType())) {
                return false;
            }
        }
        outs++;
    }
    if (outs > 1) {
        return false;
    }
    if (inouts > 1 && lobs >= 1) {
        return false;
    }
    return true;
}
Also used : ProcedureParameter(org.teiid.metadata.ProcedureParameter) Column(org.teiid.metadata.Column)

Example 19 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataSchemaBuilder method buildEntityTypes.

static void buildEntityTypes(String namespace, org.teiid.metadata.Schema schema, CsdlSchema csdlSchema) {
    Map<String, CsdlEntitySet> entitySets = new LinkedHashMap<String, CsdlEntitySet>();
    Map<String, CsdlEntityType> entityTypes = new LinkedHashMap<String, CsdlEntityType>();
    String fullSchemaName = namespace + "." + schema.getName();
    for (Table table : schema.getTables().values()) {
        // skip if the table does not have the PK or unique
        KeyRecord primaryKey = getIdentifier(table);
        if (primaryKey == null) {
            LogManager.logDetail(LogConstants.CTX_ODATA, ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16017, table.getFullName()));
            continue;
        }
        String entityTypeName = table.getName();
        CsdlEntityType entityType = new CsdlEntityType().setName(entityTypeName);
        // adding properties
        List<CsdlProperty> properties = new ArrayList<CsdlProperty>();
        for (Column c : table.getColumns()) {
            boolean nullable = c.getNullType() == NullType.Nullable;
            CsdlProperty property = buildProperty(c, isPartOfPrimaryKey(table, c.getName()) ? false : nullable);
            addColumnAnnotations(c, property, csdlSchema);
            properties.add(property);
        }
        entityType.setProperties(properties);
        if (hasStream(properties)) {
            entityType.setHasStream(true);
        }
        // set keys
        ArrayList<CsdlPropertyRef> keyProps = new ArrayList<CsdlPropertyRef>();
        for (Column c : primaryKey.getColumns()) {
            keyProps.add(new CsdlPropertyRef().setName(c.getName()));
        }
        entityType.setKey(keyProps);
        addTableAnnotations(table, entityType, csdlSchema);
        // entity set one for one entity type
        CsdlEntitySet entitySet = new CsdlEntitySet().setName(table.getName()).setType(new FullQualifiedName(fullSchemaName, table.getName())).setIncludeInServiceDocument(true);
        // add entity types for entity schema
        entityTypes.put(entityTypeName, entityType);
        entitySets.put(entityTypeName, entitySet);
    }
    buildNavigationProperties(schema, entityTypes, entitySets);
    // entity container is holder entity sets, association sets, function
    // imports
    CsdlEntityContainer entityContainer = new CsdlEntityContainer().setName(schema.getName()).setEntitySets(new ArrayList<CsdlEntitySet>(entitySets.values()));
    // build entity schema
    csdlSchema.setEntityTypes(new ArrayList<CsdlEntityType>(entityTypes.values())).setEntityContainer(entityContainer);
}
Also used : Table(org.teiid.metadata.Table) FullQualifiedName(org.apache.olingo.commons.api.edm.FullQualifiedName) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) KeyRecord(org.teiid.metadata.KeyRecord) Column(org.teiid.metadata.Column)

Example 20 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataSchemaBuilder method buildNavigation.

private static CsdlNavigationProperty buildNavigation(ForeignKey fk) {
    String refSchemaName = fk.getReferenceKey().getParent().getParent().getName();
    CsdlNavigationProperty navigaton = new CsdlNavigationProperty();
    navigaton.setName(fk.getName()).setType(new FullQualifiedName(refSchemaName, fk.getReferenceTableName()));
    ArrayList<CsdlReferentialConstraint> constrainsts = new ArrayList<CsdlReferentialConstraint>();
    for (int i = 0; i < fk.getColumns().size(); i++) {
        Column c = fk.getColumns().get(i);
        String refColumn = fk.getReferenceColumns().get(i);
        CsdlReferentialConstraint constraint = new CsdlReferentialConstraint();
        constraint.setProperty(c.getName());
        constraint.setReferencedProperty(refColumn);
    }
    navigaton.setReferentialConstraints(constrainsts);
    return navigaton;
}
Also used : Column(org.teiid.metadata.Column) FullQualifiedName(org.apache.olingo.commons.api.edm.FullQualifiedName) ArrayList(java.util.ArrayList)

Aggregations

Column (org.teiid.metadata.Column)210 Table (org.teiid.metadata.Table)72 ArrayList (java.util.ArrayList)47 TranslatorException (org.teiid.translator.TranslatorException)47 Test (org.junit.Test)39 TransformationMetadata (org.teiid.query.metadata.TransformationMetadata)21 MetadataFactory (org.teiid.metadata.MetadataFactory)20 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)19 KeyRecord (org.teiid.metadata.KeyRecord)18 Schema (org.teiid.metadata.Schema)18 MetadataStore (org.teiid.metadata.MetadataStore)17 Procedure (org.teiid.metadata.Procedure)14 RealMetadataFactory (org.teiid.query.unittest.RealMetadataFactory)14 ColumnReference (org.teiid.language.ColumnReference)12 DerivedColumn (org.teiid.language.DerivedColumn)12 Expression (org.teiid.language.Expression)12 Literal (org.teiid.language.Literal)10 QueryNode (org.teiid.query.mapping.relational.QueryNode)9 Connection (java.sql.Connection)7 ResultSet (java.sql.ResultSet)7