public static boolean previousKey(byte[] key, int length) { return previousKey(key, 0, length); }
public static byte[] previousKey(byte[] key) { byte[] previousKey = new byte[key.length]; System.arraycopy(key, 0, previousKey, 0, key.length); if (!previousKey(previousKey, previousKey.length)) { return null; } return previousKey; }
@Test public void testNullInMiddleOfRVC() throws SQLException { String tenantId = "000000000000001"; String parentId = null; Date createdDate = new Date(System.currentTimeMillis()); String query = "select * from entity_history where (organization_id, parent_id, created_date) >= (?,?,?)"; Scan scan = new Scan(); List<Object> binds = Arrays.<Object>asList(tenantId, parentId, createdDate); HashSet<Expression> extractedFilters = new HashSet<Expression>(); compileStatement(query, scan, binds, extractedFilters); assertTrue(extractedFilters.size() == 1); byte[] expectedStartRow = ByteUtil.concat(PDataType.CHAR.toBytes(tenantId), new byte[15], ByteUtil.previousKey(PDataType.DATE.toBytes(createdDate))); assertArrayEquals(expectedStartRow, scan.getStartRow()); assertArrayEquals(HConstants.EMPTY_END_ROW, scan.getStopRow()); }
@Test public void testNullAtStartOfRVC() throws SQLException { String tenantId = null; String parentId = "000000000000002"; Date createdDate = new Date(System.currentTimeMillis()); String query = "select * from entity_history where (organization_id, parent_id, created_date) >= (?,?,?)"; Scan scan = new Scan(); List<Object> binds = Arrays.<Object>asList(tenantId, parentId, createdDate); HashSet<Expression> extractedFilters = new HashSet<Expression>(); compileStatement(query, scan, binds, extractedFilters); assertTrue(extractedFilters.size() == 1); byte[] expectedStartRow = ByteUtil.concat(new byte[15], ByteUtil.previousKey(PDataType.CHAR.toBytes(parentId)), PDataType.DATE.toBytes(createdDate)); assertArrayEquals(expectedStartRow, scan.getStartRow()); assertArrayEquals(HConstants.EMPTY_END_ROW, scan.getStopRow()); }
previousCarryOver = !ByteUtil.previousKey(output.getBuffer(), output.size());