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 <[email protected]> Authored: Fri Feb 6 01:54:20 2015 +0000 Committer: Jason Dere <[email protected]> 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()));
