You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Sergey Shelukhin (JIRA)" <ji...@apache.org> on 2015/11/12 03:13:12 UTC

[jira] [Updated] (HIVE-11024) Error inserting a date value via parameter marker (PreparedStatement.setDate)

     [ https://issues.apache.org/jira/browse/HIVE-11024?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sergey Shelukhin updated HIVE-11024:
------------------------------------

Should this issue be backported to branch-1? It looks like a bug.

> Error inserting a date value via parameter marker (PreparedStatement.setDate)
> -----------------------------------------------------------------------------
>
>                 Key: HIVE-11024
>                 URL: https://issues.apache.org/jira/browse/HIVE-11024
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>    Affects Versions: 0.14.0
>         Environment: Linux lnxx64r6 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
>            Reporter: Sergio Lob
>            Assignee: Yongzhi Chen
>             Fix For: 2.0.0
>
>         Attachments: HIVE-11024.1.patch, HIVE-11024.2.patch
>
>
> Inserting a row with a Date parameter marker (PreparedStatement.setDate()) fails with ParseException:
> Exception: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
> org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
>         at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:231)
>         at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:217)
>         at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:254)
>         at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:4
> 06)
>         at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePrepared
> Statement.java:117)
>         at repro1.main(repro1.java:90)
> Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
>         at org.apache.hive.service.cli.operation.Operation.toSQLException(Operat
> ion.java:314)
>         at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperati
> on.java:102)
>         at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOpe
> ration.java:171)
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> REPRO:
> ----------
> /*
>  * It may be freely used, modified, and distributed with no restrictions.
>  */
> import java.sql.Connection;
> import java.sql.DatabaseMetaData;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> import java.sql.PreparedStatement;
> import java.sql.ResultSetMetaData;
> import java.io.Reader;
> /**
>  */
> public class repro1
> {
>   /**
>    * Main method.
>    * 
>    * @param args
>    *    no arguments required
>    */
>   public static void main(String [] args)
>   {
>     Connection con = null;
>     Statement stmt = null;
>     ResultSet rst = null;
>     String drptab = "DROP TABLE SDLJUNK";
>     String crttab = "CREATE TABLE SDLJUNK(I INT, D DATE)";
>     String instab = "INSERT INTO TABLE SDLJUNK VALUES (1, ? )";
>     try {
>       System.out.println("=================================================");
>       System.out.println("Problem description:");
>       System.out.println("After setting a value for a DATE parameter marker ");
>       System.out.println(" with PreparedStatement.setDate(),"); 
>       System.out.println(" an INSERT statement fails execution with error:  "); 
>       System.out.println("                                                  "); 
>       System.out.println("  Error while compiling statement: FAILED: ");
>       System.out.println("ParseException line 1:78 mismatched input '-' ");
>       System.out.println(" expecting ) near '1980' in statement"); 
>       System.out.println("=================================================");
>       System.out.println("");
>       // Create new instance of JDBC Driver and make connection.
>       System.out.println("Registering Driver.");
>       Class.forName("org.apache.hive.jdbc.HiveDriver");
>       String url="jdbc:hive2://hwhive:10000/R729999D";
>       System.out.println("Making a connection to: "+url);
>       con = DriverManager.getConnection(url, "hive", "hive");     
>       System.out.println("Connection successful.\n");
>       DatabaseMetaData dbmd = con.getMetaData();
>       System.out.println("getDatabaseProductName() = "+dbmd.getDatabaseProductName());
>       System.out.println("getDatabaseProductVersion() = "+dbmd.getDatabaseProductVersion());
>       System.out.println("getDriverName() = "+dbmd.getDriverName());
>       System.out.println("getDriverVersion() = "+dbmd.getDriverVersion());
>       try {
>          System.out.println("con.createStatement()");
>          stmt = con.createStatement();
>          System.out.println(drptab);
>          stmt.executeUpdate(drptab);
>          }
>       catch (Exception ex)
>       {	
>         System.out.println("Exception: " + ex);
>       }
>       System.out.println(crttab);
>       stmt.executeUpdate(crttab);
>       System.out.println("preparing: "+instab);
>       PreparedStatement pstmt = con.prepareStatement(instab);
>       System.out.println("calling setDate() for parameter marker");
>       java.sql.Date dt = java.sql.Date.valueOf("1980-12-26");
>       pstmt.setDate(1, dt);
> //    pstmt.setString(1, "1980-12-26");
>       System.out.println("executing: "+instab);
>       pstmt.executeUpdate();
> //    System.out.println("committing");
> //    con.commit();
>     }
>     catch (Exception ex)
>     {	
>       System.out.println("Exception: " + ex);
>       ex.printStackTrace();
>     }
>     finally
>     {			
>       if (con != null)
>       {	
>         try
>         {	
>           // Close the connection
>           con.close();				
>         }
>         catch (SQLException ex)
>         {	
>           System.out.println("SQLException: " + ex);
>         }
>       }
>     } 
>   }
>   //-------------------------------------------------------------------
>   // dispResultSet
>   // Displays all columns and rows in the given result set
>   //-------------------------------------------------------------------
>   private static void dispResultSet (ResultSet rs)
> 	throws SQLException
>   {
>     int i;
>     // Get the ResultSetMetaData.  This will be used for
>     // the column headings
>     ResultSetMetaData rsmd = rs.getMetaData ();
>     // Get the number of columns in the result set
>     int numCols = rsmd.getColumnCount ();
>     // Display column headings
>     for (i=1; i<=numCols; i++) {
>       if (i > 1) System.out.print(",");
>       System.out.print(rsmd.getColumnLabel(i));
>     }
>     System.out.println("");
>     // Display data, fetching until end of the result set
>     boolean more = rs.next ();
>     while (more) {
>       // Loop through each column, getting the
>       // column data and displaying
>       for (i=1; i<=numCols; i++) {
>         if (i > 1) System.out.print(",");
>           System.out.print(rs.getString(i));
>       }
>       System.out.println("");
>       // Fetch the next result set row
>       more = rs.next ();
>     }
>   }
> }
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> REPRO OUTPUT:
> ----------------------
> Picked up _JAVA_OPTIONS: -Xms128m -Xmx256m
> =================================================
> Problem description:
> After setting a value for a DATE parameter marker 
>  with PreparedStatement.setDate(),
>  an INSERT statement fails execution with error:  
>                                                   
>   Error while compiling statement: FAILED: 
> ParseException line 1:78 mismatched input '-' 
>  expecting ) near '1980' in statement
> =================================================
> Registering Driver.
> Making a connection to: jdbc:hive2://hwhive:10000/R729999D
> log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils).
> log4j:WARN Please initialize the log4j system properly.
> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
> Connection successful.
> getDatabaseProductName() = Apache Hive
> getDatabaseProductVersion() = 0.14.0.2.2.0.0-2041
> getDriverName() = Hive JDBC
> getDriverVersion() = 0.14.0.2.2.0.0-2041
> con.createStatement()
> DROP TABLE SDLJUNK
> CREATE TABLE SDLJUNK(I INT, D DATE)
> preparing: INSERT INTO TABLE SDLJUNK VALUES (1, ? )
> calling setDate() for parameter marker
> executing: INSERT INTO TABLE SDLJUNK VALUES (1, ? )
> Exception: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
> org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
> 	at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:231)
> 	at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:217)
> 	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:254)
> 	at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:406)
> 	at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:117)
> 	at repro1.main(repro1.java:90)
> Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
> 	at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:314)
> 	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:102)
> 	at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:171)
> 	at org.apache.hive.service.cli.operation.Operation.run(Operation.java:256)
> 	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:376)
> 	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:363)
> 	at org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:247)
> 	at org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:401)
> 	at org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1313)
> 	at org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1298)
> 	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
> 	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
> 	at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
> 	at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:206)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.parse.ParseException:line 1:41 mismatched input '-' expecting ) near '1980' in statement
> 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202)
> 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)
> 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:389)
> 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)
> 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067)
> 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1061)
> 	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:100)
> 	... 15 more
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ENVIRONMENT:
> ---------------------
> export CLASSPATH=.:/qas/hive14/hive-serde.jar:/qas/hive14/hive-exec.jar:/qas/hive14/slf4j-api-1.7.5.jar:/qas/hive14/libfb303-0.9.0.jar:/qas/hive14/hive-service.jar:/qas/hive14/httpclient-4.2.5.jar:/qas/hive14/hive-metastore.jar:/qas/hive14/hive-common.jar:/qas/hive14/httpcore-4.2.5.jar:/qas/hive14/hive-jdbc.jar:/qas/hive14/hadoop-common.jar:/qas/hive14/libthrift-0.9.0.jar:/qas/hive14/hive-shims.jar:/qas/hive14/log4j-1.2.16.jar:/qas/hive14/commons-logging-1.1.3.jar
> export PATH=$JDK_HOME/bin:$PATH



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)