hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hive QA (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-11748) HivePreparedStatement's setTimestamp() does not quote value as required
Date Mon, 07 Sep 2015 16:27:47 GMT

    [ https://issues.apache.org/jira/browse/HIVE-11748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14733889#comment-14733889
] 

Hive QA commented on HIVE-11748:
--------------------------------



{color:red}Overall{color}: -1 at least one tests failed

Here are the results of testing the latest attachment:
https://issues.apache.org/jira/secure/attachment/12754494/HIVE-11748.2.patch

{color:red}ERROR:{color} -1 due to 1 failed/errored test(s), 9421 tests executed
*Failed tests:*
{noformat}
org.apache.hive.hcatalog.api.TestHCatClient.testTableSchemaPropagation
{noformat}

Test results: http://ec2-174-129-184-35.compute-1.amazonaws.com/jenkins/job/PreCommit-HIVE-TRUNK-Build/5191/testReport
Console output: http://ec2-174-129-184-35.compute-1.amazonaws.com/jenkins/job/PreCommit-HIVE-TRUNK-Build/5191/console
Test logs: http://ec2-174-129-184-35.compute-1.amazonaws.com/logs/PreCommit-HIVE-TRUNK-Build-5191/

Messages:
{noformat}
Executing org.apache.hive.ptest.execution.PrepPhase
Executing org.apache.hive.ptest.execution.ExecutionPhase
Executing org.apache.hive.ptest.execution.ReportingPhase
Tests exited with: TestsFailedException: 1 tests failed
{noformat}

This message is automatically generated.

ATTACHMENT ID: 12754494 - PreCommit-HIVE-TRUNK-Build

> HivePreparedStatement's setTimestamp() does not quote value as required
> -----------------------------------------------------------------------
>
>                 Key: HIVE-11748
>                 URL: https://issues.apache.org/jira/browse/HIVE-11748
>             Project: Hive
>          Issue Type: Bug
>          Components: JDBC
>            Reporter: Angus Smithson
>         Attachments: HIVE-11748.2.patch, HIVE-11748.patch
>
>
> [HivePreparedStatement.setTimestamp(int parameterIndex, Timestamp x)|https://hive.apache.org/javadocs/r1.2.1/api/org/apache/hive/jdbc/HivePreparedStatement.html#setTimestamp(int,%20java.sql.Timestamp)]
does not quote the Timestamp value when generating the HQL statement, resulting in a HiveSqlException
on execution.
> h5. Reproducing
> If we add the following unit test to {{itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java}}:
> {code}
>   @Test
>   public void testPrepareSetTimestamp() throws SQLException, ParseException {
>     String sql = String.format("SELECT * FROM %s WHERE c20 = ?", dataTypeTableName);
>     try (PreparedStatement ps = con.prepareStatement(sql)) {
>       Timestamp timestamp = new Timestamp(new SimpleDateFormat("yyyy-MM-dd").parse("2013-01-01").getTime());
>       ps.setTimestamp(1, timestamp);
>       try (ResultSet resultSet = ps.executeQuery()) {
>         assertTrue(resultSet.next());
>         assertEquals("2013-01-01", resultSet.getString(20));
>       }
>     }
>   }
> {code}
> The test fails:
> {noformat}
> org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED:
ParseException line 1:55 cannot recognize input near '00' ':' '00' in expression specification
>   at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:205)
>   at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)
> 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:401)
> 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:310)
> 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1150)
> 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1136)
> 	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:109)
> 	at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:180)
> 	at org.apache.hive.service.cli.operation.Operation.run(Operation.java:257)
> 	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:405)
> 	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:392)
> 	at org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:261)
> 	at org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:509)
> 	at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.apache.hive.jdbc.HiveConnection$SynchronizedHandler.invoke(HiveConnection.java:1400)
> 	at com.sun.proxy.$Proxy32.ExecuteStatement(Unknown Source)
> 	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:246)
> 	at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:378)
> 	at org.apache.hive.jdbc.HivePreparedStatement.executeQuery(HivePreparedStatement.java:109)
> 	at org.apache.hive.jdbc.TestJdbcDriver2.testPrepareSetTimestamp(TestJdbcDriver2.java:2395)
> {noformat}
> The failure is because the following HQL is generated/executed by calling toString()
on the Timestamp value:
> {noformat}
> SELECT * FROM testdatatypetable WHERE c20 = 2013-01-01 00:00:00.0
> {noformat}
> We should be quoting the value of Timestamp.toString(), so that the following HQL is
generated/executed:
> {noformat}
> SELECT * FROM testdatatypetable WHERE c20 = '2013-01-01 00:00:00.0'
> {noformat}



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

Mime
View raw message