You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jd...@apache.org on 2015/08/11 10:29:47 UTC

hive git commit: HIVE-9567: JSON SerDe not escaping special chars when writing char/varchar data (Jason Dere, reviewed by Thejas Nair)

Repository: hive
Updated Branches:
  refs/heads/branch-1.0 f89aac53c -> 7f29ee466


HIVE-9567: JSON SerDe not escaping special chars when writing char/varchar data (Jason Dere, reviewed by Thejas Nair)

git-svn-id: https://svn.apache.org/repos/asf/hive/trunk@1657738 13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7f29ee46
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7f29ee46
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7f29ee46

Branch: refs/heads/branch-1.0
Commit: 7f29ee4666c86552325a76e8b68c1f2f002e3662
Parents: f89aac5
Author: Jason Dere <jd...@apache.org>
Authored: Fri Feb 6 01:54:20 2015 +0000
Committer: Jason Dere <jd...@hortonworks.com>
Committed: Tue Aug 11 01:25:38 2015 -0700

----------------------------------------------------------------------
 .../org/apache/hive/hcatalog/data/JsonSerDe.java     | 15 ++++++++++-----
 .../org/apache/hive/hcatalog/data/TestJsonSerDe.java |  6 +++---
 2 files changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/7f29ee46/hcatalog/core/src/main/java/org/apache/hive/hcatalog/data/JsonSerDe.java
----------------------------------------------------------------------
diff --git a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/data/JsonSerDe.java b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/data/JsonSerDe.java
index 9c87aa3..d27fa76 100644
--- a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/data/JsonSerDe.java
+++ b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/data/JsonSerDe.java
@@ -512,15 +512,20 @@ public class JsonSerDe implements SerDe {
         case DECIMAL:
           sb.append(((HiveDecimalObjectInspector)poi).getPrimitiveJavaObject(o));
           break;
-        case VARCHAR:
-          appendWithQuotes(sb, 
-                  ((HiveVarcharObjectInspector)poi).getPrimitiveJavaObject(o).toString());
+        case VARCHAR: {
+          String s = SerDeUtils.escapeString(
+              ((HiveVarcharObjectInspector) poi).getPrimitiveJavaObject(o).toString());
+          appendWithQuotes(sb, s);
           break;
-        case CHAR:
+        }
+        case CHAR: {
           //this should use HiveChar.getPaddedValue() but it's protected; currently (v0.13)
           // HiveChar.toString() returns getPaddedValue()
-          appendWithQuotes(sb, ((HiveCharObjectInspector)poi).getPrimitiveJavaObject(o).toString());
+          String s = SerDeUtils.escapeString(
+              ((HiveCharObjectInspector) poi).getPrimitiveJavaObject(o).toString());
+          appendWithQuotes(sb, s);
           break;
+        }
         default:
           throw new RuntimeException("Unknown primitive type: " + poi.getPrimitiveCategory());
         }

http://git-wip-us.apache.org/repos/asf/hive/blob/7f29ee46/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestJsonSerDe.java
----------------------------------------------------------------------
diff --git a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestJsonSerDe.java b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestJsonSerDe.java
index b4a810a..2947c43 100644
--- a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestJsonSerDe.java
+++ b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestJsonSerDe.java
@@ -56,7 +56,7 @@ public class TestJsonSerDe extends TestCase {
     rlist.add(new Long(1000L));
     rlist.add(new Double(5.3D));
     rlist.add(new Float(2.39F));
-    rlist.add(new String("hcat and hadoop"));
+    rlist.add(new String("hcat\nand\nhadoop"));
     rlist.add(null);
 
     List<Object> innerStruct = new ArrayList<Object>(2);
@@ -94,8 +94,8 @@ public class TestJsonSerDe extends TestCase {
     c1.add(c1_1);
     rlist.add(c1);
     rlist.add(HiveDecimal.create(new BigDecimal("123.45")));//prec 5, scale 2
-    rlist.add(new HiveChar("hive_char", 10));
-    rlist.add(new HiveVarchar("hive_varchar", 20));
+    rlist.add(new HiveChar("hive\nchar", 10));
+    rlist.add(new HiveVarchar("hive\nvarchar", 20));
     rlist.add(Date.valueOf("2014-01-07"));
     rlist.add(new Timestamp(System.currentTimeMillis()));