Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-1131

PhoenixRuntime.encodePk needs to pad row key values to max column length

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.1.0, 4.1.0
    • 3.1.0, 4.1.0
    • None
    • None

    Description

      @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)
        
      

      Attachments

        1. PHOENIX-1131-3.0.patch
          3 kB
          Samarth Jain

        Activity

          People

            samarthjain Samarth Jain
            samarthjain Samarth Jain
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: