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

Using BINARY type in secondary indexes fails when doing an UPSERT

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Invalid
    • Affects Version/s: None
    • Fix Version/s: 3.0.0, 4.0.0
    • Labels:
      None

      Description

      @Test
          public void testIndexCreation() throws Exception {
          	Properties props = new Properties(TEST_PROPERTIES);
          	Connection conn = DriverManager.getConnection(getUrl(), props);
              try {
                  conn.createStatement().execute("CREATE TABLE IF NOT EXISTS t1 "
                  		+ "( id BIGINT NOT NULL PRIMARY KEY" // INDEX_ID
                          + ", t BINARY(16) NOT NULL" // INDEX_THING_ID
                          + ", e BINARY(16) NOT NULL" // INDEX_EVENT_KEY
                          + ", d DATE NOT NULL" // INDEX_TIMESTAMP
                          + ", y BINARY(16) NULL" // INDEX_METATYPE_ID
                          + ", v BINARY(16) NULL)"); // INDEX_VALUE
                  
                  conn.createStatement().execute("CREATE INDEX IF NOT EXISTS index1 ON  t1 (t, e, d DESC)");
                  conn.createStatement().execute("CREATE INDEX IF NOT EXISTS index2 ON t1 (t, d DESC, e)");
                  
                  String upsert = "UPSERT INTO t1 values (?, ?, ?, ?, ?, ?)";
                  PreparedStatement stmt = conn.prepareStatement(upsert);
                  stmt.setInt(1, 1);
                  stmt.setBytes(2, "ABC".getBytes());
                  stmt.setBytes(3, "BCD".getBytes());
                  stmt.setDate(4, new Date(System.currentTimeMillis()));
                  stmt.setBytes(5, "CDE".getBytes());
                  stmt.setBytes(6, "BBNNB".getBytes());
                  stmt.executeUpdate();
                  conn.commit();
              } finally {
                  conn.close();
              }
          }
      
      
      Exception:
      
      java.lang.IllegalArgumentException: Unsupported non nullable index type BINARY
      	at org.apache.phoenix.util.IndexUtil.getIndexColumnDataType(IndexUtil.java:81)
      	at org.apache.phoenix.index.IndexMaintainer.buildRowKey(IndexMaintainer.java:345)
      	at org.apache.phoenix.index.IndexMaintainer.buildUpdateMutation(IndexMaintainer.java:391)
      	at org.apache.phoenix.util.IndexUtil.generateIndexData(IndexUtil.java:185)
      	at org.apache.phoenix.execute.MutationState$1.next(MutationState.java:203)
      	at org.apache.phoenix.execute.MutationState$1.next(MutationState.java:186)
      	at org.apache.phoenix.execute.MutationState.commit(MutationState.java:347)
      	at org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:351)
      	at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:229)
      	at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:185)
      	at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:146)
      	at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:151)
      

        Attachments

          Activity

            People

            • Assignee:
              samarthjain Samarth Jain
              Reporter:
              samarthjain Samarth Jain
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: