You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2014/01/17 16:07:48 UTC
svn commit: r1559128 - in /hive/trunk: data/files/
itests/hive-unit/src/test/java/org/apache/hive/jdbc/
jdbc/src/java/org/apache/hive/jdbc/
Author: xuefu
Date: Fri Jan 17 15:07:48 2014
New Revision: 1559128
URL: http://svn.apache.org/r1559128
Log:
HIVE-3611: Hive JDBC doesn't support BINARY column (reviewed by Prasad)
Modified:
hive/trunk/data/files/datatypes.txt
hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java
Modified: hive/trunk/data/files/datatypes.txt
URL: http://svn.apache.org/viewvc/hive/trunk/data/files/datatypes.txt?rev=1559128&r1=1559127&r2=1559128&view=diff
==============================================================================
--- hive/trunk/data/files/datatypes.txt (original)
+++ hive/trunk/data/files/datatypes.txt Fri Jan 17 15:07:48 2014
@@ -1,3 +1,3 @@
\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N\N
-1false-1.1\N\N\N-1-1-1.0-1\N\N\N\N\N\N\N\N
-1true1.11121x2ykva92.2111.01abcd1111213142212212x1abcd22012-04-22 09:00:00.123456789123456789.0123456YWJjZA==2013-01-01abc123abc123
+1true1.11121x2ykva92.2111.01abcd1111213142212212x1abcd22012-04-22 09:00:00.123456789123456789.0123456YWJjZA==2013-01-01abc123abc123X'01FF'
Modified: hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
URL: http://svn.apache.org/viewvc/hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java?rev=1559128&r1=1559127&r2=1559128&view=diff
==============================================================================
--- hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java (original)
+++ hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java Fri Jan 17 15:07:48 2014
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
@@ -187,7 +188,8 @@ public class TestJdbcDriver2 {
+ " c19 binary, "
+ " c20 date,"
+ " c21 varchar(20),"
- + " c22 char(15)"
+ + " c22 char(15),"
+ + " c23 binary"
+ ") comment'" + dataTypeTableComment
+"' partitioned by (dt STRING)");
@@ -443,7 +445,7 @@ public class TestJdbcDriver2 {
ResultSet res = stmt.executeQuery(
"explain select c1, c2, c3, c4, c5 as a, c6, c7, c8, c9, c10, c11, c12, " +
- "c1*2, sentences(null, null, null) as b from " + dataTypeTableName + " limit 1");
+ "c1*2, sentences(null, null, null) as b, c23 from " + dataTypeTableName + " limit 1");
ResultSetMetaData md = res.getMetaData();
// only one result column
@@ -821,6 +823,7 @@ public class TestJdbcDriver2 {
assertEquals(null, res.getDate(20));
assertEquals(null, res.getString(21));
assertEquals(null, res.getString(22));
+ assertEquals(null, res.getString(23));
// row 3
assertTrue(res.next());
@@ -849,6 +852,15 @@ public class TestJdbcDriver2 {
assertEquals("abc123", res.getString(21));
assertEquals("abc123 ", res.getString(22));
+ byte[] bytes = "X'01FF'".getBytes("UTF-8");
+ InputStream resultSetInputStream = res.getBinaryStream(23);
+ int len = bytes.length;
+ byte[] b = new byte[len];
+ resultSetInputStream.read(b, 0, len);
+ for ( int i = 0; i< len; i++) {
+ assertEquals(bytes[i], b[i]);
+ }
+
// test getBoolean rules on non-boolean columns
assertEquals(true, res.getBoolean(1));
assertEquals(true, res.getBoolean(4));
@@ -1329,14 +1341,14 @@ public class TestJdbcDriver2 {
ResultSet res = stmt.executeQuery(
"select c1, c2, c3, c4, c5 as a, c6, c7, c8, c9, c10, c11, c12, " +
- "c1*2, sentences(null, null, null) as b, c17, c18, c20, c21, c22 from " + dataTypeTableName +
+ "c1*2, sentences(null, null, null) as b, c17, c18, c20, c21, c22, c23 from " + dataTypeTableName +
" limit 1");
ResultSetMetaData meta = res.getMetaData();
ResultSet colRS = con.getMetaData().getColumns(null, null,
dataTypeTableName.toLowerCase(), null);
- assertEquals(19, meta.getColumnCount());
+ assertEquals(20, meta.getColumnCount());
assertTrue(colRS.next());
@@ -1560,6 +1572,13 @@ public class TestJdbcDriver2 {
assertEquals(15, meta.getPrecision(19));
assertEquals(0, meta.getScale(19));
+ assertEquals("c23", meta.getColumnName(20));
+ assertEquals(Types.BINARY, meta.getColumnType(20));
+ assertEquals("binary", meta.getColumnTypeName(20));
+ assertEquals(Integer.MAX_VALUE, meta.getColumnDisplaySize(20));
+ assertEquals(Integer.MAX_VALUE, meta.getPrecision(20));
+ assertEquals(0, meta.getScale(20));
+
for (int i = 1; i <= meta.getColumnCount(); i++) {
assertFalse(meta.isAutoIncrement(i));
assertFalse(meta.isCurrency(i));
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java?rev=1559128&r1=1559127&r2=1559128&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java Fri Jan 17 15:07:48 2014
@@ -18,8 +18,10 @@
package org.apache.hive.jdbc;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
+import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.net.URL;
@@ -134,11 +136,31 @@ public abstract class HiveBaseResultSet
}
public InputStream getBinaryStream(int columnIndex) throws SQLException {
- throw new SQLException("Method not supported");
+ Object obj = getObject(columnIndex);
+ if (obj == null) {
+ return null;
+ } else if (obj instanceof InputStream) {
+ return (InputStream)obj;
+ } else if (obj instanceof byte[]) {
+ byte[] byteArray = (byte[])obj;
+ InputStream is = new ByteArrayInputStream(byteArray);
+ return is;
+ } else if (obj instanceof String) {
+ String str = (String)obj;
+ InputStream is = null;
+ try {
+ is = new ByteArrayInputStream(str.getBytes("UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new SQLException("Illegal conversion to binary stream from column " +
+ columnIndex + " - Unsupported encoding exception");
+ }
+ return is;
+ }
+ throw new SQLException("Illegal conversion to binary stream from column " + columnIndex);
}
public InputStream getBinaryStream(String columnName) throws SQLException {
- throw new SQLException("Method not supported");
+ return getBinaryStream(findColumn(columnName));
}
public Blob getBlob(int i) throws SQLException {
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java?rev=1559128&r1=1559127&r2=1559128&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java Fri Jan 17 15:07:48 2014
@@ -39,6 +39,7 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.HashMap;
+import java.util.Scanner;
import org.apache.hive.service.cli.thrift.TCLIService;
import org.apache.hive.service.cli.thrift.TSessionHandle;
@@ -263,8 +264,8 @@ public class HivePreparedStatement exten
*/
public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
- // TODO Auto-generated method stub
- throw new SQLException("Method not supported");
+ String str = new Scanner(x, "UTF-8").useDelimiter("\\A").next();
+ this.parameters.put(parameterIndex, str);
}
/*
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java?rev=1559128&r1=1559127&r2=1559128&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java Fri Jan 17 15:07:48 2014
@@ -194,6 +194,8 @@ public class JdbcColumn {
case Types.CHAR:
case Types.VARCHAR:
return columnPrecision(columnType, columnAttributes);
+ case Types.BINARY:
+ return Integer.MAX_VALUE; // hive has no max limit for binary
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
@@ -212,7 +214,6 @@ public class JdbcColumn {
return 25; // e.g. -(17#).e-####
case Types.DECIMAL:
return columnPrecision(columnType, columnAttributes) + 2; // '-' sign and '.'
- case Types.BINARY:
case Types.JAVA_OBJECT:
case Types.ARRAY:
case Types.STRUCT:
@@ -234,6 +235,8 @@ public class JdbcColumn {
return columnAttributes.precision;
}
return Integer.MAX_VALUE; // hive has no max limit for strings
+ case Types.BINARY:
+ return Integer.MAX_VALUE; // hive has no max limit for binary
case Types.TINYINT:
return 3;
case Types.SMALLINT:
@@ -252,7 +255,6 @@ public class JdbcColumn {
return 29;
case Types.DECIMAL:
return columnAttributes.precision;
- case Types.BINARY:
case Types.JAVA_OBJECT:
case Types.ARRAY:
case Types.STRUCT:
@@ -274,6 +276,7 @@ public class JdbcColumn {
case Types.INTEGER:
case Types.BIGINT:
case Types.DATE:
+ case Types.BINARY:
return 0;
case Types.FLOAT:
return 7;
@@ -283,7 +286,6 @@ public class JdbcColumn {
return 9;
case Types.DECIMAL:
return columnAttributes.scale;
- case Types.BINARY:
case Types.JAVA_OBJECT:
case Types.ARRAY:
case Types.STRUCT: