Skip to content

Commit

Permalink
TEIID-2871 changing mapping from edm byte to sbyte and widening the
Browse files Browse the repository at this point in the history
translator mapping of sbyte to short
  • Loading branch information
shawkins authored and johnathonlee committed Jul 11, 2014
1 parent cb530cd commit c819c6d
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 36 deletions.
Expand Up @@ -21,7 +21,7 @@
*/
package org.teiid.translator.odata;

import static org.teiid.language.SQLConstants.Reserved.NULL;
import static org.teiid.language.SQLConstants.Reserved.*;

import java.io.InputStreamReader;
import java.sql.Blob;
Expand Down Expand Up @@ -352,7 +352,7 @@ public Object retrieveValue(Object value, Class<?> expectedType) {
return new java.sql.Timestamp(((LocalTime)value).toDateTimeToday().getMillis());
}
if (value instanceof UnsignedByte) {
return new Byte(((UnsignedByte)value).byteValue());
return new Short(((UnsignedByte)value).shortValue());
}
return value;
}
Expand Down
Expand Up @@ -39,7 +39,7 @@ public class ODataTypeManager {
static {
teiidkeyed.put(DataTypeManager.DefaultDataTypes.STRING, EdmSimpleType.STRING);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.BOOLEAN, EdmSimpleType.BOOLEAN);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.BYTE, EdmSimpleType.BYTE);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.BYTE, EdmSimpleType.SBYTE);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.SHORT, EdmSimpleType.INT16);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.CHAR, EdmSimpleType.STRING);
teiidkeyed.put(DataTypeManager.DefaultDataTypes.INTEGER, EdmSimpleType.INT32);
Expand All @@ -59,7 +59,7 @@ public class ODataTypeManager {

odatakeyed.put(EdmSimpleType.STRING.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.STRING);
odatakeyed.put(EdmSimpleType.BOOLEAN.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.BOOLEAN);
odatakeyed.put(EdmSimpleType.BYTE.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.BYTE);
odatakeyed.put(EdmSimpleType.BYTE.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.SHORT);
odatakeyed.put(EdmSimpleType.SBYTE.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.BYTE);
odatakeyed.put(EdmSimpleType.INT16.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.SHORT);
odatakeyed.put(EdmSimpleType.INT32.getFullyQualifiedTypeName(), DataTypeManager.DefaultDataTypes.INTEGER);
Expand Down
17 changes: 11 additions & 6 deletions engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java
Expand Up @@ -73,6 +73,7 @@ public class AutoGenDataService extends ConnectorManager{
public boolean addWarning;
public CacheDirective cacheDirective;
public boolean dataAvailable;
public boolean threadBound;

public AutoGenDataService() {
super("FakeConnector","FakeConnector"); //$NON-NLS-1$ //$NON-NLS-2$
Expand Down Expand Up @@ -103,7 +104,7 @@ public int getRows() {
public ConnectorWork registerRequest(AtomicRequestMessage message)
throws TeiidComponentException {
List projectedSymbols = (message.getCommand()).getProjectedSymbols();
List[] results = createResults(projectedSymbols);
List[] results = createResults(projectedSymbols, rows, useIntCounter);
if (RelationalNodeUtil.isUpdate(message.getCommand())) {
results = new List[] {Arrays.asList(1)};
}
Expand Down Expand Up @@ -173,6 +174,10 @@ public boolean isForkable() {
return true;
}

public boolean isThreadBound() {
return threadBound;
}

};
}

Expand All @@ -184,16 +189,16 @@ public AtomicInteger getCloseCount() {
return closeCount;
}

private List[] createResults(List symbols) {
List[] rows = new List[this.rows];
public static List[] createResults(List symbols, int rowCount, boolean useIntCounter) {
List[] rows = new List[rowCount];

for(int i=0; i<this.rows; i++) {
for(int i=0; i<rowCount; i++) {
List row = new ArrayList();
Iterator iter = symbols.iterator();
while(iter.hasNext()) {
Expression symbol = (Expression) iter.next();
Class type = symbol.getType();
row.add( getValue(type, i) );
row.add( getValue(type, i, useIntCounter) );
}
rows[i] = row;
}
Expand Down Expand Up @@ -222,7 +227,7 @@ public InputStream getInputStream() throws IOException {
private static final java.sql.Time TIME_VAL = new java.sql.Time(0);
private static final java.sql.Timestamp TIMESTAMP_VAL = new java.sql.Timestamp(0);

private Object getValue(Class<?> type, int row) {
static Object getValue(Class<?> type, int row, boolean useIntCounter) {
if(type.equals(DataTypeManager.DefaultDataClasses.STRING)) {
return STRING_VAL;
} else if(type.equals(DataTypeManager.DefaultDataClasses.INTEGER)) {
Expand Down
Expand Up @@ -63,6 +63,7 @@
import org.teiid.query.metadata.CompositeMetadataStore;
import org.teiid.query.metadata.MetadataValidator;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SystemMetadata;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.optimizer.FakeFunctionMetadataSource;
import org.teiid.query.parser.TestDDLParser;
Expand Down Expand Up @@ -1726,6 +1727,7 @@ public static Column createElement(String name, ColumnSet<?> group, String type)
column.setUpdatable(true);
column.setLength(100);
column.setNameInSource(name);
column.setDatatype(SystemMetadata.getInstance().getRuntimeTypeMap().get(type));
return column;
}

Expand Down
19 changes: 1 addition & 18 deletions odata/src/test/java/org/teiid/odata/MockProvider.java
Expand Up @@ -42,23 +42,6 @@ public ODataProducer getContext(Class<?> arg0) {
throw new TeiidRuntimeException("Invalid Context Type requested in OData Server");
}

String vdb = null;
String uri = uriInfo.getBaseUri().getRawPath();
int idx = uri.indexOf("/odata/");
int endIdx = uri.indexOf('/', idx+7);
if (endIdx == -1) {
vdb = uri.substring(idx+7);
}
else {
vdb = uri.substring(idx+7, endIdx);
}

int versionIdx = vdb.indexOf('.');
if (versionIdx != -1) {
return new TeiidProducer(CLIENT);
}
return new TeiidProducer(CLIENT) {

};
return new TeiidProducer(CLIENT);
}
}
75 changes: 67 additions & 8 deletions odata/src/test/java/org/teiid/odata/TestODataIntegration.java
Expand Up @@ -21,18 +21,15 @@
*/
package org.teiid.odata;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.stub;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;

import java.io.StringWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
Expand Down Expand Up @@ -67,14 +64,24 @@
import org.odata4j.producer.resources.MetadataResource;
import org.odata4j.producer.resources.ODataBatchProvider;
import org.odata4j.producer.resources.ServiceDocumentResource;
import org.teiid.adminapi.Admin.SchemaObjectType;
import org.teiid.adminapi.Model.Type;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.core.util.ObjectConverterUtil;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.dqp.service.AutoGenDataService;
import org.teiid.jdbc.TeiidDriver;
import org.teiid.language.QueryExpression;
import org.teiid.metadata.KeyRecord;
import org.teiid.metadata.MetadataStore;
import org.teiid.metadata.Schema;
import org.teiid.metadata.Table;
import org.teiid.query.metadata.DDLStringVisitor;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.unittest.TimestampUtil;
import org.teiid.runtime.EmbeddedConfiguration;
Expand Down Expand Up @@ -383,6 +390,57 @@ public boolean supportsCompareCriteriaEquals() {
}
}

@Test public void testBasicTypes() throws Exception {
EmbeddedServer es = new EmbeddedServer();
es.start(new EmbeddedConfiguration());
try {
ModelMetaData mmd = new ModelMetaData();
mmd.setName("m");
mmd.setSchemaSourceType("ddl");

mmd.addSourceMapping("x", "x", null);
MetadataStore ms = RealMetadataFactory.exampleBQTStore();
Schema s = ms.getSchema("BQT1");
KeyRecord pk = new KeyRecord(KeyRecord.Type.Primary);
Table smalla = s.getTable("SmallA");
pk.setName("pk");
pk.addColumn(smalla.getColumnByName("IntKey"));
smalla.setPrimaryKey(pk);
String ddl = DDLStringVisitor.getDDLString(s, EnumSet.allOf(SchemaObjectType.class), "SmallA");
mmd.setSchemaText(ddl);
HardCodedExecutionFactory hc = new HardCodedExecutionFactory() {
@Override
protected List<? extends List<?>> getData(
QueryExpression command) {
Class<?>[] colTypes = command.getProjectedQuery().getColumnTypes();
List<Expression> cols = new ArrayList<Expression>();
for (int i = 0; i < colTypes.length; i++) {
ElementSymbol elementSymbol = new ElementSymbol("X");
elementSymbol.setType(colTypes[i]);
cols.add(elementSymbol);
}
return (List)Arrays.asList(AutoGenDataService.createResults(cols, 1, false));
}
};

es.addTranslator("x", hc);
es.deployVDB("northwind", mmd);

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/SmallA?$format=json&$select=TimeValue"));
ClientResponse<String> response = request.get(String.class);
assertEquals(200, response.getStatus());
System.out.println(response.getEntity());
} finally {
es.stop();
}
}

private OEntity createCustomersEntity(EdmDataServices metadata) {
EdmEntitySet entitySet = metadata.findEdmEntitySet("Customers");
OEntityKey entityKey = OEntityKey.parse("CustomerID='12'");
Expand All @@ -400,4 +458,5 @@ private OEntity createCustomersEntity(EdmDataServices metadata) {
OEntity entity = OEntities.create(entitySet, entityKey, properties,null);
return entity;
}

}

0 comments on commit c819c6d

Please sign in to comment.