Search in sources :

Example 26 with Table

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);
        }
    }
}
Also used : Table(org.teiid.metadata.Table) ForeignKey(org.teiid.metadata.ForeignKey)

Example 27 with Table

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);
}
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 28 with Table

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;
}
Also used : Table(org.teiid.metadata.Table) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol)

Example 29 with Table

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());
}
Also used : TransformationMetadata(org.teiid.query.metadata.TransformationMetadata) Table(org.teiid.metadata.Table) Test(org.junit.Test)

Example 30 with Table

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));
}
Also used : NamedTable(org.teiid.language.NamedTable) NamedTable(org.teiid.language.NamedTable) Table(org.teiid.metadata.Table) ArrayList(java.util.ArrayList) ClobType(org.teiid.core.types.ClobType) GeometryType(org.teiid.core.types.GeometryType) Function(org.teiid.language.Function) TableReference(org.teiid.language.TableReference) Comparison(org.teiid.language.Comparison) Literal(org.teiid.language.Literal) Select(org.teiid.language.Select) DerivedColumn(org.teiid.language.DerivedColumn) ClobImpl(org.teiid.core.types.ClobImpl) ColumnReference(org.teiid.language.ColumnReference) Test(org.junit.Test)

Aggregations

Table (org.teiid.metadata.Table)239 Test (org.junit.Test)82 Column (org.teiid.metadata.Column)72 MetadataFactory (org.teiid.metadata.MetadataFactory)59 Properties (java.util.Properties)45 MetadataStore (org.teiid.metadata.MetadataStore)37 Schema (org.teiid.metadata.Schema)35 TranslatorException (org.teiid.translator.TranslatorException)30 ArrayList (java.util.ArrayList)27 TransformationMetadata (org.teiid.query.metadata.TransformationMetadata)27 RealMetadataFactory (org.teiid.query.unittest.RealMetadataFactory)23 List (java.util.List)22 ForeignKey (org.teiid.metadata.ForeignKey)22 Connection (java.sql.Connection)15 QueryNode (org.teiid.query.mapping.relational.QueryNode)15 BasicSourceCapabilities (org.teiid.query.optimizer.capabilities.BasicSourceCapabilities)15 KeyRecord (org.teiid.metadata.KeyRecord)14 Dimension (org.teiid.translator.couchbase.CouchbaseMetadataProcessor.Dimension)14 CouchbaseMetadataProcessor (org.teiid.translator.couchbase.CouchbaseMetadataProcessor)13 CouchbaseProperties (org.teiid.translator.couchbase.CouchbaseProperties)13