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

Andrew Khor updated PHOENIX-4982:
---------------------------------
    Description: 
{code:java}
@Test public void testJoinWithOrderBy() throws Exception { String metadata = 
"metadata"; String uuidMap = "uuidMap"; String properties = "properties"; 
String createMetadta = "CREATE TABLE \"metadata\" (\n" + " \"groupKey\" VARCHAR 
PRIMARY KEY\n" + ")\n" + "SALT_BUCKETS = 256,\n" + "COLUMN_ENCODED_BYTES = 0"; 
String createUuidMap = "CREATE TABLE \"uuidMap\" (\n" + " \"uuid\" VARCHAR 
PRIMARY KEY ,\n" + " \"typeKey\" VARCHAR ,\n" + " \"groupKey\" VARCHAR\n" + 
")"; List<Column> viewColumns = Arrays.asList( new Column("c_FQ","VARCHAR"), 
new Column("c_Fg","BIGINT"), new Column("c_Fw","VARCHAR"), new 
Column("c_GA","BIGINT"), new Column("c_GQ","VARCHAR"), new 
Column("c_Gg","VARCHAR"), new Column("c_Gw","VARCHAR")); StringBuilder 
viewColCommaSep = new StringBuilder("\"groupKey\""); StringBuilder 
viewColCommaSepQualified = new 
StringBuilder("\"").append(properties).append("\".\"groupKey\""); StringBuilder 
viewColWithTypeCommaSep = new StringBuilder("\"groupKey\" VARCHAR"); 
StringBuilder valueStr = new StringBuilder(); viewColumns.forEach(col -> { 
viewColCommaSep.append(",\"").append(col.name).append("\""); 
viewColCommaSepQualified.append(",\"").append(properties).append("\".\"").append(col.name).append("\"");
 viewColWithTypeCommaSep.append(",\"").append(col.name).append("\"").append(" 
").append(col.type); 
valueStr.append(",").append(col.type.equalsIgnoreCase("BIGINT") ? 
System.currentTimeMillis() : "'Some'"); }); String createProperties = 
String.format("CREATE VIEW \"%s\" (%s) AS SELECT * FROM \"%s\" ", 
properties,viewColWithTypeCommaSep, metadata); List<String> columnNames = 
viewColumns.stream().map(col-> col.name).collect(Collectors.toList()); 
List<String> groupKeys= Arrays.asList("file_123","file_345"); 
Map<String,Object> valueMap=new HashMap<>(); try (Connection conn = 
DriverManager.getConnection(CONN_STRING); Statement stmt = 
conn.createStatement()) { conn.setAutoCommit(true); 
assertFalse(stmt.execute("DROP TABLE IF EXISTS " + metadata)); 
assertFalse(stmt.execute("DROP TABLE IF EXISTS " + uuidMap)); 
assertFalse(stmt.execute("DROP TABLE IF EXISTS " + properties)); 
assertFalse(stmt.execute(createMetadta)); 
assertFalse(stmt.execute(createUuidMap)); 
assertFalse(stmt.execute(createProperties)); groupKeys.forEach(grpKey ->{ try { 
stmt.execute("UPSERT INTO \"" + properties + "\"(" +viewColCommaSep+ ") VALUES 
('"+grpKey+"'"+valueStr+") "); stmt.execute("UPSERT INTO \"" + uuidMap + 
"\"(\"uuid\",\"typeKey\",\"groupKey\") VALUES 
('"+UUID.randomUUID()+"','properties','"+grpKey+"') "); } catch (Exception e){ 
throw new RuntimeException(e); } }); Statement statement = null; ResultSet rs = 
null; PreparedStatement ps = null; String sql = "SELECT 
"+viewColCommaSepQualified.toString()+" "+ "FROM \"uuidMap\" JOIN 
\"properties\" ON (\"properties\".\"groupKey\" = \"uuidMap\".\"groupKey\")\n" + 
"WHERE \"uuidMap\".\"typeKey\" = 'properties'\n" + " ORDER BY \"c_GA\" ASC\n" + 
"LIMIT 100"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); 
assertTrue(rs.next()); } } class Column { String name; String type; public 
Column(String name, String type) { this.name = name; this.type = type; } }{code}

  was:
{code:java}
@Test
public void testJoinWithOrderBy() throws Exception {
    String tableA = "A";
    String tableB = "B";
    String createA = "CREATE TABLE \"" + tableA + "\" (\n" +
            "  \"a1\"   VARCHAR PRIMARY KEY ,\n" +
            "  \"a2\"   VARCHAR             \n" +
            ")";
    String createB = "CREATE TABLE \"" + tableB + "\" (\n" +
            "  \"b1\"   VARCHAR PRIMARY KEY ,\n" +
            "  \"b2\"   VARCHAR             \n" +
            ")\n";
    try (Connection conn = DriverManager.getConnection(CONN_STRING);
         Statement stmt = conn.createStatement()) {
        conn.setAutoCommit(false);
        assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableA));
        assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableB));
        assertFalse(stmt.execute(createA));
        assertFalse(stmt.execute(createB));
        Statement statement = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        String sql = "SELECT \"" + tableA + "\".\"a2\" " +
                "FROM \"" + tableA + "\" JOIN \"" + tableB + "\" ON (\"" + 
