use of org.teiid.metadata.ForeignKey in project teiid by teiid.
the class ODataSchemaBuilder method buildNavigationProperties.
private static void buildNavigationProperties(org.teiid.metadata.Schema schema, Map<String, CsdlEntityType> entityTypes, Map<String, CsdlEntitySet> entitySets) {
for (Table table : schema.getTables().values()) {
// skip if the table does not have the PK or unique
if (getIdentifier(table) == null) {
continue;
}
// build Associations
for (ForeignKey fk : table.getForeignKeys()) {
// check to see if fk is part of this table's pk, then it is 1 to 1 relation
boolean fkPKSame = sameColumnSet(getIdentifier(table), fk);
addForwardNavigation(entityTypes, entitySets, table, fk, fkPKSame);
addReverseNavigation(entityTypes, entitySets, table, fk, fkPKSame);
}
}
}
use of org.teiid.metadata.ForeignKey in project teiid by teiid.
the class ReferenceUpdateSQLBuilder method visit.
@Override
public void visit(UriResourceNavigation info) {
EdmNavigationProperty property = info.getProperty();
this.referenceTable = new ScopedTable(DocumentNode.findTable(property.getType(), this.metadata), property.getType(), info.getKeyPredicates());
if (property.isCollection()) {
ForeignKey fk = DocumentNode.joinFK(referenceTable, this.updateTable, property);
referenceTable.setFk(fk);
ScopedTable temp = this.updateTable;
this.updateTable = referenceTable;
this.referenceTable = temp;
this.collection = true;
} else {
ForeignKey fk = DocumentNode.joinFK(this.updateTable, referenceTable, property);
this.updateTable.setFk(fk);
}
}
use of org.teiid.metadata.ForeignKey in project teiid by teiid.
the class TestODataMetadataProcessor method testManytoManyAssosiation.
@Test
public void testManytoManyAssosiation() throws Exception {
ODataMetadataProcessor processor = new ODataMetadataProcessor();
MetadataFactory mf = new MetadataFactory("vdb", 1, "northwind", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
EdmEntityType.Builder g1Entity = entityType("g1");
EdmEntityType.Builder g2Entity = entityType("g2");
EdmAssociationEnd.Builder aend1 = EdmAssociationEnd.newBuilder().setRole("source").setType(g1Entity).setMultiplicity(EdmMultiplicity.MANY);
EdmAssociationEnd.Builder aend2 = EdmAssociationEnd.newBuilder().setRole("target").setType(g2Entity).setMultiplicity(EdmMultiplicity.MANY);
EdmAssociation.Builder assocition = EdmAssociation.newBuilder().setNamespace("namspace").setName("m_2_m").setEnds(aend2, aend1);
EdmNavigationProperty.Builder navigation = EdmNavigationProperty.newBuilder("g1").setFromTo(aend2, aend1).setFromToName("source", "target").setRelationship(assocition);
g2Entity.addNavigationProperties(navigation);
EdmEntitySet g1Set = EdmEntitySet.newBuilder().setName("G1").setEntityType(g1Entity).build();
EdmEntitySet g2Set = EdmEntitySet.newBuilder().setName("G2").setEntityType(g2Entity).build();
processor.addEntitySetAsTable(mf, g1Set);
processor.addEntitySetAsTable(mf, g2Set);
processor.addNavigationRelations(mf, "G2", g2Entity.build());
Table g1 = mf.getSchema().getTable("G1");
Table g2 = mf.getSchema().getTable("G2");
Table linkTable = mf.getSchema().getTable("m_2_m");
assertEquals(1, linkTable.getColumns().size());
assertEquals("e1", linkTable.getColumns().get(0).getName());
assertNotNull(linkTable);
assertEquals("G2,G1", linkTable.getProperty(ODataMetadataProcessor.LINK_TABLES, false));
ForeignKey fk1 = linkTable.getForeignKeys().get(0);
assertEquals("G2_FK", fk1.getName());
assertNotNull(fk1.getColumnByName("e1"));
ForeignKey fk2 = linkTable.getForeignKeys().get(1);
assertEquals("G1_FK", fk2.getName());
assertNotNull(fk2.getColumnByName("e1"));
}
use of org.teiid.metadata.ForeignKey in project teiid by teiid.
the class TestODataMetadataProcessor method testManytoManyAssosiationWithReferntialConstraint.
@Test
public void testManytoManyAssosiationWithReferntialConstraint() throws Exception {
ODataMetadataProcessor processor = new ODataMetadataProcessor();
MetadataFactory mf = new MetadataFactory("vdb", 1, "northwind", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
EdmEntityType.Builder g1Entity = entityType("g1");
g1Entity.addProperties(EdmProperty.newBuilder("g2e2").setType(EdmSimpleType.STRING).setNullable(false));
EdmEntityType.Builder g2Entity = entityType("g2");
EdmAssociationEnd.Builder aend1 = EdmAssociationEnd.newBuilder().setRole("source").setType(g1Entity).setMultiplicity(EdmMultiplicity.MANY);
EdmAssociationEnd.Builder aend2 = EdmAssociationEnd.newBuilder().setRole("target").setType(g2Entity).setMultiplicity(EdmMultiplicity.MANY);
EdmReferentialConstraint.Builder refContraint = EdmReferentialConstraint.newBuilder().addPrincipalReferences("e1").addDependentReferences("g2e2");
EdmAssociation.Builder assocition = EdmAssociation.newBuilder().setNamespace("namspace").setName("m_2_m").setEnds(aend2, aend1).setRefConstraint(refContraint);
EdmNavigationProperty.Builder navigation = EdmNavigationProperty.newBuilder("g1").setFromTo(aend2, aend1).setFromToName("source", "target").setRelationship(assocition);
g2Entity.addNavigationProperties(navigation);
EdmEntitySet g1Set = EdmEntitySet.newBuilder().setName("G1").setEntityType(g1Entity).build();
EdmEntitySet g2Set = EdmEntitySet.newBuilder().setName("G2").setEntityType(g2Entity).build();
processor.addEntitySetAsTable(mf, g1Set);
processor.addEntitySetAsTable(mf, g2Set);
processor.addNavigationRelations(mf, "G2", g2Entity.build());
Table g1 = mf.getSchema().getTable("G1");
Table g2 = mf.getSchema().getTable("G2");
Table linkTable = mf.getSchema().getTable("m_2_m");
assertEquals(2, linkTable.getColumns().size());
assertEquals("e1", linkTable.getColumns().get(0).getName());
assertEquals("g2e2", linkTable.getColumns().get(1).getName());
assertNotNull(linkTable);
assertEquals("G2,G1", linkTable.getProperty(ODataMetadataProcessor.LINK_TABLES, false));
ForeignKey fk = linkTable.getForeignKeys().get(0);
assertEquals("G2_FK", fk.getName());
assertNotNull(fk.getColumnByName("e1"));
ForeignKey fk2 = linkTable.getForeignKeys().get(1);
assertEquals("G1_FK", fk2.getName());
assertNotNull(fk2.getColumnByName("g2e2"));
}
use of org.teiid.metadata.ForeignKey in project teiid by teiid.
the class TestODataMetadataProcessor method testOneToOneAssosiation.
@Test
public void testOneToOneAssosiation() throws Exception {
ODataMetadataProcessor processor = new ODataMetadataProcessor();
MetadataFactory mf = new MetadataFactory("vdb", 1, "northwind", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
EdmEntityType.Builder g1Entity = entityType("g1");
EdmEntityType.Builder g2Entity = entityType("g2");
EdmAssociationEnd.Builder aend1 = EdmAssociationEnd.newBuilder().setRole("source").setType(g1Entity).setMultiplicity(EdmMultiplicity.ONE);
EdmAssociationEnd.Builder aend2 = EdmAssociationEnd.newBuilder().setRole("target").setType(g2Entity).setMultiplicity(EdmMultiplicity.ONE);
EdmAssociation.Builder assocition = EdmAssociation.newBuilder().setNamespace("namspace").setName("one_2_one").setEnds(aend2, aend1);
EdmNavigationProperty.Builder navigation = EdmNavigationProperty.newBuilder("g1").setFromTo(aend2, aend1).setFromToName("source", "target").setRelationship(assocition);
g2Entity.addNavigationProperties(navigation);
EdmEntitySet g1Set = EdmEntitySet.newBuilder().setName("G1").setEntityType(g1Entity).build();
processor.addEntitySetAsTable(mf, g1Set);
EdmEntitySet g2Set = EdmEntitySet.newBuilder().setName("G2").setEntityType(g2Entity).build();
processor.addEntitySetAsTable(mf, g2Set);
processor.addNavigationRelations(mf, "G2", g2Entity.build());
Table g1 = mf.getSchema().getTable("G1");
Table g2 = mf.getSchema().getTable("G2");
ForeignKey fk = g1.getForeignKeys().get(0);
assertEquals("one_2_one", fk.getName());
assertNotNull(fk.getColumnByName("e1"));
}
Aggregations