You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Josh Elser (JIRA)" <ji...@apache.org> on 2019/02/19 19:18:00 UTC

[jira] [Comment Edited] (CALCITE-2795) New Avatica version doesn't support "list" type in query

    [ https://issues.apache.org/jira/browse/CALCITE-2795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16770811#comment-16770811 ] 

Josh Elser edited comment on CALCITE-2795 at 2/19/19 7:17 PM:
--------------------------------------------------------------

* What version(s) of Avatica did you observe to work correctly? we upgraded
 to Calcite 1.18 and Avatica 1.13
 * What version(s) of Avatica did you observe this error? we didn't try to
 upgrade to other versions lately
 * What is the code you ran which caused this?

POJO:
{code}
public class TypeWithList {
 private String id;
 private List<String> list;

public TypeWithList(String id, List<String> list)

{ this.id = id; this.list = list; }

public String getId()

{ return id; }

public List<String> getList()

{ return list; }

}
{code}

Test:
{code}
@Test
 @Ignore("List functionality is broken since upgrade from 1.11 => 1.18")
 public void testSelectWithList() {
 List<String> list = new LinkedList<>();
 list.add("a");
 list.add("b");
 ist.add("a");
 myDb.write(new TypeWithList("1", list));
 CalciteAssert.that()
 .with(connectionFactory)
 .query("SELECT * FROM TypeWithList")
 .returnsUnordered("id=1; list=[a, b, a]");
 }
{code}

Thanks for your help.

Sorry it took me so long to answer.

Ayelet


was (Author: ayelet.morris@gigaspaces.com):
* What version(s) of Avatica did you observe to work correctly? we upgraded
to Calcite 1.18 and Avatica 1.13
* What version(s) of Avatica did you observe this error? we didn't try to
upgrade to other versions lately
* What is the code you ran which caused this?

POJO:

public class TypeWithList {
    private String id;
    private List<String> list;

    public TypeWithList(String id, List<String> list) {
        this.id = id;
        this.list = list;
    }

    public String getId() {
        return id;
    }

    public List<String> getList() {
        return list;
    }
}


Test:

@Test
@Ignore("List functionality is broken since upgrade from 1.11 => 1.18")
public void testSelectWithList() {
    List<String> list = new LinkedList<>();
    list.add("a");
    list.add("b");
    ist.add("a");
    myDb.write(new TypeWithList("1", list));
    CalciteAssert.that()
            .with(connectionFactory)
            .query("SELECT * FROM TypeWithList")
            .returnsUnordered("id=1; list=[a, b, a]");
}



Thanks for your help.

Sorry it took me so long to answer.

Ayelet





> New Avatica version doesn't support "list" type in query
> --------------------------------------------------------
>
>                 Key: CALCITE-2795
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2795
>             Project: Calcite
>          Issue Type: Bug
>          Components: avatica
>    Affects Versions: 1.17.0, 1.18.0
>            Reporter: Ayelet Morris
>            Priority: Blocker
>
> I created a simple POJO that has an id and a list and created a simple select query from it, I received the following exception, it seems that in previous versions (we used avatica 1.9 with calcite 1.11 before this upgrade) the list type was detected as "OTHER" type and the query worked, now it is marked as a Scalar but somehow finds its way to the "array" type of the types switch, then when trying to parse the column TYPE it fails (it doesn't even try to fetch the list itself)
> {noformat}
> java.lang.RuntimeException: exception while executing [SELECT * FROM TypeWithList]
> at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1458)
>  at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1426)
>  at org.apache.calcite.test.CalciteAssert$AssertQuery.returnsUnordered(CalciteAssert.java:1464)
>  at com.gigaspaces.jdbc.TypesTest.testSelectWithList(TypesTest.java:44)
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:498)
>  at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>  at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>  at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>  at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
>  at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>  at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
>  at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
>  at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
>  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
>  at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>  at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>  at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>  at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
>  at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
>  at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
>  at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
>  at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
>  at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
>  at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
>  at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
>  Caused by: java.lang.RuntimeException: With materializationsEnabled=false, limit=0
>  at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:573)
>  at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1450)
>  ... 33 more
>  Caused by: java.sql.SQLException: Error while executing SQL "SELECT * FROM TypeWithList": org.apache.calcite.avatica.ColumnMetaData$ScalarType cannot be cast to org.apache.calcite.avatica.ColumnMetaData$ArrayType
>  at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
>  at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
>  at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163)
>  at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227)
>  at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:541)
>  ... 34 more
>  Caused by: java.lang.ClassCastException: org.apache.calcite.avatica.ColumnMetaData$ScalarType cannot be cast to org.apache.calcite.avatica.ColumnMetaData$ArrayType
>  at org.apache.calcite.avatica.util.AbstractCursor.createAccessor(AbstractCursor.java:190)
>  at org.apache.calcite.avatica.util.AbstractCursor.createAccessor(AbstractCursor.java:84)
>  at org.apache.calcite.avatica.util.AbstractCursor.createAccessors(AbstractCursor.java:74)
>  at org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:186)
>  at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64)
>  at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43)
>  at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:667)
>  at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:566)
>  at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
>  at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
>  ... 36 more
>  {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)