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

Hudson commented on PHOENIX-839:
--------------------------------

SUCCESS: Integrated in Apache Phoenix - Branch:3.0 #36 (See 
[https://builds.apache.org/job/Phoenix-3.0/36/])
PHOENIX-839 Joining on a dynamic column doesn't work (maryannxue: rev 
a8362a0ff85620f1bac77fe3fd861b164adb4114)
* phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
* phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java


> Joining on a dynamic column doesn't work
> ----------------------------------------
>
>                 Key: PHOENIX-839
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-839
>             Project: Phoenix
>          Issue Type: Bug
>         Environment: {code}
>  @Test
>     public void testJoinOnDynamicColumns() throws Exception {
>       String tableA = "tableA";
>       String tableB = "tableB";
>       Properties props = new Properties(TEST_PROPERTIES);
>       Connection conn = null;
>       PreparedStatement stmt = null;
>       try {
>               conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
>               String ddlA = "CREATE TABLE " + tableA 
>                               + "   (pkA INTEGER NOT NULL, "
>                               + "    colA1 INTEGER, "
>                               + "    colA2 VARCHAR "
>                               + "CONSTRAINT PK PRIMARY KEY"
>                               + "(pkA)"
>                               + ")"; 
>               
>               String ddlB = "CREATE TABLE " + tableB 
>                               + "   (pkB INTEGER NOT NULL PRIMARY KEY, " 
>                               + "    colB INTEGER)";
>               stmt = conn.prepareStatement(ddlA);
>               stmt.execute();
>               stmt.close();
>               stmt = conn.prepareStatement(ddlB);
>               stmt.execute();
>               stmt.close();
>               
>               String upsertA = "UPSERT INTO TABLEA (pkA, colA1, colA2) 
> VALUES(?, ?, ?)";
>               stmt = conn.prepareStatement(upsertA);
>               int i = 0;
>               for (i = 0; i < 5; i++) {
>                       stmt.setInt(1, i);
>                       stmt.setInt(2, i + 10);
>                       stmt.setString(3, "00" + i);
>                       stmt.executeUpdate();
>               }
>               conn.commit();
>               stmt.close();
>               
>               //upsert select column pkA from TABLEA dynamically into TABLEB
>               conn.createStatement().execute("CREATE SEQUENCE SEQB");
>               String upsertBSelectA = "UPSERT INTO TABLEB (pkB, pkA INTEGER)" 
>                                                  + "SELECT NEXT VALUE FOR 
> SEQB, pkA FROM TABLEA";
>               stmt = conn.prepareStatement(upsertBSelectA);
>               stmt.executeUpdate();
>               stmt.close();
>               conn.commit();
>               conn.createStatement().execute("DROP SEQUENCE SEQB");
>               
>               //perform a join between tableB and tableA by joining on the 
> dynamic column that we upserted in 
>               //tableB. This join should return all the rows from table A.
>               String joinSql = "SELECT A.pkA, A.COLA1, A.colA2 FROM TABLEB 
> B(pkA INTEGER) JOIN TABLEA A ON a.pkA = b.pkA";
>               stmt = conn.prepareStatement(joinSql);
>               ResultSet rs = stmt.executeQuery();
>               i = 0;
>               while(rs.next()) {
>                       //check that we get back all the rows that we upserted 
> for tableA above.
>                       assertEquals(rs.getInt(1), i);
>                       assertEquals(rs.getInt(2), i + 10);
>                       assertEquals(rs.getInt(3), "00" + i);
>                       i++;
>               }
>               assertEquals(5, 4); //check that we got back all the rows.
>       } finally {
>               if (stmt != null) {
>                       stmt.close();
>               }
>               if (conn != null) {
>                       conn.close();
>               }
>       }
>     }
> Exception stacktrace:
> org.apache.phoenix.schema.ColumnNotFoundException: ERROR 504 (42703): 
> Undefined column. columnName=PKA
>       at org.apache.phoenix.schema.PTableImpl.getColumn(PTableImpl.java:508)
>       at 
> org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.resolveColumn(FromCompiler.java:249)
>       at 
> org.apache.phoenix.compile.ExpressionCompiler.resolveColumn(ExpressionCompiler.java:311)
>       at 
> org.apache.phoenix.compile.ProjectionCompiler$SelectClauseVisitor.resolveColumn(ProjectionCompiler.java:501)
>       at 
> org.apache.phoenix.compile.ExpressionCompiler.visit(ExpressionCompiler.java:329)
>       at 
> org.apache.phoenix.compile.ExpressionCompiler.visit(ExpressionCompiler.java:1)
>       at 
> org.apache.phoenix.parse.ColumnParseNode.accept(ColumnParseNode.java:50)
>       at 
> org.apache.phoenix.compile.ProjectionCompiler.compile(ProjectionCompiler.java:302)
>       at 
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:264)
>       at 
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:128)
>       at 
> org.apache.phoenix.optimize.QueryOptimizer.optimize(QueryOptimizer.java:75)
>       at 
> org.apache.phoenix.optimize.QueryOptimizer.optimize(QueryOptimizer.java:70)
>       at 
> org.apache.phoenix.compile.JoinCompiler.optimize(JoinCompiler.java:1062)
>       at 
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:120)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:264)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:199)
>       at 
> org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
>       at 
> org.apache.phoenix.end2end.HashJoinTest.testJoinOnDynamicColumns(HashJoinTest.java:2309)
> {code}
>            Reporter: Samarth Jain
>            Assignee: James Taylor
>         Attachments: dynColForJoin.patch, dynColForJoin2.patch
>
>




--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to