Skip to content

Commit

Permalink
TEIID-3553: adding exceptions on ambiguity, changing from odata 0.8.0…
Browse files Browse the repository at this point in the history
… to oreva 0.8.7

Conflicts:
	odata/src/test/java/org/teiid/odata/TestODataIntegration.java
	olingo/pom.xml

Conflicts:
	odata/src/main/java/org/teiid/odata/LocalClient.java
  • Loading branch information
shawkins authored and johnathonlee committed Sep 17, 2015
1 parent ca180d2 commit f9cab7c
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 7 deletions.
74 changes: 72 additions & 2 deletions odata/src/main/java/org/teiid/odata/LocalClient.java
Expand Up @@ -27,10 +27,22 @@

import org.odata4j.core.*;
import org.odata4j.core.OCollection.Builder;
import org.odata4j.core.OCollections;
import org.odata4j.core.OComplexObject;
import org.odata4j.core.OComplexObjects;
import org.odata4j.core.OObject;
import org.odata4j.core.OProperties;
import org.odata4j.core.OProperty;
import org.odata4j.core.OSimpleObjects;
import org.odata4j.edm.*;
import org.odata4j.exceptions.NotFoundException;
import org.odata4j.exceptions.ServerErrorException;
import org.odata4j.producer.*;
import org.odata4j.internal.EdmDataServicesDecorator;
import org.odata4j.producer.BaseResponse;
import org.odata4j.producer.CountResponse;
import org.odata4j.producer.InlineCount;
import org.odata4j.producer.QueryInfo;
import org.odata4j.producer.Responses;
import org.teiid.adminapi.Model;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.common.buffer.impl.BufferManagerImpl;
Expand Down Expand Up @@ -457,7 +469,65 @@ public static EdmDataServices buildMetadata(VDBMetaData vdb, MetadataStore metad
ODataEntitySchemaBuilder.buildAssosiationSets(schema, edmSchemas);
}
}
return EdmDataServices.newBuilder().addSchemas(edmSchemas).build();
final EdmDataServices edmDataServices = EdmDataServices.newBuilder().addSchemas(edmSchemas).build();

EdmDataServicesDecorator decorator = new EdmDataServicesDecorator() {

@Override
protected EdmDataServices getDelegate() {
return edmDataServices;
}

public EdmEntitySet findEdmEntitySet(String entitySetName) {
int idx = entitySetName.indexOf('.');
if (idx != -1) {
EdmEntitySet ees = super.findEdmEntitySet(entitySetName);
if (ees != null) {
return ees;
}
}
EdmEntitySet result = null;
for (EdmSchema schema : this.getSchemas()) {
for (EdmEntityContainer eec : schema.getEntityContainers()) {
for (EdmEntitySet ees : eec.getEntitySets()) {
if (ees.getName().equals(entitySetName)) {
if (result != null) {
throw new NotFoundException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16017, entitySetName));
}
result = ees;
}
}
}
}
return result;
}

public EdmFunctionImport findEdmFunctionImport(String functionImportName) {
int idx = functionImportName.indexOf('.');
if (idx != -1) {
EdmFunctionImport efi = super.findEdmFunctionImport(functionImportName);
if (efi != null) {
return efi;
}
}
EdmFunctionImport result = null;
for (EdmSchema schema : this.getSchemas()) {
for (EdmEntityContainer eec : schema.getEntityContainers()) {
for (EdmFunctionImport efi : eec.getFunctionImports()) {
if (efi.getName().equals(functionImportName)) {
if (result != null) {
throw new NotFoundException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16017, functionImportName));
}
result = efi;
}
}
}
}
return result;
}
};

