[ 
https://issues.apache.org/jira/browse/CALCITE-1382?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Miguel Oliveira updated CALCITE-1382:
-------------------------------------
    Description: 
This query:
{code}
SELECT count(*) FROM (SELECT count(emp.empno) `Count Emp`, dept.dname 
`Department Name` FROM Calcite.emp emp JOIN Calcite.dept dept ON emp.deptno = 
dept.deptno JOIN Calcite.salgrade salgrade ON emp.comm = salgrade.hisal WHERE 
dept.dname LIKE '%O%' GROUP BY emp.deptno, dept.dname)
{code}

generates a ClassCastException: 
"org.apache.calcite.adapter.jdbc.JdbcRules$JdbcJoin cannot be cast to 
org.apache.calcite.adapter.enumerable.EnumerableRel".

The plan is the following:
{code}
[TABLE, #ID {PLAN=EnumerableAggregate(group=[{}], EXPR$0=[COUNT()])
  EnumerableAggregate(group=[{2, 4}])
    JdbcJoin(condition=[=($1, $0)], joinType=[inner])
      JdbcProject(hisal=[$2])
        JdbcTableScan(table=[[Calcite, salgrade]])
      JdbcJoin(condition=[=($1, $2)], joinType=[inner])
        JdbcProject(comm=[$6], deptno=[$7])
          JdbcTableScan(table=[[Calcite, emp]])
        JdbcProject(deptno=[$0], dname=[$1])
          JdbcFilter(condition=[LIKE($1, '%O%')])
            JdbcTableScan(table=[[Calcite, dept]])
, }]
{code}

Runnable test:

{code}
/** Test case for
     * <a 
href="https://issues.apache.org/jira/browse/CALCITE-1382";>[CALCITE-1382]
     * ClassCastException in JDBC adapter</a>. */
    @org.junit.Test
    public void testJoinPlan3() throws DataSourceManagerException {
        final String sql = "SELECT count(*) FROM (SELECT count(emp.empno) 
`Count Emp`, dept.dname `Department Name`\n"
                + "FROM Calcite.emp emp JOIN Calcite.dept dept ON emp.deptno = 
dept.deptno\n"
                + "JOIN Calcite.salgrade salgrade ON emp.comm = 
salgrade.hisal\n"
                + "WHERE dept.dname LIKE '%A%' GROUP BY emp.deptno, 
dept.dname)";
        final String expected = "SELECT COUNT(*) FROM (\n" +
                "SELECT count(\"t\".empno) AS \"Count Emp\", \"t0\".dname AS 
\"Department Name\"\n" +
                "FROM emp AS \"t\"\n" +
                "INNER JOIN (\n" +
                "SELECT deptno, dname\n" +
                "FROM dept\n" +
                "WHERE dname LIKE '%A%'\n" +
                ") AS \"t0\" ON \"t\".deptno = \"t0\".deptno\n" +
                "INNER JOIN (\n" +
                "SELECT hisal \n" +
                "FROM salgrade \n" +
                ") AS \"t1\" ON \"t\".comm = \"t1\".hisal " +
                "GROUP BY \"t\".deptno, \"t0\".dname" +
                ") AS \"t1\"";
        sql(sql)
                .schema(CalciteAssert.SchemaSpec.JDBC_SCOTT)
                .ok(expected);
    }
{code}

  was:
This query:
{code}
SELECT count(*) FROM (SELECT count(emp.empno) `Count Emp`, dept.dname 
`Department Name` FROM Calcite.emp emp JOIN Calcite.dept dept ON emp.deptno = 
dept.deptno JOIN Calcite.salgrade salgrade ON emp.comm = salgrade.hisal WHERE 
dept.dname LIKE '%O%' GROUP BY emp.deptno, dept.dname)
{code}

generates a ClassCastException: 
"org.apache.calcite.adapter.jdbc.JdbcRules$JdbcJoin cannot be cast to 
org.apache.calcite.adapter.enumerable.EnumerableRel".

