You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2016/07/17 20:49:09 UTC

[2/3] accumulo git commit: ACCUMULO-4375 Add missing byte[]-based Key constructors

ACCUMULO-4375 Add missing byte[]-based Key constructors

Closes apache/accumulo#125

Signed-off-by: Josh Elser <el...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/3ee5af07
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/3ee5af07
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/3ee5af07

Branch: refs/heads/master
Commit: 3ee5af0774b77733d8f76c8c6436af6e081fcf4b
Parents: a8f804e
Author: Mario Pastorelli <ma...@teralytics.ch>
Authored: Sun Jul 17 01:01:31 2016 +0200
Committer: Josh Elser <el...@apache.org>
Committed: Sun Jul 17 15:40:19 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/accumulo/core/data/Key.java | 82 +++++++++++++++++++-
 .../org/apache/accumulo/core/data/KeyTest.java  | 41 ++++++++++
 2 files changed, 120 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/3ee5af07/core/src/main/java/org/apache/accumulo/core/data/Key.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/data/Key.java b/core/src/main/java/org/apache/accumulo/core/data/Key.java
index 758436d..f7737dc 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/Key.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/Key.java
@@ -107,6 +107,18 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, empty column family, empty column qualifier, empty column visibility, timestamp {@link Long#MAX_VALUE}, and delete
+   * marker false. This constructor creates a copy of row. If you don't want to create a copy of row, you should call
+   * {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   *
+   * @param row
+   *          row ID
+   */
+  public Key(byte[] row) {
+    init(row, 0, row.length, EMPTY_BYTES, 0, 0, EMPTY_BYTES, 0, 0, EMPTY_BYTES, 0, 0, Long.MAX_VALUE, false, true);
+  }
+
+  /**
    * Creates a key with the specified row, empty column family, empty column qualifier, empty column visibility, the specified timestamp, and delete marker
    * false.
    *
@@ -121,7 +133,23 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
-   * Creates a key. The delete marker defaults to false.
+   * Creates a key with the specified row, empty column family, empty column qualifier, empty column visibility, the specified timestamp, and delete marker
+   * false. This constructor creates a copy of row. If you don't want to create a copy, you should call
+   * {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   *
+   * @param row
+   *          row ID
+   * @param ts
+   *          timestamp
+   */
+  public Key(byte[] row, long ts) {
+    this(row);
+    timestamp = ts;
+  }
+
+  /**
+   * Creates a key. The delete marker defaults to false. This constructor creates a copy of each specified array. If you don't want to create a copy of the
+   * arrays, you should call {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
    *
    * @param row
    *          bytes containing row ID
@@ -155,7 +183,8 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
-   * Creates a key. The delete marker defaults to false.
+   * Creates a key. The delete marker defaults to false. This constructor creates a copy of each specified array. If you don't want to create a copy of the
+   * arrays, you should call {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
    *
    * @param row
    *          row ID
@@ -173,7 +202,8 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
-   * Creates a key.
+   * Creates a key. This constructor creates a copy of each specified arrays. If you don't want to create a copy, you should call
+   * {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
    *
    * @param row
    *          row ID
@@ -223,6 +253,15 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, the specified column family, empty column qualifier, empty column visibility, timestamp {@link Long#MAX_VALUE}, and
+   * delete marker false. This constructor creates a copy of each specified array. If you don't want to create a copy of the arrays, you should call
+   * {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   */
+  public Key(byte[] row, byte[] cf) {
+    init(row, 0, row.length, cf, 0, cf.length, EMPTY_BYTES, 0, 0, EMPTY_BYTES, 0, 0, Long.MAX_VALUE, false, true);
+  }
+
+  /**
    * Creates a key with the specified row, the specified column family, the specified column qualifier, empty column visibility, timestamp
    * {@link Long#MAX_VALUE}, and delete marker false.
    */
@@ -231,6 +270,15 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, the specified column family, the specified column qualifier, empty column visibility, timestamp
+   * {@link Long#MAX_VALUE}, and delete marker false. This constructor creates a copy of each specified array. If you don't want to create a copy of the arrays,
+   * you should call {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   */
+  public Key(byte[] row, byte[] cf, byte[] cq) {
+    init(row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, EMPTY_BYTES, 0, 0, Long.MAX_VALUE, false, true);
+  }
+
+  /**
    * Creates a key with the specified row, the specified column family, the specified column qualifier, the specified column visibility, timestamp
    * {@link Long#MAX_VALUE}, and delete marker false.
    */
@@ -240,6 +288,15 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, the specified column family, the specified column qualifier, the specified column visibility, timestamp
+   * {@link Long#MAX_VALUE}, and delete marker false. This constructor creates a copy of each specified array. If you don't want to create a copy of the arrays,
+   * you should call {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   */
+  public Key(byte[] row, byte[] cf, byte[] cq, byte[] cv) {
+    init(row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, cv, 0, cv.length, Long.MAX_VALUE, false, true);
+  }
+
+  /**
    * Creates a key with the specified row, the specified column family, the specified column qualifier, empty column visibility, the specified timestamp, and
    * delete marker false.
    */
@@ -248,6 +305,15 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, the specified column family, the specified column qualifier, empty column visibility, the specified timestamp, and
+   * delete marker false. This constructor creates a copy of each specified array. If you don't want to create a copy of the arrays, you should call
+   * {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   */
+  public Key(byte[] row, byte[] cf, byte[] cq, long ts) {
+    init(row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, EMPTY_BYTES, 0, 0, ts, false, true);
+  }
+
+  /**
    * Creates a key with the specified row, the specified column family, the specified column qualifier, the specified column visibility, the specified
    * timestamp, and delete marker false.
    */
@@ -266,6 +332,16 @@ public class Key implements WritableComparable<Key>, Cloneable {
   }
 
   /**
+   * Creates a key with the specified row, the specified column family, the specified column qualifier, the specified column visibility, the specified
+   * timestamp, and delete marker false. This constructor creates a copy of each specified array. If you don't want to create a copy of the arrays, you should
+   * call {@link Key#Key(byte[] row, byte[] cf, byte[] cq, byte[] cv, long ts, boolean deleted, boolean copy)} instead.
+   */
+  public Key(byte[] row, byte[] cf, byte[] cq, ColumnVisibility cv, long ts) {
+    byte[] expr = cv.getExpression();
+    init(row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, expr, 0, expr.length, ts, false, true);
+  }
+
+  /**
    * Converts CharSequence to Text and creates a Key using {@link #Key(Text)}.
    */
   public Key(CharSequence row) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3ee5af07/core/src/test/java/org/apache/accumulo/core/data/KeyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/data/KeyTest.java b/core/src/test/java/org/apache/accumulo/core/data/KeyTest.java
index c94c6b4..f14786f 100644
--- a/core/src/test/java/org/apache/accumulo/core/data/KeyTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/data/KeyTest.java
@@ -166,4 +166,45 @@ public class KeyTest {
       assertEquals(kv.getKey(), new Key(tkv.getKey()));
     }
   }
+
+  @Test
+  public void testBytesText() {
+    byte[] row = new byte[] {1};
+    Key bytesRowKey = new Key(row);
+    Key textRowKey = new Key(new Text(row));
+    assertEquals(bytesRowKey, textRowKey);
+
+    byte[] colFamily = new byte[] {0, 1};
+    Key bytesColFamilyKey = new Key(row, colFamily);
+    Key textColFamilyKey = new Key(new Text(row), new Text(colFamily));
+    assertEquals(bytesColFamilyKey, textColFamilyKey);
+
+    byte[] colQualifier = new byte[] {0, 0, 1};
+    Key bytesColQualifierKey = new Key(row, colFamily, colQualifier);
+    Key textColQualifierKey = new Key(new Text(row), new Text(colFamily), new Text(colQualifier));
+    assertEquals(bytesColQualifierKey, textColQualifierKey);
+
+    byte[] colVisibility = new byte[] {0, 0, 0, 1};
+    Key bytesColVisibilityKey = new Key(row, colFamily, colQualifier, colVisibility);
+    Key textColVisibilityKey = new Key(new Text(row), new Text(colFamily), new Text(colQualifier), new Text(colVisibility));
+    assertEquals(bytesColVisibilityKey, textColVisibilityKey);
+
+    long ts = 0L;
+    Key bytesTSKey = new Key(row, colFamily, colQualifier, colVisibility, ts);
+    Key textTSKey = new Key(new Text(row), new Text(colFamily), new Text(colQualifier), new Text(colVisibility), ts);
+    assertEquals(bytesTSKey, textTSKey);
+
+    Key bytesTSKey2 = new Key(row, ts);
+    Key textTSKey2 = new Key(new Text(row), ts);
+    assertEquals(bytesTSKey2, textTSKey2);
+
+    Key bytesTSKey3 = new Key(row, colFamily, colQualifier, ts);
+    Key testTSKey3 = new Key(new Text(row), new Text(colFamily), new Text(colQualifier), ts);
+    assertEquals(bytesTSKey3, testTSKey3);
+
+    ColumnVisibility colVisibility2 = new ColumnVisibility("v1");
+    Key bytesColVisibilityKey2 = new Key(row, colFamily, colQualifier, colVisibility2, ts);
+    Key textColVisibilityKey2 = new Key(new Text(row), new Text(colFamily), new Text(colQualifier), colVisibility2, ts);
+    assertEquals(bytesColVisibilityKey2, textColVisibilityKey2);
+  }
 }