You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by da...@apache.org on 2016/12/09 00:00:31 UTC

kudu git commit: KUDU-1757: add PartialRow.toString

Repository: kudu
Updated Branches:
  refs/heads/master f17562fd0 -> 18a8a90f7


KUDU-1757: add PartialRow.toString

Operation.toString could fail if the operation's partial row had not had
its full primary key filled in yet. This adds a PartialRow.toString
method which can handle any unset columns, and changes
Operation.toString to use that. Also fixes a ByteBuffer usage bug in
PartialRow::appendCellValueDebugString

Change-Id: Ife05af5a11e95751b3cc259e786d36494aeb5d3a
Reviewed-on: http://gerrit.cloudera.org:8080/5237
Reviewed-by: Jean-Daniel Cryans <jd...@apache.org>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/18a8a90f
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/18a8a90f
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/18a8a90f

Branch: refs/heads/master
Commit: 18a8a90f765dffde08165bc2aea2921a008ae351
Parents: f17562f
Author: yanlongzheng <ya...@outlook.com>
Authored: Sun Nov 27 13:27:46 2016 +0000
Committer: Dan Burkert <da...@apache.org>
Committed: Fri Dec 9 00:00:15 2016 +0000

----------------------------------------------------------------------
 .../java/org/apache/kudu/client/Operation.java  |  4 +-
 .../java/org/apache/kudu/client/PartialRow.java | 31 +++++++++-
 .../org/apache/kudu/client/TestPartialRow.java  | 60 ++++++++++++++++++++
 3 files changed, 92 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/18a8a90f/java/kudu-client/src/main/java/org/apache/kudu/client/Operation.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/Operation.java b/java/kudu-client/src/main/java/org/apache/kudu/client/Operation.java
index 3727d5d..5d214b7 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/Operation.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/Operation.java
@@ -202,8 +202,8 @@ public abstract class Operation extends KuduRpc<OperationResponse> {
   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder(super.toString());
-    sb.append(" row_key=");
-    sb.append(row.stringifyRowKey());
+    sb.append(' ');
+    sb.append(row.toString());
     return sb.toString();
   }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/18a8a90f/java/kudu-client/src/main/java/org/apache/kudu/client/PartialRow.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/PartialRow.java b/java/kudu-client/src/main/java/org/apache/kudu/client/PartialRow.java
index 82250cf..c53dd53 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/PartialRow.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/PartialRow.java
@@ -521,6 +521,35 @@ public class PartialRow {
     return KeyEncoder.encodePrimaryKey(this);
   }
 
+  /** {@inheritDoc} */
+  public String toString() {
+    int numCols = schema.getColumnCount();
+    StringBuilder sb = new StringBuilder();
+    sb.append('(');
+    boolean first = true;
+    for (int idx = 0; idx < numCols; ++idx) {
+      if (!columnsBitSet.get(idx)) {
+        continue;
+      }
+
+      if (first) {
+        first = false;
+      } else {
+        sb.append(", ");
+      }
+
+      ColumnSchema col = schema.getColumnByIndex(idx);
+      sb.append(col.getType().getName());
+      sb.append(' ');
+      sb.append(col.getName());
+      sb.append('=');
+
+      appendCellValueDebugString(idx, sb);
+    }
+    sb.append(')');
+    return sb.toString();
+  }
+
   /**
    * Transforms the row key into a string representation where each column is in the format:
    * "type col_name=value".
@@ -629,7 +658,7 @@ public class PartialRow {
       case STRING:
         ByteBuffer value = getVarLengthData().get(idx).duplicate();
         value.reset(); // Make sure we start at the beginning.
-        byte[] data = new byte[value.limit()];
+        byte[] data = new byte[value.limit() - value.position()];
         value.get(data);
         if (col.getType() == Type.STRING) {
           sb.append('"');

http://git-wip-us.apache.org/repos/asf/kudu/blob/18a8a90f/java/kudu-client/src/test/java/org/apache/kudu/client/TestPartialRow.java
----------------------------------------------------------------------
diff --git a/java/kudu-client/src/test/java/org/apache/kudu/client/TestPartialRow.java b/java/kudu-client/src/test/java/org/apache/kudu/client/TestPartialRow.java
new file mode 100644
index 0000000..9885ad2
--- /dev/null
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/TestPartialRow.java
@@ -0,0 +1,60 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.kudu.client;
+
+import static org.junit.Assert.assertEquals;
+
+import java.nio.ByteBuffer;
+
+import org.junit.Test;
+
+import org.apache.kudu.Schema;
+
+public class TestPartialRow {
+
+  @Test
+  public void testToString() {
+    Schema schema = BaseKuduTest.getSchemaWithAllTypes();
+
+    PartialRow row = schema.newPartialRow();
+    assertEquals("()", row.toString());
+
+    row.addInt("int32", 42);
+    row.addByte("int8", (byte) 42);
+
+    assertEquals("(int8 int8=42, int32 int32=42)", row.toString());
+
+    row.addString("string", "fun with �tf\0");
+    assertEquals("(int8 int8=42, int32 int32=42, string string=\"fun with �tf\\0\")",
+                 row.toString());
+
+    ByteBuffer binary = ByteBuffer.wrap(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
+    binary.position(2);
+    binary.limit(5);
+
+    row.addBinary("binary-bytebuffer", binary);
+    assertEquals("(int8 int8=42, int32 int32=42, string string=\"fun with �tf\\0\", " +
+                     "binary binary-bytebuffer=[2, 3, 4])",
+                 row.toString());
+
+    row.addDouble("double", 52.35);
+    assertEquals("(int8 int8=42, int32 int32=42, double double=52.35, " +
+                     "string string=\"fun with �tf\\0\", binary binary-bytebuffer=[2, 3, 4])",
+                 row.toString());
+  }
+}