Carter Shanklin created HIVE-17023:
--------------------------------------

             Summary: HPL/SQL: NPE creating table if datatype lacks a precision 
and hplsql.conn.convert.hiveconn is false
                 Key: HIVE-17023
                 URL: https://issues.apache.org/jira/browse/HIVE-17023
             Project: Hive
          Issue Type: Bug
          Components: hpl/sql
            Reporter: Carter Shanklin


This bug is part of a series of issues and surprising behavior I encountered 
writing a reporting script that would aggregate values and give rows different 
classifications based on an the aggregate. Addressing some or all of these 
issues would make HPL/SQL more accessible to newcomers.

Consider this script:
create table if not exists test1(col1 integer);
create table if not exists test2(col1 double);
create table if not exists test3(col1 decimal(10, 4));
create table if not exists test4(col1 string);
create table if not exists test5(col1 varchar(20));

If you run with this config:
<configuration>
  <property>
    <name>hplsql.conn.default</name>
    <value>hiveconn</value>
  </property>

  <property>
    <name>hplsql.conn.hiveconn</name>
    <value>org.apache.hive.jdbc.HiveDriver;jdbc:hive2://</value>
  </property>
</configuration>

You will get exceptions like this for some of the types:

Exception in thread "main" java.lang.NullPointerException
        at org.apache.hive.hplsql.Exec.evalPop(Exec.java:2398)
        at org.apache.hive.hplsql.Stmt.createTableDefinition(Stmt.java:169)
        at org.apache.hive.hplsql.Stmt.createTable(Stmt.java:142)
        at org.apache.hive.hplsql.Exec.visitCreate_table_stmt(Exec.java:1366)
        at org.apache.hive.hplsql.Exec.visitCreate_table_stmt(Exec.java:52)
        at 
org.apache.hive.hplsql.HplsqlParser$Create_table_stmtContext.accept(HplsqlParser.java:4198)
        at 
org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70)
        at org.apache.hive.hplsql.Exec.visitStmt(Exec.java:1013)
        at org.apache.hive.hplsql.Exec.visitStmt(Exec.java:52)
        at 
org.apache.hive.hplsql.HplsqlParser$StmtContext.accept(HplsqlParser.java:1018)
...

FAIL: create table test1 (col1 integer);
FAIL: create table test2 (col1 double);
SUCCESS: create table test3 (col1 decimal(10, 4));
FAIL: create table test4 (col1 string);
SUCCESS: create table test5(col1 varchar(20));

Problem boils down to this line in Stmt.java:
        exec.append(sql, exec.evalPop(col.dtype(), col.dtype_len()), 
col.column_name().getStop(), col.dtype().getStart());
Because col.dtype_len() returns null

I have to wonder if not converting is ever a good idea? If it's always a bad 
idea(tm) why even have it?

Version = 3.0.0-SNAPSHOT r71f52d8ad512904b3f2c4f04fe39a33f2834f1f2



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to