use of org.teiid.metadata.Table 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.Table 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);
}
use of org.teiid.metadata.Table in project teiid by teiid.
the class DocumentNode method build.
public static DocumentNode build(DocumentNode resource, EdmEntityType type, List<UriParameter> keyPredicates, MetadataStore metadata, OData odata, UniqueNameGenerator nameGenerator, boolean useAlias, UriInfo uriInfo, URLParseService parseService) throws TeiidException {
Table table = findTable(type, metadata);
GroupSymbol gs = null;
if (useAlias) {
gs = new GroupSymbol(nameGenerator.getNextGroup(), table.getFullName());
} else {
gs = new GroupSymbol(table.getFullName());
}
resource.setTable(table);
resource.setGroupSymbol(gs);
resource.setEdmEntityType(type);
resource.setKeyPredicates(keyPredicates);
resource.setFromClause(new UnaryFromClause(gs));
if (keyPredicates != null && !keyPredicates.isEmpty()) {
Criteria criteria = DocumentNode.buildEntityKeyCriteria(resource, uriInfo, metadata, odata, nameGenerator, parseService);
resource.setCriteria(criteria);
}
return resource;
}
use of org.teiid.metadata.Table in project teiid by teiid.
the class TestMultipleModelIndexes method testSchemaLoad.
@Test
public void testSchemaLoad() throws Exception {
TransformationMetadata tm = VDBMetadataFactory.getVDBMetadata(UnitTestUtil.getTestDataPath() + "/Test.vdb");
// ensure that datatypes are set
Table t = tm.getGroupID("Northwind.Northwind.dbo.Employees");
assertFalse(t.isVirtual());
}
use of org.teiid.metadata.Table in project teiid by teiid.
the class TestMongoDBQueryExecution method testGeoFunctionInWhereWithGeometry.
@Test
public void testGeoFunctionInWhereWithGeometry() throws Exception {
Table table = this.utility.createRuntimeMetadata().getTable("northwind.Categories");
NamedTable namedTable = new NamedTable("Categories", "g0", table);
ColumnReference colRef = new ColumnReference(namedTable, "CategoryName", table.getColumnByName("CategoryName"), String.class);
DerivedColumn col = new DerivedColumn("CategoryName", colRef);
Select select = new Select();
select.setDerivedColumns(Arrays.asList(col));
List<TableReference> tables = new ArrayList<TableReference>();
tables.add(namedTable);
select.setFrom(tables);
final GeometryType geo = GeometryUtils.geometryFromClob(new ClobType(new ClobImpl("POLYGON ((1.0 2.0,3.0 4.0,5.0 6.0,1.0 2.0))")));
Function function = new // $NON-NLS-1$
Function(// $NON-NLS-1$
"mongo.geoWithin", // $NON-NLS-1$
Arrays.asList(colRef, new Literal(geo, GeometryType.class)), // $NON-NLS-2$
Boolean.class);
function.setMetadataObject(getFunctionMethod("mongo.geoWithin"));
Comparison c = new Comparison(function, new Literal(true, Boolean.class), Comparison.Operator.EQ);
select.setWhere(c);
DBCollection dbCollection = helpExecute(select, new String[] { "Categories" }, 2);
BasicDBObjectBuilder builder = new BasicDBObjectBuilder();
builder.push("CategoryName");
// $NON-NLS-1$
builder.push("$geoWithin");
// $NON-NLS-1$
builder.add("$geometry", "{\"type\":\"Polygon\",\"coordinates\":[[[1.0,2.0],[3.0,4.0],[5.0,6.0],[1.0,2.0]]]}");
BasicDBObject result = new BasicDBObject();
result.append("CategoryName", "$CategoryName");
List<DBObject> pipeline = buildArray(new BasicDBObject("$match", builder.get()), new BasicDBObject("$project", result));
Mockito.verify(dbCollection).aggregate(Mockito.eq(pipeline), Mockito.any(AggregationOptions.class));
}
Aggregations