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()));