The plan is the following:
{code}
[TABLE, #ID {PLAN=EnumerableAggregate(group=[{}], EXPR$0=[COUNT()])
  EnumerableAggregate(group=[{2, 4}])
    JdbcJoin(condition=[=($1, $0)], joinType=[inner])
      JdbcProject(hisal=[$2])
        JdbcTableScan(table=[[Calcite, salgrade]])
      JdbcJoin(condition=[=($1, $2)], joinType=[inner])
        JdbcProject(comm=[$6], deptno=[$7])
          JdbcTableScan(table=[[Calcite, emp]])
        JdbcProject(deptno=[$0], dname=[$1])
          JdbcFilter(condition=[LIKE($1, '%O%')])
            JdbcTableScan(table=[[Calcite, dept]])
, }]
{code}

Runnable test:




> ClassCastException in JDBC Adapter
> ----------------------------------
>
>                 Key: CALCITE-1382
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1382
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.9.0
>         Environment: This bug was detected using a postgresql database and 
> the calcite version 1.9.0.
>            Reporter: Miguel Oliveira
>            Assignee: Julian Hyde
>              Labels: adapters, jdbc
>             Fix For: 1.10.0
>
>
> This query:
> {code}
> SELECT count(*) FROM (SELECT count(emp.empno) `Count Emp`, dept.dname 
> `Department Name` FROM Calcite.emp emp JOIN Calcite.dept dept ON emp.deptno = 
> dept.deptno JOIN Calcite.salgrade salgrade ON emp.comm = salgrade.hisal WHERE 
> dept.dname LIKE '%O%' GROUP BY emp.deptno, dept.dname)
> {code}
> generates a ClassCastException: 
> "org.apache.calcite.adapter.jdbc.JdbcRules$JdbcJoin cannot be cast to 
> org.apache.calcite.adapter.enumerable.EnumerableRel".
> The plan is the following:
> {code}
> [TABLE, #ID {PLAN=EnumerableAggregate(group=[{}], EXPR$0=[COUNT()])
>   EnumerableAggregate(group=[{2, 4}])
>     JdbcJoin(condition=[=($1, $0)], joinType=[inner])
>       JdbcProject(hisal=[$2])
>         JdbcTableScan(table=[[Calcite, salgrade]])
>       JdbcJoin(condition=[=($1, $2)], joinType=[inner])
>         JdbcProject(comm=[$6], deptno=[$7])
>           JdbcTableScan(table=[[Calcite, emp]])
>         JdbcProject(deptno=[$0], dname=[$1])
>           JdbcFilter(condition=[LIKE($1, '%O%')])
>             JdbcTableScan(table=[[Calcite, dept]])
> , }]
> {code}
> Runnable test:
> {code}
> /** Test case for
>      * <a 
> href="https://issues.apache.org/jira/browse/CALCITE-1382";>[CALCITE-1382]
>      * ClassCastException in JDBC adapter</a>. */
>     @org.junit.Test
>     public void testJoinPlan3() throws DataSourceManagerException {
>         final String sql = "SELECT count(*) FROM (SELECT count(emp.empno) 
> `Count Emp`, dept.dname `Department Name`\n"
>                 + "FROM Calcite.emp emp JOIN Calcite.dept dept ON emp.deptno 
> = dept.deptno\n"
>                 + "JOIN Calcite.salgrade salgrade ON emp.comm = 
> salgrade.hisal\n"
>                 + "WHERE dept.dname LIKE '%A%' GROUP BY emp.deptno, 
> dept.dname)";
>         final String expected = "SELECT COUNT(*) FROM (\n" +
>                 "SELECT count(\"t\".empno) AS \"Count Emp\", \"t0\".dname AS 
> \"Department Name\"\n" +
>                 "FROM emp AS \"t\"\n" +
>                 "INNER JOIN (\n" +
>                 "SELECT deptno, dname\n" +
>                 "FROM dept\n" +
>                 "WHERE dname LIKE '%A%'\n" +
>                 ") AS \"t0\" ON \"t\".deptno = \"t0\".deptno\n" +
>                 "INNER JOIN (\n" +
>                 "SELECT hisal \n" +
>                 "FROM salgrade \n" +
>                 ") AS \"t1\" ON \"t\".comm = \"t1\".hisal " +
>                 "GROUP BY \"t\".deptno, \"t0\".dname" +
>                 ") AS \"t1\"";
>         sql(sql)
>                 .schema(CalciteAssert.SchemaSpec.JDBC_SCOTT)
>                 .ok(expected);
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to