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

Julian Hyde commented on CALCITE-597:
-------------------------------------

Do you want to take a shot at fixing this?

> JdbcJoin: Wrong generated column list when join table with same column name
> ---------------------------------------------------------------------------
>
>                 Key: CALCITE-597
>                 URL: https://issues.apache.org/jira/browse/CALCITE-597
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>         Environment: Remote H2 Database. 
>            Reporter: Ng Jiunn Jye
>            Assignee: Julian Hyde
>
> Problem
> Generated SQL Select contain wrong column names when joining 2 table which 
> contain same column name. 
> Executed Query: 
> select tint.rnum, tint2.rnum from tint, tint2 where tint.cint >= tint2.cint
> Generated Query: 
> SELECT "RNUM", "RNUM0"
> FROM "TINT"
> INNER JOIN "TINT2"
> WHERE "TINT"."CINT" >= "TINT2"."CINT"
> Column RNUM is ambiguous and Column RNUM0 is not valid. 
> ** this problem only only happened when JDBCJoin rule kick in. 
> Error Message: 
> java.sql.SQLException: exception while executing query: while executing SQL 
> [SELECT "RNUM", "RNUM0"
> FROM "TINT"
> INNER JOIN "TINT2"
> WHERE "TINT"."CINT" >= "TINT2"."CINT"]
>       at org.apache.calcite.avatica.Helper.createException(Helper.java:39)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:430)
>       at 
> org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:89)
>       at 
> org.apache.calcite.jdbc.TestJdbcAdaptorAmbiguousColumn.main(TestJdbcAdaptorAmbiguousColumn.java:74)
> Caused by: java.lang.RuntimeException: while executing SQL [SELECT "RNUM", 
> "RNUM0"
> FROM "TINT"
> INNER JOIN "TINT2"
> WHERE "TINT"."CINT" >= "TINT2"."CINT"]
>       at 
> org.apache.calcite.runtime.ResultSetEnumerable.enumerator(ResultSetEnumerable.java:149)
>       at 
> org.apache.calcite.linq4j.AbstractEnumerable.iterator(AbstractEnumerable.java:33)
>       at org.apache.calcite.avatica.MetaImpl.createCursor(MetaImpl.java:74)
>       at 
> org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:62)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:1)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:428)
>       ... 2 more
> Caused by: org.h2.jdbc.JdbcSQLException: Ambiguous column name "RNUM"; SQL 
> statement:
> SELECT "RNUM", "RNUM0"
> FROM "TINT"
> INNER JOIN "TINT2"
> WHERE "TINT"."CINT" >= "TINT2"."CINT" [90059-175]
>       at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
>       at org.h2.message.DbException.get(DbException.java:172)
> Test Code: 
> package org.apache.calcite.jdbc;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.util.Properties;
> import org.h2.Driver;
> //import org.hsqldb.jdbcDriver;
> public class TestJdbcAdaptorAmbiguousColumn {
>       public static void main(String[] args) {
>               try {
>                       String hsqldbMemUrl = "jdbc:h2:mem:test";
>                           Connection baseConnection = 
> DriverManager.getConnection(hsqldbMemUrl);
>                           Statement baseStmt = 
> baseConnection.createStatement();
>                           baseStmt.execute("CREATE TABLE TINT (RNUM INTEGER, 
> CINT INTEGER)");
>                           baseStmt.execute("INSERT INTO TINT VALUES (0, 1)"); 
>                     
>                           baseStmt.execute("CREATE TABLE TINT2 (RNUM INTEGER, 
> CINT INTEGER)");
>                           baseStmt.execute("INSERT INTO TINT2 VALUES (0, 1)");
>                           baseStmt.close();
>                           baseConnection.commit();
>                           Properties info = new Properties();
>                           info.put("model",
>                               "inline:"
>                                   + "{\n"
>                                   + "  version: '1.0',\n"
>                                   + "  defaultSchema: 'BASEJDBC',\n"
>                                   + "  schemas: [\n"
>                                   + "     {\n"
>                                   + "       type: 'jdbc',\n"
>                                   + "       name: 'BASEJDBC',\n"
>                                   + "       jdbcDriver: '" + 
> Driver.class.getName() + "',\n"
>                                   + "       jdbcUrl: '" + hsqldbMemUrl + 
> "',\n"
>                                   + "       jdbcCatalog: null,\n"
>                                   + "       jdbcSchema: null\n"
>                                   + "     }\n"
>                                   + "  ]\n"
>                                   + "}");
>                           Connection calciteConnection = 
> DriverManager.getConnection("jdbc:calcite:", info);
>                           ResultSet rs = 
> calciteConnection.prepareStatement("select tint.rnum, tint2.rnum from tint, 
> tint2 where tint.cint >= tint2.cint").executeQuery();
>                           while (rs.next()){
>                               System.out.println ("tint.rnum:" + (Integer) 
> rs.getObject(1));
>                               System.out.println ("tdbl.rnum:" + (Integer) 
> rs.getObject(2));
>                           }
>                           rs.close();
>                           calciteConnection.close();
>               }catch (Exception e){
>                       e.printStackTrace();
>               }
>       }
> }



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

Reply via email to