tableA + "\".\"a1\" = \"" + tableB + "\".\"b1\") " +
                "WHERE (\"" + tableB + "\".\"b2\" = ?) " + 
                "ORDER BY \""+ tableA + "\".\"a2\" ASC";
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        assertFalse(rs.next());
    } 
}
{code}
See above for a test case.


> Query Fails For Join with Order By that is fully qualified
> ----------------------------------------------------------
>
>                 Key: PHOENIX-4982
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4982
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Andrew Khor
>            Priority: Major
>
> {code:java}
> @Test public void testJoinWithOrderBy() throws Exception { String metadata = 
> "metadata"; String uuidMap = "uuidMap"; String properties = "properties"; 
> String createMetadta = "CREATE TABLE \"metadata\" (\n" + " \"groupKey\" 
> VARCHAR PRIMARY KEY\n" + ")\n" + "SALT_BUCKETS = 256,\n" + 
> "COLUMN_ENCODED_BYTES = 0"; String createUuidMap = "CREATE TABLE \"uuidMap\" 
> (\n" + " \"uuid\" VARCHAR PRIMARY KEY ,\n" + " \"typeKey\" VARCHAR ,\n" + " 
> \"groupKey\" VARCHAR\n" + ")"; List<Column> viewColumns = Arrays.asList( new 
> Column("c_FQ","VARCHAR"), new Column("c_Fg","BIGINT"), new 
> Column("c_Fw","VARCHAR"), new Column("c_GA","BIGINT"), new 
> Column("c_GQ","VARCHAR"), new Column("c_Gg","VARCHAR"), new 
> Column("c_Gw","VARCHAR")); StringBuilder viewColCommaSep = new 
> StringBuilder("\"groupKey\""); StringBuilder viewColCommaSepQualified = new 
> StringBuilder("\"").append(properties).append("\".\"groupKey\""); 
> StringBuilder viewColWithTypeCommaSep = new StringBuilder("\"groupKey\" 
> VARCHAR"); StringBuilder valueStr = new StringBuilder(); 
> viewColumns.forEach(col -> { 
> viewColCommaSep.append(",\"").append(col.name).append("\""); 
> viewColCommaSepQualified.append(",\"").append(properties).append("\".\"").append(col.name).append("\"");
>  viewColWithTypeCommaSep.append(",\"").append(col.name).append("\"").append(" 
> ").append(col.type); 
> valueStr.append(",").append(col.type.equalsIgnoreCase("BIGINT") ? 
> System.currentTimeMillis() : "'Some'"); }); String createProperties = 
> String.format("CREATE VIEW \"%s\" (%s) AS SELECT * FROM \"%s\" ", 
> properties,viewColWithTypeCommaSep, metadata); List<String> columnNames = 
> viewColumns.stream().map(col-> col.name).collect(Collectors.toList()); 
> List<String> groupKeys= Arrays.asList("file_123","file_345"); 
> Map<String,Object> valueMap=new HashMap<>(); try (Connection conn = 
> DriverManager.getConnection(CONN_STRING); Statement stmt = 
> conn.createStatement()) { conn.setAutoCommit(true); 
> assertFalse(stmt.execute("DROP TABLE IF EXISTS " + metadata)); 
> assertFalse(stmt.execute("DROP TABLE IF EXISTS " + uuidMap)); 
> assertFalse(stmt.execute("DROP TABLE IF EXISTS " + properties)); 
> assertFalse(stmt.execute(createMetadta)); 
> assertFalse(stmt.execute(createUuidMap)); 
> assertFalse(stmt.execute(createProperties)); groupKeys.forEach(grpKey ->{ try 
> { stmt.execute("UPSERT INTO \"" + properties + "\"(" +viewColCommaSep+ ") 
> VALUES ('"+grpKey+"'"+valueStr+") "); stmt.execute("UPSERT INTO \"" + uuidMap 
> + "\"(\"uuid\",\"typeKey\",\"groupKey\") VALUES 
> ('"+UUID.randomUUID()+"','properties','"+grpKey+"') "); } catch (Exception 
> e){ throw new RuntimeException(e); } }); Statement statement = null; 
> ResultSet rs = null; PreparedStatement ps = null; String sql = "SELECT 
> "+viewColCommaSepQualified.toString()+" "+ "FROM \"uuidMap\" JOIN 
> \"properties\" ON (\"properties\".\"groupKey\" = \"uuidMap\".\"groupKey\")\n" 
> + "WHERE \"uuidMap\".\"typeKey\" = 'properties'\n" + " ORDER BY \"c_GA\" 
> ASC\n" + "LIMIT 100"; ps = conn.prepareStatement(sql); rs = 
> ps.executeQuery(); assertTrue(rs.next()); } } class Column { String name; 
> String type; public Column(String name, String type) { this.name = name; 
> this.type = type; } }{code}



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

Reply via email to