return decorator;
} catch (Exception e) {
throw new TeiidRuntimeException(e);
}
Expand Down
3 changes: 2 additions & 1 deletion odata/src/main/java/org/teiid/odata/ODataPlugin.java
Expand Up @@ -55,6 +55,7 @@ public static enum Event implements BundleUtil.Event {
TEIID16013,
TEIID16014,
TEIID16015,
TEIID16016
TEIID16016,
TEIID16017
}
}
6 changes: 2 additions & 4 deletions odata/src/main/java/org/teiid/odata/TeiidProducer.java
Expand Up @@ -82,10 +82,9 @@ public EntitiesResponse getEntities(ODataContext context, String entitySetName,
@Override
public EntitiesResponse getNavProperty(ODataContext context, String entitySetName, OEntityKey entityKey, String navProp, final QueryInfo queryInfo) {
checkExpand(queryInfo);
getEntitySet(entitySetName); // validate entity
final EdmEntitySet entitySet = getEntitySet(entitySetName); // validate entity
ODataSQLBuilder visitor = new ODataSQLBuilder(this.client.getMetadataStore(), true);
Query query = visitor.selectString(entitySetName, queryInfo, entityKey, navProp, false);
final EdmEntitySet entitySet = getEntitySet(visitor.getEntityTable().getFullName());
List<SQLParam> parameters = visitor.getParameters();
final EntityList entities = this.client.executeSQL(query, parameters, entitySet, visitor.getProjectedColumns(), queryInfo);
return new EntitiesResponse() {
Expand Down Expand Up @@ -137,10 +136,9 @@ public CountResponse getEntitiesCount(ODataContext context, String entitySetName

@Override
public EntityResponse getEntity(ODataContext context, String entitySetName, OEntityKey entityKey, EntityQueryInfo queryInfo) {
getEntitySet(entitySetName); // validate entity
EdmEntitySet entitySet = getEntitySet(entitySetName); // validate entity
ODataSQLBuilder visitor = new ODataSQLBuilder(this.client.getMetadataStore(), true);
Query query = visitor.selectString(entitySetName, queryInfo, entityKey, null, false);
EdmEntitySet entitySet = getEntitySet(visitor.getEntityTable().getFullName());
List<SQLParam> parameters = visitor.getParameters();
List<OEntity> entityList = this.client.executeSQL(query, parameters, entitySet, visitor.getProjectedColumns(), null);
if (entityList.isEmpty()) {
Expand Down
1 change: 1 addition & 0 deletions odata/src/main/resources/org/teiid/odata/i18n.properties
Expand Up @@ -36,3 +36,4 @@ TEIID16013=Error occurred producing OData result.
TEIID16014=Failed to register the VDB listener
TEIID16015=Incomplete key {1} specified for EntitySet "{0}"
TEIID16016=Insert into {0} success, but failed to retrieve auto generated keys from source, thus failed to show result entity; Supply the key values.
TEIID16017=Name '{0}' is ambiguous, please use a namespace/schema qualifier.
36 changes: 36 additions & 0 deletions odata/src/test/java/org/teiid/odata/TestODataIntegration.java
Expand Up @@ -691,6 +691,42 @@ protected List<? extends List<?>> getData(
es.stop();
}
}

@Test
public void testAmbiguities() throws Exception {
EmbeddedServer es = new EmbeddedServer();
es.start(new EmbeddedConfiguration());
try {
ModelMetaData mmd = new ModelMetaData();
mmd.setName("vw");
mmd.setSchemaSourceType("ddl");
mmd.setSchemaText("create view x (a string primary key) as select 'a'; create virtual procedure y () returns table(y string) as select 'a';");
mmd.setModelType(Type.VIRTUAL);

ModelMetaData mmd1 = new ModelMetaData();
mmd1.setName("vw1");
mmd1.setSchemaSourceType("ddl");
mmd1.setSchemaText("create view x (a string primary key) as select 'a'; create virtual procedure y () returns table(y string) as select 'a';");
mmd1.setModelType(Type.VIRTUAL);
es.deployVDB("northwind", mmd, mmd1);

TeiidDriver td = es.getDriver();
Properties props = new Properties();
LocalClient lc = new LocalClient("northwind", 1, props);
lc.setDriver(td);
MockProvider.CLIENT = lc;

ClientRequest request = new ClientRequest(TestPortProvider.generateURL("/odata/northwind/x('a')"));
ClientResponse<String> response = request.get(String.class);
Assert.assertEquals(404, response.getStatus());

request = new ClientRequest(TestPortProvider.generateURL("/odata/northwind/y"));
response = request.get(String.class);
Assert.assertEquals(404, response.getStatus());
} finally {
es.stop();
}
}

@Test public void testConnectionProperties() throws Exception {
EmbeddedServer es = new EmbeddedServer();
Expand Down

0 comments on commit f9cab7c

Please sign in to comment.