diff --git data/files/datatypes.txt data/files/datatypes.txt index 10daa1b..1e48c8d 100644 --- data/files/datatypes.txt +++ data/files/datatypes.txt @@ -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 --1false-1.1\N\N\N-1-1-1.0-1\N\N\N\N\N\N\N -1true1.11121x2ykva92.2111.01abcd1111213142212212x1abcd22012-04-22 09:00:00.123456789123456789.0123456YWJjZA==2013-01-01abc123 +\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 diff --git itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index a270cc6..7b1c9da 100644 --- itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -184,7 +184,8 @@ public void setUp() throws Exception { + " c18 decimal(16,7), " + " c19 binary, " + " c20 date," - + " c21 varchar(20)" + + " c21 varchar(20)," + + " c22 char(15)" + ") comment'" + dataTypeTableComment +"' partitioned by (dt STRING)"); @@ -790,6 +791,7 @@ public void testDataTypes() throws Exception { assertEquals(null, res.getString(20)); assertEquals(null, res.getDate(20)); assertEquals(null, res.getString(21)); + assertEquals(null, res.getString(22)); // row 2 assertTrue(res.next()); @@ -816,6 +818,7 @@ public void testDataTypes() throws Exception { assertEquals(null, res.getString(20)); assertEquals(null, res.getDate(20)); assertEquals(null, res.getString(21)); + assertEquals(null, res.getString(22)); // row 3 assertTrue(res.next()); @@ -842,6 +845,7 @@ public void testDataTypes() throws Exception { assertEquals("2013-01-01", res.getString(20)); assertEquals("2013-01-01", res.getDate(20).toString()); assertEquals("abc123", res.getString(21)); + assertEquals("abc123 ", res.getString(22)); // test getBoolean rules on non-boolean columns assertEquals(true, res.getBoolean(1)); @@ -1319,14 +1323,14 @@ public void testResultSetMetaData() throws SQLException { 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 from " + dataTypeTableName + + "c1*2, sentences(null, null, null) as b, c17, c18, c20, c21, c22 from " + dataTypeTableName + " limit 1"); ResultSetMetaData meta = res.getMetaData(); ResultSet colRS = con.getMetaData().getColumns(null, null, dataTypeTableName.toLowerCase(), null); - assertEquals(18, meta.getColumnCount()); + assertEquals(19, meta.getColumnCount()); assertTrue(colRS.next()); @@ -1542,6 +1546,14 @@ public void testResultSetMetaData() throws SQLException { assertEquals(20, meta.getPrecision(18)); assertEquals(0, meta.getScale(18)); + assertEquals("c22", meta.getColumnName(19)); + assertEquals(Types.CHAR, meta.getColumnType(19)); + assertEquals("char", meta.getColumnTypeName(19)); + // char columns should have correct display size/precision + assertEquals(15, meta.getColumnDisplaySize(19)); + assertEquals(15, meta.getPrecision(19)); + assertEquals(0, meta.getScale(19)); + for (int i = 1; i <= meta.getColumnCount(); i++) { assertFalse(meta.isAutoIncrement(i)); assertFalse(meta.isCurrency(i)); diff --git jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java index b693e93..b02f374 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java @@ -511,6 +511,8 @@ private Object getColumnValue(int columnIndex) throws SQLException { return getDoubleValue(tColumnValue.getDoubleVal()); case STRING_TYPE: return getStringValue(tColumnValue.getStringVal()); + case CHAR_TYPE: + return getStringValue(tColumnValue.getStringVal()); case VARCHAR_TYPE: return getStringValue(tColumnValue.getStringVal()); case BINARY_TYPE: diff --git jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java index 25faf48..3b87bd6 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java @@ -181,6 +181,7 @@ private static JdbcColumnAttributes getColumnAttributes( if (primitiveTypeEntry.isSetTypeQualifiers()) { TTypeQualifiers tq = primitiveTypeEntry.getTypeQualifiers(); switch (primitiveTypeEntry.getType()) { + case CHAR_TYPE: case VARCHAR_TYPE: TTypeQualifierValue val = tq.getQualifiers().get(TCLIServiceConstants.CHARACTER_MAXIMUM_LENGTH); diff --git jdbc/src/java/org/apache/hive/jdbc/HiveResultSetMetaData.java jdbc/src/java/org/apache/hive/jdbc/HiveResultSetMetaData.java index 79e8c8c..e89571f 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveResultSetMetaData.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveResultSetMetaData.java @@ -95,6 +95,8 @@ public String getColumnTypeName(int column) throws SQLException { return serdeConstants.STRING_TYPE_NAME; } else if ("varchar".equalsIgnoreCase(type)) { return serdeConstants.VARCHAR_TYPE_NAME; + } else if ("char".equalsIgnoreCase(type)) { + return serdeConstants.CHAR_TYPE_NAME; } else if ("float".equalsIgnoreCase(type)) { return serdeConstants.FLOAT_TYPE_NAME; } else if ("double".equalsIgnoreCase(type)) { diff --git jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java index d612cf6..42ec32a 100644 --- jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java +++ jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java @@ -69,6 +69,7 @@ static int columnDisplaySize(int columnType, JdbcColumnAttributes columnAttribut switch(columnType) { case Types.BOOLEAN: return columnPrecision(columnType, columnAttributes); + case Types.CHAR: case Types.VARCHAR: return columnPrecision(columnType, columnAttributes); case Types.TINYINT: @@ -100,6 +101,7 @@ static int columnPrecision(int columnType, JdbcColumnAttributes columnAttributes switch(columnType) { case Types.BOOLEAN: return 1; + case Types.CHAR: case Types.VARCHAR: if (columnAttributes != null) { return columnAttributes.precision; @@ -133,6 +135,7 @@ static int columnScale(int columnType, JdbcColumnAttributes columnAttributes) // according to hiveTypeToSqlType possible options are: switch(columnType) { case Types.BOOLEAN: + case Types.CHAR: case Types.VARCHAR: case Types.TINYINT: case Types.SMALLINT: diff --git jdbc/src/java/org/apache/hive/jdbc/Utils.java jdbc/src/java/org/apache/hive/jdbc/Utils.java index 45de290..4d75d98 100644 --- jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -116,6 +116,8 @@ public static int hiveTypeToSqlType(String type) throws SQLException { return Types.VARCHAR; } else if ("varchar".equalsIgnoreCase(type)) { return Types.VARCHAR; + } else if ("char".equalsIgnoreCase(type)) { + return Types.CHAR; } else if ("float".equalsIgnoreCase(type)) { return Types.FLOAT; } else if ("double".equalsIgnoreCase(type)) { diff --git service/if/TCLIService.thrift service/if/TCLIService.thrift index 1f49445..62a9730 100644 --- service/if/TCLIService.thrift +++ service/if/TCLIService.thrift @@ -46,7 +46,7 @@ enum TProtocolVersion { // V3 add varchar type, primitive type qualifiers HIVE_CLI_SERVICE_PROTOCOL_V3 - // V4 add support for decimial datatype + // V4 add decimal precision/scale, char type HIVE_CLI_SERVICE_PROTOCOL_V4 } @@ -69,7 +69,8 @@ enum TTypeId { DECIMAL_TYPE, NULL_TYPE, DATE_TYPE, - VARCHAR_TYPE + VARCHAR_TYPE, + CHAR_TYPE } const set PRIMITIVE_TYPES = [ @@ -87,6 +88,7 @@ const set PRIMITIVE_TYPES = [ TTypeId.NULL_TYPE TTypeId.DATE_TYPE TTypeId.VARCHAR_TYPE + TTypeId.CHAR_TYPE ] const set COMPLEX_TYPES = [ @@ -121,6 +123,7 @@ const map TYPE_NAMES = { TTypeId.NULL_TYPE: "NULL" TTypeId.DATE_TYPE: "DATE" TTypeId.VARCHAR_TYPE: "VARCHAR" + TTypeId.CHAR_TYPE: "CHAR" } // Thrift does not support recursively defined types or forward declarations, diff --git service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp index d085b30..f20f38f 100644 --- service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp +++ service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp @@ -25,6 +25,7 @@ TCLIServiceConstants::TCLIServiceConstants() { PRIMITIVE_TYPES.insert((TTypeId::type)16); PRIMITIVE_TYPES.insert((TTypeId::type)17); PRIMITIVE_TYPES.insert((TTypeId::type)18); + PRIMITIVE_TYPES.insert((TTypeId::type)19); COMPLEX_TYPES.insert((TTypeId::type)10); COMPLEX_TYPES.insert((TTypeId::type)11); @@ -53,9 +54,14 @@ TCLIServiceConstants::TCLIServiceConstants() { TYPE_NAMES.insert(std::make_pair((TTypeId::type)16, "NULL")); TYPE_NAMES.insert(std::make_pair((TTypeId::type)17, "DATE")); TYPE_NAMES.insert(std::make_pair((TTypeId::type)18, "VARCHAR")); + TYPE_NAMES.insert(std::make_pair((TTypeId::type)19, "CHAR")); CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength"; + PRECISION = "precision"; + + SCALE = "scale"; + } }}}}} // namespace diff --git service/src/gen/thrift/gen-cpp/TCLIService_constants.h service/src/gen/thrift/gen-cpp/TCLIService_constants.h index 7471811..e5a7a1f 100644 --- service/src/gen/thrift/gen-cpp/TCLIService_constants.h +++ service/src/gen/thrift/gen-cpp/TCLIService_constants.h @@ -20,6 +20,8 @@ class TCLIServiceConstants { std::set COLLECTION_TYPES; std::map TYPE_NAMES; std::string CHARACTER_MAXIMUM_LENGTH; + std::string PRECISION; + std::string SCALE; }; extern const TCLIServiceConstants g_TCLIService_constants; diff --git service/src/gen/thrift/gen-cpp/TCLIService_types.cpp service/src/gen/thrift/gen-cpp/TCLIService_types.cpp index a3fd46c..7ab1310 100644 --- service/src/gen/thrift/gen-cpp/TCLIService_types.cpp +++ service/src/gen/thrift/gen-cpp/TCLIService_types.cpp @@ -13,14 +13,16 @@ namespace apache { namespace hive { namespace service { namespace cli { namespac int _kTProtocolVersionValues[] = { TProtocolVersion::HIVE_CLI_SERVICE_PROTOCOL_V1, TProtocolVersion::HIVE_CLI_SERVICE_PROTOCOL_V2, - TProtocolVersion::HIVE_CLI_SERVICE_PROTOCOL_V3 + TProtocolVersion::HIVE_CLI_SERVICE_PROTOCOL_V3, + TProtocolVersion::HIVE_CLI_SERVICE_PROTOCOL_V4 }; const char* _kTProtocolVersionNames[] = { "HIVE_CLI_SERVICE_PROTOCOL_V1", "HIVE_CLI_SERVICE_PROTOCOL_V2", - "HIVE_CLI_SERVICE_PROTOCOL_V3" + "HIVE_CLI_SERVICE_PROTOCOL_V3", + "HIVE_CLI_SERVICE_PROTOCOL_V4" }; -const std::map _TProtocolVersion_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kTProtocolVersionValues, _kTProtocolVersionNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); +const std::map _TProtocolVersion_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(4, _kTProtocolVersionValues, _kTProtocolVersionNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); int _kTTypeIdValues[] = { TTypeId::BOOLEAN_TYPE, @@ -41,7 +43,8 @@ int _kTTypeIdValues[] = { TTypeId::DECIMAL_TYPE, TTypeId::NULL_TYPE, TTypeId::DATE_TYPE, - TTypeId::VARCHAR_TYPE + TTypeId::VARCHAR_TYPE, + TTypeId::CHAR_TYPE }; const char* _kTTypeIdNames[] = { "BOOLEAN_TYPE", @@ -62,9 +65,10 @@ const char* _kTTypeIdNames[] = { "DECIMAL_TYPE", "NULL_TYPE", "DATE_TYPE", - "VARCHAR_TYPE" + "VARCHAR_TYPE", + "CHAR_TYPE" }; -const std::map _TTypeId_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(19, _kTTypeIdValues, _kTTypeIdNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); +const std::map _TTypeId_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(20, _kTTypeIdValues, _kTTypeIdNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); int _kTStatusCodeValues[] = { TStatusCode::SUCCESS_STATUS, diff --git service/src/gen/thrift/gen-cpp/TCLIService_types.h service/src/gen/thrift/gen-cpp/TCLIService_types.h index 490b393..853bb4c 100644 --- service/src/gen/thrift/gen-cpp/TCLIService_types.h +++ service/src/gen/thrift/gen-cpp/TCLIService_types.h @@ -20,7 +20,8 @@ struct TProtocolVersion { enum type { HIVE_CLI_SERVICE_PROTOCOL_V1 = 0, HIVE_CLI_SERVICE_PROTOCOL_V2 = 1, - HIVE_CLI_SERVICE_PROTOCOL_V3 = 2 + HIVE_CLI_SERVICE_PROTOCOL_V3 = 2, + HIVE_CLI_SERVICE_PROTOCOL_V4 = 3 }; }; @@ -46,7 +47,8 @@ struct TTypeId { DECIMAL_TYPE = 15, NULL_TYPE = 16, DATE_TYPE = 17, - VARCHAR_TYPE = 18 + VARCHAR_TYPE = 18, + CHAR_TYPE = 19 }; }; @@ -1657,8 +1659,8 @@ class TOpenSessionResp { static const char* ascii_fingerprint; // = "CFE7D7F4E9EC671F2518ED74FEE9F163"; static const uint8_t binary_fingerprint[16]; // = {0xCF,0xE7,0xD7,0xF4,0xE9,0xEC,0x67,0x1F,0x25,0x18,0xED,0x74,0xFE,0xE9,0xF1,0x63}; - TOpenSessionResp() : serverProtocolVersion((TProtocolVersion::type)2) { - serverProtocolVersion = (TProtocolVersion::type)2; + TOpenSessionResp() : serverProtocolVersion((TProtocolVersion::type)3) { + serverProtocolVersion = (TProtocolVersion::type)3; } diff --git service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TCLIServiceConstants.java service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TCLIServiceConstants.java index 7b4c576..c290ed8 100644 --- service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TCLIServiceConstants.java +++ service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TCLIServiceConstants.java @@ -6,10 +6,30 @@ */ package org.apache.hive.service.cli.thrift; -import java.util.HashMap; -import java.util.HashSet; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.thrift.scheme.IScheme; +import org.apache.thrift.scheme.SchemeFactory; +import org.apache.thrift.scheme.StandardScheme; + +import org.apache.thrift.scheme.TupleScheme; +import org.apache.thrift.protocol.TTupleProtocol; +import org.apache.thrift.protocol.TProtocolException; +import org.apache.thrift.EncodingUtils; +import org.apache.thrift.TException; +import java.util.List; +import java.util.ArrayList; import java.util.Map; +import java.util.HashMap; +import java.util.EnumMap; import java.util.Set; +import java.util.HashSet; +import java.util.EnumSet; +import java.util.Collections; +import java.util.BitSet; +import java.nio.ByteBuffer; +import java.util.Arrays; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class TCLIServiceConstants { @@ -29,6 +49,7 @@ PRIMITIVE_TYPES.add(org.apache.hive.service.cli.thrift.TTypeId.NULL_TYPE); PRIMITIVE_TYPES.add(org.apache.hive.service.cli.thrift.TTypeId.DATE_TYPE); PRIMITIVE_TYPES.add(org.apache.hive.service.cli.thrift.TTypeId.VARCHAR_TYPE); + PRIMITIVE_TYPES.add(org.apache.hive.service.cli.thrift.TTypeId.CHAR_TYPE); } public static final Set COMPLEX_TYPES = new HashSet(); @@ -66,11 +87,13 @@ TYPE_NAMES.put(org.apache.hive.service.cli.thrift.TTypeId.NULL_TYPE, "NULL"); TYPE_NAMES.put(org.apache.hive.service.cli.thrift.TTypeId.DATE_TYPE, "DATE"); TYPE_NAMES.put(org.apache.hive.service.cli.thrift.TTypeId.VARCHAR_TYPE, "VARCHAR"); + TYPE_NAMES.put(org.apache.hive.service.cli.thrift.TTypeId.CHAR_TYPE, "CHAR"); } - // Constants for column type attributes. public static final String CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength"; + public static final String PRECISION = "precision"; + public static final String SCALE = "scale"; } diff --git service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TOpenSessionResp.java service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TOpenSessionResp.java index 5d353f7..688f790 100644 --- service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TOpenSessionResp.java +++ service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TOpenSessionResp.java @@ -141,7 +141,7 @@ public String getFieldName() { } public TOpenSessionResp() { - this.serverProtocolVersion = org.apache.hive.service.cli.thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V3; + this.serverProtocolVersion = org.apache.hive.service.cli.thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V4; } @@ -191,7 +191,7 @@ public TOpenSessionResp deepCopy() { @Override public void clear() { this.status = null; - this.serverProtocolVersion = org.apache.hive.service.cli.thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V3; + this.serverProtocolVersion = org.apache.hive.service.cli.thrift.TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V4; this.sessionHandle = null; this.configuration = null; diff --git service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TProtocolVersion.java service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TProtocolVersion.java index 15f2973..8c6c4f0 100644 --- service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TProtocolVersion.java +++ service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TProtocolVersion.java @@ -7,6 +7,9 @@ package org.apache.hive.service.cli.thrift; +import java.util.Map; +import java.util.HashMap; +import org.apache.thrift.TEnum; public enum TProtocolVersion implements org.apache.thrift.TEnum { HIVE_CLI_SERVICE_PROTOCOL_V1(0), @@ -31,7 +34,7 @@ public int getValue() { * Find a the enum type by its integer value, as defined in the Thrift IDL. * @return null if the value is not found. */ - public static TProtocolVersion findByValue(int value) { + public static TProtocolVersion findByValue(int value) { switch (value) { case 0: return HIVE_CLI_SERVICE_PROTOCOL_V1; diff --git service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TTypeId.java service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TTypeId.java index be70a3a..b857367 100644 --- service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TTypeId.java +++ service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TTypeId.java @@ -30,7 +30,8 @@ DECIMAL_TYPE(15), NULL_TYPE(16), DATE_TYPE(17), - VARCHAR_TYPE(18); + VARCHAR_TYPE(18), + CHAR_TYPE(19); private final int value; @@ -89,6 +90,8 @@ public static TTypeId findByValue(int value) { return DATE_TYPE; case 18: return VARCHAR_TYPE; + case 19: + return CHAR_TYPE; default: return null; } diff --git service/src/gen/thrift/gen-py/TCLIService/TCLIService-remote service/src/gen/thrift/gen-py/TCLIService/TCLIService-remote old mode 100644 new mode 100755 diff --git service/src/gen/thrift/gen-py/TCLIService/constants.py service/src/gen/thrift/gen-py/TCLIService/constants.py index 589ce88..9b1e2f7 100644 --- service/src/gen/thrift/gen-py/TCLIService/constants.py +++ service/src/gen/thrift/gen-py/TCLIService/constants.py @@ -24,6 +24,7 @@ 16, 17, 18, + 19, ]) COMPLEX_TYPES = set([ 10, @@ -55,5 +56,8 @@ 16 : "NULL", 17 : "DATE", 18 : "VARCHAR", + 19 : "CHAR", } CHARACTER_MAXIMUM_LENGTH = "characterMaximumLength" +PRECISION = "precision" +SCALE = "scale" diff --git service/src/gen/thrift/gen-py/TCLIService/ttypes.py service/src/gen/thrift/gen-py/TCLIService/ttypes.py index b286b05..185ea5b 100644 --- service/src/gen/thrift/gen-py/TCLIService/ttypes.py +++ service/src/gen/thrift/gen-py/TCLIService/ttypes.py @@ -20,17 +20,20 @@ class TProtocolVersion: HIVE_CLI_SERVICE_PROTOCOL_V1 = 0 HIVE_CLI_SERVICE_PROTOCOL_V2 = 1 HIVE_CLI_SERVICE_PROTOCOL_V3 = 2 + HIVE_CLI_SERVICE_PROTOCOL_V4 = 3 _VALUES_TO_NAMES = { 0: "HIVE_CLI_SERVICE_PROTOCOL_V1", 1: "HIVE_CLI_SERVICE_PROTOCOL_V2", 2: "HIVE_CLI_SERVICE_PROTOCOL_V3", + 3: "HIVE_CLI_SERVICE_PROTOCOL_V4", } _NAMES_TO_VALUES = { "HIVE_CLI_SERVICE_PROTOCOL_V1": 0, "HIVE_CLI_SERVICE_PROTOCOL_V2": 1, "HIVE_CLI_SERVICE_PROTOCOL_V3": 2, + "HIVE_CLI_SERVICE_PROTOCOL_V4": 3, } class TTypeId: @@ -53,6 +56,7 @@ class TTypeId: NULL_TYPE = 16 DATE_TYPE = 17 VARCHAR_TYPE = 18 + CHAR_TYPE = 19 _VALUES_TO_NAMES = { 0: "BOOLEAN_TYPE", @@ -74,6 +78,7 @@ class TTypeId: 16: "NULL_TYPE", 17: "DATE_TYPE", 18: "VARCHAR_TYPE", + 19: "CHAR_TYPE", } _NAMES_TO_VALUES = { @@ -96,6 +101,7 @@ class TTypeId: "NULL_TYPE": 16, "DATE_TYPE": 17, "VARCHAR_TYPE": 18, + "CHAR_TYPE": 19, } class TStatusCode: @@ -2710,7 +2716,7 @@ class TOpenSessionResp: thrift_spec = ( None, # 0 (1, TType.STRUCT, 'status', (TStatus, TStatus.thrift_spec), None, ), # 1 - (2, TType.I32, 'serverProtocolVersion', None, 2, ), # 2 + (2, TType.I32, 'serverProtocolVersion', None, 3, ), # 2 (3, TType.STRUCT, 'sessionHandle', (TSessionHandle, TSessionHandle.thrift_spec), None, ), # 3 (4, TType.MAP, 'configuration', (TType.STRING,None,TType.STRING,None), None, ), # 4 ) diff --git service/src/gen/thrift/gen-py/hive_service/ThriftHive-remote service/src/gen/thrift/gen-py/hive_service/ThriftHive-remote old mode 100644 new mode 100755 diff --git service/src/gen/thrift/gen-rb/t_c_l_i_service_constants.rb service/src/gen/thrift/gen-rb/t_c_l_i_service_constants.rb index 8c341c8..1c9b91c 100644 --- service/src/gen/thrift/gen-rb/t_c_l_i_service_constants.rb +++ service/src/gen/thrift/gen-rb/t_c_l_i_service_constants.rb @@ -22,6 +22,7 @@ PRIMITIVE_TYPES = Set.new([ 16, 17, 18, + 19, ]) COMPLEX_TYPES = Set.new([ @@ -56,7 +57,12 @@ TYPE_NAMES = { 16 => %q"NULL", 17 => %q"DATE", 18 => %q"VARCHAR", + 19 => %q"CHAR", } CHARACTER_MAXIMUM_LENGTH = %q"characterMaximumLength" +PRECISION = %q"precision" + +SCALE = %q"scale" + diff --git service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb index c608364..c94acbf 100644 --- service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb +++ service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb @@ -10,8 +10,9 @@ module TProtocolVersion HIVE_CLI_SERVICE_PROTOCOL_V1 = 0 HIVE_CLI_SERVICE_PROTOCOL_V2 = 1 HIVE_CLI_SERVICE_PROTOCOL_V3 = 2 - VALUE_MAP = {0 => "HIVE_CLI_SERVICE_PROTOCOL_V1", 1 => "HIVE_CLI_SERVICE_PROTOCOL_V2", 2 => "HIVE_CLI_SERVICE_PROTOCOL_V3"} - VALID_VALUES = Set.new([HIVE_CLI_SERVICE_PROTOCOL_V1, HIVE_CLI_SERVICE_PROTOCOL_V2, HIVE_CLI_SERVICE_PROTOCOL_V3]).freeze + HIVE_CLI_SERVICE_PROTOCOL_V4 = 3 + VALUE_MAP = {0 => "HIVE_CLI_SERVICE_PROTOCOL_V1", 1 => "HIVE_CLI_SERVICE_PROTOCOL_V2", 2 => "HIVE_CLI_SERVICE_PROTOCOL_V3", 3 => "HIVE_CLI_SERVICE_PROTOCOL_V4"} + VALID_VALUES = Set.new([HIVE_CLI_SERVICE_PROTOCOL_V1, HIVE_CLI_SERVICE_PROTOCOL_V2, HIVE_CLI_SERVICE_PROTOCOL_V3, HIVE_CLI_SERVICE_PROTOCOL_V4]).freeze end module TTypeId @@ -34,8 +35,9 @@ module TTypeId NULL_TYPE = 16 DATE_TYPE = 17 VARCHAR_TYPE = 18 - VALUE_MAP = {0 => "BOOLEAN_TYPE", 1 => "TINYINT_TYPE", 2 => "SMALLINT_TYPE", 3 => "INT_TYPE", 4 => "BIGINT_TYPE", 5 => "FLOAT_TYPE", 6 => "DOUBLE_TYPE", 7 => "STRING_TYPE", 8 => "TIMESTAMP_TYPE", 9 => "BINARY_TYPE", 10 => "ARRAY_TYPE", 11 => "MAP_TYPE", 12 => "STRUCT_TYPE", 13 => "UNION_TYPE", 14 => "USER_DEFINED_TYPE", 15 => "DECIMAL_TYPE", 16 => "NULL_TYPE", 17 => "DATE_TYPE", 18 => "VARCHAR_TYPE"} - VALID_VALUES = Set.new([BOOLEAN_TYPE, TINYINT_TYPE, SMALLINT_TYPE, INT_TYPE, BIGINT_TYPE, FLOAT_TYPE, DOUBLE_TYPE, STRING_TYPE, TIMESTAMP_TYPE, BINARY_TYPE, ARRAY_TYPE, MAP_TYPE, STRUCT_TYPE, UNION_TYPE, USER_DEFINED_TYPE, DECIMAL_TYPE, NULL_TYPE, DATE_TYPE, VARCHAR_TYPE]).freeze + CHAR_TYPE = 19 + VALUE_MAP = {0 => "BOOLEAN_TYPE", 1 => "TINYINT_TYPE", 2 => "SMALLINT_TYPE", 3 => "INT_TYPE", 4 => "BIGINT_TYPE", 5 => "FLOAT_TYPE", 6 => "DOUBLE_TYPE", 7 => "STRING_TYPE", 8 => "TIMESTAMP_TYPE", 9 => "BINARY_TYPE", 10 => "ARRAY_TYPE", 11 => "MAP_TYPE", 12 => "STRUCT_TYPE", 13 => "UNION_TYPE", 14 => "USER_DEFINED_TYPE", 15 => "DECIMAL_TYPE", 16 => "NULL_TYPE", 17 => "DATE_TYPE", 18 => "VARCHAR_TYPE", 19 => "CHAR_TYPE"} + VALID_VALUES = Set.new([BOOLEAN_TYPE, TINYINT_TYPE, SMALLINT_TYPE, INT_TYPE, BIGINT_TYPE, FLOAT_TYPE, DOUBLE_TYPE, STRING_TYPE, TIMESTAMP_TYPE, BINARY_TYPE, ARRAY_TYPE, MAP_TYPE, STRUCT_TYPE, UNION_TYPE, USER_DEFINED_TYPE, DECIMAL_TYPE, NULL_TYPE, DATE_TYPE, VARCHAR_TYPE, CHAR_TYPE]).freeze end module TStatusCode @@ -803,7 +805,7 @@ class TOpenSessionResp FIELDS = { STATUS => {:type => ::Thrift::Types::STRUCT, :name => 'status', :class => ::TStatus}, - SERVERPROTOCOLVERSION => {:type => ::Thrift::Types::I32, :name => 'serverProtocolVersion', :default => 2, :enum_class => ::TProtocolVersion}, + SERVERPROTOCOLVERSION => {:type => ::Thrift::Types::I32, :name => 'serverProtocolVersion', :default => 3, :enum_class => ::TProtocolVersion}, SESSIONHANDLE => {:type => ::Thrift::Types::STRUCT, :name => 'sessionHandle', :class => ::TSessionHandle, :optional => true}, CONFIGURATION => {:type => ::Thrift::Types::MAP, :name => 'configuration', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}, :optional => true} } diff --git service/src/java/org/apache/hive/service/cli/ColumnValue.java service/src/java/org/apache/hive/service/cli/ColumnValue.java index 62e221b..cf2b3d9 100644 --- service/src/java/org/apache/hive/service/cli/ColumnValue.java +++ service/src/java/org/apache/hive/service/cli/ColumnValue.java @@ -21,6 +21,7 @@ import java.sql.Date; import java.sql.Timestamp; +import org.apache.hadoop.hive.common.type.HiveChar; import org.apache.hadoop.hive.common.type.HiveDecimal; import org.apache.hadoop.hive.common.type.HiveVarchar; import org.apache.hive.service.cli.thrift.TBoolValue; @@ -119,6 +120,14 @@ public static ColumnValue stringValue(String value) { return new ColumnValue(TColumnValue.stringVal(tStringValue)); } + public static ColumnValue stringValue(HiveChar value) { + TStringValue tStringValue = new TStringValue(); + if (value != null) { + tStringValue.setValue(value.toString()); + } + return new ColumnValue(TColumnValue.stringVal(tStringValue)); + } + public static ColumnValue stringValue(HiveVarchar value) { TStringValue tStringValue = new TStringValue(); if (value != null) { @@ -169,6 +178,8 @@ public static ColumnValue newColumnValue(Type type, Object value) { return doubleValue((Double)value); case STRING_TYPE: return stringValue((String)value); + case CHAR_TYPE: + return stringValue((HiveChar)value); case VARCHAR_TYPE: return stringValue((HiveVarchar)value); case DATE_TYPE: diff --git service/src/java/org/apache/hive/service/cli/Type.java service/src/java/org/apache/hive/service/cli/Type.java index f414fca..9329392 100644 --- service/src/java/org/apache/hive/service/cli/Type.java +++ service/src/java/org/apache/hive/service/cli/Type.java @@ -54,6 +54,10 @@ STRING_TYPE("STRING", java.sql.Types.VARCHAR, TTypeId.STRING_TYPE), + CHAR_TYPE("CHAR", + java.sql.Types.CHAR, + TTypeId.CHAR_TYPE, + true, false, false), VARCHAR_TYPE("VARCHAR", java.sql.Types.VARCHAR, TTypeId.VARCHAR_TYPE, diff --git service/src/java/org/apache/hive/service/cli/TypeQualifiers.java service/src/java/org/apache/hive/service/cli/TypeQualifiers.java index 66a4b12..c6da52c 100644 --- service/src/java/org/apache/hive/service/cli/TypeQualifiers.java +++ service/src/java/org/apache/hive/service/cli/TypeQualifiers.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.Map; +import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeInfo; @@ -102,7 +103,9 @@ public static TypeQualifiers fromTypeInfo(PrimitiveTypeInfo pti) { if (pti instanceof VarcharTypeInfo) { result = new TypeQualifiers(); result.setCharacterMaximumLength(((VarcharTypeInfo)pti).getLength()); - + } else if (pti instanceof CharTypeInfo) { + result = new TypeQualifiers(); + result.setCharacterMaximumLength(((CharTypeInfo)pti).getLength()); } else if (pti instanceof DecimalTypeInfo) { result = new TypeQualifiers(); result.setPrecision(((DecimalTypeInfo)pti).precision());