diff --git jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java index 2e5c30e..7ccd461 100644 --- jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java +++ jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -418,14 +418,14 @@ public void testDataTypes() throws Exception { assertEquals("[]", res.getString(5)); assertEquals("{}", res.getString(6)); assertEquals("{}", res.getString(7)); - assertEquals("[null, null, null]", res.getString(8)); + assertEquals("{\"r\":null,\"s\":null,\"t\":null}", res.getString(8)); assertEquals(-1, res.getByte(9)); assertEquals(-1, res.getShort(10)); assertEquals(-1.0f, res.getFloat(11)); assertEquals(-1, res.getLong(12)); assertEquals("[]", res.getString(13)); assertEquals("{}", res.getString(14)); - assertEquals("[null, null]", res.getString(15)); + assertEquals("{\"r\":null,\"s\":null}", res.getString(15)); assertEquals("[]", res.getString(16)); assertEquals(null, res.getString(17)); assertEquals(null, res.getTimestamp(17)); @@ -437,18 +437,18 @@ public void testDataTypes() throws Exception { assertEquals(true, res.getBoolean(2)); assertEquals(1.1d, res.getDouble(3)); assertEquals("1", res.getString(4)); - assertEquals("[1, 2]", res.getString(5)); - assertEquals("{1=x, 2=y}", res.getString(6)); - assertEquals("{k=v}", res.getString(7)); - assertEquals("[a, 9, 2.2]", res.getString(8)); + assertEquals("[1,2]", res.getString(5)); + assertEquals("{1:\"x\",2:\"y\"}", res.getString(6)); + assertEquals("{\"k\":\"v\"}", res.getString(7)); + assertEquals("{\"r\":\"a\",\"s\":9,\"t\":2.2}", res.getString(8)); assertEquals(1, res.getByte(9)); assertEquals(1, res.getShort(10)); assertEquals(1.0f, res.getFloat(11)); assertEquals(1, res.getLong(12)); - assertEquals("[[a, b], [c, d]]", res.getString(13)); - assertEquals("{1={11=12, 13=14}, 2={21=22}}", res.getString(14)); - assertEquals("[1, [2, x]]", res.getString(15)); - assertEquals("[[{}, 1], [{c=d, a=b}, 2]]", res.getString(16)); + assertEquals("[[\"a\",\"b\"],[\"c\",\"d\"]]", res.getString(13)); + assertEquals("{1:{11:12,13:14},2:{21:22}}", res.getString(14)); + assertEquals("{\"r\":1,\"s\":{\"a\":2,\"b\":\"x\"}}", res.getString(15)); + assertEquals("[{\"m\":{},\"n\":1},{\"m\":{\"a\":\"b\",\"c\":\"d\"},\"n\":2}]", res.getString(16)); assertEquals("2012-04-22 09:00:00.123456789", res.getString(17)); assertEquals("2012-04-22 09:00:00.123456789", res.getTimestamp(17).toString()); assertEquals("123456789.0123456", res.getBigDecimal(18).toString()); diff --git service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java index 405f0c7..7669e5c 100644 --- service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java +++ service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java @@ -35,6 +35,7 @@ import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.SerDe; +import org.apache.hadoop.hive.serde2.SerDeUtils; import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; @@ -201,7 +202,7 @@ private static Object convertLazyToJava(Object o, ObjectInspector oi) { // for now, expose non-primitive as a string // TODO: expose non-primitive as a structured object while maintaining JDBC compliance if (obj != null && oi.getCategory() != ObjectInspector.Category.PRIMITIVE) { - obj = obj.toString(); + obj = SerDeUtils.getJSONString(o, oi); } return obj;