[teiid-issues] [JBoss JIRA] (TEIID-5216) JBOSS - Teiid 9.2.1 unable to return DateTimeOffset ODatatype values

Steven Hawkins (JIRA) issues at jboss.org
Wed Jan 17 14:09:00 EST 2018


    [ https://issues.jboss.org/browse/TEIID-5216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13520358#comment-13520358 ] 

Steven Hawkins commented on TEIID-5216:
---------------------------------------

> Also, For other types like Boolean , String , Int etc. there is no substing being used for removing the suffix Edm.

The code path you have highlighted is contingent upon the preceding logic in https://github.com/teiid/teiid/blob/48d83d0beeb525433ba7129ffc84ef9ee9787b0c/olingo-common/src/main/java/org/teiid/olingo/common/ODataTypeManager.java#L161

If the value is already of the correct type, or null, parseLiteral will not be called.  Since the NATIVE_TYPE defaults to Edm.String, parseLiteral will then be called if value object type does not match the expected type.  From what I have seen this will all work correctly as long as the NATIVE_TYPE is specified correctly in the Teiid metadata.  My only conclusion is that you have created the Teiid metadata manually rather than relying on the import performed by the translator, correct?  

On both master and 9.2.1 when I use the translator to perform the import of the OData metadata the Employees table is defined appropriately as shown above:

BirthDate timestamp OPTIONS (NATIVE_TYPE 'Edm.DateTimeOffset'),
HireDate timestamp OPTIONS (NATIVE_TYPE 'Edm.DateTimeOffset'),

> JBOSS - Teiid 9.2.1 unable to return DateTimeOffset ODatatype values
> --------------------------------------------------------------------
>
>                 Key: TEIID-5216
>                 URL: https://issues.jboss.org/browse/TEIID-5216
>             Project: Teiid
>          Issue Type: Bug
>          Components: OData
>    Affects Versions: 9.2.1
>         Environment: All
>            Reporter: Pushkar Kamra
>            Assignee: Steven Hawkins
>             Fix For: 10.1
>
>         Attachments: screenshot-1.png
>
>
> During the time of requesting ODatatype - DateTimeOffset from the from the following service - http://services.odata.org/V4/Northwind/Northwind.svc/
> Query - Select * from Employees.
> Using the above query it is unable to return DateTimeOffset  values for it and returns the 
> following error - 
> java.lang.IllegalArgumentException: No enum constant org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind.TimeOffset
>         at java.lang.Enum.valueOf(Enum.java:238)
>         at org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind.valueOf(EdmPrimitiveTypeKind.java:24)
>         at org.teiid.olingo.common.ODataTypeManager.parseLiteral(ODataTypeManager.java:332)
>         at org.teiid.olingo.common.ODataTypeManager.convertToTeiidRuntimeType(ODataTypeManager.java:184)
>         at org.teiid.translator.odata4.BaseQueryExecution.buildRow(BaseQueryExecution.java:244)
>         at org.teiid.translator.odata4.ODataQueryExecution.next(ODataQueryExecution.java:122)
>         at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.handleBatch(ConnectorWorkItem.java:435)
>         at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.more(ConnectorWorkItem.java:238)
>         at sun.reflect.GeneratedMethodAccessor480.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at org.teiid.dqp.internal.datamgr.ConnectorManager$1.invoke(ConnectorManager.java:220)
>         at com.sun.proxy.$Proxy398.more(Unknown Source)
>         at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:309)
>         at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:112)
>         at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:108)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at org.teiid.dqp.internal.process.FutureWork.run(FutureWork.java:65)
>         at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:282)
>         at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119)
> From the initial level analysis and observation is has been observed teiid class - ODataTypeManager in that parselitreals method where ODatatype.Substring(4) is done which is causing the issue which is changing DateTimeOffset to TimeOffset and when it tries to find the Enum constant from the EdmPrimitiveTypeKind list it is unable find the changed name and this seems to be causing the issue in accessing the DateTimeOffset type datas from the containing tables. 



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the teiid-issues mailing list