KUDU-1938 Add VARCHAR to tooling and helpers pt 7

VARCHAR support was missing from some tools and helpers, adding them
here.

Change-Id: I84257c71528dafdf9c01c0d3cdda44a626ed7f67
Reviewed-on: http://gerrit.cloudera.org:8080/14831
Tested-by: Kudu Jenkins
Reviewed-by: Adar Dembo <adar@cloudera.com>
diff --git a/src/kudu/common/row.h b/src/kudu/common/row.h
index 846ba02..3ffffcd 100644
--- a/src/kudu/common/row.h
+++ b/src/kudu/common/row.h
@@ -618,6 +618,16 @@
     AddSlice(str);
   }
 
+  void AddVarchar(const Slice &slice) {
+    CheckNextType(VARCHAR);
+    AddSlice(slice);
+  }
+
+  void AddVarchar(const std::string &str) {
+    CheckNextType(VARCHAR);
+    AddSlice(str);
+  }
+
   void AddInt8(int8_t val) {
     CheckNextType(INT8);
     *reinterpret_cast<int8_t *>(&buf_[byte_idx_]) = val;
diff --git a/src/kudu/tools/tool_action_perf.cc b/src/kudu/tools/tool_action_perf.cc
index 9b83122..5ccd814 100644
--- a/src/kudu/tools/tool_action_perf.cc
+++ b/src/kudu/tools/tool_action_perf.cc
@@ -175,11 +175,11 @@
 #include <string>
 #include <thread>
 #include <unordered_map>
+#include <utility>
 #include <vector>
 
 #include <boost/optional/optional.hpp>
 #include <gflags/gflags.h>
-#include <gflags/gflags_declare.h>
 #include <glog/logging.h>
 
 #include "kudu/client/client.h"
@@ -499,6 +499,12 @@
           RETURN_NOT_OK(row->SetStringNoCopy(idx, fixed_string));
         }
         break;
+      case VARCHAR:
+        if (fixed_string.empty()) {
+          RETURN_NOT_OK(row->SetVarchar(idx, gen->Next<string>()));
+        } else {
+          RETURN_NOT_OK(row->SetStringNoCopy(idx, fixed_string));
+        }
       default:
         return Status::InvalidArgument("unknown data type");
     }
diff --git a/src/kudu/tools/tool_action_table.cc b/src/kudu/tools/tool_action_table.cc
index aaa6d70..54a1650 100644
--- a/src/kudu/tools/tool_action_table.cc
+++ b/src/kudu/tools/tool_action_table.cc
@@ -29,8 +29,8 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/optional/optional.hpp>
 #include <gflags/gflags.h>
-#include <gflags/gflags_declare.h>
 #include <glog/logging.h>
+#include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/status.h>
 #include <google/protobuf/stubs/stringpiece.h>
 #include <google/protobuf/util/json_util.h>
@@ -287,7 +287,8 @@
         break;
       }
       case KuduColumnSchema::BINARY:
-      case KuduColumnSchema::STRING: {
+      case KuduColumnSchema::STRING:
+      case KuduColumnSchema::VARCHAR: {
         string value;
         RETURN_NOT_OK_PREPEND(
             reader.ExtractString(values[i], /*field=*/nullptr, &value),
@@ -586,6 +587,13 @@
         RETURN_NOT_OK(range_bound_partial_row->SetString(col_name, value));
         break;
       }
+      case KuduColumnSchema::VARCHAR: {
+        string value;
+        RETURN_NOT_OK_PREPEND(
+          reader.ExtractString(values[i], /*field=*/nullptr, &value),
+          error_msg);
+        RETURN_NOT_OK(range_bound_partial_row->SetVarchar(col_name, value));
+      }
       case KuduColumnSchema::BOOL:
       case KuduColumnSchema::FLOAT:
       case KuduColumnSchema::DOUBLE:
@@ -714,7 +722,8 @@
       break;
     }
     case KuduColumnSchema::DataType::BINARY:
-    case KuduColumnSchema::DataType::STRING: {
+    case KuduColumnSchema::DataType::STRING:
+    case KuduColumnSchema::DataType::VARCHAR: {
       string str_value;
       RETURN_NOT_OK_PREPEND(
         reader.ExtractString(values[0], /*field=*/nullptr, &str_value), msg);
@@ -891,6 +900,7 @@
   string joined = JoinMapped(values, [&](const string& v) {
     auto data_type = range_columns[i++].second;
     if (data_type == KuduColumnSchema::STRING ||
+        data_type == KuduColumnSchema::VARCHAR ||
         data_type == KuduColumnSchema::BINARY) {
       return "\"" + v + "\"";
     }
@@ -996,6 +1006,7 @@
       string default_v;
       if (column.column_type() == "STRING" ||
           column.column_type() == "BINARY" ||
+          column.column_type() == "VARCHAR" ||
           column.column_type() == "DECIMAL") {
         default_v = "[\"" + column.default_value() + "\"]";
       } else {