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

Samarth Jain updated PHOENIX-1131:
----------------------------------

    Description: 
{code}
@Test
    public void testEncodeDecodePaddingPks() throws Exception {
        Connection conn = DriverManager.getConnection(getUrl());
        conn.createStatement().execute(
                "CREATE TABLE T(pk1 CHAR(15) not null, pk2 CHAR(15) not null, 
v1 DATE " +
                "CONSTRAINT pk PRIMARY KEY (pk1, pk2))");
        
        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO T (pk1, 
pk2, v1) VALUES (?, ?, ?)");
        stmt.setString(1,  "def");
        stmt.setString(2,  "eid");
        stmt.setDate(3, new Date(100));
        stmt.executeUpdate();
        conn.commit();

        stmt = conn.prepareStatement("SELECT pk1, pk2 FROM T");

        Object[] retrievedValues = new Object[2];
        ResultSet rs = stmt.executeQuery();
        rs.next();
        retrievedValues[0] = rs.getString(1);
        retrievedValues[1] = rs.getString(2);
        
        byte[] value = PhoenixRuntime.encodePK(conn, "T", retrievedValues);
        Object[] decodedValues = PhoenixRuntime.decodePK(conn, "T", value);

        assertEquals(Arrays.asList(decodedValues), 
Arrays.asList(retrievedValues));
}
 
Exception thrown: 

java.lang.ArrayIndexOutOfBoundsException: 14
        at 
org.apache.phoenix.util.StringUtil.getFirstNonBlankCharIdxFromEnd(StringUtil.java:184)
        at 
org.apache.phoenix.util.StringUtil.getUnpaddedCharLength(StringUtil.java:205)
        at org.apache.phoenix.schema.PDataType$2.toObject(PDataType.java:229)
        at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6901)
        at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6905)
        at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6933)
        at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6925)
        at 
org.apache.phoenix.util.PhoenixRuntime.decodePK(PhoenixRuntime.java:453)
        at 
org.apache.phoenix.end2end.PhoenixEncodeDecodeIT.testEncodeDecodePaddingPks(PhoenixEncodeDecodeIT.java:204)
  
{code}

  was:
{code}
@Test
    public void testEncodeDecodePaddingPks() throws Exception {
        Connection conn = DriverManager.getConnection(getUrl());
        conn.createStatement().execute(
                "CREATE TABLE T(pk1 CHAR(15) not null, pk2 CHAR(15) not null, 
v1 DATE " +
                "CONSTRAINT pk PRIMARY KEY (pk1, pk2))");
        
        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO T (pk1, 
pk2, v1) VALUES (?, ?, ?)");
        stmt.setString(1,  "def");
        stmt.setString(2,  "eid");
        stmt.setDate(3, new Date(100));
        stmt.executeUpdate();
        conn.commit();

        stmt = conn.prepareStatement("SELECT pk1, pk2 FROM T");

        Object[] retrievedValues = new Object[2];
        ResultSet rs = stmt.executeQuery();
        rs.next();
        retrievedValues[0] = rs.getString(1);
        retrievedValues[1] = rs.getString(2);
        
        byte[] value = PhoenixRuntime.encodePK(conn, "T", retrievedValues);
        Object[] decodedValues = PhoenixRuntime.decodePK(conn, "T", value);

        assertEquals(Arrays.asList(decodedValues), 
Arrays.asList(retrievedValues));
}
   
{code}


> PhoenixRuntime.encodePk needs to pad row key values to max column length
> ------------------------------------------------------------------------
>
>                 Key: PHOENIX-1131
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1131
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 5.0.0, 3.1, 4.1
>            Reporter: Samarth Jain
>            Assignee: Samarth Jain
>         Attachments: PHOENIX-1131-3.0.patch
>
>
> {code}
> @Test
>     public void testEncodeDecodePaddingPks() throws Exception {
>         Connection conn = DriverManager.getConnection(getUrl());
>         conn.createStatement().execute(
>                 "CREATE TABLE T(pk1 CHAR(15) not null, pk2 CHAR(15) not null, 
> v1 DATE " +
>                 "CONSTRAINT pk PRIMARY KEY (pk1, pk2))");
>         
>         PreparedStatement stmt = conn.prepareStatement("UPSERT INTO T (pk1, 
> pk2, v1) VALUES (?, ?, ?)");
>         stmt.setString(1,  "def");
>         stmt.setString(2,  "eid");
>         stmt.setDate(3, new Date(100));
>         stmt.executeUpdate();
>         conn.commit();
>         stmt = conn.prepareStatement("SELECT pk1, pk2 FROM T");
>         Object[] retrievedValues = new Object[2];
>         ResultSet rs = stmt.executeQuery();
>         rs.next();
>         retrievedValues[0] = rs.getString(1);
>         retrievedValues[1] = rs.getString(2);
>         
>         byte[] value = PhoenixRuntime.encodePK(conn, "T", retrievedValues);
>         Object[] decodedValues = PhoenixRuntime.decodePK(conn, "T", value);
>         assertEquals(Arrays.asList(decodedValues), 
> Arrays.asList(retrievedValues));
> }
>  
> Exception thrown: 
> java.lang.ArrayIndexOutOfBoundsException: 14
>       at 
> org.apache.phoenix.util.StringUtil.getFirstNonBlankCharIdxFromEnd(StringUtil.java:184)
>       at 
> org.apache.phoenix.util.StringUtil.getUnpaddedCharLength(StringUtil.java:205)
>       at org.apache.phoenix.schema.PDataType$2.toObject(PDataType.java:229)
>       at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6901)
>       at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6905)
>       at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6933)
>       at org.apache.phoenix.schema.PDataType.toObject(PDataType.java:6925)
>       at 
> org.apache.phoenix.util.PhoenixRuntime.decodePK(PhoenixRuntime.java:453)
>       at 
> org.apache.phoenix.end2end.PhoenixEncodeDecodeIT.testEncodeDecodePaddingPks(PhoenixEncodeDecodeIT.java:204)
>   
> {code}



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

Reply via email to